# HG changeset patch # User luisf # Date 1311600217 -3600 # Node ID 0b6c82dead2888a7202f142dca1eac79853ae9c6 # Parent f7c525dc7585f133ffb81854fb1133760b66e5b7# Parent a2192366d309c34d7f1199b0d7cbe4a41088fe4c Merge from branch "cannam" diff -r f7c525dc7585 -r 0b6c82dead28 .gitignore --- a/.gitignore Mon Mar 28 18:17:06 2011 +0100 +++ b/.gitignore Mon Jul 25 14:23:37 2011 +0100 @@ -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.* diff -r f7c525dc7585 -r 0b6c82dead28 .hgignore --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgignore Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,30 @@ +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 +.svn/ +.git/ +*~ + diff -r f7c525dc7585 -r 0b6c82dead28 .svn/all-wcprops --- a/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,23 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 24 -/svn/!svn/ver/4411/trunk +V 38 +/svn/!svn/ver/6261/branches/1.2-stable END -Rakefile -K 25 -svn:wc:ra_dav:version-url -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/3768/trunk/.gitignore -END diff -r f7c525dc7585 -r 0b6c82dead28 .svn/dir-prop-base --- a/.svn/dir-prop-base Mon Mar 28 18:17:06 2011 +0100 +++ b/.svn/dir-prop-base Mon Jul 25 14:23:37 2011 +0100 @@ -4,7 +4,9 @@ e93f8b46-1217-0410-a6f0-8f06a7374b81:/trunk:1751 K 10 svn:ignore -V 9 +V 28 coverage +.project +.loadpath END diff -r f7c525dc7585 -r 0b6c82dead28 .svn/entries --- a/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable http://redmine.rubyforge.org/svn -2010-11-17T18:27:38.712585Z -4411 +2011-07-11T11:45:14.631570Z +6261 jplang has-props @@ -32,6 +32,18 @@ app dir +.hgignore +file + + + + + +cf080444603c5774a6f20da6bbafe234 +2011-03-28T04:54:13.617808Z +5235 +tmaruyama + log dir @@ -41,7 +53,7 @@ -2010-09-23T14:37:44.367737Z +2011-07-14T09:24:09.000000Z bbf560d44f092d22a30d3a562436ad8c 2006-12-05T20:45:04.842118Z 67 @@ -75,7 +87,7 @@ -2010-09-23T14:37:44.367737Z +2011-07-14T09:24:09.000000Z 67c937b1f1d0603e69f322de34bbfe04 2010-07-18T15:49:24.341728Z 3849 @@ -121,45 +133,45 @@ script dir -doc -dir +.gitignore +file + + + + +2011-07-14T09:24:09.000000Z +84dbba0b6ddcd80d28c62a3f8e344bc4 +2011-02-15T11:04:52.942730Z +4834 +tmaruyama + + + + + + + + + + + + + + + + + + + + + +477 config dir -.gitignore -file - - - - -2010-09-23T14:37:44.363818Z -201a803b90bbd2a1624c4ce1dd260098 -2010-06-09T22:01:21.132822Z -3768 -edavis10 - - - - - - - - - - - - - - - - - - - - - -322 +doc +dir lib dir diff -r f7c525dc7585 -r 0b6c82dead28 .svn/text-base/.gitignore.svn-base --- a/.svn/text-base/.gitignore.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/.svn/text-base/.gitignore.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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.* diff -r f7c525dc7585 -r 0b6c82dead28 .svn/text-base/.hgignore.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.svn/text-base/.hgignore.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,29 @@ +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/* +tmp/cache/* +tmp/sessions/* +tmp/sockets/* +tmp/test/* +vendor/rails +*.rbc +.svn/ +.git/ diff -r f7c525dc7585 -r 0b6c82dead28 README.rdoc --- a/README.rdoc Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -= Redmine - -Redmine is a flexible project management web application written using Ruby on Rails framework. - -More details can be found at in the doc directory or on the official website http://www.redmine.org diff -r f7c525dc7585 -r 0b6c82dead28 app/.svn/all-wcprops --- a/app/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,5 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 28 -/svn/!svn/ver/4411/trunk/app +V 42 +/svn/!svn/ver/6254/branches/1.2-stable/app END diff -r f7c525dc7585 -r 0b6c82dead28 app/.svn/entries --- a/app/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app http://redmine.rubyforge.org/svn -2010-11-17T18:27:38.712585Z -4411 -jplang +2011-07-11T02:08:23.222641Z +6254 +tmaruyama diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/all-wcprops --- a/app/controllers/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,299 +1,77 @@ K 25 svn:wc:ra_dav:version-url -V 40 -/svn/!svn/ver/4411/trunk/app/controllers +V 54 +/svn/!svn/ver/6209/branches/1.2-stable/app/controllers +END +boards_controller.rb +K 25 +svn:wc:ra_dav:version-url +V 75 +/svn/!svn/ver/6198/branches/1.2-stable/app/controllers/boards_controller.rb END issues_controller.rb K 25 svn:wc:ra_dav:version-url -V 61 -/svn/!svn/ver/4411/trunk/app/controllers/issues_controller.rb +V 75 +/svn/!svn/ver/6198/branches/1.2-stable/app/controllers/issues_controller.rb END -queries_controller.rb +news_controller.rb K 25 svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/3684/trunk/app/controllers/queries_controller.rb -END -sys_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/3201/trunk/app/controllers/sys_controller.rb -END -mail_handler_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 67 -/svn/!svn/ver/3202/trunk/app/controllers/mail_handler_controller.rb -END -watchers_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/3798/trunk/app/controllers/watchers_controller.rb -END -auto_completes_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 69 -/svn/!svn/ver/3945/trunk/app/controllers/auto_completes_controller.rb -END -my_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/4224/trunk/app/controllers/my_controller.rb -END -comments_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/4172/trunk/app/controllers/comments_controller.rb -END -members_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/3784/trunk/app/controllers/members_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/4242/trunk/app/controllers/context_menus_controller.rb +V 73 +/svn/!svn/ver/6198/branches/1.2-stable/app/controllers/news_controller.rb END journals_controller.rb K 25 svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/4034/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 -END -time_entry_reports_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 73 -/svn/!svn/ver/4232/trunk/app/controllers/time_entry_reports_controller.rb -END -reports_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/3692/trunk/app/controllers/reports_controller.rb -END -project_enumerations_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 75 -/svn/!svn/ver/4075/trunk/app/controllers/project_enumerations_controller.rb -END -settings_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/4220/trunk/app/controllers/settings_controller.rb +V 77 +/svn/!svn/ver/6198/branches/1.2-stable/app/controllers/journals_controller.rb END timelog_controller.rb K 25 svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/4410/trunk/app/controllers/timelog_controller.rb -END -custom_fields_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 68 -/svn/!svn/ver/3627/trunk/app/controllers/custom_fields_controller.rb +V 76 +/svn/!svn/ver/6198/branches/1.2-stable/app/controllers/timelog_controller.rb END users_controller.rb K 25 svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/4382/trunk/app/controllers/users_controller.rb -END -issue_moves_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/4292/trunk/app/controllers/issue_moves_controller.rb -END -files_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/4177/trunk/app/controllers/files_controller.rb +V 74 +/svn/!svn/ver/6198/branches/1.2-stable/app/controllers/users_controller.rb END application_controller.rb K 25 svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/4286/trunk/app/controllers/application_controller.rb +V 80 +/svn/!svn/ver/6209/branches/1.2-stable/app/controllers/application_controller.rb END -ldap_auth_sources_controller.rb +activities_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 -previews_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/4174/trunk/app/controllers/previews_controller.rb +V 79 +/svn/!svn/ver/6198/branches/1.2-stable/app/controllers/activities_controller.rb END search_controller.rb K 25 svn:wc:ra_dav:version-url -V 61 -/svn/!svn/ver/3806/trunk/app/controllers/search_controller.rb +V 75 +/svn/!svn/ver/6202/branches/1.2-stable/app/controllers/search_controller.rb END -messages_controller.rb +repositories_controller.rb K 25 svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/3528/trunk/app/controllers/messages_controller.rb +V 81 +/svn/!svn/ver/6198/branches/1.2-stable/app/controllers/repositories_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 -versions_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/4354/trunk/app/controllers/versions_controller.rb -END -boards_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 61 -/svn/!svn/ver/3942/trunk/app/controllers/boards_controller.rb -END -attachments_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/3281/trunk/app/controllers/attachments_controller.rb -END -news_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/4174/trunk/app/controllers/news_controller.rb -END -trackers_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/3627/trunk/app/controllers/trackers_controller.rb -END -groups_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 61 -/svn/!svn/ver/3934/trunk/app/controllers/groups_controller.rb -END -issue_statuses_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 69 -/svn/!svn/ver/3416/trunk/app/controllers/issue_statuses_controller.rb -END -roles_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/3627/trunk/app/controllers/roles_controller.rb -END -wikis_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/3370/trunk/app/controllers/wikis_controller.rb -END -repositories_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 67 -/svn/!svn/ver/3680/trunk/app/controllers/repositories_controller.rb -END -admin_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/3200/trunk/app/controllers/admin_controller.rb +V 84 +/svn/!svn/ver/6198/branches/1.2-stable/app/controllers/issue_relations_controller.rb END projects_controller.rb K 25 svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/4397/trunk/app/controllers/projects_controller.rb +V 77 +/svn/!svn/ver/6198/branches/1.2-stable/app/controllers/projects_controller.rb END -account_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/3906/trunk/app/controllers/account_controller.rb -END -calendars_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/4388/trunk/app/controllers/calendars_controller.rb -END -issue_categories_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 71 -/svn/!svn/ver/3597/trunk/app/controllers/issue_categories_controller.rb -END -gantts_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 61 -/svn/!svn/ver/4388/trunk/app/controllers/gantts_controller.rb -END -documents_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/3597/trunk/app/controllers/documents_controller.rb -END -wiki_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/4303/trunk/app/controllers/wiki_controller.rb -END -activities_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/4047/trunk/app/controllers/activities_controller.rb -END -enumerations_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 67 -/svn/!svn/ver/3524/trunk/app/controllers/enumerations_controller.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/entries --- a/app/controllers/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/controllers +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/controllers http://redmine.rubyforge.org/svn -2010-11-17T18:27:38.712585Z -4411 +2011-07-09T18:49:13.583984Z +6209 jplang @@ -32,10 +32,10 @@ -2010-11-19T13:04:46.996826Z -e6c77385e49176b593367b44e7b33f3e -2010-11-17T18:27:38.712585Z -4411 +2011-07-14T09:28:10.000000Z +c8deaf810284940ffaf93b34770e68c1 +2011-07-09T09:11:13.773613Z +6198 jplang has-props @@ -58,7 +58,7 @@ -12834 +12830 queries_controller.rb file @@ -66,11 +66,11 @@ -2010-09-23T14:37:44.399747Z -7ad6758cfd160c4b6ef6d71be06e087c -2010-04-19T15:08:28.751734Z -3684 -edavis10 +2011-07-14T09:24:21.000000Z +d5fb2cc0fcbed592991370967f38af2b +2011-04-03T14:31:32.940784Z +5304 +jplang has-props @@ -92,7 +92,7 @@ -2999 +3261 sys_controller.rb file @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.399747Z +2011-07-14T09:24:09.000000Z 7a73aba15fcd447531d1552de01706d9 2009-12-20T09:44:28.044710Z 3201 @@ -134,11 +134,11 @@ -2010-09-23T14:37:44.395735Z -612f3e7497e14c728934e83fbe5778c4 -2009-12-20T09:45:04.782778Z -3202 -jplang +2011-07-14T09:24:21.000000Z +a198d0cd4a30c00a40a646cecbbe71e2 +2011-05-18T07:13:08.785903Z +5838 +tmaruyama has-props @@ -160,7 +160,7 @@ -1588 +1571 watchers_controller.rb file @@ -168,11 +168,11 @@ -2010-09-23T14:37:44.399747Z -3ee494bd8196306eab8913bd462b44da -2010-06-20T16:08:15.578906Z -3798 -edavis10 +2011-07-14T09:24:21.000000Z +74083636df6bb82e8dc1f4fbd3da2882 +2011-04-05T12:09:15.508559Z +5320 +jplang has-props @@ -194,7 +194,7 @@ -3234 +3021 auto_completes_controller.rb file @@ -202,33 +202,33 @@ -2010-09-23T14:37:44.391741Z -8cd8e21323a4500a05c26e4ebdde1812 -2010-08-17T15:03:58.074505Z -3945 -edavis10 - - - - - - - - - - - - - - - - - - - - - -665 +2011-07-14T09:24:09.000000Z +edbdb443ff7cc8f299f7772b3532eca1 +2010-12-12T16:06:43.892596Z +4503 +jplang + + + + + + + + + + + + + + + + + + + + + +772 my_controller.rb file @@ -236,11 +236,11 @@ -2010-11-19T13:04:46.996826Z -b465d7aeca2d6b4cc11159ae9bc7349e -2010-09-28T22:13:11.637219Z -4224 -edavis10 +2011-07-14T09:24:09.000000Z +40ea055e0f9f9aa83680751fdab5a0a5 +2010-12-12T14:25:23.262992Z +4497 +jplang has-props @@ -262,7 +262,7 @@ -6021 +5768 comments_controller.rb file @@ -270,7 +270,7 @@ -2010-09-24T12:48:26.271687Z +2011-07-14T09:24:09.000000Z c2289eb9b654117a101c072955d4c705 2010-09-23T15:20:19.085385Z 4172 @@ -304,7 +304,7 @@ -2010-09-23T14:37:44.395735Z +2011-07-14T09:24:09.000000Z 20e245fa61dc0dcb2f105a8f0e6af98c 2010-06-19T19:51:43.174421Z 3784 @@ -332,13 +332,47 @@ 3447 +context_menus_controller.rb +file + + + + +2011-07-14T09:24:21.000000Z +ee556c18cb658bef786cc6f69388f9b8 +2011-04-17T15:17:18.418900Z +5495 +jplang + + + + + + + + + + + + + + + + + + + + + +2432 + welcome_controller.rb file -2010-09-23T14:37:44.403745Z +2011-07-14T09:24:09.000000Z 95ad1acf7766861a4dbd0aebd9c847de 2009-10-21T03:21:31.657956Z 2941 @@ -366,51 +400,17 @@ 1091 -context_menus_controller.rb -file - - - - -2010-11-19T13:04:46.996826Z -2db29b69c3f0130e470a0a11dfc1f28b -2010-10-08T03:09:51.863032Z -4242 -jbbarth - - - - - - - - - - - - - - - - - - - - - -1821 - journals_controller.rb file -2010-09-23T14:37:44.395735Z -deb481ad0f862b9305b79f292d59fb51 -2010-08-23T15:04:36.844654Z -4034 -edavis10 +2011-07-14T09:28:10.000000Z +70d5ea1cc9e7df479a2f24f04b530502 +2011-07-09T09:11:13.773613Z +6198 +jplang has-props @@ -432,41 +432,7 @@ -3439 - -workflows_controller.rb -file - - - - -2010-09-23T14:37:44.403745Z -5052c701a12ad27e88950dd4a745b0f8 -2010-03-04T05:33:45.236699Z -3536 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -3346 +4105 time_entry_reports_controller.rb file @@ -474,7 +440,7 @@ -2010-11-19T13:04:46.996826Z +2011-07-14T09:24:09.000000Z dadcb57d89dc3c90c5fa099b143c07f8 2010-10-05T16:07:17.015270Z 4232 @@ -502,13 +468,47 @@ 9308 +workflows_controller.rb +file + + + + +2011-07-14T09:24:09.000000Z +73cdba17212ad890eea7b7c7ee140d7e +2011-02-20T15:38:07.840581Z +4895 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +4041 + reports_controller.rb file -2010-09-23T14:37:44.399747Z +2011-07-14T09:24:09.000000Z 8f7e6e7308912a6169a700b0c88174a0 2010-04-27T16:43:52.584075Z 3692 @@ -542,7 +542,7 @@ -2010-09-24T12:48:26.271687Z +2011-07-14T09:24:09.000000Z 828b364ba2850ceddb3caa566bf10124 2010-09-10T16:00:49.687515Z 4075 @@ -576,10 +576,10 @@ -2010-11-19T13:04:46.996826Z -7984019db8d0beb1d7ff158390d4ad68 -2010-11-16T20:27:45.364396Z -4410 +2011-07-14T09:28:10.000000Z +341ec8f56b1a1a24fd23ff8b4e1fe7b3 +2011-07-09T09:11:13.773613Z +6198 jplang has-props @@ -602,7 +602,41 @@ -8623 +12440 + +settings_controller.rb +file + + + + +2011-07-14T09:24:21.000000Z +cef6dc401dea01bdddca8a8a405aeaee +2011-05-18T02:18:47.811055Z +5827 +tmaruyama +has-props + + + + + + + + + + + + + + + + + + + + +2286 custom_fields_controller.rb file @@ -610,11 +644,11 @@ -2010-09-23T14:37:44.391741Z -00272455ac5be11da48f92c4a443c538 -2010-04-03T11:54:24.331654Z -3627 -winterheart +2011-07-14T09:24:21.000000Z +e87f5ffac690480de57ac0a90daad01c +2011-05-01T23:15:03.415033Z +5611 +tmaruyama has-props @@ -636,19 +670,19 @@ -2373 +2395 -settings_controller.rb +users_controller.rb file -2010-11-19T13:04:46.996826Z -4328cabdf111342d147b245bc61bb75e -2010-09-28T20:19:55.214366Z -4220 -edavis10 +2011-07-14T09:28:10.000000Z +858ad5381dc0944da7954e1a8dae60ac +2011-07-09T09:11:13.773613Z +6198 +jplang has-props @@ -670,7 +704,7 @@ -2239 +8639 issue_moves_controller.rb file @@ -678,67 +712,33 @@ -2010-11-19T13:04:47.000764Z -cacd6ffe0ce299e2ede9d45b7ef8af42 -2010-10-25T18:44:46.868009Z -4292 -edavis10 - - - - - - - - - - - - - - - - - - - - - -2441 - -users_controller.rb -file - - - - -2010-11-19T13:04:47.000764Z -3af0a81ba74621dc21d877a579b39d9c -2010-11-07T14:15:01.891476Z -4382 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -7565 +2011-07-14T09:24:21.000000Z +cbd01754dc3edc7ce30bd9e401608908 +2011-05-17T03:59:02.899695Z +5821 +tmaruyama + + + + + + + + + + + + + + + + + + + + + +2435 files_controller.rb file @@ -746,33 +746,33 @@ -2010-11-19T13:04:47.000764Z -f0246e8f8dde5ea7b93e4dc2162181fc -2010-09-26T08:07:41.604064Z -4177 -jplang - - - - - - - - - - - - - - - - - - - - - -1289 +2011-07-14T09:24:21.000000Z +e40d3a7211765dd6a7dd0fde90906bab +2011-05-18T07:12:48.748391Z +5837 +tmaruyama + + + + + + + + + + + + + + + + + + + + + +1273 application_controller.rb file @@ -780,10 +780,10 @@ -2010-11-19T13:04:47.000764Z -8f7d4c9d306ae9d59ea0e064466454d1 -2010-10-23T11:07:04.019894Z -4286 +2011-07-14T09:28:10.000000Z +558cc843d43a24e2cd334571c32a7656 +2011-07-09T18:49:13.583984Z +6209 jplang has-props @@ -806,41 +806,7 @@ -13669 - -previews_controller.rb -file - - - - -2010-11-19T13:04:47.000764Z -c5ae4fae18159e70fd81c2487bb1daa1 -2010-09-24T16:26:46.819682Z -4174 -edavis10 - - - - - - - - - - - - - - - - - - - - - -957 +16538 auth_sources_controller.rb file @@ -848,7 +814,7 @@ -2010-09-23T14:37:44.391741Z +2011-07-14T09:24:09.000000Z 237280766d09418161536250d514a7bf 2010-05-23T03:16:31.304135Z 3744 @@ -882,7 +848,7 @@ -2010-09-23T14:37:44.395735Z +2011-07-14T09:24:09.000000Z 5f7b9cb2e9c8a60db58ea0833cf481c5 2010-05-23T03:16:31.304135Z 3744 @@ -910,17 +876,51 @@ 917 +previews_controller.rb +file + + + + +2011-07-14T09:24:21.000000Z +fa4b7467e77f8a7bc86ff60a68052684 +2011-03-28T21:45:30.892324Z +5246 +jplang + + + + + + + + + + + + + + + + + + + + + +1754 + search_controller.rb file -2010-09-23T14:37:44.399747Z -0015154998f830227b636ee423f007f3 -2010-06-20T20:01:32.722003Z -3806 -edavis10 +2011-07-14T09:28:10.000000Z +47432306ab84ca571b40b037b3c34095 +2011-07-09T11:26:35.866966Z +6202 +jplang has-props @@ -942,7 +942,7 @@ -3961 +4001 messages_controller.rb file @@ -950,7 +950,7 @@ -2010-09-23T14:37:44.395735Z +2011-07-14T09:24:09.000000Z f3f4378ec15e1401ead0dcac4e9cb059 2010-03-03T17:05:00.967826Z 3528 @@ -984,7 +984,7 @@ -2010-11-19T13:04:47.000764Z +2011-07-14T09:24:09.000000Z a98fb262a20669600a85c0f72202c5e6 2010-11-01T13:13:32.982466Z 4354 @@ -1018,11 +1018,11 @@ -2010-09-23T14:37:44.395735Z -c57448661f2eaab81c76f23d7f51e0ab -2010-03-16T15:17:47.586688Z -3591 -edavis10 +2011-07-14T09:28:10.000000Z +00adf3dbe7851ad6127cf120df999f7b +2011-07-09T09:11:13.773613Z +6198 +jplang has-props @@ -1044,7 +1044,7 @@ -2220 +2450 boards_controller.rb file @@ -1052,11 +1052,11 @@ -2010-09-23T14:37:44.391741Z -52638c82da929081099076d5aa0f9212 -2010-08-16T23:39:27.396462Z -3942 -edavis10 +2011-07-14T09:28:10.000000Z +4800c888c351ca91dd2e9fdf1bbab57b +2011-07-09T09:11:13.773613Z +6198 +jplang has-props @@ -1086,11 +1086,11 @@ -2010-09-23T14:37:44.391741Z -21c0e5d894d1429ac39f3253ae021594 -2010-01-05T18:16:03.565347Z -3281 -jplang +2011-07-14T09:24:21.000000Z +c679c8cbf25d1c5d30e2f88bb177a202 +2011-05-18T07:12:27.059090Z +5836 +tmaruyama has-props @@ -1112,7 +1112,7 @@ -2982 +2954 news_controller.rb file @@ -1120,11 +1120,11 @@ -2010-11-19T13:04:47.000764Z -d9e36fcf69f18973b274648b7b70dccf -2010-09-24T16:26:46.819682Z -4174 -edavis10 +2011-07-14T09:28:10.000000Z +3b6f0957dcc31aa8c48bef64ed452d0b +2011-07-09T09:11:13.773613Z +6198 +jplang has-props @@ -1146,7 +1146,7 @@ -3221 +3421 trackers_controller.rb file @@ -1154,7 +1154,7 @@ -2010-09-23T14:37:44.399747Z +2011-07-14T09:24:09.000000Z a5e793eb94e501be4c1a39acc65cc568 2010-04-03T11:54:24.331654Z 3627 @@ -1188,11 +1188,11 @@ -2010-09-23T14:37:44.395735Z -77209ec52ddcefafb0bfbb76195167ec -2010-08-10T22:37:00.826946Z -3934 -jbbarth +2011-07-14T09:24:21.000000Z +4e6c1f74ad57c0df68dfb3a6c6432a2e +2011-04-01T16:47:30.350690Z +5284 +jplang has-props @@ -1214,7 +1214,7 @@ -5214 +5213 issue_statuses_controller.rb file @@ -1222,7 +1222,7 @@ -2010-09-23T14:37:44.395735Z +2011-07-14T09:24:09.000000Z f0fdda9126d71c0b2d4638de50ab1097 2010-02-12T19:15:39.389877Z 3416 @@ -1256,11 +1256,11 @@ -2010-09-23T14:37:44.399747Z -28f2e44219870c62c9844354b78af6e1 -2010-04-03T11:54:24.331654Z -3627 -winterheart +2011-07-14T09:24:21.000000Z +18be86518ea841401ee1c2b3233d72a4 +2011-05-01T23:15:03.415033Z +5611 +tmaruyama has-props @@ -1282,7 +1282,7 @@ -2612 +2638 wikis_controller.rb file @@ -1290,7 +1290,7 @@ -2010-09-23T14:37:44.403745Z +2011-07-14T09:24:09.000000Z 7ae79a9d22586240a01af73834b718a3 2010-02-05T16:57:02.094258Z 3370 @@ -1324,10 +1324,10 @@ -2010-09-23T14:37:44.399747Z -a90fd2992bc17c6cee999369521194c4 -2010-04-17T12:51:46.860438Z -3680 +2011-07-14T09:28:10.000000Z +03fa916999a68f9d1014925de3ad1981 +2011-07-09T09:11:13.773613Z +6198 jplang has-props @@ -1350,7 +1350,7 @@ -10750 +12687 admin_controller.rb file @@ -1358,11 +1358,11 @@ -2010-09-23T14:37:44.391741Z -ed65a11326fe54914ba3a750a2b6f943 -2009-12-19T20:33:24.113306Z -3200 -jplang +2011-07-14T09:24:21.000000Z +4577094f50fcbc76c8dba52341a2fbe2 +2011-04-25T23:21:34.669083Z +5550 +tmaruyama has-props @@ -1384,7 +1384,7 @@ -3104 +3119 projects_controller.rb file @@ -1392,10 +1392,10 @@ -2010-11-19T13:04:47.000764Z -b0f584d53a742f6c89b157030f9d6a8d -2010-11-13T10:05:43.644565Z -4397 +2011-07-14T09:28:10.000000Z +dccb25f35e9cb7bf110cc372d9d06fb0 +2011-07-09T09:11:13.773613Z +6198 jplang has-props @@ -1418,7 +1418,7 @@ -10011 +10029 account_controller.rb file @@ -1426,11 +1426,11 @@ -2010-09-23T14:37:44.391741Z -d0ff6be1c749b765d9d64bef64c27537 -2010-08-03T15:26:50.842290Z -3906 -edavis10 +2011-07-14T09:24:09.000000Z +7b162cad903bb22948f7040a48509256 +2011-01-23T11:40:07.678287Z +4757 +jplang has-props @@ -1452,7 +1452,7 @@ -8962 +9350 calendars_controller.rb file @@ -1460,10 +1460,10 @@ -2010-11-19T13:04:47.000764Z -0be20cab6d5ea49f428a90cf3afef3e3 -2010-11-07T22:38:10.728638Z -4388 +2011-07-14T09:24:21.000000Z +4bc844343a8613ab25bd4c76969d566a +2011-04-01T14:34:44.070899Z +5276 jplang @@ -1486,7 +1486,7 @@ -1390 +2155 issue_categories_controller.rb file @@ -1494,11 +1494,11 @@ -2010-09-23T14:37:44.395735Z -119ceb4a27aa554d03867f46cb142d0e -2010-03-17T15:41:58.766740Z -3597 -edavis10 +2011-07-14T09:24:21.000000Z +c42630be286026f052791d256b487246 +2011-05-01T23:15:03.415033Z +5611 +tmaruyama has-props @@ -1520,7 +1520,7 @@ -3338 +3364 gantts_controller.rb file @@ -1528,10 +1528,10 @@ -2010-11-19T13:04:47.000764Z -81dbee1745da99b9ea499f3fbe1d3944 -2010-11-07T22:38:10.728638Z -4388 +2011-07-14T09:24:21.000000Z +8093015b8337589c3a8dd96f912a626c +2011-04-01T14:34:44.070899Z +5276 jplang @@ -1554,7 +1554,7 @@ -1019 +1786 documents_controller.rb file @@ -1562,7 +1562,7 @@ -2010-09-23T14:37:44.391741Z +2011-07-14T09:24:09.000000Z c2c68bf5fa3ed22a8f55c8414d1efce9 2010-03-17T15:41:58.766740Z 3597 @@ -1596,11 +1596,11 @@ -2010-11-19T13:04:47.004764Z -0af823002ab9c7e8f59b3d12cf6267e9 -2010-10-28T21:25:38.778234Z -4303 -edavis10 +2011-07-14T09:24:21.000000Z +4e9a4e1dd2d09a4cee7f4df56e8659f1 +2011-05-17T04:34:44.952857Z +5824 +tmaruyama has-props @@ -1622,7 +1622,7 @@ -10145 +10000 activities_controller.rb file @@ -1630,33 +1630,33 @@ -2010-09-24T12:48:26.275788Z -88f55d118861ffaca0992fa5ec55d51f -2010-08-27T14:05:54.014502Z -4047 -edavis10 - - - - - - - - - - - - - - - - - - - - - -1952 +2011-07-14T09:28:10.000000Z +4d0e519d63fce8db9095adc7f1eb554b +2011-07-09T09:11:13.773613Z +6198 +jplang + + + + + + + + + + + + + + + + + + + + + +2813 enumerations_controller.rb file @@ -1664,11 +1664,11 @@ -2010-09-23T14:37:44.391741Z -1caaedc7bb0a3085878dc94446c70ab0 -2010-03-02T20:03:09.514061Z -3524 -jplang +2011-07-14T09:24:21.000000Z +4c46e4cd141ad0a3534b60df7be534bc +2011-05-01T23:15:03.415033Z +5611 +tmaruyama has-props @@ -1690,5 +1690,5 @@ -2706 +2734 diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/account_controller.rb.svn-base --- a/app/controllers/.svn/text-base/account_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/account_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 = { }) diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/activities_controller.rb.svn-base --- a/app/controllers/.svn/text-base/activities_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/activities_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,11 +1,28 @@ +# 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. + class ActivitiesController < ApplicationController menu_item :activity before_filter :find_optional_project - accept_key_auth :index + accept_rss_auth :index def index @days = Setting.activity_days_default.to_i - + if params[:from] begin; @date_to = params[:from].to_date + 1; rescue; end end @@ -14,18 +31,18 @@ @date_from = @date_to - @days @with_subprojects = params[:with_subprojects].nil? ? Setting.display_subprojects_issues? : (params[:with_subprojects] == '1') @author = (params[:user_id].blank? ? nil : User.active.find(params[:user_id])) - - @activity = Redmine::Activity::Fetcher.new(User.current, :project => @project, + + @activity = Redmine::Activity::Fetcher.new(User.current, :project => @project, :with_subprojects => @with_subprojects, :author => @author) @activity.scope_select {|t| !params["show_#{t}"].nil?} @activity.scope = (@author.nil? ? :default : :all) if @activity.scope.empty? events = @activity.events(@date_from, @date_to) - - if events.empty? || stale?(:etag => [events.first, User.current]) + + if events.empty? || stale?(:etag => [@activity.scope, @date_to, @date_from, @with_subprojects, @author, events.first, User.current, current_language]) respond_to do |format| - format.html { + format.html { @events_by_day = events.group_by(&:event_date) render :layout => false if request.xhr? } @@ -40,7 +57,7 @@ } end end - + rescue ActiveRecord::RecordNotFound render_404 end @@ -55,5 +72,4 @@ rescue ActiveRecord::RecordNotFound render_404 end - end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/admin_controller.rb.svn-base --- a/app/controllers/.svn/text-base/admin_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/admin_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -17,9 +17,7 @@ class AdminController < ApplicationController layout 'admin' - before_filter :require_admin - helper :sort include SortHelper @@ -30,22 +28,20 @@ def projects @status = params[:status] ? params[:status].to_i : 1 c = ARCondition.new(@status == 0 ? "status <> 0" : ["status = ?", @status]) - unless params[:name].blank? name = "%#{params[:name].strip.downcase}%" c << ["LOWER(identifier) LIKE ? OR LOWER(name) LIKE ?", name, name] end - @projects = Project.find :all, :order => 'lft', :conditions => c.conditions render :action => "projects", :layout => false if request.xhr? end - + def plugins @plugins = Redmine::Plugin.all end - + # Loads the default configuration # (roles, trackers, statuses, workflow, enumerations) def default_configuration @@ -59,7 +55,7 @@ end redirect_to :action => 'index' end - + def test_email raise_delivery_errors = ActionMailer::Base.raise_delivery_errors # Force ActionMailer to raise delivery errors so we can catch it @@ -73,14 +69,16 @@ ActionMailer::Base.raise_delivery_errors = raise_delivery_errors redirect_to :controller => 'settings', :action => 'edit', :tab => 'notifications' end - + def info @db_adapter_name = ActiveRecord::Base.connection.adapter_name @checklist = [ - [:text_default_administrator_account_changed, User.find(:first, :conditions => ["login=? and hashed_password=?", 'admin', User.hash_password('admin')]).nil?], + [:text_default_administrator_account_changed, + User.find(:first, + :conditions => ["login=? and hashed_password=?", 'admin', User.hash_password('admin')]).nil?], [:text_file_repository_writable, File.writable?(Attachment.storage_path)], - [:text_plugin_assets_writable, File.writable?(Engines.public_directory)], - [:text_rmagick_available, Object.const_defined?(:Magick)] + [:text_plugin_assets_writable, File.writable?(Engines.public_directory)], + [:text_rmagick_available, Object.const_defined?(:Magick)] ] - end + end end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/application_controller.rb.svn-base --- a/app/controllers/.svn/text-base/application_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/application_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -18,34 +18,37 @@ require 'uri' require 'cgi' +class Unauthorized < Exception; end + class ApplicationController < ActionController::Base include Redmine::I18n layout 'base' - exempt_from_layout 'builder' - + exempt_from_layout 'builder', 'rsb' + # Remove broken cookie after upgrade from 0.8.x (#4292) # See https://rails.lighthouseapp.com/projects/8994/tickets/3360 # TODO: remove it when Rails is fixed before_filter :delete_broken_cookies def delete_broken_cookies if cookies['_redmine_session'] && cookies['_redmine_session'] !~ /--/ - cookies.delete '_redmine_session' + cookies.delete '_redmine_session' redirect_to home_path return false end end - + before_filter :user_setup, :check_if_login_required, :set_localization filter_parameter_logging :password protect_from_forgery - + rescue_from ActionController::InvalidAuthenticityToken, :with => :invalid_authenticity_token - + rescue_from ::Unauthorized, :with => :deny_access + include Redmine::Search::Controller include Redmine::MenuManager::MenuController helper Redmine::MenuManager::MenuHelper - + Redmine::Scm::Base.all.each do |scm| require_dependency "repository/#{scm.underscore}" end @@ -56,7 +59,7 @@ # Find the current user User.current = find_current_user end - + # Returns the current user or nil if no user is logged in # and starts a session if needed def find_current_user @@ -68,13 +71,13 @@ user = User.try_to_autologin(cookies[:autologin]) session[:user_id] = user.id if user user - elsif params[:format] == 'atom' && params[:key] && accept_key_auth_actions.include?(params[:action]) + elsif params[:format] == 'atom' && params[:key] && request.get? && accept_rss_auth? # RSS key authentication does not start a session User.find_by_rss_key(params[:key]) - elsif Setting.rest_api_enabled? && ['xml', 'json'].include?(params[:format]) - if params[:key].present? && accept_key_auth_actions.include?(params[:action]) + elsif Setting.rest_api_enabled? && accept_api_auth? + if (key = api_key_from_request) # Use API key - User.find_by_api_key(params[:key]) + User.find_by_api_key(key) else # HTTP Basic, either username/password or API key/random authenticate_with_http_basic do |username, password| @@ -94,14 +97,14 @@ User.current = User.anonymous end end - + # check if login is globally required to access the application def check_if_login_required # no check needed if user is already logged in return true if User.current.logged? require_login if Setting.login_required? - end - + end + def set_localization lang = nil if User.current.logged? @@ -117,7 +120,7 @@ lang ||= Setting.default_language set_language_if_valid(lang) end - + def require_login if !User.current.logged? # Extract only the basic url parameters on non-GET requests @@ -146,7 +149,7 @@ end true end - + def deny_access User.current.logged? ? render_403 : require_login end @@ -197,7 +200,7 @@ # Finds and sets @project based on @object.project def find_project_from_association render_404 unless @object.present? - + @project = @object.project rescue ActiveRecord::RecordNotFound render_404 @@ -221,12 +224,16 @@ def find_issues @issues = Issue.find_all_by_id(params[:id] || params[:ids]) raise ActiveRecord::RecordNotFound if @issues.empty? + if @issues.detect {|issue| !issue.visible?} + deny_access + return + end @projects = @issues.collect(&:project).compact.uniq @project = @projects.first if @projects.size == 1 rescue ActiveRecord::RecordNotFound render_404 end - + # Check if project is unique before bulk operations def check_project_uniqueness unless @project @@ -235,7 +242,7 @@ return false end end - + # make sure that the user is a member of the project (or admin) if project is private # used as a before_filter for actions that do not require any particular permission on the project def check_project_privacy @@ -271,27 +278,28 @@ end end redirect_to default + false end - + def render_403(options={}) @project = nil render_error({:message => :notice_not_authorized, :status => 403}.merge(options)) return false end - + def render_404(options={}) render_error({:message => :notice_file_not_found, :status => 404}.merge(options)) return false end - + # Renders an error response def render_error(arg) arg = {:message => arg} unless arg.is_a?(Hash) - + @message = arg[:message] @message = l(@message) if @message.is_a?(Symbol) @status = arg[:status] || 500 - + respond_to do |format| format.html { render :template => 'common/error', :layout => use_layout, :status => @status @@ -309,15 +317,15 @@ def use_layout request.xhr? ? false : 'base' end - + def invalid_authenticity_token if api_request? logger.error "Form authenticity token is missing or is invalid. API calls must include a proper Content-type header (text/xml or text/json)." end render_error "Invalid form authenticity token." end - - def render_feed(items, options={}) + + def render_feed(items, options={}) @items = items || [] @items.sort! {|x,y| y.event_datetime <=> x.event_datetime } @items = @items.slice(0, Setting.feeds_limit.to_i) @@ -325,15 +333,42 @@ render :template => "common/feed.atom.rxml", :layout => false, :content_type => 'application/atom+xml' end + # TODO: remove in Redmine 1.4 def self.accept_key_auth(*actions) - actions = actions.flatten.map(&:to_s) - write_inheritable_attribute('accept_key_auth_actions', actions) + ActiveSupport::Deprecation.warn "ApplicationController.accept_key_auth is deprecated and will be removed in Redmine 1.4. Use accept_rss_auth (or accept_api_auth) instead." + accept_rss_auth(*actions) + end + + # TODO: remove in Redmine 1.4 + def accept_key_auth_actions + ActiveSupport::Deprecation.warn "ApplicationController.accept_key_auth_actions is deprecated and will be removed in Redmine 1.4. Use accept_rss_auth (or accept_api_auth) instead." + self.class.accept_rss_auth end - def accept_key_auth_actions - self.class.read_inheritable_attribute('accept_key_auth_actions') || [] + def self.accept_rss_auth(*actions) + if actions.any? + write_inheritable_attribute('accept_rss_auth_actions', actions) + else + read_inheritable_attribute('accept_rss_auth_actions') || [] + end end + def accept_rss_auth?(action=action_name) + self.class.accept_rss_auth.include?(action.to_sym) + end + + def self.accept_api_auth(*actions) + if actions.any? + write_inheritable_attribute('accept_api_auth_actions', actions) + else + read_inheritable_attribute('accept_api_auth_actions') || [] + end + end + + def accept_api_auth?(action=action_name) + self.class.accept_api_auth.include?(action.to_sym) + end + # Returns the number of objects that should be displayed # on the paginated list def per_page_option @@ -349,6 +384,30 @@ per_page end + # Returns offset and limit used to retrieve objects + # for an API response based on offset, limit and page parameters + def api_offset_and_limit(options=params) + if options[:offset].present? + offset = options[:offset].to_i + if offset < 0 + offset = 0 + end + end + limit = options[:limit].to_i + if limit < 1 + limit = 25 + elsif limit > 100 + limit = 100 + end + if offset.nil? && options[:page].present? + offset = (options[:page].to_i - 1) * limit + offset = 0 if offset < 0 + end + offset ||= 0 + + [offset, limit] + end + # qvalues http header parser # code taken from webrick def parse_qvalues(value) @@ -369,16 +428,25 @@ rescue nil end - + # Returns a string that can be used as filename value in Content-Disposition header def filename_for_content_disposition(name) request.env['HTTP_USER_AGENT'] =~ %r{MSIE} ? ERB::Util.url_encode(name) : name end - + def api_request? %w(xml json).include? params[:format] end + # Returns the API key present in the request + def api_key_from_request + if params[:key].present? + params[:key] + elsif request.headers["X-Redmine-API-Key"].present? + request.headers["X-Redmine-API-Key"] + end + end + # Renders a warning flash if obj has unsaved attachments def render_attachment_warning_if_needed(obj) flash[:warning] = l(:warning_attachments_not_saved, obj.unsaved_attachments.size) if obj.unsaved_attachments.present? @@ -413,5 +481,37 @@ { attribute => error } end.to_json end - + + # Renders API response on validation failure + def render_validation_errors(object) + options = { :status => :unprocessable_entity, :layout => false } + options.merge!(case params[:format] + when 'xml'; { :xml => object.errors } + when 'json'; { :json => {'errors' => object.errors} } # ActiveResource client compliance + else + raise "Unknown format #{params[:format]} in #render_validation_errors" + end + ) + render options + end + + # Overrides #default_template so that the api template + # is used automatically if it exists + def default_template(action_name = self.action_name) + if api_request? + begin + return self.view_paths.find_template(default_template_name(action_name), 'api') + rescue ::ActionView::MissingTemplate + # the api template was not found + # fallback to the default behaviour + end + end + super + end + + # Overrides #pick_layout so that #render with no arguments + # doesn't use the layout for api requests + def pick_layout(*args) + api_request? ? nil : super + end end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/attachments_controller.rb.svn-base --- a/app/controllers/.svn/text-base/attachments_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/attachments_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ # Redmine - project management software -# Copyright (C) 2006-2008 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 # 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. @@ -19,9 +19,9 @@ before_filter :find_project before_filter :file_readable, :read_authorize, :except => :destroy before_filter :delete_authorize, :only => :destroy - + verify :method => :post, :only => :destroy - + def show if @attachment.is_diff? @diff = File.new(@attachment.diskfile, "rb").read @@ -33,19 +33,19 @@ download end end - + def download if @attachment.container.is_a?(Version) || @attachment.container.is_a?(Project) @attachment.increment_download end - + # images are sent inline send_file @attachment.diskfile, :filename => filename_for_content_disposition(@attachment.filename), - :type => detect_content_type(@attachment), + :type => detect_content_type(@attachment), :disposition => (@attachment.image? ? 'inline' : 'attachment') - + end - + def destroy # Make sure association callbacks are called @attachment.container.attachments.delete(@attachment) @@ -53,7 +53,7 @@ rescue ::ActionController::RedirectBackError redirect_to :controller => 'projects', :action => 'show', :id => @project end - + private def find_project @attachment = Attachment.find(params[:id]) @@ -63,20 +63,20 @@ rescue ActiveRecord::RecordNotFound render_404 end - + # Checks that the file exists and is readable def file_readable @attachment.readable? ? true : render_404 end - + def read_authorize @attachment.visible? ? true : deny_access end - + def delete_authorize @attachment.deletable? ? true : deny_access end - + def detect_content_type(attachment) content_type = attachment.content_type if content_type.blank? diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/auto_completes_controller.rb.svn-base --- a/app/controllers/.svn/text-base/auto_completes_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/auto_completes_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -4,12 +4,14 @@ def issues @issues = [] q = params[:q].to_s + query = (params[:scope] == "all" && Setting.cross_project_issue_relations?) ? Issue : @project.issues if q.match(/^\d+$/) - @issues << @project.issues.visible.find_by_id(q.to_i) + @issues << query.visible.find_by_id(q.to_i) end unless q.blank? - @issues += @project.issues.visible.find(:all, :conditions => ["LOWER(#{Issue.table_name}.subject) LIKE ?", "%#{q.downcase}%"], :limit => 10) + @issues += query.visible.find(:all, :conditions => ["LOWER(#{Issue.table_name}.subject) LIKE ?", "%#{q.downcase}%"], :limit => 10) end + @issues.compact! render :layout => false end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/boards_controller.rb.svn-base --- a/app/controllers/.svn/text-base/boards_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/boards_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -18,7 +18,7 @@ class BoardsController < ApplicationController default_search_scope :messages before_filter :find_project, :find_board_if_available, :authorize - accept_key_auth :index, :show + accept_rss_auth :index, :show helper :messages include MessagesHelper diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/calendars_controller.rb.svn-base --- a/app/controllers/.svn/text-base/calendars_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/calendars_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,3 +1,20 @@ +# 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. + class CalendarsController < ApplicationController menu_item :calendar before_filter :find_optional_project @@ -36,9 +53,4 @@ render :action => 'show', :layout => false if request.xhr? end - - def update - show - end - end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/context_menus_controller.rb.svn-base --- a/app/controllers/.svn/text-base/context_menus_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/context_menus_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,10 @@ class ContextMenusController < ApplicationController helper :watchers + helper :issues def issues - @issues = Issue.find_all_by_id(params[:ids], :include => :project) + @issues = Issue.visible.all(:conditions => {:id => params[:ids]}, :include => :project) + if (@issues.size == 1) @issue = @issues.first @allowed_statuses = @issue.new_statuses_allowed_to(User.current) @@ -39,5 +41,18 @@ render :layout => false end - + + def time_entries + @time_entries = TimeEntry.all( + :conditions => {:id => params[:ids]}, :include => :project) + @projects = @time_entries.collect(&:project).compact.uniq + @project = @projects.first if @projects.size == 1 + @activities = TimeEntryActivity.shared.active + @can = {:edit => User.current.allowed_to?(:log_time, @projects), + :update => User.current.allowed_to?(:log_time, @projects), + :delete => User.current.allowed_to?(:log_time, @projects) + } + @back = back_url + render :layout => false + end end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/custom_fields_controller.rb.svn-base --- a/app/controllers/.svn/text-base/custom_fields_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/custom_fields_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -38,8 +38,9 @@ flash[:notice] = l(:notice_successful_create) call_hook(:controller_custom_fields_new_after_save, :params => params, :custom_field => @custom_field) redirect_to :action => 'index', :tab => @custom_field.class.name + else + @trackers = Tracker.find(:all, :order => 'position') end - @trackers = Tracker.find(:all, :order => 'position') end def edit @@ -48,8 +49,9 @@ flash[:notice] = l(:notice_successful_update) call_hook(:controller_custom_fields_edit_after_save, :params => params, :custom_field => @custom_field) redirect_to :action => 'index', :tab => @custom_field.class.name + else + @trackers = Tracker.find(:all, :order => 'position') end - @trackers = Tracker.find(:all, :order => 'position') end def destroy diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/enumerations_controller.rb.svn-base --- a/app/controllers/.svn/text-base/enumerations_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/enumerations_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -75,10 +75,12 @@ # No associated objects @enumeration.destroy redirect_to :action => 'index' + return elsif params[:reassign_to_id] if reassign_to = @enumeration.class.find_by_id(params[:reassign_to_id]) @enumeration.destroy(reassign_to) redirect_to :action => 'index' + return end end @enumerations = @enumeration.class.find(:all) - [@enumeration] diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/files_controller.rb.svn-base --- a/app/controllers/.svn/text-base/files_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/files_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -13,7 +13,7 @@ 'created_on' => "#{Attachment.table_name}.created_on", 'size' => "#{Attachment.table_name}.filesize", 'downloads' => "#{Attachment.table_name}.downloads" - + @containers = [ Project.find(@project.id, :include => :attachments, :order => sort_clause)] @containers += @project.versions.find(:all, :include => :attachments, :order => sort_clause).sort.reverse render :layout => !request.xhr? diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/gantts_controller.rb.svn-base --- a/app/controllers/.svn/text-base/gantts_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/gantts_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,3 +1,20 @@ +# 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. + class GanttsController < ApplicationController menu_item :gantt before_filter :find_optional_project @@ -28,9 +45,4 @@ format.pdf { send_data(@gantt.to_pdf, :type => 'application/pdf', :filename => "#{basename}.pdf") } end end - - def update - show - end - end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/groups_controller.rb.svn-base --- a/app/controllers/.svn/text-base/groups_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/groups_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -132,7 +132,7 @@ def autocomplete_for_user @group = Group.find(params[:id]) - @users = User.active.like(params[:q]).find(:all, :limit => 100) - @group.users + @users = User.active.not_in_group(@group).like(params[:q]).all(:limit => 100) render :layout => false end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/issue_categories_controller.rb.svn-base --- a/app/controllers/.svn/text-base/issue_categories_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/issue_categories_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -65,10 +65,12 @@ # No issue assigned to this category @category.destroy redirect_to :controller => 'projects', :action => 'settings', :id => @project, :tab => 'categories' + return elsif params[:todo] reassign_to = @project.issue_categories.find_by_id(params[:reassign_to_id]) if params[:todo] == 'reassign' @category.destroy(reassign_to) redirect_to :controller => 'projects', :action => 'settings', :id => @project, :tab => 'categories' + return end @categories = @project.issue_categories - [@category] end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/issue_moves_controller.rb.svn-base --- a/app/controllers/.svn/text-base/issue_moves_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/issue_moves_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -2,7 +2,7 @@ default_search_scope :issues before_filter :find_issues, :check_project_uniqueness before_filter :authorize - + def new prepare_for_issue_move render :layout => false if request.xhr? @@ -48,7 +48,7 @@ @copy = params[:copy_options] && params[:copy_options][:copy] @allowed_projects = Issue.allowed_target_projects_on_move @target_project = @allowed_projects.detect {|p| p.id.to_s == params[:new_project_id]} if params[:new_project_id] - @target_project ||= @project + @target_project ||= @project @trackers = @target_project.trackers @available_statuses = Workflow.available_statuses(@project) @notes = params[:notes] diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/issue_relations_controller.rb.svn-base --- a/app/controllers/.svn/text-base/issue_relations_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/issue_relations_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,4 +1,4 @@ -# redMine - project management software +# Redmine - project management software # Copyright (C) 2006-2007 Jean-Philippe Lang # # This program is free software; you can redistribute it and/or @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/issues_controller.rb.svn-base --- a/app/controllers/.svn/text-base/issues_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/issues_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ # Redmine - project management software -# Copyright (C) 2006-2008 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 # 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. @@ -18,7 +18,7 @@ class IssuesController < ApplicationController menu_item :new_issue, :only => [:new, :create] default_search_scope :issues - + before_filter :find_issue, :only => [:show, :edit, :update] before_filter :find_issues, :only => [:bulk_edit, :bulk_update, :move, :perform_move, :destroy] before_filter :check_project_uniqueness, :only => [:move, :perform_move] @@ -27,13 +27,14 @@ before_filter :find_optional_project, :only => [:index] before_filter :check_for_default_issue_status, :only => [:new, :create] before_filter :build_new_issue_from_params, :only => [:new, :create] - accept_key_auth :index, :show, :create, :update, :destroy + accept_rss_auth :index, :show + accept_api_auth :index, :show, :create, :update, :destroy rescue_from Query::StatementInvalid, :with => :query_statement_invalid - + helper :journals helper :projects - include ProjectsHelper + include ProjectsHelper helper :custom_fields include CustomFieldsHelper helper :issue_relations @@ -44,6 +45,8 @@ include AttachmentsHelper helper :queries include QueriesHelper + helper :repositories + include RepositoriesHelper helper :sort include SortHelper include IssuesHelper @@ -58,34 +61,36 @@ verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed } verify :method => :post, :only => :bulk_update, :render => {:nothing => true, :status => :method_not_allowed } verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed } - + def index retrieve_query sort_init(@query.sort_criteria.empty? ? [['id', 'desc']] : @query.sort_criteria) sort_update(@query.sortable_columns) - + if @query.valid? - limit = case params[:format] + case params[:format] when 'csv', 'pdf' - Setting.issues_export_limit.to_i + @limit = Setting.issues_export_limit.to_i when 'atom' - Setting.feeds_limit.to_i + @limit = Setting.feeds_limit.to_i + when 'xml', 'json' + @offset, @limit = api_offset_and_limit else - per_page_option + @limit = per_page_option end - + @issue_count = @query.issue_count - @issue_pages = Paginator.new self, @issue_count, limit, params['page'] + @issue_pages = Paginator.new self, @issue_count, @limit, params['page'] + @offset ||= @issue_pages.current.offset @issues = @query.issues(:include => [:assigned_to, :tracker, :priority, :category, :fixed_version], - :order => sort_clause, - :offset => @issue_pages.current.offset, - :limit => limit) + :order => sort_clause, + :offset => @offset, + :limit => @limit) @issue_count_by_group = @query.issue_count_by_group - + respond_to do |format| format.html { render :template => 'issues/index.rhtml', :layout => !request.xhr? } - format.xml { render :layout => false } - format.json { render :text => @issues.to_json, :layout => false } + format.api format.atom { render_feed(@issues, :title => "#{@project || Setting.app_title}: #{l(:label_issue_plural)}") } format.csv { send_data(issues_to_csv(@issues, @project), :type => 'text/csv; header=present', :filename => 'export.csv') } format.pdf { send_data(issues_to_pdf(@issues, @project, @query), :type => 'application/pdf', :filename => 'export.pdf') } @@ -97,21 +102,25 @@ rescue ActiveRecord::RecordNotFound render_404 end - + def show @journals = @issue.journals.find(:all, :include => [:user, :details], :order => "#{Journal.table_name}.created_on ASC") @journals.each_with_index {|j,i| j.indice = i+1} @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? + + if User.current.allowed_to?(:view_changesets, @project) + @changesets = @issue.changesets.visible.all + @changesets.reverse! if User.current.wants_comments_in_reverse_order? + end + + @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 - @time_entry = TimeEntry.new + @time_entry = TimeEntry.new(:issue => @issue, :project => @issue.project) respond_to do |format| format.html { render :template => 'issues/show.rhtml' } - format.xml { render :layout => false } - format.json { render :text => @issue.to_json, :layout => false } + format.api format.atom { render :template => 'journals/index', :layout => false, :content_type => 'application/atom+xml' } format.pdf { send_data(issue_to_pdf(@issue), :type => 'application/pdf', :filename => "#{@project.identifier}-#{@issue.id}.pdf") } end @@ -138,19 +147,17 @@ redirect_to(params[:continue] ? { :action => 'new', :project_id => @project, :issue => {:tracker_id => @issue.tracker, :parent_issue_id => @issue.parent_issue_id}.reject {|k,v| v.nil?} } : { :action => 'show', :id => @issue }) } - format.xml { render :action => 'show', :status => :created, :location => url_for(:controller => 'issues', :action => 'show', :id => @issue) } - format.json { render :text => @issue.to_json, :status => :created, :location => url_for(:controller => 'issues', :action => 'show'), :layout => false } + format.api { render :action => 'show', :status => :created, :location => issue_url(@issue) } end return else respond_to do |format| format.html { render :action => 'new' } - format.xml { render(:xml => @issue.errors, :status => :unprocessable_entity); return } - format.json { render :text => object_errors_to_json(@issue), :status => :unprocessable_entity, :layout => false } + format.api { render_validation_errors(@issue) } end end end - + def edit update_issue_from_params @@ -171,8 +178,7 @@ respond_to do |format| format.html { redirect_back_or_default({:action => 'show', :id => @issue}) } - format.xml { head :ok } - format.json { head :ok } + format.api { head :ok } end else render_attachment_warning_if_needed(@issue) @@ -181,8 +187,7 @@ respond_to do |format| format.html { render :action => 'edit' } - format.xml { render :xml => @issue.errors, :status => :unprocessable_entity } - format.json { render :text => object_errors_to_json(@issue), :status => :unprocessable_entity, :layout => false } + format.api { render_validation_errors(@issue) } end end end @@ -214,7 +219,7 @@ set_flash_from_bulk_issue_save(@issues, unsaved_issue_ids) redirect_back_or_default({:controller => 'issues', :action => 'index', :project_id => @project}) end - + def destroy @hours = TimeEntry.sum(:hours, :conditions => ['issue_id IN (?)', @issues]).to_f if @hours > 0 @@ -232,35 +237,44 @@ TimeEntry.update_all("issue_id = #{reassign_to.id}", ['issue_id IN (?)', @issues]) end else - unless params[:format] == 'xml' || params[:format] == 'json' - # display the destroy form if it's a user request - return - end + # display the destroy form if it's a user request + return unless api_request? end end - @issues.each(&:destroy) + @issues.each do |issue| + begin + issue.reload.destroy + rescue ::ActiveRecord::RecordNotFound # raised by #reload if issue no longer exists + # nothing to do, issue was already deleted (eg. by a parent) + end + end respond_to do |format| format.html { redirect_back_or_default(:action => 'index', :project_id => @project) } - format.xml { head :ok } - format.json { head :ok } + format.api { head :ok } end end private def find_issue + # Issue.visible.find(...) can not be used to redirect user to the login form + # if the issue actually exists but requires authentication @issue = Issue.find(params[:id], :include => [:project, :tracker, :status, :author, :priority, :category]) + unless @issue.visible? + deny_access + return + end @project = @issue.project rescue ActiveRecord::RecordNotFound render_404 end - + def find_project project_id = (params[:issue] && params[:issue][:project_id]) || params[:project_id] @project = Project.find(project_id) rescue ActiveRecord::RecordNotFound render_404 end - + # Used by #edit and #update to set some common instance variables # from the params # TODO: Refactor, not everything in here is needed by #edit @@ -268,9 +282,9 @@ @allowed_statuses = @issue.new_statuses_allowed_to(User.current) @priorities = IssuePriority.all @edit_allowed = User.current.allowed_to?(:edit_issues, @project) - @time_entry = TimeEntry.new + @time_entry = TimeEntry.new(:issue => @issue, :project => @issue.project) @time_entry.attributes = params[:time_entry] - + @notes = params[:notes] || (params[:issue].present? ? params[:issue][:notes] : nil) @issue.init_journal(User.current, @notes) @issue.safe_attributes = params[:issue] @@ -286,8 +300,9 @@ else @issue = @project.issues.visible.find(params[:id]) end - + @issue.project = @project + @issue.author = User.current # Tracker must be set before custom field values @issue.tracker ||= @project.trackers.find((params[:issue] && params[:issue][:tracker_id]) || params[:tracker_id] || :first) if @issue.tracker.nil? @@ -301,7 +316,6 @@ @issue.watcher_user_ids = params[:issue]['watcher_user_ids'] end end - @issue.author = User.current @priorities = IssuePriority.all @allowed_statuses = @issue.new_statuses_allowed_to(User.current, true) end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/journals_controller.rb.svn-base --- a/app/controllers/.svn/text-base/journals_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/journals_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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,15 @@ # 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] - accept_key_auth :index - + before_filter :authorize, :only => [:new, :edit, :diff] + accept_rss_auth :index + menu_item :issues + helper :issues + helper :custom_fields helper :queries include QueriesHelper helper :sort @@ -42,6 +45,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 @@ -66,6 +80,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? @@ -74,13 +89,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 diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/mail_handler_controller.rb.svn-base --- a/app/controllers/.svn/text-base/mail_handler_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/mail_handler_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,27 +1,27 @@ -# 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 # 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. class MailHandlerController < ActionController::Base before_filter :check_credential - + verify :method => :post, :only => :index, :render => { :nothing => true, :status => 405 } - + # Submits an incoming email to MailHandler def index options = params.dup @@ -32,9 +32,9 @@ render :nothing => true, :status => :unprocessable_entity end end - + private - + def check_credential User.current = nil unless Setting.mail_handler_api_enabled? && params[:key].to_s == Setting.mail_handler_api_key diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/my_controller.rb.svn-base --- a/app/controllers/.svn/text-base/my_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/my_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -19,6 +19,7 @@ before_filter :require_login helper :issues + helper :users helper :custom_fields BLOCKS = { 'issuesassignedtome' => :label_assigned_to_me_issues, @@ -53,21 +54,18 @@ @user = User.current @pref = @user.pref if request.post? - @user.attributes = params[:user] - @user.mail_notification = params[:notification_option] || 'only_my_events' + @user.safe_attributes = params[:user] @user.pref.attributes = params[:pref] @user.pref[:no_self_notified] = (params[:no_self_notified] == '1') if @user.save @user.pref.save - @user.notified_project_ids = (params[:notification_option] == 'selected' ? params[:notified_project_ids] : []) + @user.notified_project_ids = (@user.mail_notification == 'selected' ? params[:notified_project_ids] : []) set_language_if_valid @user.language flash[:notice] = l(:notice_account_updated) redirect_to :action => 'account' return end end - @notification_options = @user.valid_notification_options - @notification_option = @user.mail_notification #? ? 'all' : (@user.notified_projects_ids.empty? ? 'none' : 'selected') end # Manage user's password diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/news_controller.rb.svn-base --- a/app/controllers/.svn/text-base/news_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/news_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -23,18 +23,32 @@ before_filter :find_project, :only => [:new, :create] before_filter :authorize, :except => [:index] before_filter :find_optional_project, :only => :index - accept_key_auth :index + accept_rss_auth :index + accept_api_auth :index + + helper :watchers def index - @news_pages, @newss = paginate :news, - :per_page => 10, - :conditions => Project.allowed_to_condition(User.current, :view_news, :project => @project), - :include => [:author, :project], - :order => "#{News.table_name}.created_on DESC" + case params[:format] + when 'xml', 'json' + @offset, @limit = api_offset_and_limit + else + @limit = 10 + end + + scope = @project ? @project.news.visible : News.visible + + @news_count = scope.count + @news_pages = Paginator.new self, @news_count, @limit, params['page'] + @offset ||= @news_pages.current.offset + @newss = scope.all(:include => [:author, :project], + :order => "#{News.table_name}.created_on DESC", + :offset => @offset, + :limit => @limit) + respond_to do |format| format.html { render :layout => false if request.xhr? } - format.xml { render :xml => @newss.to_xml } - format.json { render :json => @newss.to_json } + format.api format.atom { render_feed(@newss, :title => (@project ? @project.name : Setting.app_title) + ": #{l(:label_news_plural)}") } end end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/previews_controller.rb.svn-base --- a/app/controllers/.svn/text-base/previews_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/previews_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,3 +1,20 @@ +# 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. + class PreviewsController < ApplicationController before_filter :find_project diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/projects_controller.rb.svn-base --- a/app/controllers/.svn/text-base/projects_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/projects_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -24,7 +24,8 @@ before_filter :authorize, :except => [ :index, :list, :new, :create, :copy, :archive, :unarchive, :destroy] before_filter :authorize_global, :only => [:new, :create] before_filter :require_admin, :only => [ :copy, :archive, :unarchive, :destroy ] - accept_key_auth :index + accept_rss_auth :index + accept_api_auth :index, :show, :create, :update, :destroy after_filter :only => [:create, :edit, :update, :archive, :unarchive, :destroy] do |controller| if controller.request.post? @@ -32,9 +33,6 @@ end end - # TODO: convert to PUT only - verify :method => [:post, :put], :only => :update, :render => {:nothing => true, :status => :method_not_allowed } - helper :sort include SortHelper helper :custom_fields @@ -52,8 +50,10 @@ format.html { @projects = Project.visible.find(:all, :order => 'lft') } - format.xml { - @projects = Project.visible.find(:all, :order => 'lft') + format.api { + @offset, @limit = api_offset_and_limit + @project_count = Project.visible.count + @projects = Project.visible.all(:offset => @offset, :limit => @limit, :order => 'lft') } format.atom { projects = Project.visible.find(:all, :order => 'created_on DESC', @@ -67,19 +67,15 @@ @issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position") @trackers = Tracker.all @project = Project.new(params[:project]) - - @project.identifier = Project.next_identifier if Setting.sequential_project_identifiers? - @project.trackers = Tracker.all - @project.is_public = Setting.default_projects_public? - @project.enabled_module_names = Setting.default_projects_modules end + verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed } def create @issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position") @trackers = Tracker.all - @project = Project.new(params[:project]) + @project = Project.new + @project.safe_attributes = params[:project] - @project.enabled_module_names = params[:enabled_modules] if validate_parent_id && @project.save @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id') # Add current user as a project member if he is not admin @@ -93,12 +89,12 @@ flash[:notice] = l(:notice_successful_create) redirect_to :controller => 'projects', :action => 'settings', :id => @project } - format.xml { render :action => 'show', :status => :created, :location => url_for(:controller => 'projects', :action => 'show', :id => @project.id) } + format.api { render :action => 'show', :status => :created, :location => url_for(:controller => 'projects', :action => 'show', :id => @project.id) } end else respond_to do |format| format.html { render :action => 'new' } - format.xml { render :xml => @project.errors, :status => :unprocessable_entity } + format.api { render_validation_errors(@project) } end end @@ -120,18 +116,18 @@ end else Mailer.with_deliveries(params[:notifications] == '1') do - @project = Project.new(params[:project]) - @project.enabled_module_names = params[:enabled_modules] + @project = Project.new + @project.safe_attributes = params[:project] if validate_parent_id && @project.copy(@source_project, :only => params[:only]) @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id') flash[:notice] = l(:notice_successful_create) - redirect_to :controller => 'projects', :action => 'settings' + redirect_to :controller => 'projects', :action => 'settings', :id => @project elsif !@project.new_record? # Project was created # But some objects were not copied due to validation failures # (eg. issues from disabled trackers) # TODO: inform about that - redirect_to :controller => 'projects', :action => 'settings' + redirect_to :controller => 'projects', :action => 'settings', :id => @project end end end @@ -147,7 +143,7 @@ end @users_by_role = @project.users_by_role - @subprojects = @project.children.visible + @subprojects = @project.children.visible.all @news = @project.news.find(:all, :limit => 5, :include => [ :author, :project ], :order => "#{News.table_name}.created_on DESC") @trackers = @project.rolled_up_trackers @@ -160,16 +156,15 @@ :include => [:project, :status, :tracker], :conditions => cond) - TimeEntry.visible_by(User.current) do - @total_hours = TimeEntry.sum(:hours, - :include => :project, - :conditions => cond).to_f + if User.current.allowed_to?(:view_time_entries, @project) + @total_hours = TimeEntry.visible.sum(:hours, :include => :project, :conditions => cond).to_f end + @key = User.current.rss_key respond_to do |format| format.html - format.xml + format.api end end @@ -185,8 +180,10 @@ def edit end + # TODO: convert to PUT only + verify :method => [:post, :put], :only => :update, :render => {:nothing => true, :status => :method_not_allowed } def update - @project.attributes = params[:project] + @project.safe_attributes = params[:project] if validate_parent_id && @project.save @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id') respond_to do |format| @@ -194,7 +191,7 @@ flash[:notice] = l(:notice_successful_update) redirect_to :action => 'settings', :id => @project } - format.xml { head :ok } + format.api { head :ok } end else respond_to do |format| @@ -202,13 +199,14 @@ settings render :action => 'settings' } - format.xml { render :xml => @project.errors, :status => :unprocessable_entity } + format.api { render_validation_errors(@project) } end end end - + + verify :method => :post, :only => :modules, :render => {:nothing => true, :status => :method_not_allowed } def modules - @project.enabled_module_names = params[:enabled_modules] + @project.enabled_module_names = params[:enabled_module_names] flash[:notice] = l(:notice_successful_update) redirect_to :action => 'settings', :id => @project, :tab => 'modules' end @@ -233,11 +231,11 @@ if request.get? # display confirmation view else - if params[:format] == 'xml' || params[:confirm] + if api_request? || params[:confirm] @project_to_destroy.destroy respond_to do |format| format.html { redirect_to :controller => 'admin', :action => 'projects' } - format.xml { head :ok } + format.api { head :ok } end end end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/queries_controller.rb.svn-base --- a/app/controllers/.svn/text-base/queries_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/queries_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -25,11 +25,12 @@ @query.project = params[:query_is_for_all] ? nil : @project @query.user = User.current @query.is_public = false unless User.current.allowed_to?(:manage_public_queries, @project) || User.current.admin? + + @query.add_filters(params[:fields] || params[:f], params[:operators] || params[:op], params[:values] || params[:v]) if params[:fields] || params[:f] + @query.group_by ||= params[:group_by] + @query.column_names = params[:c] if params[:c] @query.column_names = nil if params[:default_columns] - @query.add_filters(params[:fields], params[:operators], params[:values]) if params[:fields] - @query.group_by ||= params[:group_by] - if request.post? && params[:confirm] && @query.save flash[:notice] = l(:notice_successful_create) redirect_to :controller => 'issues', :action => 'index', :project_id => @project, :query_id => @query @@ -41,10 +42,12 @@ def edit if request.post? @query.filters = {} - @query.add_filters(params[:fields], params[:operators], params[:values]) if params[:fields] + @query.add_filters(params[:fields] || params[:f], params[:operators] || params[:op], params[:values] || params[:v]) if params[:fields] || params[:f] @query.attributes = params[:query] @query.project = nil if params[:query_is_for_all] @query.is_public = false unless User.current.allowed_to?(:manage_public_queries, @project) || User.current.admin? + @query.group_by ||= params[:group_by] + @query.column_names = params[:c] if params[:c] @query.column_names = nil if params[:default_columns] if @query.save diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/repositories_controller.rb.svn-base --- a/app/controllers/.svn/text-base/repositories_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/repositories_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ # 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 # 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. @@ -26,33 +26,45 @@ menu_item :repository menu_item :settings, :only => :edit default_search_scope :changesets - + before_filter :find_repository, :except => :edit before_filter :find_project, :only => :edit before_filter :authorize - accept_key_auth :revisions - + accept_rss_auth :revisions + rescue_from Redmine::Scm::Adapters::CommandFailed, :with => :show_error_command_failed - + def edit @repository = @project.repository - if !@repository + if !@repository && !params[:repository_scm].blank? @repository = Repository.factory(params[:repository_scm]) @repository.project = @project if @repository end if request.post? && @repository - @repository.attributes = params[:repository] + p1 = params[:repository] + p = {} + p_extra = {} + p1.each do |k, v| + if k =~ /^extra_/ + p_extra[k] = v + else + p[k] = v + end + end + @repository.attributes = p + @repository.merge_extra_info(p_extra) @repository.save end render(:update) do |page| - page.replace_html "tab-content-repository", :partial => 'projects/settings/repository' + page.replace_html "tab-content-repository", + :partial => 'projects/settings/repository' if @repository && !@project.repository - @project.reload #needed to reload association + @project.reload # needed to reload association page.replace_html "main-menu", render_main_menu(@project) end end end - + def committers @committers = @repository.committers @users = @project.users @@ -67,16 +79,20 @@ redirect_to :action => 'committers', :id => @project end end - + def destroy @repository.destroy - redirect_to :controller => 'projects', :action => 'settings', :id => @project, :tab => 'repository' + 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) + @changeset = @repository.find_changeset_by_name(@rev) if request.xhr? @entries ? render(:partial => 'dir_list_content') : render(:nothing => true) else @@ -88,30 +104,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,24 +138,46 @@ @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.size && @content.size > Setting.file_max_size_displayed.to_i.kilobyte) || + ! is_entry_text_data?(@content, @path) # Force the download - send_data @content, :filename => @path.split('/').last + send_opt = { :filename => filename_for_content_disposition(@path.split('/').last) } + send_type = Redmine::MimeType.of(@path) + send_opt[:type] = send_type.to_s if send_type + send_data @content, send_opt else # Prevent empty lines when displaying a file with Windows style eol + # TODO: UTF-16 + # Is this needs? AttachmentsController reads file simply. @content.gsub!("\r\n", "\n") - end + @changeset = @repository.find_changeset_by_name(@rev) + end end - + + def is_entry_text_data?(ent, path) + # UTF-16 contains "\x00". + # It is very strict that file contains less than 30% of ascii symbols + # in non Western Europe. + return true if Redmine::MimeType.is_type?('text', path) + # Ruby 1.8.6 has a bug of integer divisions. + # http://apidock.com/ruby/v1_8_6_287/String/is_binary_data%3F + return false if ent.is_binary_data? + true + end + private :is_entry_text_data? + 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) raise ChangesetNotFound unless @changeset @@ -149,7 +188,7 @@ rescue ChangesetNotFound show_error_not_found end - + def diff if params[:format] == 'diff' @diff = @repository.diff(@path, @rev, @rev_to) @@ -162,26 +201,30 @@ else @diff_type = params[:type] || User.current.pref[:diff_type] || 'inline' @diff_type = 'inline' unless %w(inline sbs).include?(@diff_type) - + # Save diff type as user preference if User.current.logged? && @diff_type != User.current.pref[:diff_type] User.current.pref[:diff_type] = @diff_type User.current.preference.save end - - @cache_key = "repositories/diff/#{@repository.id}/" + Digest::MD5.hexdigest("#{@path}-#{@rev}-#{@rev_to}-#{@diff_type}") + @cache_key = "repositories/diff/#{@repository.id}/" + + Digest::MD5.hexdigest("#{@path}-#{@rev}-#{@rev_to}-#{@diff_type}-#{current_language}") unless read_fragment(@cache_key) @diff = @repository.diff(@path, @rev, @rev_to) show_error_not_found unless @diff end + + @changeset = @repository.find_changeset_by_name(@rev) + @changeset_to = @rev_to ? @repository.find_changeset_by_name(@rev_to) : nil + @diff_format_revisions = @repository.diff_format_revisions(@changeset, @changeset_to) 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) @@ -195,8 +238,11 @@ render_404 end end - -private + + private + + REV_PARAM_RE = %r{\A[a-f0-9]*\Z}i + def find_repository @project = Project.find(params[:id]) @repository = @project.repository @@ -205,6 +251,12 @@ @path ||= '' @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.to_s.match(REV_PARAM_RE) + if @repository.branches.blank? + raise InvalidRevisionParam + end + end rescue ActiveRecord::RecordNotFound render_404 rescue InvalidRevisionParam @@ -212,29 +264,33 @@ end def show_error_not_found - render_error l(:error_scm_not_found) + render_error :message => l(:error_scm_not_found), :status => 404 end - + # Handler for Redmine::Scm::Adapters::CommandFailed exception def show_error_command_failed(exception) render_error l(:error_scm_command_failed, exception.message) end - + def graph_commits_per_month(repository) @date_to = Date.today @date_from = @date_to << 11 @date_from = Date.civil(@date_from.year, @date_from.month, 1) - commits_by_day = repository.changesets.count(:all, :group => :commit_date, :conditions => ["commit_date BETWEEN ? AND ?", @date_from, @date_to]) + commits_by_day = repository.changesets.count( + :all, :group => :commit_date, + :conditions => ["commit_date BETWEEN ? AND ?", @date_from, @date_to]) commits_by_month = [0] * 12 commits_by_day.each {|c| commits_by_month[c.first.to_date.months_ago] += c.last } - changes_by_day = repository.changes.count(:all, :group => :commit_date, :conditions => ["commit_date BETWEEN ? AND ?", @date_from, @date_to]) + changes_by_day = repository.changes.count( + :all, :group => :commit_date, + :conditions => ["commit_date BETWEEN ? AND ?", @date_from, @date_to]) changes_by_month = [0] * 12 changes_by_day.each {|c| changes_by_month[c.first.to_date.months_ago] += c.last } - + fields = [] 12.times {|m| fields << month_name(((Date.today.month - 1 - m) % 12) + 1)} - + graph = SVG::Graph::Bar.new( :height => 300, :width => 800, @@ -246,7 +302,7 @@ :graph_title => l(:label_commits_per_month), :show_graph_title => true ) - + graph.add_data( :data => commits_by_month[0..11].reverse, :title => l(:label_revision_plural) @@ -256,7 +312,7 @@ :data => changes_by_month[0..11].reverse, :title => l(:label_change_plural) ) - + graph.burn end @@ -266,18 +322,18 @@ changes_by_author = repository.changes.count(:all, :group => :committer) h = changes_by_author.inject({}) {|o, i| o[i.first] = i.last; o} - + fields = commits_by_author.collect {|r| r.first} commits_data = commits_by_author.collect {|r| r.last} changes_data = commits_by_author.collect {|r| h[r.first] || 0} - + fields = fields + [""]*(10 - fields.length) if fields.length<10 commits_data = commits_data + [0]*(10 - commits_data.length) if commits_data.length<10 changes_data = changes_data + [0]*(10 - changes_data.length) if changes_data.length<10 - + # Remove email adress in usernames fields = fields.collect {|c| c.gsub(%r{<.+@.+>}, '') } - + graph = SVG::Graph::BarHorizontal.new( :height => 400, :width => 800, @@ -289,22 +345,18 @@ :graph_title => l(:label_commits_per_author), :show_graph_title => true ) - graph.add_data( :data => commits_data, :title => l(:label_revision_plural) ) - graph.add_data( :data => changes_data, :title => l(:label_change_plural) ) - graph.burn end +end -end - class Date def months_ago(date = Date.today) (date.year - self.year)*12 + (date.month - self.month) diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/roles_controller.rb.svn-base --- a/app/controllers/.svn/text-base/roles_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/roles_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -38,9 +38,10 @@ end flash[:notice] = l(:notice_successful_create) redirect_to :action => 'index' + else + @permissions = @role.setable_permissions + @roles = Role.find :all, :order => 'builtin, position' end - @permissions = @role.setable_permissions - @roles = Role.find :all, :order => 'builtin, position' end def edit @@ -48,8 +49,9 @@ if request.post? and @role.update_attributes(params[:role]) flash[:notice] = l(:notice_successful_update) redirect_to :action => 'index' + else + @permissions = @role.setable_permissions end - @permissions = @role.setable_permissions end def destroy diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/search_controller.rb.svn-base --- a/app/controllers/.svn/text-base/search_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/search_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -24,8 +24,8 @@ def index @question = params[:q] || "" @question.strip! - @all_words = params[:all_words] || (params[:submit] ? false : true) - @titles_only = !params[:titles_only].nil? + @all_words = params[:all_words] ? params[:all_words].present? : true + @titles_only = params[:titles_only] ? params[:titles_only].present? : false projects_to_search = case params[:scope] diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/settings_controller.rb.svn-base --- a/app/controllers/.svn/text-base/settings_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/settings_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -17,7 +17,7 @@ class SettingsController < ApplicationController layout 'admin' - + before_filter :require_admin def index @@ -36,14 +36,16 @@ end flash[:notice] = l(:notice_successful_update) redirect_to :action => 'edit', :tab => params[:tab] - return + else + @options = {} + @options[:user_format] = User::USER_FORMATS.keys.collect {|f| [User.current.name(f), f.to_s] } + @deliveries = ActionMailer::Base.perform_deliveries + + @guessed_host_and_path = request.host_with_port.dup + @guessed_host_and_path << ('/'+ Redmine::Utils.relative_url_root.gsub(%r{^\/}, '')) unless Redmine::Utils.relative_url_root.blank? + + Redmine::Themes.rescan end - @options = {} - @options[:user_format] = User::USER_FORMATS.keys.collect {|f| [User.current.name(f), f.to_s] } - @deliveries = ActionMailer::Base.perform_deliveries - - @guessed_host_and_path = request.host_with_port.dup - @guessed_host_and_path << ('/'+ Redmine::Utils.relative_url_root.gsub(%r{^\/}, '')) unless Redmine::Utils.relative_url_root.blank? end def plugin @@ -52,9 +54,10 @@ Setting["plugin_#{@plugin.id}"] = params[:settings] flash[:notice] = l(:notice_successful_update) redirect_to :action => 'plugin', :id => @plugin.id + else + @partial = @plugin.settings[:partial] + @settings = Setting["plugin_#{@plugin.id}"] end - @partial = @plugin.settings[:partial] - @settings = Setting["plugin_#{@plugin.id}"] rescue Redmine::PluginNotFound render_404 end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/timelog_controller.rb.svn-base --- a/app/controllers/.svn/text-base/timelog_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/timelog_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -18,10 +18,13 @@ class TimelogController < ApplicationController menu_item :issues before_filter :find_project, :only => [:new, :create] - before_filter :find_time_entry, :only => [:edit, :update, :destroy] + before_filter :find_time_entry, :only => [:show, :edit, :update] + before_filter :find_time_entries, :only => [:bulk_edit, :bulk_update, :destroy] before_filter :authorize, :except => [:index] before_filter :find_optional_project, :only => [:index] - + accept_rss_auth :index + accept_api_auth :index, :show, :create, :update, :destroy + helper :sort include SortHelper helper :issues @@ -39,50 +42,64 @@ 'hours' => 'hours' cond = ARCondition.new - if @project.nil? - cond << Project.allowed_to_condition(User.current, :view_time_entries) - elsif @issue.nil? + if @issue + cond << "#{Issue.table_name}.root_id = #{@issue.root_id} AND #{Issue.table_name}.lft >= #{@issue.lft} AND #{Issue.table_name}.rgt <= #{@issue.rgt}" + elsif @project cond << @project.project_condition(Setting.display_subprojects_issues?) - else - cond << "#{Issue.table_name}.root_id = #{@issue.root_id} AND #{Issue.table_name}.lft >= #{@issue.lft} AND #{Issue.table_name}.rgt <= #{@issue.rgt}" end retrieve_date_range cond << ['spent_on BETWEEN ? AND ?', @from, @to] - TimeEntry.visible_by(User.current) do - respond_to do |format| - format.html { - # Paginate results - @entry_count = TimeEntry.count(:include => [:project, :issue], :conditions => cond.conditions) - @entry_pages = Paginator.new self, @entry_count, per_page_option, params['page'] - @entries = TimeEntry.find(:all, - :include => [:project, :activity, :user, {:issue => :tracker}], - :conditions => cond.conditions, - :order => sort_clause, - :limit => @entry_pages.items_per_page, - :offset => @entry_pages.current.offset) - @total_hours = TimeEntry.sum(:hours, :include => [:project, :issue], :conditions => cond.conditions).to_f + respond_to do |format| + format.html { + # Paginate results + @entry_count = TimeEntry.visible.count(:include => [:project, :issue], :conditions => cond.conditions) + @entry_pages = Paginator.new self, @entry_count, per_page_option, params['page'] + @entries = TimeEntry.visible.find(:all, + :include => [:project, :activity, :user, {:issue => :tracker}], + :conditions => cond.conditions, + :order => sort_clause, + :limit => @entry_pages.items_per_page, + :offset => @entry_pages.current.offset) + @total_hours = TimeEntry.visible.sum(:hours, :include => [:project, :issue], :conditions => cond.conditions).to_f - render :layout => !request.xhr? - } - format.atom { - entries = TimeEntry.find(:all, - :include => [:project, :activity, :user, {:issue => :tracker}], - :conditions => cond.conditions, - :order => "#{TimeEntry.table_name}.created_on DESC", - :limit => Setting.feeds_limit.to_i) - render_feed(entries, :title => l(:label_spent_time)) - } - format.csv { - # Export all entries - @entries = TimeEntry.find(:all, - :include => [:project, :activity, :user, {:issue => [:tracker, :assigned_to, :priority]}], - :conditions => cond.conditions, - :order => sort_clause) - send_data(entries_to_csv(@entries), :type => 'text/csv; header=present', :filename => 'timelog.csv') - } - end + render :layout => !request.xhr? + } + format.api { + @entry_count = TimeEntry.visible.count(:include => [:project, :issue], :conditions => cond.conditions) + @offset, @limit = api_offset_and_limit + @entries = TimeEntry.visible.find(:all, + :include => [:project, :activity, :user, {:issue => :tracker}], + :conditions => cond.conditions, + :order => sort_clause, + :limit => @limit, + :offset => @offset) + } + format.atom { + entries = TimeEntry.visible.find(:all, + :include => [:project, :activity, :user, {:issue => :tracker}], + :conditions => cond.conditions, + :order => "#{TimeEntry.table_name}.created_on DESC", + :limit => Setting.feeds_limit.to_i) + render_feed(entries, :title => l(:label_spent_time)) + } + format.csv { + # Export all entries + @entries = TimeEntry.visible.find(:all, + :include => [:project, :activity, :user, {:issue => [:tracker, :assigned_to, :priority]}], + :conditions => cond.conditions, + :order => sort_clause) + send_data(entries_to_csv(@entries), :type => 'text/csv; header=present', :filename => 'timelog.csv') + } + end + end + + def show + respond_to do |format| + # TODO: Implement html response + format.html { render :nothing => true, :status => 406 } + format.api end end @@ -102,10 +119,18 @@ call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry }) if @time_entry.save - flash[:notice] = l(:notice_successful_update) - redirect_back_or_default :action => 'index', :project_id => @time_entry.project + respond_to do |format| + format.html { + flash[:notice] = l(:notice_successful_update) + redirect_back_or_default :action => 'index', :project_id => @time_entry.project + } + format.api { render :action => 'show', :status => :created, :location => time_entry_url(@time_entry) } + end else - render :action => 'edit' + respond_to do |format| + format.html { render :action => 'edit' } + format.api { render_validation_errors(@time_entry) } + end end end @@ -122,23 +147,70 @@ call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry }) if @time_entry.save - flash[:notice] = l(:notice_successful_update) - redirect_back_or_default :action => 'index', :project_id => @time_entry.project + respond_to do |format| + format.html { + flash[:notice] = l(:notice_successful_update) + redirect_back_or_default :action => 'index', :project_id => @time_entry.project + } + format.api { head :ok } + end else - render :action => 'edit' + respond_to do |format| + format.html { render :action => 'edit' } + format.api { render_validation_errors(@time_entry) } + end end end + def bulk_edit + @available_activities = TimeEntryActivity.shared.active + @custom_fields = TimeEntry.first.available_custom_fields + end + + def bulk_update + attributes = parse_params_for_bulk_time_entry_attributes(params) + + unsaved_time_entry_ids = [] + @time_entries.each do |time_entry| + time_entry.reload + time_entry.attributes = attributes + call_hook(:controller_time_entries_bulk_edit_before_save, { :params => params, :time_entry => time_entry }) + unless time_entry.save + # Keep unsaved time_entry ids to display them in flash error + unsaved_time_entry_ids << time_entry.id + end + end + set_flash_from_bulk_time_entry_save(@time_entries, unsaved_time_entry_ids) + redirect_back_or_default({:controller => 'timelog', :action => 'index', :project_id => @projects.first}) + end + verify :method => :delete, :only => :destroy, :render => {:nothing => true, :status => :method_not_allowed } def destroy - if @time_entry.destroy && @time_entry.destroyed? - flash[:notice] = l(:notice_successful_delete) - else - flash[:error] = l(:notice_unable_delete_time_entry) + @time_entries.each do |t| + begin + unless t.destroy && t.destroyed? + respond_to do |format| + format.html { + flash[:error] = l(:notice_unable_delete_time_entry) + redirect_to :back + } + format.api { render_validation_errors(t) } + end + return + end + rescue ::ActionController::RedirectBackError + redirect_to :action => 'index', :project_id => @projects.first + return + end end - redirect_to :back - rescue ::ActionController::RedirectBackError - redirect_to :action => 'index', :project_id => @time_entry.project + + respond_to do |format| + format.html { + flash[:notice] = l(:notice_successful_delete) + redirect_back_or_default(:action => 'index', :project_id => @projects.first) + } + format.api { head :ok } + end end private @@ -153,12 +225,32 @@ render_404 end + def find_time_entries + @time_entries = TimeEntry.find_all_by_id(params[:id] || params[:ids]) + raise ActiveRecord::RecordNotFound if @time_entries.empty? + @projects = @time_entries.collect(&:project).compact.uniq + @project = @projects.first if @projects.size == 1 + rescue ActiveRecord::RecordNotFound + render_404 + end + + def set_flash_from_bulk_time_entry_save(time_entries, unsaved_time_entry_ids) + if unsaved_time_entry_ids.empty? + flash[:notice] = l(:notice_successful_update) unless time_entries.empty? + else + flash[:error] = l(:notice_failed_to_save_time_entries, + :count => unsaved_time_entry_ids.size, + :total => time_entries.size, + :ids => '#' + unsaved_time_entry_ids.join(', #')) + end + end + def find_project - if params[:issue_id] - @issue = Issue.find(params[:issue_id]) + if (issue_id = (params[:issue_id] || params[:time_entry] && params[:time_entry][:issue_id])).present? + @issue = Issue.find(issue_id) @project = @issue.project - elsif params[:project_id] - @project = Project.find(params[:project_id]) + elsif (project_id = (params[:project_id] || params[:time_entry] && params[:time_entry][:project_id])).present? + @project = Project.find(project_id) else render_404 return false @@ -223,4 +315,10 @@ @to ||= (TimeEntry.latest_date_for_project(@project) || Date.today) end + def parse_params_for_bulk_time_entry_attributes(params) + attributes = (params[:time_entry] || {}).reject {|k,v| v.blank?} + attributes.keys.each {|k| attributes[k] = '' if attributes[k] == 'none'} + attributes[:custom_field_values].reject! {|k,v| v.blank?} if attributes[:custom_field_values] + attributes + end end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/users_controller.rb.svn-base --- a/app/controllers/.svn/text-base/users_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/users_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -19,6 +19,8 @@ layout 'admin' before_filter :require_admin, :except => :show + before_filter :find_user, :only => [:show, :edit, :update, :destroy, :edit_membership, :destroy_membership] + accept_api_auth :index, :show, :create, :update, :destroy helper :sort include SortHelper @@ -29,6 +31,16 @@ sort_init 'login', 'asc' sort_update %w(login firstname lastname mail admin created_on last_login_on) + case params[:format] + when 'xml', 'json' + @offset, @limit = api_offset_and_limit + else + @limit = per_page_option + end + + scope = User + scope = scope.in_group(params[:group_id].to_i) if params[:group_id].present? + @status = params[:status] ? params[:status].to_i : 1 c = ARCondition.new(@status == 0 ? "status <> 0" : ["status = ?", @status]) @@ -37,23 +49,27 @@ c << ["LOWER(login) LIKE ? OR LOWER(firstname) LIKE ? OR LOWER(lastname) LIKE ? OR LOWER(mail) LIKE ?", name, name, name, name] end - @user_count = User.count(:conditions => c.conditions) - @user_pages = Paginator.new self, @user_count, - per_page_option, - params['page'] - @users = User.find :all,:order => sort_clause, + @user_count = scope.count(:conditions => c.conditions) + @user_pages = Paginator.new self, @user_count, @limit, params['page'] + @offset ||= @user_pages.current.offset + @users = scope.find :all, + :order => sort_clause, :conditions => c.conditions, - :limit => @user_pages.items_per_page, - :offset => @user_pages.current.offset + :limit => @limit, + :offset => @offset - render :layout => !request.xhr? + respond_to do |format| + format.html { + @groups = Group.all.sort + render :layout => !request.xhr? + } + format.api + end end def show - @user = User.find(params[:id]) - # show projects based on current user visibility - @memberships = @user.memberships.all(:conditions => Project.visible_by(User.current)) + @memberships = @user.memberships.all(:conditions => Project.visible_condition(User.current)) events = Redmine::Activity::Fetcher.new(User.current, :author => @user).events(nil, nil, :limit => 10) @events_by_day = events.group_by(&:event_date) @@ -64,104 +80,119 @@ return end end - render :layout => 'base' - - rescue ActiveRecord::RecordNotFound - render_404 + + respond_to do |format| + format.html { render :layout => 'base' } + format.api + end end def new - @notification_options = User::MAIL_NOTIFICATION_OPTIONS - @notification_option = Setting.default_notification_option - - @user = User.new(:language => Setting.default_language) + @user = User.new(:language => Setting.default_language, :mail_notification => Setting.default_notification_option) @auth_sources = AuthSource.find(:all) end verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed } def create - @notification_options = User::MAIL_NOTIFICATION_OPTIONS - @notification_option = Setting.default_notification_option - - @user = User.new(params[:user]) + @user = User.new(:language => Setting.default_language, :mail_notification => Setting.default_notification_option) + @user.safe_attributes = params[:user] @user.admin = params[:user][:admin] || false @user.login = params[:user][:login] - @user.password, @user.password_confirmation = params[:password], params[:password_confirmation] unless @user.auth_source_id + @user.password, @user.password_confirmation = params[:user][:password], params[:user][:password_confirmation] unless @user.auth_source_id # TODO: Similar to My#account - @user.mail_notification = params[:notification_option] || 'only_my_events' @user.pref.attributes = params[:pref] @user.pref[:no_self_notified] = (params[:no_self_notified] == '1') if @user.save @user.pref.save - @user.notified_project_ids = (params[:notification_option] == 'selected' ? params[:notified_project_ids] : []) + @user.notified_project_ids = (@user.mail_notification == 'selected' ? params[:notified_project_ids] : []) - Mailer.deliver_account_information(@user, params[:password]) if params[:send_information] - flash[:notice] = l(:notice_successful_create) - redirect_to(params[:continue] ? {:controller => 'users', :action => 'new'} : - {:controller => 'users', :action => 'edit', :id => @user}) - return + Mailer.deliver_account_information(@user, params[:user][:password]) if params[:send_information] + + respond_to do |format| + format.html { + flash[:notice] = l(:notice_successful_create) + redirect_to(params[:continue] ? + {:controller => 'users', :action => 'new'} : + {:controller => 'users', :action => 'edit', :id => @user} + ) + } + format.api { render :action => 'show', :status => :created, :location => user_url(@user) } + end else @auth_sources = AuthSource.find(:all) - @notification_option = @user.mail_notification + # Clear password input + @user.password = @user.password_confirmation = nil - render :action => 'new' + respond_to do |format| + format.html { render :action => 'new' } + format.api { render_validation_errors(@user) } + end end end def edit - @user = User.find(params[:id]) - @notification_options = @user.valid_notification_options - @notification_option = @user.mail_notification - @auth_sources = AuthSource.find(:all) @membership ||= Member.new end verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed } def update - @user = User.find(params[:id]) - @notification_options = @user.valid_notification_options - @notification_option = @user.mail_notification - @user.admin = params[:user][:admin] if params[:user][:admin] @user.login = params[:user][:login] if params[:user][:login] - if params[:password].present? && (@user.auth_source_id.nil? || params[:user][:auth_source_id].blank?) - @user.password, @user.password_confirmation = params[:password], params[:password_confirmation] + if params[:user][:password].present? && (@user.auth_source_id.nil? || params[:user][:auth_source_id].blank?) + @user.password, @user.password_confirmation = params[:user][:password], params[:user][:password_confirmation] end - @user.group_ids = params[:user][:group_ids] if params[:user][:group_ids] - @user.attributes = params[:user] + @user.safe_attributes = params[:user] # Was the account actived ? (do it before User#save clears the change) was_activated = (@user.status_change == [User::STATUS_REGISTERED, User::STATUS_ACTIVE]) # TODO: Similar to My#account - @user.mail_notification = params[:notification_option] || 'only_my_events' @user.pref.attributes = params[:pref] @user.pref[:no_self_notified] = (params[:no_self_notified] == '1') if @user.save @user.pref.save - @user.notified_project_ids = (params[:notification_option] == 'selected' ? params[:notified_project_ids] : []) + @user.notified_project_ids = (@user.mail_notification == 'selected' ? params[:notified_project_ids] : []) if was_activated Mailer.deliver_account_activated(@user) - elsif @user.active? && params[:send_information] && !params[:password].blank? && @user.auth_source_id.nil? - Mailer.deliver_account_information(@user, params[:password]) + elsif @user.active? && params[:send_information] && !params[:user][:password].blank? && @user.auth_source_id.nil? + Mailer.deliver_account_information(@user, params[:user][:password]) end - flash[:notice] = l(:notice_successful_update) - redirect_to :back + + respond_to do |format| + format.html { + flash[:notice] = l(:notice_successful_update) + redirect_to :back + } + format.api { head :ok } + end else @auth_sources = AuthSource.find(:all) @membership ||= Member.new + # Clear password input + @user.password = @user.password_confirmation = nil - render :action => :edit + respond_to do |format| + format.html { render :action => :edit } + format.api { render_validation_errors(@user) } + end end rescue ::ActionController::RedirectBackError redirect_to :controller => 'users', :action => 'edit', :id => @user end + verify :method => :delete, :only => :destroy, :render => {:nothing => true, :status => :method_not_allowed } + def destroy + @user.destroy + respond_to do |format| + format.html { redirect_to(users_url) } + format.api { head :ok } + end + end + def edit_membership - @user = User.find(params[:id]) @membership = Member.edit_membership(params[:membership_id], params[:membership], @user) @membership.save if request.post? respond_to do |format| @@ -184,7 +215,6 @@ end def destroy_membership - @user = User.find(params[:id]) @membership = Member.find(params[:membership_id]) if request.post? && @membership.deletable? @membership.destroy @@ -194,4 +224,17 @@ format.js { render(:update) {|page| page.replace_html "tab-content-memberships", :partial => 'users/memberships'} } end end + + private + + def find_user + if params[:id] == 'current' + require_login || return + @user = User.current + else + @user = User.find(params[:id]) + end + rescue ActiveRecord::RecordNotFound + render_404 + end end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/watchers_controller.rb.svn-base --- a/app/controllers/.svn/text-base/watchers_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/watchers_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -76,21 +76,13 @@ def set_watcher(user, watching) @watched.set_watcher(user, watching) - if params[:replace].present? - if params[:replace].is_a? Array - replace_ids = params[:replace] - else - replace_ids = [params[:replace]] - end - else - replace_ids = ['watcher'] - end respond_to do |format| format.html { redirect_to :back } format.js do render(:update) do |page| - replace_ids.each do |replace_id| - page.replace_html replace_id, watcher_link(@watched, user, :replace => replace_ids) + c = watcher_css(@watched) + page.select(".#{c}").each do |item| + page.replace_html item, watcher_link(@watched, user) end end end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/wiki_controller.rb.svn-base --- a/app/controllers/.svn/text-base/wiki_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/wiki_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -34,23 +34,27 @@ class WikiController < ApplicationController default_search_scope :wiki_pages before_filter :find_wiki, :authorize + before_filter :find_existing_or_new_page, :only => [:show, :edit, :update] before_filter :find_existing_page, :only => [:rename, :protect, :history, :diff, :annotate, :add_attachment, :destroy] - - verify :method => :post, :only => [:protect], :redirect_to => { :action => :show } helper :attachments - include AttachmentsHelper + include AttachmentsHelper helper :watchers # List of pages, sorted alphabetically and by parent (hierarchy) def index - load_pages_grouped_by_date_without_content + load_pages_for_index + @pages_by_parent_id = @pages.group_by(&:parent_id) + end + + # List of page, by last update + def date_index + load_pages_for_index + @pages_by_date = @pages.group_by {|p| p.updated_on.to_date} end # display a page (in editing mode if it doesn't exist) def show - page_title = params[:id] - @page = @wiki.find_or_new_page(page_title) if @page.new_record? if User.current.allowed_to?(:edit_wiki_pages, @project) && editable? edit @@ -79,13 +83,12 @@ @editable = editable? render :action => 'show' end - + # edit an existing page or a new one def edit - @page = @wiki.find_or_new_page(params[:id]) return render_403 unless editable? @page.content = WikiContent.new(:page => @page) if @page.new_record? - + @content = @page.content_for_version(params[:version]) @content.text = initial_page_content(@page) if @content.text.blank? # don't keep previous comment @@ -93,18 +96,14 @@ # To prevent StaleObjectError exception when reverting to a previous version @content.version = @page.content.version - rescue ActiveRecord::StaleObjectError - # Optimistic locking exception - flash[:error] = l(:notice_locking_conflict) end verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed } # Creates a new page or updates an existing one def update - @page = @wiki.find_or_new_page(params[:id]) return render_403 unless editable? @page.content = WikiContent.new(:page => @page) if @page.new_record? - + @content = @page.content_for_version(params[:version]) @content.text = initial_page_content(@page) if @content.text.blank? # don't keep previous comment @@ -125,11 +124,14 @@ render_attachment_warning_if_needed(@page) call_hook(:controller_wiki_edit_after_save, { :params => params, :page => @page}) redirect_to :action => 'show', :project_id => @project, :id => @page.title + else + render :action => 'edit' end rescue ActiveRecord::StaleObjectError # Optimistic locking exception - flash[:error] = l(:notice_locking_conflict) + flash.now[:error] = l(:notice_locking_conflict) + render :action => 'edit' end # rename a page @@ -143,7 +145,8 @@ redirect_to :action => 'show', :project_id => @project, :id => @page.title end end - + + verify :method => :post, :only => :protect, :redirect_to => { :action => :show } def protect @page.update_attribute :protected, params[:protected] redirect_to :action => 'show', :project_id => @project, :id => @page.title @@ -153,8 +156,8 @@ def history @version_count = @page.content.versions.count @version_pages = Paginator.new self, @version_count, per_page_option, params['p'] - # don't load text - @versions = @page.content.versions.find :all, + # don't load text + @versions = @page.content.versions.find :all, :select => "id, author_id, comments, updated_on, version", :order => 'version DESC', :limit => @version_pages.items_per_page + 1, @@ -162,12 +165,12 @@ render :layout => false if request.xhr? end - + def diff @diff = @page.diff(params[:version], params[:version_from]) render_404 unless @diff end - + def annotate @annotate = @page.annotate(params[:version]) render_404 unless @annotate @@ -178,7 +181,7 @@ # Children can be either set as root pages, removed or reassigned to another parent page def destroy return render_403 unless editable? - + @descendants_count = @page.descendants.size if @descendants_count > 0 case params[:todo] @@ -214,10 +217,6 @@ end end - def date_index - load_pages_grouped_by_date_without_content - end - def preview page = @wiki.find_page(params[:id]) # page is nil when previewing a new page @@ -238,7 +237,7 @@ end private - + def find_wiki @project = Project.find(params[:project_id]) @wiki = @project.wiki @@ -246,13 +245,27 @@ rescue ActiveRecord::RecordNotFound render_404 end - + + # Finds the requested page or a new page if it doesn't exist + def find_existing_or_new_page + @page = @wiki.find_or_new_page(params[:id]) + if @wiki.page_found_with_redirect? + redirect_to params.update(:id => @page.title) + end + end + # Finds the requested page and returns a 404 error if it doesn't exist def find_existing_page @page = @wiki.find_page(params[:id]) - render_404 if @page.nil? + if @page.nil? + render_404 + return + end + if @wiki.page_found_with_redirect? + redirect_to params.update(:id => @page.title) + end end - + # Returns true if the current user is allowed to edit the page, otherwise false def editable?(page = @page) page.editable_by?(User.current) @@ -265,13 +278,7 @@ helper.instance_method(:initial_page_content).bind(self).call(page) end - # eager load information about last updates, without loading text - def load_pages_grouped_by_date_without_content - @pages = @wiki.pages.find :all, :select => "#{WikiPage.table_name}.*, #{WikiContent.table_name}.updated_on", - :joins => "LEFT JOIN #{WikiContent.table_name} ON #{WikiContent.table_name}.page_id = #{WikiPage.table_name}.id", - :order => 'title' - @pages_by_date = @pages.group_by {|p| p.updated_on.to_date} - @pages_by_parent_id = @pages.group_by(&:parent_id) + def load_pages_for_index + @pages = @wiki.pages.with_updated_on.all(:order => 'title', :include => {:wiki => :project}) end - end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/.svn/text-base/workflows_controller.rb.svn-base --- a/app/controllers/.svn/text-base/workflows_controller.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/.svn/text-base/workflows_controller.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/account_controller.rb --- a/app/controllers/account_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/account_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -216,12 +216,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 = { }) diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/activities_controller.rb --- a/app/controllers/activities_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/activities_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,11 +1,28 @@ +# 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. + class ActivitiesController < ApplicationController menu_item :activity before_filter :find_optional_project - accept_key_auth :index + accept_rss_auth :index def index @days = Setting.activity_days_default.to_i - + if params[:from] begin; @date_to = params[:from].to_date + 1; rescue; end end @@ -14,18 +31,18 @@ @date_from = @date_to - @days @with_subprojects = params[:with_subprojects].nil? ? Setting.display_subprojects_issues? : (params[:with_subprojects] == '1') @author = (params[:user_id].blank? ? nil : User.active.find(params[:user_id])) - - @activity = Redmine::Activity::Fetcher.new(User.current, :project => @project, + + @activity = Redmine::Activity::Fetcher.new(User.current, :project => @project, :with_subprojects => @with_subprojects, :author => @author) @activity.scope_select {|t| !params["show_#{t}"].nil?} @activity.scope = (@author.nil? ? :default : :all) if @activity.scope.empty? events = @activity.events(@date_from, @date_to) - - if events.empty? || stale?(:etag => [events.first, User.current]) + + if events.empty? || stale?(:etag => [@activity.scope, @date_to, @date_from, @with_subprojects, @author, events.first, User.current, current_language]) respond_to do |format| - format.html { + format.html { @events_by_day = events.group_by(&:event_date) render :layout => false if request.xhr? } @@ -40,7 +57,7 @@ } end end - + rescue ActiveRecord::RecordNotFound render_404 end @@ -55,5 +72,4 @@ rescue ActiveRecord::RecordNotFound render_404 end - end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/admin_controller.rb --- a/app/controllers/admin_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/admin_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -17,9 +17,7 @@ class AdminController < ApplicationController layout 'admin' - before_filter :require_admin - helper :sort include SortHelper @@ -30,22 +28,20 @@ def projects @status = params[:status] ? params[:status].to_i : 1 c = ARCondition.new(@status == 0 ? "status <> 0" : ["status = ?", @status]) - unless params[:name].blank? name = "%#{params[:name].strip.downcase}%" c << ["LOWER(identifier) LIKE ? OR LOWER(name) LIKE ?", name, name] end - @projects = Project.find :all, :order => 'lft', :conditions => c.conditions render :action => "projects", :layout => false if request.xhr? end - + def plugins @plugins = Redmine::Plugin.all end - + # Loads the default configuration # (roles, trackers, statuses, workflow, enumerations) def default_configuration @@ -59,7 +55,7 @@ end redirect_to :action => 'index' end - + def test_email raise_delivery_errors = ActionMailer::Base.raise_delivery_errors # Force ActionMailer to raise delivery errors so we can catch it @@ -73,14 +69,16 @@ ActionMailer::Base.raise_delivery_errors = raise_delivery_errors redirect_to :controller => 'settings', :action => 'edit', :tab => 'notifications' end - + def info @db_adapter_name = ActiveRecord::Base.connection.adapter_name @checklist = [ - [:text_default_administrator_account_changed, User.find(:first, :conditions => ["login=? and hashed_password=?", 'admin', User.hash_password('admin')]).nil?], + [:text_default_administrator_account_changed, + User.find(:first, + :conditions => ["login=? and hashed_password=?", 'admin', User.hash_password('admin')]).nil?], [:text_file_repository_writable, File.writable?(Attachment.storage_path)], - [:text_plugin_assets_writable, File.writable?(Engines.public_directory)], - [:text_rmagick_available, Object.const_defined?(:Magick)] + [:text_plugin_assets_writable, File.writable?(Engines.public_directory)], + [:text_rmagick_available, Object.const_defined?(:Magick)] ] - end + end end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/application_controller.rb --- a/app/controllers/application_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/application_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -18,34 +18,37 @@ require 'uri' require 'cgi' +class Unauthorized < Exception; end + class ApplicationController < ActionController::Base include Redmine::I18n layout 'base' - exempt_from_layout 'builder' - + exempt_from_layout 'builder', 'rsb' + # Remove broken cookie after upgrade from 0.8.x (#4292) # See https://rails.lighthouseapp.com/projects/8994/tickets/3360 # TODO: remove it when Rails is fixed before_filter :delete_broken_cookies def delete_broken_cookies if cookies['_redmine_session'] && cookies['_redmine_session'] !~ /--/ - cookies.delete '_redmine_session' + cookies.delete '_redmine_session' redirect_to home_path return false end end - + before_filter :user_setup, :check_if_login_required, :set_localization filter_parameter_logging :password protect_from_forgery - + rescue_from ActionController::InvalidAuthenticityToken, :with => :invalid_authenticity_token - + rescue_from ::Unauthorized, :with => :deny_access + include Redmine::Search::Controller include Redmine::MenuManager::MenuController helper Redmine::MenuManager::MenuHelper - + Redmine::Scm::Base.all.each do |scm| require_dependency "repository/#{scm.underscore}" end @@ -56,7 +59,7 @@ # Find the current user User.current = find_current_user end - + # Returns the current user or nil if no user is logged in # and starts a session if needed def find_current_user @@ -68,13 +71,13 @@ user = User.try_to_autologin(cookies[:autologin]) session[:user_id] = user.id if user user - elsif params[:format] == 'atom' && params[:key] && accept_key_auth_actions.include?(params[:action]) + elsif params[:format] == 'atom' && params[:key] && request.get? && accept_rss_auth? # RSS key authentication does not start a session User.find_by_rss_key(params[:key]) - elsif Setting.rest_api_enabled? && ['xml', 'json'].include?(params[:format]) - if params[:key].present? && accept_key_auth_actions.include?(params[:action]) + elsif Setting.rest_api_enabled? && accept_api_auth? + if (key = api_key_from_request) # Use API key - User.find_by_api_key(params[:key]) + User.find_by_api_key(key) else # HTTP Basic, either username/password or API key/random authenticate_with_http_basic do |username, password| @@ -94,14 +97,14 @@ User.current = User.anonymous end end - + # check if login is globally required to access the application def check_if_login_required # no check needed if user is already logged in return true if User.current.logged? require_login if Setting.login_required? - end - + end + def set_localization lang = nil if User.current.logged? @@ -117,7 +120,7 @@ lang ||= Setting.default_language set_language_if_valid(lang) end - + def require_login if !User.current.logged? # Extract only the basic url parameters on non-GET requests @@ -146,7 +149,7 @@ end true end - + def deny_access User.current.logged? ? render_403 : require_login end @@ -197,7 +200,7 @@ # Finds and sets @project based on @object.project def find_project_from_association render_404 unless @object.present? - + @project = @object.project rescue ActiveRecord::RecordNotFound render_404 @@ -221,12 +224,16 @@ def find_issues @issues = Issue.find_all_by_id(params[:id] || params[:ids]) raise ActiveRecord::RecordNotFound if @issues.empty? + if @issues.detect {|issue| !issue.visible?} + deny_access + return + end @projects = @issues.collect(&:project).compact.uniq @project = @projects.first if @projects.size == 1 rescue ActiveRecord::RecordNotFound render_404 end - + # Check if project is unique before bulk operations def check_project_uniqueness unless @project @@ -235,7 +242,7 @@ return false end end - + # make sure that the user is a member of the project (or admin) if project is private # used as a before_filter for actions that do not require any particular permission on the project def check_project_privacy @@ -263,12 +270,21 @@ uri = URI.parse(back_url) # do not redirect user to another host or to the login or register page if (uri.relative? || (uri.host == request.host)) && !uri.path.match(%r{/(login|account/register)}) + # soundsoftware: if back_url is the home page, + # change it to My Page (#125) + if (uri.path == home_path) + if (uri.path =~ /\/$/) + uri.path = uri.path + "my" + else + uri.path = uri.path + "/my" + end + end # soundsoftware: if login page is https but back_url http, # switch back_url to https to ensure cookie validity (#83) if (uri.scheme == "http") && (URI.parse(request.url).scheme == "https") uri.scheme = "https" - back_url = uri.to_s end + back_url = uri.to_s redirect_to(back_url) return end @@ -277,27 +293,28 @@ end end redirect_to default + false end - + def render_403(options={}) @project = nil render_error({:message => :notice_not_authorized, :status => 403}.merge(options)) return false end - + def render_404(options={}) render_error({:message => :notice_file_not_found, :status => 404}.merge(options)) return false end - + # Renders an error response def render_error(arg) arg = {:message => arg} unless arg.is_a?(Hash) - + @message = arg[:message] @message = l(@message) if @message.is_a?(Symbol) @status = arg[:status] || 500 - + respond_to do |format| format.html { render :template => 'common/error', :layout => use_layout, :status => @status @@ -315,15 +332,15 @@ def use_layout request.xhr? ? false : 'base' end - + def invalid_authenticity_token if api_request? logger.error "Form authenticity token is missing or is invalid. API calls must include a proper Content-type header (text/xml or text/json)." end render_error "Invalid form authenticity token. Perhaps your session has timed out; try reloading the form and entering your details again." end - - def render_feed(items, options={}) + + def render_feed(items, options={}) @items = items || [] @items.sort! {|x,y| y.event_datetime <=> x.event_datetime } @items = @items.slice(0, Setting.feeds_limit.to_i) @@ -331,15 +348,42 @@ render :template => "common/feed.atom.rxml", :layout => false, :content_type => 'application/atom+xml' end + # TODO: remove in Redmine 1.4 def self.accept_key_auth(*actions) - actions = actions.flatten.map(&:to_s) - write_inheritable_attribute('accept_key_auth_actions', actions) + ActiveSupport::Deprecation.warn "ApplicationController.accept_key_auth is deprecated and will be removed in Redmine 1.4. Use accept_rss_auth (or accept_api_auth) instead." + accept_rss_auth(*actions) + end + + # TODO: remove in Redmine 1.4 + def accept_key_auth_actions + ActiveSupport::Deprecation.warn "ApplicationController.accept_key_auth_actions is deprecated and will be removed in Redmine 1.4. Use accept_rss_auth (or accept_api_auth) instead." + self.class.accept_rss_auth end - def accept_key_auth_actions - self.class.read_inheritable_attribute('accept_key_auth_actions') || [] + def self.accept_rss_auth(*actions) + if actions.any? + write_inheritable_attribute('accept_rss_auth_actions', actions) + else + read_inheritable_attribute('accept_rss_auth_actions') || [] + end end + def accept_rss_auth?(action=action_name) + self.class.accept_rss_auth.include?(action.to_sym) + end + + def self.accept_api_auth(*actions) + if actions.any? + write_inheritable_attribute('accept_api_auth_actions', actions) + else + read_inheritable_attribute('accept_api_auth_actions') || [] + end + end + + def accept_api_auth?(action=action_name) + self.class.accept_api_auth.include?(action.to_sym) + end + # Returns the number of objects that should be displayed # on the paginated list def per_page_option @@ -355,6 +399,30 @@ per_page end + # Returns offset and limit used to retrieve objects + # for an API response based on offset, limit and page parameters + def api_offset_and_limit(options=params) + if options[:offset].present? + offset = options[:offset].to_i + if offset < 0 + offset = 0 + end + end + limit = options[:limit].to_i + if limit < 1 + limit = 25 + elsif limit > 100 + limit = 100 + end + if offset.nil? && options[:page].present? + offset = (options[:page].to_i - 1) * limit + offset = 0 if offset < 0 + end + offset ||= 0 + + [offset, limit] + end + # qvalues http header parser # code taken from webrick def parse_qvalues(value) @@ -375,16 +443,25 @@ rescue nil end - + # Returns a string that can be used as filename value in Content-Disposition header def filename_for_content_disposition(name) request.env['HTTP_USER_AGENT'] =~ %r{MSIE} ? ERB::Util.url_encode(name) : name end - + def api_request? %w(xml json).include? params[:format] end + # Returns the API key present in the request + def api_key_from_request + if params[:key].present? + params[:key] + elsif request.headers["X-Redmine-API-Key"].present? + request.headers["X-Redmine-API-Key"] + end + end + # Renders a warning flash if obj has unsaved attachments def render_attachment_warning_if_needed(obj) flash[:warning] = l(:warning_attachments_not_saved, obj.unsaved_attachments.size) if obj.unsaved_attachments.present? @@ -419,5 +496,37 @@ { attribute => error } end.to_json end - + + # Renders API response on validation failure + def render_validation_errors(object) + options = { :status => :unprocessable_entity, :layout => false } + options.merge!(case params[:format] + when 'xml'; { :xml => object.errors } + when 'json'; { :json => {'errors' => object.errors} } # ActiveResource client compliance + else + raise "Unknown format #{params[:format]} in #render_validation_errors" + end + ) + render options + end + + # Overrides #default_template so that the api template + # is used automatically if it exists + def default_template(action_name = self.action_name) + if api_request? + begin + return self.view_paths.find_template(default_template_name(action_name), 'api') + rescue ::ActionView::MissingTemplate + # the api template was not found + # fallback to the default behaviour + end + end + super + end + + # Overrides #pick_layout so that #render with no arguments + # doesn't use the layout for api requests + def pick_layout(*args) + api_request? ? nil : super + end end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/attachments_controller.rb --- a/app/controllers/attachments_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/attachments_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ # Redmine - project management software -# Copyright (C) 2006-2008 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 # 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. @@ -21,9 +21,9 @@ before_filter :file_readable, :read_authorize, :except => :destroy before_filter :delete_authorize, :only => :destroy before_filter :active_authorize, :only => :toggle_active - + verify :method => :post, :only => :destroy - + def show if @attachment.is_diff? @diff = File.new(@attachment.diskfile, "rb").read @@ -35,19 +35,19 @@ download end end - + def download if @attachment.container.is_a?(Version) || @attachment.container.is_a?(Project) @attachment.increment_download end - + # images are sent inline send_file @attachment.diskfile, :filename => filename_for_content_disposition(@attachment.filename), - :type => detect_content_type(@attachment), + :type => detect_content_type(@attachment), :disposition => (@attachment.image? ? 'inline' : 'attachment') - + end - + def destroy # Make sure association callbacks are called @attachment.container.attachments.delete(@attachment) @@ -55,7 +55,7 @@ rescue ::ActionController::RedirectBackError redirect_to :controller => 'projects', :action => 'show', :id => @project end - + def toggle_active @attachment.active = !@attachment.active? @attachment.save! @@ -71,20 +71,20 @@ rescue ActiveRecord::RecordNotFound render_404 end - + # Checks that the file exists and is readable def file_readable @attachment.readable? ? true : render_404 end - + def read_authorize @attachment.visible? ? true : deny_access end - + def delete_authorize @attachment.deletable? ? true : deny_access end - + def active_authorize true end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/auto_completes_controller.rb --- a/app/controllers/auto_completes_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/auto_completes_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -4,12 +4,14 @@ def issues @issues = [] q = params[:q].to_s + query = (params[:scope] == "all" && Setting.cross_project_issue_relations?) ? Issue : @project.issues if q.match(/^\d+$/) - @issues << @project.issues.visible.find_by_id(q.to_i) + @issues << query.visible.find_by_id(q.to_i) end unless q.blank? - @issues += @project.issues.visible.find(:all, :conditions => ["LOWER(#{Issue.table_name}.subject) LIKE ?", "%#{q.downcase}%"], :limit => 10) + @issues += query.visible.find(:all, :conditions => ["LOWER(#{Issue.table_name}.subject) LIKE ?", "%#{q.downcase}%"], :limit => 10) end + @issues.compact! render :layout => false end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/boards_controller.rb --- a/app/controllers/boards_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/boards_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -18,7 +18,7 @@ class BoardsController < ApplicationController default_search_scope :messages before_filter :find_project, :find_board_if_available, :authorize - accept_key_auth :index, :show + accept_rss_auth :index, :show helper :messages include MessagesHelper diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/calendars_controller.rb --- a/app/controllers/calendars_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/calendars_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,3 +1,20 @@ +# 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. + class CalendarsController < ApplicationController menu_item :calendar before_filter :find_optional_project @@ -36,9 +53,4 @@ render :action => 'show', :layout => false if request.xhr? end - - def update - show - end - end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/context_menus_controller.rb --- a/app/controllers/context_menus_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/context_menus_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,10 @@ class ContextMenusController < ApplicationController helper :watchers + helper :issues def issues - @issues = Issue.find_all_by_id(params[:ids], :include => :project) + @issues = Issue.visible.all(:conditions => {:id => params[:ids]}, :include => :project) + if (@issues.size == 1) @issue = @issues.first @allowed_statuses = @issue.new_statuses_allowed_to(User.current) @@ -39,5 +41,18 @@ render :layout => false end - + + def time_entries + @time_entries = TimeEntry.all( + :conditions => {:id => params[:ids]}, :include => :project) + @projects = @time_entries.collect(&:project).compact.uniq + @project = @projects.first if @projects.size == 1 + @activities = TimeEntryActivity.shared.active + @can = {:edit => User.current.allowed_to?(:log_time, @projects), + :update => User.current.allowed_to?(:log_time, @projects), + :delete => User.current.allowed_to?(:log_time, @projects) + } + @back = back_url + render :layout => false + end end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/custom_fields_controller.rb --- a/app/controllers/custom_fields_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/custom_fields_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -38,8 +38,9 @@ flash[:notice] = l(:notice_successful_create) call_hook(:controller_custom_fields_new_after_save, :params => params, :custom_field => @custom_field) redirect_to :action => 'index', :tab => @custom_field.class.name + else + @trackers = Tracker.find(:all, :order => 'position') end - @trackers = Tracker.find(:all, :order => 'position') end def edit @@ -48,8 +49,9 @@ flash[:notice] = l(:notice_successful_update) call_hook(:controller_custom_fields_edit_after_save, :params => params, :custom_field => @custom_field) redirect_to :action => 'index', :tab => @custom_field.class.name + else + @trackers = Tracker.find(:all, :order => 'position') end - @trackers = Tracker.find(:all, :order => 'position') end def destroy diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/enumerations_controller.rb --- a/app/controllers/enumerations_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/enumerations_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -75,10 +75,12 @@ # No associated objects @enumeration.destroy redirect_to :action => 'index' + return elsif params[:reassign_to_id] if reassign_to = @enumeration.class.find_by_id(params[:reassign_to_id]) @enumeration.destroy(reassign_to) redirect_to :action => 'index' + return end end @enumerations = @enumeration.class.find(:all) - [@enumeration] diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/files_controller.rb --- a/app/controllers/files_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/files_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -8,13 +8,13 @@ include SortHelper def index - sort_init 'active', 'asc' + sort_init 'active', 'desc' sort_update 'filename' => "#{Attachment.table_name}.filename", 'active' => "#{Attachment.table_name}.active", 'created_on' => "#{Attachment.table_name}.created_on", 'size' => "#{Attachment.table_name}.filesize", 'downloads' => "#{Attachment.table_name}.downloads" - + @containers = [ Project.find(@project.id, :include => :attachments, :order => sort_clause)] @containers += @project.versions.find(:all, :include => :attachments, :order => sort_clause).sort.reverse render :layout => !request.xhr? diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/gantts_controller.rb --- a/app/controllers/gantts_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/gantts_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,3 +1,20 @@ +# 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. + class GanttsController < ApplicationController menu_item :gantt before_filter :find_optional_project @@ -28,9 +45,4 @@ format.pdf { send_data(@gantt.to_pdf, :type => 'application/pdf', :filename => "#{basename}.pdf") } end end - - def update - show - end - end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/groups_controller.rb --- a/app/controllers/groups_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/groups_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -132,7 +132,7 @@ def autocomplete_for_user @group = Group.find(params[:id]) - @users = User.active.like(params[:q]).find(:all, :limit => 100) - @group.users + @users = User.active.not_in_group(@group).like(params[:q]).all(:limit => 100) render :layout => false end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/issue_categories_controller.rb --- a/app/controllers/issue_categories_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/issue_categories_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -65,10 +65,12 @@ # No issue assigned to this category @category.destroy redirect_to :controller => 'projects', :action => 'settings', :id => @project, :tab => 'categories' + return elsif params[:todo] reassign_to = @project.issue_categories.find_by_id(params[:reassign_to_id]) if params[:todo] == 'reassign' @category.destroy(reassign_to) redirect_to :controller => 'projects', :action => 'settings', :id => @project, :tab => 'categories' + return end @categories = @project.issue_categories - [@category] end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/issue_moves_controller.rb --- a/app/controllers/issue_moves_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/issue_moves_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -2,7 +2,7 @@ default_search_scope :issues before_filter :find_issues, :check_project_uniqueness before_filter :authorize - + def new prepare_for_issue_move render :layout => false if request.xhr? @@ -48,7 +48,7 @@ @copy = params[:copy_options] && params[:copy_options][:copy] @allowed_projects = Issue.allowed_target_projects_on_move @target_project = @allowed_projects.detect {|p| p.id.to_s == params[:new_project_id]} if params[:new_project_id] - @target_project ||= @project + @target_project ||= @project @trackers = @target_project.trackers @available_statuses = Workflow.available_statuses(@project) @notes = params[:notes] diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/issue_relations_controller.rb --- a/app/controllers/issue_relations_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/issue_relations_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,4 +1,4 @@ -# redMine - project management software +# Redmine - project management software # Copyright (C) 2006-2007 Jean-Philippe Lang # # This program is free software; you can redistribute it and/or @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/issues_controller.rb --- a/app/controllers/issues_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/issues_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ # Redmine - project management software -# Copyright (C) 2006-2008 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 # 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. @@ -18,7 +18,7 @@ class IssuesController < ApplicationController menu_item :new_issue, :only => [:new, :create] default_search_scope :issues - + before_filter :find_issue, :only => [:show, :edit, :update] before_filter :find_issues, :only => [:bulk_edit, :bulk_update, :move, :perform_move, :destroy] before_filter :check_project_uniqueness, :only => [:move, :perform_move] @@ -27,13 +27,14 @@ before_filter :find_optional_project, :only => [:index] before_filter :check_for_default_issue_status, :only => [:new, :create] before_filter :build_new_issue_from_params, :only => [:new, :create] - accept_key_auth :index, :show, :create, :update, :destroy + accept_rss_auth :index, :show + accept_api_auth :index, :show, :create, :update, :destroy rescue_from Query::StatementInvalid, :with => :query_statement_invalid - + helper :journals helper :projects - include ProjectsHelper + include ProjectsHelper helper :custom_fields include CustomFieldsHelper helper :issue_relations @@ -44,6 +45,8 @@ include AttachmentsHelper helper :queries include QueriesHelper + helper :repositories + include RepositoriesHelper helper :sort include SortHelper include IssuesHelper @@ -58,34 +61,36 @@ verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed } verify :method => :post, :only => :bulk_update, :render => {:nothing => true, :status => :method_not_allowed } verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed } - + def index retrieve_query sort_init(@query.sort_criteria.empty? ? [['id', 'desc']] : @query.sort_criteria) sort_update(@query.sortable_columns) - + if @query.valid? - limit = case params[:format] + case params[:format] when 'csv', 'pdf' - Setting.issues_export_limit.to_i + @limit = Setting.issues_export_limit.to_i when 'atom' - Setting.feeds_limit.to_i + @limit = Setting.feeds_limit.to_i + when 'xml', 'json' + @offset, @limit = api_offset_and_limit else - per_page_option + @limit = per_page_option end - + @issue_count = @query.issue_count - @issue_pages = Paginator.new self, @issue_count, limit, params['page'] + @issue_pages = Paginator.new self, @issue_count, @limit, params['page'] + @offset ||= @issue_pages.current.offset @issues = @query.issues(:include => [:assigned_to, :tracker, :priority, :category, :fixed_version], - :order => sort_clause, - :offset => @issue_pages.current.offset, - :limit => limit) + :order => sort_clause, + :offset => @offset, + :limit => @limit) @issue_count_by_group = @query.issue_count_by_group - + respond_to do |format| format.html { render :template => 'issues/index.rhtml', :layout => !request.xhr? } - format.xml { render :layout => false } - format.json { render :text => @issues.to_json, :layout => false } + format.api format.atom { render_feed(@issues, :title => "#{@project || Setting.app_title}: #{l(:label_issue_plural)}") } format.csv { send_data(issues_to_csv(@issues, @project), :type => 'text/csv; header=present', :filename => 'export.csv') } format.pdf { send_data(issues_to_pdf(@issues, @project, @query), :type => 'application/pdf', :filename => 'export.pdf') } @@ -97,21 +102,25 @@ rescue ActiveRecord::RecordNotFound render_404 end - + def show @journals = @issue.journals.find(:all, :include => [:user, :details], :order => "#{Journal.table_name}.created_on ASC") @journals.each_with_index {|j,i| j.indice = i+1} @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? + + if User.current.allowed_to?(:view_changesets, @project) + @changesets = @issue.changesets.visible.all + @changesets.reverse! if User.current.wants_comments_in_reverse_order? + end + + @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 - @time_entry = TimeEntry.new + @time_entry = TimeEntry.new(:issue => @issue, :project => @issue.project) respond_to do |format| format.html { render :template => 'issues/show.rhtml' } - format.xml { render :layout => false } - format.json { render :text => @issue.to_json, :layout => false } + format.api format.atom { render :template => 'journals/index', :layout => false, :content_type => 'application/atom+xml' } format.pdf { send_data(issue_to_pdf(@issue), :type => 'application/pdf', :filename => "#{@project.identifier}-#{@issue.id}.pdf") } end @@ -147,19 +156,17 @@ redirect_to(params[:continue] ? { :action => 'new', :project_id => @project, :issue => {:tracker_id => @issue.tracker, :parent_issue_id => @issue.parent_issue_id}.reject {|k,v| v.nil?} } : { :action => 'show', :id => @issue }) } - format.xml { render :action => 'show', :status => :created, :location => url_for(:controller => 'issues', :action => 'show', :id => @issue) } - format.json { render :text => @issue.to_json, :status => :created, :location => url_for(:controller => 'issues', :action => 'show'), :layout => false } + format.api { render :action => 'show', :status => :created, :location => issue_url(@issue) } end return else respond_to do |format| format.html { render :action => 'new' } - format.xml { render(:xml => @issue.errors, :status => :unprocessable_entity); return } - format.json { render :text => object_errors_to_json(@issue), :status => :unprocessable_entity, :layout => false } + format.api { render_validation_errors(@issue) } end end end - + def edit update_issue_from_params @@ -180,8 +187,7 @@ respond_to do |format| format.html { redirect_back_or_default({:action => 'show', :id => @issue}) } - format.xml { head :ok } - format.json { head :ok } + format.api { head :ok } end else render_attachment_warning_if_needed(@issue) @@ -190,8 +196,7 @@ respond_to do |format| format.html { render :action => 'edit' } - format.xml { render :xml => @issue.errors, :status => :unprocessable_entity } - format.json { render :text => object_errors_to_json(@issue), :status => :unprocessable_entity, :layout => false } + format.api { render_validation_errors(@issue) } end end end @@ -223,7 +228,7 @@ set_flash_from_bulk_issue_save(@issues, unsaved_issue_ids) redirect_back_or_default({:controller => 'issues', :action => 'index', :project_id => @project}) end - + def destroy @hours = TimeEntry.sum(:hours, :conditions => ['issue_id IN (?)', @issues]).to_f if @hours > 0 @@ -241,35 +246,44 @@ TimeEntry.update_all("issue_id = #{reassign_to.id}", ['issue_id IN (?)', @issues]) end else - unless params[:format] == 'xml' || params[:format] == 'json' - # display the destroy form if it's a user request - return - end + # display the destroy form if it's a user request + return unless api_request? end end - @issues.each(&:destroy) + @issues.each do |issue| + begin + issue.reload.destroy + rescue ::ActiveRecord::RecordNotFound # raised by #reload if issue no longer exists + # nothing to do, issue was already deleted (eg. by a parent) + end + end respond_to do |format| format.html { redirect_back_or_default(:action => 'index', :project_id => @project) } - format.xml { head :ok } - format.json { head :ok } + format.api { head :ok } end end private def find_issue + # Issue.visible.find(...) can not be used to redirect user to the login form + # if the issue actually exists but requires authentication @issue = Issue.find(params[:id], :include => [:project, :tracker, :status, :author, :priority, :category]) + unless @issue.visible? + deny_access + return + end @project = @issue.project rescue ActiveRecord::RecordNotFound render_404 end - + def find_project project_id = (params[:issue] && params[:issue][:project_id]) || params[:project_id] @project = Project.find(project_id) rescue ActiveRecord::RecordNotFound render_404 end - + # Used by #edit and #update to set some common instance variables # from the params # TODO: Refactor, not everything in here is needed by #edit @@ -277,9 +291,9 @@ @allowed_statuses = @issue.new_statuses_allowed_to(User.current) @priorities = IssuePriority.all @edit_allowed = User.current.allowed_to?(:edit_issues, @project) - @time_entry = TimeEntry.new + @time_entry = TimeEntry.new(:issue => @issue, :project => @issue.project) @time_entry.attributes = params[:time_entry] - + @notes = params[:notes] || (params[:issue].present? ? params[:issue][:notes] : nil) @issue.init_journal(User.current, @notes) @issue.safe_attributes = params[:issue] @@ -288,7 +302,7 @@ # is in this issues watcher's list # if not, adds it. - if params[:issue][:assigned_to_id] && !params[:issue][:assigned_to_id].empty?: + if params[:issue] && params[:issue][:assigned_to_id] && !params[:issue][:assigned_to_id].empty?: unless @issue.watched_by?(User.find(params[:issue][:assigned_to_id])): @issue.add_watcher(User.find(params[:issue][:assigned_to_id])) end @@ -307,8 +321,9 @@ else @issue = @project.issues.visible.find(params[:id]) end - + @issue.project = @project + @issue.author = User.current # Tracker must be set before custom field values @issue.tracker ||= @project.trackers.find((params[:issue] && params[:issue][:tracker_id]) || params[:tracker_id] || :first) if @issue.tracker.nil? @@ -322,7 +337,6 @@ @issue.watcher_user_ids = params[:issue]['watcher_user_ids'] end end - @issue.author = User.current @priorities = IssuePriority.all @allowed_statuses = @issue.new_statuses_allowed_to(User.current, true) end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/journals_controller.rb --- a/app/controllers/journals_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/journals_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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,15 @@ # 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] - accept_key_auth :index - + before_filter :authorize, :only => [:new, :edit, :diff] + accept_rss_auth :index + menu_item :issues + helper :issues + helper :custom_fields helper :queries include QueriesHelper helper :sort @@ -42,6 +45,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 @@ -66,6 +80,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? @@ -74,13 +89,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 diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/mail_handler_controller.rb --- a/app/controllers/mail_handler_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/mail_handler_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,27 +1,27 @@ -# 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 # 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. class MailHandlerController < ActionController::Base before_filter :check_credential - + verify :method => :post, :only => :index, :render => { :nothing => true, :status => 405 } - + # Submits an incoming email to MailHandler def index options = params.dup @@ -32,9 +32,9 @@ render :nothing => true, :status => :unprocessable_entity end end - + private - + def check_credential User.current = nil unless Setting.mail_handler_api_enabled? && params[:key].to_s == Setting.mail_handler_api_key diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/members_controller.rb --- a/app/controllers/members_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/members_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -17,11 +17,22 @@ class MembersController < ApplicationController model_object Member - before_filter :find_model_object, :except => [:new, :autocomplete_for_member] - before_filter :find_project_from_association, :except => [:new, :autocomplete_for_member] + menu_item :members + before_filter :find_model_object, :except => [:index, :new, :autocomplete_for_member] + before_filter :find_project_from_association, :except => [:new, :index, :autocomplete_for_member] before_filter :find_project, :only => [:new, :autocomplete_for_member] + before_filter :find_project_by_project_id, :only => [:index] before_filter :authorize + def index + logger.debug('in index') + respond_to do |format| + format.html { + render :layout => false if request.xhr? + } + end + end + def new members = [] if params[:member] && request.post? @@ -50,11 +61,11 @@ respond_to do |format| if members.present? && members.all? {|m| m.valid? } - format.html { redirect_to :controller => 'projects', :action => 'settings', :tab => 'members', :id => @project } + format.html { redirect_to :action => 'index', :project_id => @project } format.js { render(:update) {|page| - page.replace_html "tab-content-members", :partial => 'projects/settings/members' + page.replace_html "memberlist", :partial => 'editlist' page << 'hideOnLoad()' members.each {|member| page.visual_effect(:highlight, "member-#{member.id}") } } @@ -78,10 +89,10 @@ def edit if request.post? and @member.update_attributes(params[:member]) respond_to do |format| - format.html { redirect_to :controller => 'projects', :action => 'settings', :tab => 'members', :id => @project } + format.html { redirect_to :action => 'index', :project_id => @project } format.js { render(:update) {|page| - page.replace_html "tab-content-members", :partial => 'projects/settings/members' + page.replace_html "memberlist", :partial => 'editlist' page << 'hideOnLoad()' page.visual_effect(:highlight, "member-#{@member.id}") } @@ -95,9 +106,9 @@ @member.destroy end respond_to do |format| - format.html { redirect_to :controller => 'projects', :action => 'settings', :tab => 'members', :id => @project } + format.html { redirect_to :action => 'index', :project_id => @project } format.js { render(:update) {|page| - page.replace_html "tab-content-members", :partial => 'projects/settings/members' + page.replace_html "memberlist", :partial => 'editlist' page << 'hideOnLoad()' } } diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/my_controller.rb --- a/app/controllers/my_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/my_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -19,19 +19,22 @@ before_filter :require_login helper :issues + helper :users helper :custom_fields BLOCKS = { 'issuesassignedtome' => :label_assigned_to_me_issues, 'issuesreportedbyme' => :label_reported_issues, 'issueswatched' => :label_watched_issues, + 'activitymyprojects' => :label_activity_my_recent, 'news' => :label_news_latest, + 'tipoftheday' => :label_tipoftheday, 'calendar' => :label_calendar, 'documents' => :label_document_plural, 'timelog' => :label_spent_time }.merge(Redmine::Views::MyPage::Block.additional_blocks).freeze - DEFAULT_LAYOUT = { 'left' => ['issuesassignedtome'], - 'right' => ['issuesreportedbyme'] + DEFAULT_LAYOUT = { 'left' => ['tipoftheday', 'activitymyprojects'], + 'right' => ['issueswatched'] }.freeze verify :xhr => true, @@ -62,8 +65,7 @@ end if request.post? - @user.attributes = params[:user] - @user.mail_notification = params[:notification_option] || 'only_my_events' + @user.safe_attributes = params[:user] @user.pref.attributes = params[:pref] @user.pref[:no_self_notified] = (params[:no_self_notified] == '1') @@ -88,15 +90,13 @@ if @user.save @user.pref.save - @user.notified_project_ids = (params[:notification_option] == 'selected' ? params[:notified_project_ids] : []) + @user.notified_project_ids = (@user.mail_notification == 'selected' ? params[:notified_project_ids] : []) set_language_if_valid @user.language flash[:notice] = l(:notice_account_updated) redirect_to :action => 'account' return end end - @notification_options = @user.valid_notification_options - @notification_option = @user.mail_notification #? ? 'all' : (@user.notified_projects_ids.empty? ? 'none' : 'selected') end # Manage user's password diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/news_controller.rb --- a/app/controllers/news_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/news_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -23,18 +23,32 @@ before_filter :find_project, :only => [:new, :create] before_filter :authorize, :except => [:index] before_filter :find_optional_project, :only => :index - accept_key_auth :index + accept_rss_auth :index + accept_api_auth :index + + helper :watchers def index - @news_pages, @newss = paginate :news, - :per_page => 10, - :conditions => Project.allowed_to_condition(User.current, :view_news, :project => @project), - :include => [:author, :project], - :order => "#{News.table_name}.created_on DESC" + case params[:format] + when 'xml', 'json' + @offset, @limit = api_offset_and_limit + else + @limit = 10 + end + + scope = @project ? @project.news.visible : News.visible + + @news_count = scope.count + @news_pages = Paginator.new self, @news_count, @limit, params['page'] + @offset ||= @news_pages.current.offset + @newss = scope.all(:include => [:author, :project], + :order => "#{News.table_name}.created_on DESC", + :offset => @offset, + :limit => @limit) + respond_to do |format| format.html { render :layout => false if request.xhr? } - format.xml { render :xml => @newss.to_xml } - format.json { render :json => @newss.to_json } + format.api format.atom { render_feed(@newss, :title => (@project ? @project.name : Setting.app_title) + ": #{l(:label_news_plural)}") } end end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/previews_controller.rb --- a/app/controllers/previews_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/previews_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,3 +1,20 @@ +# 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. + class PreviewsController < ApplicationController before_filter :find_project diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/projects_controller.rb --- a/app/controllers/projects_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/projects_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -24,7 +24,8 @@ before_filter :authorize, :except => [ :index, :list, :new, :create, :copy, :archive, :unarchive, :destroy] before_filter :authorize_global, :only => [:new, :create] before_filter :require_admin, :only => [ :copy, :archive, :unarchive, :destroy ] - accept_key_auth :index + accept_rss_auth :index + accept_api_auth :index, :show, :create, :update, :destroy after_filter :only => [:create, :edit, :update, :archive, :unarchive, :destroy] do |controller| if controller.request.post? @@ -32,9 +33,6 @@ end end - # TODO: convert to PUT only - verify :method => [:post, :put], :only => :update, :render => {:nothing => true, :status => :method_not_allowed } - helper :sort include SortHelper helper :custom_fields @@ -59,12 +57,16 @@ @offset ||= @project_pages.current.offset @projects = Project.visible_roots.all(:offset => @offset, :limit => @limit, :order => sort_clause) if User.current.logged? - @user_projects = User.current.projects.sort_by(&:name) + # seems sort_by gives us case-sensitive ordering, which we don't want +# @user_projects = User.current.projects.sort_by(&:name) + @user_projects = User.current.projects.all(:order => :name) end render :template => 'projects/index.rhtml', :layout => !request.xhr? } - format.xml { - @projects = Project.visible.find(:all, :order => 'lft') + format.api { + @offset, @limit = api_offset_and_limit + @project_count = Project.visible.count + @projects = Project.visible.all(:offset => @offset, :limit => @limit, :order => 'lft') } format.atom { projects = Project.visible.find(:all, :order => 'created_on DESC', @@ -78,19 +80,15 @@ @issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position") @trackers = Tracker.all @project = Project.new(params[:project]) - - @project.identifier = Project.next_identifier if Setting.sequential_project_identifiers? - @project.trackers = Tracker.all - @project.is_public = Setting.default_projects_public? - @project.enabled_module_names = Setting.default_projects_modules end + verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed } def create @issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position") @trackers = Tracker.all - @project = Project.new(params[:project]) + @project = Project.new + @project.safe_attributes = params[:project] - @project.enabled_module_names = params[:enabled_modules] if validate_parent_id && @project.save @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id') # Add current user as a project member if he is not admin @@ -104,12 +102,12 @@ flash[:notice] = l(:notice_successful_create) redirect_to :controller => 'projects', :action => 'settings', :id => @project } - format.xml { render :action => 'show', :status => :created, :location => url_for(:controller => 'projects', :action => 'show', :id => @project.id) } + format.api { render :action => 'show', :status => :created, :location => url_for(:controller => 'projects', :action => 'show', :id => @project.id) } end else respond_to do |format| format.html { render :action => 'new' } - format.xml { render :xml => @project.errors, :status => :unprocessable_entity } + format.api { render_validation_errors(@project) } end end @@ -131,18 +129,18 @@ end else Mailer.with_deliveries(params[:notifications] == '1') do - @project = Project.new(params[:project]) - @project.enabled_module_names = params[:enabled_modules] + @project = Project.new + @project.safe_attributes = params[:project] if validate_parent_id && @project.copy(@source_project, :only => params[:only]) @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id') flash[:notice] = l(:notice_successful_create) - redirect_to :controller => 'projects', :action => 'settings' + redirect_to :controller => 'projects', :action => 'settings', :id => @project elsif !@project.new_record? # Project was created # But some objects were not copied due to validation failures # (eg. issues from disabled trackers) # TODO: inform about that - redirect_to :controller => 'projects', :action => 'settings' + redirect_to :controller => 'projects', :action => 'settings', :id => @project end end end @@ -158,7 +156,7 @@ end @users_by_role = @project.users_by_role - @subprojects = @project.children.visible + @subprojects = @project.children.visible.all @news = @project.news.find(:all, :limit => 5, :include => [ :author, :project ], :order => "#{News.table_name}.created_on DESC") @trackers = @project.rolled_up_trackers @@ -171,16 +169,15 @@ :include => [:project, :status, :tracker], :conditions => cond) - TimeEntry.visible_by(User.current) do - @total_hours = TimeEntry.sum(:hours, - :include => :project, - :conditions => cond).to_f + if User.current.allowed_to?(:view_time_entries, @project) + @total_hours = TimeEntry.visible.sum(:hours, :include => :project, :conditions => cond).to_f end + @key = User.current.rss_key respond_to do |format| format.html - format.xml + format.api end end @@ -196,8 +193,10 @@ def edit end + # TODO: convert to PUT only + verify :method => [:post, :put], :only => :update, :render => {:nothing => true, :status => :method_not_allowed } def update - @project.attributes = params[:project] + @project.safe_attributes = params[:project] if validate_parent_id && @project.save @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id') respond_to do |format| @@ -205,7 +204,7 @@ flash[:notice] = l(:notice_successful_update) redirect_to :action => 'settings', :id => @project } - format.xml { head :ok } + format.api { head :ok } end else respond_to do |format| @@ -213,13 +212,23 @@ settings render :action => 'settings' } - format.xml { render :xml => @project.errors, :status => :unprocessable_entity } + format.api { render_validation_errors(@project) } end end end + + verify :method => :post, :only => :modules, :render => {:nothing => true, :status => :method_not_allowed } + def overview + @project.has_welcome_page = params[:has_welcome_page] + if @project.save + flash[:notice] = l(:notice_successful_update) + end + redirect_to :action => 'settings', :id => @project, :tab => 'overview' + end + def modules - @project.enabled_module_names = params[:enabled_modules] + @project.enabled_module_names = params[:enabled_module_names] flash[:notice] = l(:notice_successful_update) redirect_to :action => 'settings', :id => @project, :tab => 'modules' end @@ -244,11 +253,11 @@ if request.get? # display confirmation view else - if params[:format] == 'xml' || params[:confirm] + if api_request? || params[:confirm] @project_to_destroy.destroy respond_to do |format| format.html { redirect_to :controller => 'admin', :action => 'projects' } - format.xml { head :ok } + format.api { head :ok } end end end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/queries_controller.rb --- a/app/controllers/queries_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/queries_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -25,11 +25,12 @@ @query.project = params[:query_is_for_all] ? nil : @project @query.user = User.current @query.is_public = false unless User.current.allowed_to?(:manage_public_queries, @project) || User.current.admin? + + @query.add_filters(params[:fields] || params[:f], params[:operators] || params[:op], params[:values] || params[:v]) if params[:fields] || params[:f] + @query.group_by ||= params[:group_by] + @query.column_names = params[:c] if params[:c] @query.column_names = nil if params[:default_columns] - @query.add_filters(params[:fields], params[:operators], params[:values]) if params[:fields] - @query.group_by ||= params[:group_by] - if request.post? && params[:confirm] && @query.save flash[:notice] = l(:notice_successful_create) redirect_to :controller => 'issues', :action => 'index', :project_id => @project, :query_id => @query @@ -41,10 +42,12 @@ def edit if request.post? @query.filters = {} - @query.add_filters(params[:fields], params[:operators], params[:values]) if params[:fields] + @query.add_filters(params[:fields] || params[:f], params[:operators] || params[:op], params[:values] || params[:v]) if params[:fields] || params[:f] @query.attributes = params[:query] @query.project = nil if params[:query_is_for_all] @query.is_public = false unless User.current.allowed_to?(:manage_public_queries, @project) || User.current.admin? + @query.group_by ||= params[:group_by] + @query.column_names = params[:c] if params[:c] @query.column_names = nil if params[:default_columns] if @query.save diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/repositories_controller.rb --- a/app/controllers/repositories_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/repositories_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ # 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 # 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. @@ -26,14 +26,14 @@ menu_item :repository menu_item :settings, :only => :edit default_search_scope :changesets - + before_filter :find_repository, :except => :edit before_filter :find_project, :only => :edit before_filter :authorize - accept_key_auth :revisions - + accept_rss_auth :revisions + rescue_from Redmine::Scm::Adapters::CommandFailed, :with => :show_error_command_failed - + def edit @repository = @project.repository @@ -45,19 +45,31 @@ @repository.project = @project if @repository end if request.post? && @repository - @repository.attributes = params[:repository] + p1 = params[:repository] + p = {} + p_extra = {} + p1.each do |k, v| + if k =~ /^extra_/ + p_extra[k] = v + else + p[k] = v + end + end + @repository.attributes = p + @repository.merge_extra_info(p_extra) @repository.save end render(:update) do |page| - page.replace_html "tab-content-repository", :partial => 'projects/settings/repository' + page.replace_html "tab-content-repository", + :partial => 'projects/settings/repository' if @repository && !@project.repository - @project.reload #needed to reload association + @project.reload # needed to reload association page.replace_html "main-menu", render_main_menu(@project) end end end - + def committers @committers = @repository.committers @users = @project.users @@ -72,16 +84,20 @@ redirect_to :action => 'committers', :id => @project end end - + def destroy @repository.destroy - redirect_to :controller => 'projects', :action => 'settings', :id => @project, :tab => 'repository' + 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) + @changeset = @repository.find_changeset_by_name(@rev) if request.xhr? @entries ? render(:partial => 'dir_list_content') : render(:nothing => true) else @@ -93,30 +109,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 @@ -126,24 +143,46 @@ @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.size && @content.size > Setting.file_max_size_displayed.to_i.kilobyte) || + ! is_entry_text_data?(@content, @path) # Force the download - send_data @content, :filename => @path.split('/').last + send_opt = { :filename => filename_for_content_disposition(@path.split('/').last) } + send_type = Redmine::MimeType.of(@path) + send_opt[:type] = send_type.to_s if send_type + send_data @content, send_opt else # Prevent empty lines when displaying a file with Windows style eol + # TODO: UTF-16 + # Is this needs? AttachmentsController reads file simply. @content.gsub!("\r\n", "\n") - end + @changeset = @repository.find_changeset_by_name(@rev) + end end - + + def is_entry_text_data?(ent, path) + # UTF-16 contains "\x00". + # It is very strict that file contains less than 30% of ascii symbols + # in non Western Europe. + return true if Redmine::MimeType.is_type?('text', path) + # Ruby 1.8.6 has a bug of integer divisions. + # http://apidock.com/ruby/v1_8_6_287/String/is_binary_data%3F + return false if ent.is_binary_data? + true + end + private :is_entry_text_data? + 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) raise ChangesetNotFound unless @changeset @@ -154,7 +193,7 @@ rescue ChangesetNotFound show_error_not_found end - + def diff if params[:format] == 'diff' @diff = @repository.diff(@path, @rev, @rev_to) @@ -167,26 +206,30 @@ else @diff_type = params[:type] || User.current.pref[:diff_type] || 'inline' @diff_type = 'inline' unless %w(inline sbs).include?(@diff_type) - + # Save diff type as user preference if User.current.logged? && @diff_type != User.current.pref[:diff_type] User.current.pref[:diff_type] = @diff_type User.current.preference.save end - - @cache_key = "repositories/diff/#{@repository.id}/" + Digest::MD5.hexdigest("#{@path}-#{@rev}-#{@rev_to}-#{@diff_type}") + @cache_key = "repositories/diff/#{@repository.id}/" + + Digest::MD5.hexdigest("#{@path}-#{@rev}-#{@rev_to}-#{@diff_type}-#{current_language}") unless read_fragment(@cache_key) @diff = @repository.diff(@path, @rev, @rev_to) show_error_not_found unless @diff end + + @changeset = @repository.find_changeset_by_name(@rev) + @changeset_to = @rev_to ? @repository.find_changeset_by_name(@rev_to) : nil + @diff_format_revisions = @repository.diff_format_revisions(@changeset, @changeset_to) 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) @@ -200,8 +243,11 @@ render_404 end end - -private + + private + + REV_PARAM_RE = %r{\A[a-f0-9]*\Z}i + def find_repository @project = Project.find(params[:id]) @repository = @project.repository @@ -210,6 +256,12 @@ @path ||= '' @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.to_s.match(REV_PARAM_RE) + if @repository.branches.blank? + raise InvalidRevisionParam + end + end rescue ActiveRecord::RecordNotFound render_404 rescue InvalidRevisionParam @@ -217,29 +269,33 @@ end def show_error_not_found - render_error l(:error_scm_not_found) + render_error :message => l(:error_scm_not_found), :status => 404 end - + # Handler for Redmine::Scm::Adapters::CommandFailed exception def show_error_command_failed(exception) render_error l(:error_scm_command_failed, exception.message) end - + def graph_commits_per_month(repository) @date_to = Date.today @date_from = @date_to << 11 @date_from = Date.civil(@date_from.year, @date_from.month, 1) - commits_by_day = repository.changesets.count(:all, :group => :commit_date, :conditions => ["commit_date BETWEEN ? AND ?", @date_from, @date_to]) + commits_by_day = repository.changesets.count( + :all, :group => :commit_date, + :conditions => ["commit_date BETWEEN ? AND ?", @date_from, @date_to]) commits_by_month = [0] * 12 commits_by_day.each {|c| commits_by_month[c.first.to_date.months_ago] += c.last } - changes_by_day = repository.changes.count(:all, :group => :commit_date, :conditions => ["commit_date BETWEEN ? AND ?", @date_from, @date_to]) + changes_by_day = repository.changes.count( + :all, :group => :commit_date, + :conditions => ["commit_date BETWEEN ? AND ?", @date_from, @date_to]) changes_by_month = [0] * 12 changes_by_day.each {|c| changes_by_month[c.first.to_date.months_ago] += c.last } - + fields = [] 12.times {|m| fields << month_name(((Date.today.month - 1 - m) % 12) + 1)} - + graph = SVG::Graph::Bar.new( :height => 300, :width => 800, @@ -251,7 +307,7 @@ :graph_title => l(:label_commits_per_month), :show_graph_title => true ) - + graph.add_data( :data => commits_by_month[0..11].reverse, :title => l(:label_revision_plural) @@ -261,7 +317,7 @@ :data => changes_by_month[0..11].reverse, :title => l(:label_change_plural) ) - + graph.burn end @@ -271,18 +327,18 @@ changes_by_author = repository.changes.count(:all, :group => :committer) h = changes_by_author.inject({}) {|o, i| o[i.first] = i.last; o} - + fields = commits_by_author.collect {|r| r.first} commits_data = commits_by_author.collect {|r| r.last} changes_data = commits_by_author.collect {|r| h[r.first] || 0} - + fields = fields + [""]*(10 - fields.length) if fields.length<10 commits_data = commits_data + [0]*(10 - commits_data.length) if commits_data.length<10 changes_data = changes_data + [0]*(10 - changes_data.length) if changes_data.length<10 - + # Remove email adress in usernames fields = fields.collect {|c| c.gsub(%r{<.+@.+>}, '') } - + graph = SVG::Graph::BarHorizontal.new( :height => 400, :width => 800, @@ -294,22 +350,18 @@ :graph_title => l(:label_commits_per_author), :show_graph_title => true ) - graph.add_data( :data => commits_data, :title => l(:label_revision_plural) ) - graph.add_data( :data => changes_data, :title => l(:label_change_plural) ) - graph.burn end +end -end - class Date def months_ago(date = Date.today) (date.year - self.year)*12 + (date.month - self.month) diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/roles_controller.rb --- a/app/controllers/roles_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/roles_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -38,9 +38,10 @@ end flash[:notice] = l(:notice_successful_create) redirect_to :action => 'index' + else + @permissions = @role.setable_permissions + @roles = Role.find :all, :order => 'builtin, position' end - @permissions = @role.setable_permissions - @roles = Role.find :all, :order => 'builtin, position' end def edit @@ -48,8 +49,9 @@ if request.post? and @role.update_attributes(params[:role]) flash[:notice] = l(:notice_successful_update) redirect_to :action => 'index' + else + @permissions = @role.setable_permissions end - @permissions = @role.setable_permissions end def destroy diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/search_controller.rb --- a/app/controllers/search_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/search_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -24,8 +24,8 @@ def index @question = params[:q] || "" @question.strip! - @all_words = params[:all_words] || (params[:submit] ? false : true) - @titles_only = !params[:titles_only].nil? + @all_words = params[:all_words] ? params[:all_words].present? : true + @titles_only = params[:titles_only] ? params[:titles_only].present? : false projects_to_search = case params[:scope] @@ -69,6 +69,7 @@ # no more than 5 tokens to search for @tokens.slice! 5..-1 if @tokens.size > 5 + @project_matches = [] @results = [] @results_by_type = Hash.new {|h,k| h[k] = 0} @@ -82,6 +83,12 @@ :before => params[:previous].nil?) @results += r @results_by_type[s] += c + if s == 'projects' + r, c = s.singularize.camelcase.constantize.search(@tokens, nil, + :all_words => @all_words, + :titles_only => 1) + @project_matches += r + end end @results = @results.sort {|a,b| b.event_datetime <=> a.event_datetime} if params[:previous].nil? diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/settings_controller.rb --- a/app/controllers/settings_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/settings_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -17,7 +17,7 @@ class SettingsController < ApplicationController layout 'admin' - + before_filter :require_admin def index @@ -36,14 +36,16 @@ end flash[:notice] = l(:notice_successful_update) redirect_to :action => 'edit', :tab => params[:tab] - return + else + @options = {} + @options[:user_format] = User::USER_FORMATS.keys.collect {|f| [User.current.name(f), f.to_s] } + @deliveries = ActionMailer::Base.perform_deliveries + + @guessed_host_and_path = request.host_with_port.dup + @guessed_host_and_path << ('/'+ Redmine::Utils.relative_url_root.gsub(%r{^\/}, '')) unless Redmine::Utils.relative_url_root.blank? + + Redmine::Themes.rescan end - @options = {} - @options[:user_format] = User::USER_FORMATS.keys.collect {|f| [User.current.name(f), f.to_s] } - @deliveries = ActionMailer::Base.perform_deliveries - - @guessed_host_and_path = request.host_with_port.dup - @guessed_host_and_path << ('/'+ Redmine::Utils.relative_url_root.gsub(%r{^\/}, '')) unless Redmine::Utils.relative_url_root.blank? end def plugin @@ -52,9 +54,10 @@ Setting["plugin_#{@plugin.id}"] = params[:settings] flash[:notice] = l(:notice_successful_update) redirect_to :action => 'plugin', :id => @plugin.id + else + @partial = @plugin.settings[:partial] + @settings = Setting["plugin_#{@plugin.id}"] end - @partial = @plugin.settings[:partial] - @settings = Setting["plugin_#{@plugin.id}"] rescue Redmine::PluginNotFound render_404 end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/sys_controller.rb --- a/app/controllers/sys_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/sys_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -69,6 +69,16 @@ render :nothing => true, :status => 404 end + def clear_repository_cache + project = Project.find(params[:id]) + if project.repository + project.repository.clear_cache + end + render :nothing => true, :status => 200 + rescue ActiveRecord::RecordNotFound + render :nothing => true, :status => 404 + end + def set_embedded_active project = Project.find(params[:id]) mods = project.enabled_modules diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/timelog_controller.rb --- a/app/controllers/timelog_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/timelog_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -18,10 +18,13 @@ class TimelogController < ApplicationController menu_item :issues before_filter :find_project, :only => [:new, :create] - before_filter :find_time_entry, :only => [:edit, :update, :destroy] + before_filter :find_time_entry, :only => [:show, :edit, :update] + before_filter :find_time_entries, :only => [:bulk_edit, :bulk_update, :destroy] before_filter :authorize, :except => [:index] before_filter :find_optional_project, :only => [:index] - + accept_rss_auth :index + accept_api_auth :index, :show, :create, :update, :destroy + helper :sort include SortHelper helper :issues @@ -39,50 +42,64 @@ 'hours' => 'hours' cond = ARCondition.new - if @project.nil? - cond << Project.allowed_to_condition(User.current, :view_time_entries) - elsif @issue.nil? + if @issue + cond << "#{Issue.table_name}.root_id = #{@issue.root_id} AND #{Issue.table_name}.lft >= #{@issue.lft} AND #{Issue.table_name}.rgt <= #{@issue.rgt}" + elsif @project cond << @project.project_condition(Setting.display_subprojects_issues?) - else - cond << "#{Issue.table_name}.root_id = #{@issue.root_id} AND #{Issue.table_name}.lft >= #{@issue.lft} AND #{Issue.table_name}.rgt <= #{@issue.rgt}" end retrieve_date_range cond << ['spent_on BETWEEN ? AND ?', @from, @to] - TimeEntry.visible_by(User.current) do - respond_to do |format| - format.html { - # Paginate results - @entry_count = TimeEntry.count(:include => [:project, :issue], :conditions => cond.conditions) - @entry_pages = Paginator.new self, @entry_count, per_page_option, params['page'] - @entries = TimeEntry.find(:all, - :include => [:project, :activity, :user, {:issue => :tracker}], - :conditions => cond.conditions, - :order => sort_clause, - :limit => @entry_pages.items_per_page, - :offset => @entry_pages.current.offset) - @total_hours = TimeEntry.sum(:hours, :include => [:project, :issue], :conditions => cond.conditions).to_f + respond_to do |format| + format.html { + # Paginate results + @entry_count = TimeEntry.visible.count(:include => [:project, :issue], :conditions => cond.conditions) + @entry_pages = Paginator.new self, @entry_count, per_page_option, params['page'] + @entries = TimeEntry.visible.find(:all, + :include => [:project, :activity, :user, {:issue => :tracker}], + :conditions => cond.conditions, + :order => sort_clause, + :limit => @entry_pages.items_per_page, + :offset => @entry_pages.current.offset) + @total_hours = TimeEntry.visible.sum(:hours, :include => [:project, :issue], :conditions => cond.conditions).to_f - render :layout => !request.xhr? - } - format.atom { - entries = TimeEntry.find(:all, - :include => [:project, :activity, :user, {:issue => :tracker}], - :conditions => cond.conditions, - :order => "#{TimeEntry.table_name}.created_on DESC", - :limit => Setting.feeds_limit.to_i) - render_feed(entries, :title => l(:label_spent_time)) - } - format.csv { - # Export all entries - @entries = TimeEntry.find(:all, - :include => [:project, :activity, :user, {:issue => [:tracker, :assigned_to, :priority]}], - :conditions => cond.conditions, - :order => sort_clause) - send_data(entries_to_csv(@entries), :type => 'text/csv; header=present', :filename => 'timelog.csv') - } - end + render :layout => !request.xhr? + } + format.api { + @entry_count = TimeEntry.visible.count(:include => [:project, :issue], :conditions => cond.conditions) + @offset, @limit = api_offset_and_limit + @entries = TimeEntry.visible.find(:all, + :include => [:project, :activity, :user, {:issue => :tracker}], + :conditions => cond.conditions, + :order => sort_clause, + :limit => @limit, + :offset => @offset) + } + format.atom { + entries = TimeEntry.visible.find(:all, + :include => [:project, :activity, :user, {:issue => :tracker}], + :conditions => cond.conditions, + :order => "#{TimeEntry.table_name}.created_on DESC", + :limit => Setting.feeds_limit.to_i) + render_feed(entries, :title => l(:label_spent_time)) + } + format.csv { + # Export all entries + @entries = TimeEntry.visible.find(:all, + :include => [:project, :activity, :user, {:issue => [:tracker, :assigned_to, :priority]}], + :conditions => cond.conditions, + :order => sort_clause) + send_data(entries_to_csv(@entries), :type => 'text/csv; header=present', :filename => 'timelog.csv') + } + end + end + + def show + respond_to do |format| + # TODO: Implement html response + format.html { render :nothing => true, :status => 406 } + format.api end end @@ -102,10 +119,18 @@ call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry }) if @time_entry.save - flash[:notice] = l(:notice_successful_update) - redirect_back_or_default :action => 'index', :project_id => @time_entry.project + respond_to do |format| + format.html { + flash[:notice] = l(:notice_successful_update) + redirect_back_or_default :action => 'index', :project_id => @time_entry.project + } + format.api { render :action => 'show', :status => :created, :location => time_entry_url(@time_entry) } + end else - render :action => 'edit' + respond_to do |format| + format.html { render :action => 'edit' } + format.api { render_validation_errors(@time_entry) } + end end end @@ -122,23 +147,70 @@ call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry }) if @time_entry.save - flash[:notice] = l(:notice_successful_update) - redirect_back_or_default :action => 'index', :project_id => @time_entry.project + respond_to do |format| + format.html { + flash[:notice] = l(:notice_successful_update) + redirect_back_or_default :action => 'index', :project_id => @time_entry.project + } + format.api { head :ok } + end else - render :action => 'edit' + respond_to do |format| + format.html { render :action => 'edit' } + format.api { render_validation_errors(@time_entry) } + end end end + def bulk_edit + @available_activities = TimeEntryActivity.shared.active + @custom_fields = TimeEntry.first.available_custom_fields + end + + def bulk_update + attributes = parse_params_for_bulk_time_entry_attributes(params) + + unsaved_time_entry_ids = [] + @time_entries.each do |time_entry| + time_entry.reload + time_entry.attributes = attributes + call_hook(:controller_time_entries_bulk_edit_before_save, { :params => params, :time_entry => time_entry }) + unless time_entry.save + # Keep unsaved time_entry ids to display them in flash error + unsaved_time_entry_ids << time_entry.id + end + end + set_flash_from_bulk_time_entry_save(@time_entries, unsaved_time_entry_ids) + redirect_back_or_default({:controller => 'timelog', :action => 'index', :project_id => @projects.first}) + end + verify :method => :delete, :only => :destroy, :render => {:nothing => true, :status => :method_not_allowed } def destroy - if @time_entry.destroy && @time_entry.destroyed? - flash[:notice] = l(:notice_successful_delete) - else - flash[:error] = l(:notice_unable_delete_time_entry) + @time_entries.each do |t| + begin + unless t.destroy && t.destroyed? + respond_to do |format| + format.html { + flash[:error] = l(:notice_unable_delete_time_entry) + redirect_to :back + } + format.api { render_validation_errors(t) } + end + return + end + rescue ::ActionController::RedirectBackError + redirect_to :action => 'index', :project_id => @projects.first + return + end end - redirect_to :back - rescue ::ActionController::RedirectBackError - redirect_to :action => 'index', :project_id => @time_entry.project + + respond_to do |format| + format.html { + flash[:notice] = l(:notice_successful_delete) + redirect_back_or_default(:action => 'index', :project_id => @projects.first) + } + format.api { head :ok } + end end private @@ -153,12 +225,32 @@ render_404 end + def find_time_entries + @time_entries = TimeEntry.find_all_by_id(params[:id] || params[:ids]) + raise ActiveRecord::RecordNotFound if @time_entries.empty? + @projects = @time_entries.collect(&:project).compact.uniq + @project = @projects.first if @projects.size == 1 + rescue ActiveRecord::RecordNotFound + render_404 + end + + def set_flash_from_bulk_time_entry_save(time_entries, unsaved_time_entry_ids) + if unsaved_time_entry_ids.empty? + flash[:notice] = l(:notice_successful_update) unless time_entries.empty? + else + flash[:error] = l(:notice_failed_to_save_time_entries, + :count => unsaved_time_entry_ids.size, + :total => time_entries.size, + :ids => '#' + unsaved_time_entry_ids.join(', #')) + end + end + def find_project - if params[:issue_id] - @issue = Issue.find(params[:issue_id]) + if (issue_id = (params[:issue_id] || params[:time_entry] && params[:time_entry][:issue_id])).present? + @issue = Issue.find(issue_id) @project = @issue.project - elsif params[:project_id] - @project = Project.find(params[:project_id]) + elsif (project_id = (params[:project_id] || params[:time_entry] && params[:time_entry][:project_id])).present? + @project = Project.find(project_id) else render_404 return false @@ -223,4 +315,10 @@ @to ||= (TimeEntry.latest_date_for_project(@project) || Date.today) end + def parse_params_for_bulk_time_entry_attributes(params) + attributes = (params[:time_entry] || {}).reject {|k,v| v.blank?} + attributes.keys.each {|k| attributes[k] = '' if attributes[k] == 'none'} + attributes[:custom_field_values].reject! {|k,v| v.blank?} if attributes[:custom_field_values] + attributes + end end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/users_controller.rb --- a/app/controllers/users_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/users_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -19,6 +19,8 @@ layout 'admin' before_filter :require_admin, :except => :show + before_filter :find_user, :only => [:show, :edit, :update, :destroy, :edit_membership, :destroy_membership] + accept_api_auth :index, :show, :create, :update, :destroy helper :sort include SortHelper @@ -29,6 +31,16 @@ sort_init 'login', 'asc' sort_update %w(login firstname lastname mail admin created_on last_login_on) + case params[:format] + when 'xml', 'json' + @offset, @limit = api_offset_and_limit + else + @limit = per_page_option + end + + scope = User + scope = scope.in_group(params[:group_id].to_i) if params[:group_id].present? + @status = params[:status] ? params[:status].to_i : 1 c = ARCondition.new(@status == 0 ? "status <> 0" : ["status = ?", @status]) @@ -37,20 +49,25 @@ c << ["LOWER(login) LIKE ? OR LOWER(firstname) LIKE ? OR LOWER(lastname) LIKE ? OR LOWER(mail) LIKE ?", name, name, name, name] end - @user_count = User.count(:conditions => c.conditions) - @user_pages = Paginator.new self, @user_count, - per_page_option, - params['page'] - @users = User.find :all,:order => sort_clause, + @user_count = scope.count(:conditions => c.conditions) + @user_pages = Paginator.new self, @user_count, @limit, params['page'] + @offset ||= @user_pages.current.offset + @users = scope.find :all, + :order => sort_clause, :conditions => c.conditions, - :limit => @user_pages.items_per_page, - :offset => @user_pages.current.offset + :limit => @limit, + :offset => @offset - render :layout => !request.xhr? + respond_to do |format| + format.html { + @groups = Group.all.sort + render :layout => !request.xhr? + } + format.api + end end def show - @user = User.find(params[:id]) if @user.ssamr_user_detail != nil @description = @user.ssamr_user_detail.description @@ -66,7 +83,7 @@ end # show projects based on current user visibility - @memberships = @user.memberships.all(:conditions => Project.visible_by(User.current)) + @memberships = @user.memberships.all(:conditions => Project.visible_condition(User.current)) events = Redmine::Activity::Fetcher.new(User.current, :author => @user).events(nil, nil, :limit => 10) @events_by_day = events.group_by(&:event_date) @@ -77,17 +94,15 @@ return end end - render :layout => 'base' - - rescue ActiveRecord::RecordNotFound - render_404 + + respond_to do |format| + format.html { render :layout => 'base' } + format.api + end end def new - @notification_options = User::MAIL_NOTIFICATION_OPTIONS - @notification_option = Setting.default_notification_option - - @user = User.new(:language => Setting.default_language) + @user = User.new(:language => Setting.default_language, :mail_notification => Setting.default_notification_option) @auth_sources = AuthSource.find(:all) @ssamr_user_details = SsamrUserDetail.new @@ -95,16 +110,14 @@ verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed } def create - @notification_options = User::MAIL_NOTIFICATION_OPTIONS - @notification_option = Setting.default_notification_option - + @user = User.new(:language => Setting.default_language, :mail_notification => Setting.default_notification_option) + @user.safe_attributes = params[:user] @user = User.new(params[:user]) @user.admin = params[:user][:admin] || false @user.login = params[:user][:login] - @user.password, @user.password_confirmation = params[:password], params[:password_confirmation] unless @user.auth_source_id + @user.password, @user.password_confirmation = params[:user][:password], params[:user][:password_confirmation] unless @user.auth_source_id # TODO: Similar to My#account - @user.mail_notification = params[:notification_option] || 'only_my_events' @user.pref.attributes = params[:pref] @user.pref[:no_self_notified] = (params[:no_self_notified] == '1') @@ -118,25 +131,32 @@ @ssamr_user_details.save! - @user.notified_project_ids = (params[:notification_option] == 'selected' ? params[:notified_project_ids] : []) - Mailer.deliver_account_information(@user, params[:password]) if params[:send_information] - flash[:notice] = l(:notice_successful_create) - redirect_to(params[:continue] ? {:controller => 'users', :action => 'new'} : - {:controller => 'users', :action => 'edit', :id => @user}) - return + Mailer.deliver_account_information(@user, params[:user][:password]) if params[:send_information] + + respond_to do |format| + format.html { + flash[:notice] = l(:notice_successful_create) + redirect_to(params[:continue] ? + {:controller => 'users', :action => 'new'} : + {:controller => 'users', :action => 'edit', :id => @user} + ) + } + format.api { render :action => 'show', :status => :created, :location => user_url(@user) } + end else @auth_sources = AuthSource.find(:all) - @notification_option = @user.mail_notification + # Clear password input + @user.password = @user.password_confirmation = nil - render :action => 'new' + respond_to do |format| + format.html { render :action => 'new' } + format.api { render_validation_errors(@user) } + end end end def edit - @user = User.find(params[:id]) - @notification_options = @user.valid_notification_options - @notification_option = @user.mail_notification @ssamr_user_details = @user.ssamr_user_detail @@ -152,22 +172,15 @@ verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed } def update - @user = User.find(params[:id]) - - @notification_options = @user.valid_notification_options - @notification_option = @user.mail_notification - @user.admin = params[:user][:admin] if params[:user][:admin] @user.login = params[:user][:login] if params[:user][:login] - if params[:password].present? && (@user.auth_source_id.nil? || params[:user][:auth_source_id].blank?) - @user.password, @user.password_confirmation = params[:password], params[:password_confirmation] + if params[:user][:password].present? && (@user.auth_source_id.nil? || params[:user][:auth_source_id].blank?) + @user.password, @user.password_confirmation = params[:user][:password], params[:user][:password_confirmation] end - @user.group_ids = params[:user][:group_ids] if params[:user][:group_ids] - @user.attributes = params[:user] + @user.safe_attributes = params[:user] # Was the account actived ? (do it before User#save clears the change) was_activated = (@user.status_change == [User::STATUS_REGISTERED, User::STATUS_ACTIVE]) # TODO: Similar to My#account - @user.mail_notification = params[:notification_option] || 'only_my_events' @user.pref.attributes = params[:pref] @user.pref[:no_self_notified] = (params[:no_self_notified] == '1') @@ -193,27 +206,46 @@ if @user.save @user.pref.save - @user.notified_project_ids = (params[:notification_option] == 'selected' ? params[:notified_project_ids] : []) + @user.notified_project_ids = (@user.mail_notification == 'selected' ? params[:notified_project_ids] : []) if was_activated Mailer.deliver_account_activated(@user) - elsif @user.active? && params[:send_information] && !params[:password].blank? && @user.auth_source_id.nil? - Mailer.deliver_account_information(@user, params[:password]) + elsif @user.active? && params[:send_information] && !params[:user][:password].blank? && @user.auth_source_id.nil? + Mailer.deliver_account_information(@user, params[:user][:password]) end - flash[:notice] = l(:notice_successful_update) - redirect_to :back + + respond_to do |format| + format.html { + flash[:notice] = l(:notice_successful_update) + redirect_to :back + } + format.api { head :ok } + end else @auth_sources = AuthSource.find(:all) @membership ||= Member.new + # Clear password input + @user.password = @user.password_confirmation = nil - render :action => :edit + respond_to do |format| + format.html { render :action => :edit } + format.api { render_validation_errors(@user) } + end end rescue ::ActionController::RedirectBackError redirect_to :controller => 'users', :action => 'edit', :id => @user end + verify :method => :delete, :only => :destroy, :render => {:nothing => true, :status => :method_not_allowed } + def destroy + @user.destroy + respond_to do |format| + format.html { redirect_to(users_url) } + format.api { head :ok } + end + end + def edit_membership - @user = User.find(params[:id]) @membership = Member.edit_membership(params[:membership_id], params[:membership], @user) @membership.save if request.post? respond_to do |format| @@ -236,7 +268,6 @@ end def destroy_membership - @user = User.find(params[:id]) @membership = Member.find(params[:membership_id]) if request.post? && @membership.deletable? @membership.destroy @@ -246,4 +277,17 @@ format.js { render(:update) {|page| page.replace_html "tab-content-memberships", :partial => 'users/memberships'} } end end + + private + + def find_user + if params[:id] == 'current' + require_login || return + @user = User.current + else + @user = User.find(params[:id]) + end + rescue ActiveRecord::RecordNotFound + render_404 + end end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/watchers_controller.rb --- a/app/controllers/watchers_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/watchers_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -76,21 +76,13 @@ def set_watcher(user, watching) @watched.set_watcher(user, watching) - if params[:replace].present? - if params[:replace].is_a? Array - replace_ids = params[:replace] - else - replace_ids = [params[:replace]] - end - else - replace_ids = ['watcher'] - end respond_to do |format| format.html { redirect_to :back } format.js do render(:update) do |page| - replace_ids.each do |replace_id| - page.replace_html replace_id, watcher_link(@watched, user, :replace => replace_ids) + c = watcher_css(@watched) + page.select(".#{c}").each do |item| + page.replace_html item, watcher_link(@watched, user) end end end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/welcome_controller.rb --- a/app/controllers/welcome_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/welcome_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -18,11 +18,16 @@ class WelcomeController < ApplicationController caches_action :robots + include ProjectsHelper + helper :projects + def index - @news = News.latest User.current + @site_project = Project.find_by_identifier "soundsoftware-site" + @site_news = [] + @site_news = News.latest_for @site_project if @site_project @projects = Project.latest User.current - # tests if user is logged in to gfenerate the tips of the day list + # tests if user is logged in to generate the tips of the day list if User.current.logged? @tipsoftheday = Setting.tipoftheday_text else diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/wiki_controller.rb --- a/app/controllers/wiki_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/wiki_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -34,23 +34,27 @@ class WikiController < ApplicationController default_search_scope :wiki_pages before_filter :find_wiki, :authorize + before_filter :find_existing_or_new_page, :only => [:show, :edit, :update] before_filter :find_existing_page, :only => [:rename, :protect, :history, :diff, :annotate, :add_attachment, :destroy] - - verify :method => :post, :only => [:protect], :redirect_to => { :action => :show } helper :attachments - include AttachmentsHelper + include AttachmentsHelper helper :watchers # List of pages, sorted alphabetically and by parent (hierarchy) def index - load_pages_grouped_by_date_without_content + load_pages_for_index + @pages_by_parent_id = @pages.group_by(&:parent_id) + end + + # List of page, by last update + def date_index + load_pages_for_index + @pages_by_date = @pages.group_by {|p| p.updated_on.to_date} end # display a page (in editing mode if it doesn't exist) def show - page_title = params[:id] - @page = @wiki.find_or_new_page(page_title) if @page.new_record? if User.current.allowed_to?(:edit_wiki_pages, @project) && editable? edit @@ -79,13 +83,12 @@ @editable = editable? render :action => 'show' end - + # edit an existing page or a new one def edit - @page = @wiki.find_or_new_page(params[:id]) return render_403 unless editable? @page.content = WikiContent.new(:page => @page) if @page.new_record? - + @content = @page.content_for_version(params[:version]) @content.text = initial_page_content(@page) if @content.text.blank? # don't keep previous comment @@ -93,18 +96,14 @@ # To prevent StaleObjectError exception when reverting to a previous version @content.version = @page.content.version - rescue ActiveRecord::StaleObjectError - # Optimistic locking exception - flash[:error] = l(:notice_locking_conflict) end verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed } # Creates a new page or updates an existing one def update - @page = @wiki.find_or_new_page(params[:id]) return render_403 unless editable? @page.content = WikiContent.new(:page => @page) if @page.new_record? - + @content = @page.content_for_version(params[:version]) @content.text = initial_page_content(@page) if @content.text.blank? # don't keep previous comment @@ -125,11 +124,14 @@ render_attachment_warning_if_needed(@page) call_hook(:controller_wiki_edit_after_save, { :params => params, :page => @page}) redirect_to :action => 'show', :project_id => @project, :id => @page.title + else + render :action => 'edit' end rescue ActiveRecord::StaleObjectError # Optimistic locking exception - flash[:error] = l(:notice_locking_conflict) + flash.now[:error] = l(:notice_locking_conflict) + render :action => 'edit' end # rename a page @@ -143,7 +145,8 @@ redirect_to :action => 'show', :project_id => @project, :id => @page.title end end - + + verify :method => :post, :only => :protect, :redirect_to => { :action => :show } def protect @page.update_attribute :protected, params[:protected] redirect_to :action => 'show', :project_id => @project, :id => @page.title @@ -153,8 +156,8 @@ def history @version_count = @page.content.versions.count @version_pages = Paginator.new self, @version_count, per_page_option, params['p'] - # don't load text - @versions = @page.content.versions.find :all, + # don't load text + @versions = @page.content.versions.find :all, :select => "id, author_id, comments, updated_on, version", :order => 'version DESC', :limit => @version_pages.items_per_page + 1, @@ -162,12 +165,12 @@ render :layout => false if request.xhr? end - + def diff @diff = @page.diff(params[:version], params[:version_from]) render_404 unless @diff end - + def annotate @annotate = @page.annotate(params[:version]) render_404 unless @annotate @@ -178,7 +181,7 @@ # Children can be either set as root pages, removed or reassigned to another parent page def destroy return render_403 unless editable? - + @descendants_count = @page.descendants.size if @descendants_count > 0 case params[:todo] @@ -214,10 +217,6 @@ end end - def date_index - load_pages_grouped_by_date_without_content - end - def preview page = @wiki.find_page(params[:id]) # page is nil when previewing a new page @@ -238,7 +237,7 @@ end private - + def find_wiki @project = Project.find(params[:project_id]) @wiki = @project.wiki @@ -246,13 +245,27 @@ rescue ActiveRecord::RecordNotFound render_404 end - + + # Finds the requested page or a new page if it doesn't exist + def find_existing_or_new_page + @page = @wiki.find_or_new_page(params[:id]) + if @wiki.page_found_with_redirect? + redirect_to params.update(:id => @page.title) + end + end + # Finds the requested page and returns a 404 error if it doesn't exist def find_existing_page @page = @wiki.find_page(params[:id]) - render_404 if @page.nil? + if @page.nil? + render_404 + return + end + if @wiki.page_found_with_redirect? + redirect_to params.update(:id => @page.title) + end end - + # Returns true if the current user is allowed to edit the page, otherwise false def editable?(page = @page) page.editable_by?(User.current) @@ -265,13 +278,7 @@ helper.instance_method(:initial_page_content).bind(self).call(page) end - # eager load information about last updates, without loading text - def load_pages_grouped_by_date_without_content - @pages = @wiki.pages.find :all, :select => "#{WikiPage.table_name}.*, #{WikiContent.table_name}.updated_on", - :joins => "LEFT JOIN #{WikiContent.table_name} ON #{WikiContent.table_name}.page_id = #{WikiPage.table_name}.id", - :order => 'title' - @pages_by_date = @pages.group_by {|p| p.updated_on.to_date} - @pages_by_parent_id = @pages.group_by(&:parent_id) + def load_pages_for_index + @pages = @wiki.pages.with_updated_on.all(:order => 'title', :include => {:wiki => :project}) end - end diff -r f7c525dc7585 -r 0b6c82dead28 app/controllers/workflows_controller.rb --- a/app/controllers/workflows_controller.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/controllers/workflows_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 app/helpers/.svn/all-wcprops --- a/app/helpers/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/helpers/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,239 +1,17 @@ K 25 svn:wc:ra_dav:version-url -V 36 -/svn/!svn/ver/4391/trunk/app/helpers +V 50 +/svn/!svn/ver/6202/branches/1.2-stable/app/helpers END -trackers_helper.rb +search_helper.rb K 25 svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/333/trunk/app/helpers/trackers_helper.rb -END -groups_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/2869/trunk/app/helpers/groups_helper.rb -END -issue_statuses_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/333/trunk/app/helpers/issue_statuses_helper.rb -END -roles_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/333/trunk/app/helpers/roles_helper.rb -END -sort_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/3618/trunk/app/helpers/sort_helper.rb -END -repositories_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/3659/trunk/app/helpers/repositories_helper.rb -END -admin_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/4080/trunk/app/helpers/admin_helper.rb -END -projects_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/3924/trunk/app/helpers/projects_helper.rb -END -account_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/333/trunk/app/helpers/account_helper.rb -END -calendars_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/4046/trunk/app/helpers/calendars_helper.rb -END -issue_categories_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/333/trunk/app/helpers/issue_categories_helper.rb -END -documents_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/333/trunk/app/helpers/documents_helper.rb -END -wiki_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/4375/trunk/app/helpers/wiki_helper.rb -END -enumerations_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/333/trunk/app/helpers/enumerations_helper.rb -END -issues_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/4281/trunk/app/helpers/issues_helper.rb -END -gantt_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/4283/trunk/app/helpers/gantt_helper.rb +V 67 +/svn/!svn/ver/6202/branches/1.2-stable/app/helpers/search_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 +V 68 +/svn/!svn/ver/6175/branches/1.2-stable/app/helpers/queries_helper.rb END -mail_handler_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/1584/trunk/app/helpers/mail_handler_helper.rb -END -watchers_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/3579/trunk/app/helpers/watchers_helper.rb -END -my_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 48 -/svn/!svn/ver/333/trunk/app/helpers/my_helper.rb -END -members_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/333/trunk/app/helpers/members_helper.rb -END -welcome_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/333/trunk/app/helpers/welcome_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 -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/3675/trunk/app/helpers/custom_fields_helper.rb -END -settings_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/4222/trunk/app/helpers/settings_helper.rb -END -timelog_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/3708/trunk/app/helpers/timelog_helper.rb -END -users_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/4230/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/4391/trunk/app/helpers/application_helper.rb -END -auth_sources_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/333/trunk/app/helpers/auth_sources_helper.rb -END -search_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/4353/trunk/app/helpers/search_helper.rb -END -messages_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/3373/trunk/app/helpers/messages_helper.rb -END -versions_helper.rb -K 25 -svn:wc:ra_dav:version-url -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 -V 52 -/svn/!svn/ver/529/trunk/app/helpers/boards_helper.rb -END -attachments_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/2116/trunk/app/helpers/attachments_helper.rb -END -news_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/333/trunk/app/helpers/news_helper.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 app/helpers/.svn/entries --- a/app/helpers/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/helpers/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/helpers +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/helpers http://redmine.rubyforge.org/svn -2010-11-11T13:39:14.764400Z -4391 +2011-07-09T11:26:35.866966Z +6202 jplang @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.431779Z +2011-07-14T09:24:09.000000Z e1b19c2c81df384b2026001d1d9605fd 2007-03-12T17:59:02.654744Z 333 @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.427784Z +2011-07-14T09:24:09.000000Z ab0af291fb143223852a6edddc64b74b 2009-09-12T08:36:46.650954Z 2869 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.427784Z +2011-07-14T09:24:09.000000Z 0cd3093356b7034ee950ca327fc7aabc 2007-03-12T17:59:02.654744Z 333 @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.431779Z +2011-07-14T09:24:09.000000Z 69869e026dc6cbacc618214e4bb13b1b 2007-03-12T17:59:02.654744Z 333 @@ -168,10 +168,10 @@ -2010-09-23T14:37:44.431779Z -491ead5828edb57adcd7333943656c94 -2010-03-27T16:55:20.312262Z -3618 +2011-07-14T09:24:21.000000Z +580d9b0753045bc89e5a92dfb9bccc65 +2011-04-03T14:09:22.655792Z +5303 jplang has-props @@ -194,7 +194,7 @@ -6469 +6246 repositories_helper.rb file @@ -202,11 +202,11 @@ -2010-09-24T11:56:52.900009Z -d617582e4bc6a3eedbc4f37f8fa3d509 -2010-04-11T15:18:49.769279Z -3659 -jplang +2011-07-14T09:24:21.000000Z +bb401adbfcec298b2731e4e1fc4fe652 +2011-05-18T02:45:35.322493Z +5830 +tmaruyama has-props @@ -228,7 +228,7 @@ -7654 +10966 admin_helper.rb file @@ -236,7 +236,7 @@ -2010-09-24T12:48:25.903794Z +2011-07-14T09:24:09.000000Z 258ebc9ad13b3111585e5118ec607d1b 2010-09-10T23:07:10.817821Z 4080 @@ -270,11 +270,11 @@ -2010-09-23T14:37:44.427784Z -19efbd2b30f44f233d5140437e2707a0 -2010-08-08T07:07:20.961363Z -3924 -jbbarth +2011-07-14T09:24:21.000000Z +a0bf71359447b66a404f8911ca669a1c +2011-05-18T11:13:02.791261Z +5849 +tmaruyama has-props @@ -296,7 +296,7 @@ -5204 +5187 account_helper.rb file @@ -304,7 +304,7 @@ -2010-09-23T14:37:44.423776Z +2011-07-14T09:24:09.000000Z 42d20ee00a3c45e3411634dbb09e2447 2007-03-12T17:59:02.654744Z 333 @@ -338,33 +338,33 @@ -2010-09-24T12:48:25.903794Z -c8780c65337211f34097d74a8c3c9f6e -2010-08-26T16:37:26.575205Z -4046 -edavis10 - - - - - - - - - - - - - - - - - - - - - -1462 +2011-07-14T09:24:21.000000Z +3fc9041a6dc70d35c640c38cd1edbbc8 +2011-04-03T14:01:32.419875Z +5301 +jplang + + + + + + + + + + + + + + + + + + + + + +1216 issue_categories_helper.rb file @@ -372,7 +372,7 @@ -2010-09-23T14:37:44.427784Z +2011-07-14T09:24:09.000000Z 1257aafe6669c839ab46dac2b2732ae0 2007-03-12T17:59:02.654744Z 333 @@ -406,7 +406,7 @@ -2010-09-23T14:37:44.423776Z +2011-07-14T09:24: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-07-14T09:24:21.000000Z +a93e6c0c0834a0700ecd23ba24bf4102 +2011-03-10T19:44:32.117142Z +5080 jplang has-props @@ -466,7 +466,7 @@ -2297 +1407 enumerations_helper.rb file @@ -474,7 +474,7 @@ -2010-09-23T14:37:44.427784Z +2011-07-14T09:24:09.000000Z fc5ec20dd0ca3ce1d954b219417eff70 2007-03-12T17:59:02.654744Z 333 @@ -508,11 +508,11 @@ -2010-11-19T13:04:46.900732Z -b5569bf5b4ba507a522f4e371505ae0c -2010-10-22T22:29:32.969473Z -4281 -jplang +2011-07-14T09:24:21.000000Z +f2465c49d740ce016b80c6035d7df2c4 +2011-05-18T02:45:59.814275Z +5831 +tmaruyama has-props @@ -534,7 +534,7 @@ -10075 +12736 gantt_helper.rb file @@ -542,10 +542,10 @@ -2010-11-19T13:04:46.900732Z -dfac5226f31c3c232d7dcc9416172071 -2010-10-23T09:08:55.877887Z -4283 +2011-07-14T09:24:21.000000Z +65d9a1166814eb63d467373051bf0b62 +2011-04-03T14:01:32.419875Z +5301 jplang @@ -568,7 +568,7 @@ -1988 +1492 queries_helper.rb file @@ -576,10 +576,10 @@ -2010-11-19T13:04:46.900732Z -6b997d023cc081b101be1949eb18f893 -2010-11-07T15:38:51.908839Z -4387 +2011-07-14T09:28:10.000000Z +1151cd9213f891f7041f6ff0bf3ce39d +2011-07-03T15:58:02.977468Z +6175 jplang has-props @@ -602,7 +602,7 @@ -3722 +3845 mail_handler_helper.rb file @@ -610,7 +610,7 @@ -2010-09-23T14:37:44.427784Z +2011-07-14T09:24:09.000000Z c79faf6237abac40fabce0eacbfbb4cb 2008-06-25T19:25:28.386590Z 1584 @@ -644,10 +644,10 @@ -2010-09-23T14:37:44.431779Z -fc71d3a83fe0178e0c6d9519c7a62dde -2010-03-13T17:45:41.194736Z -3579 +2011-07-14T09:24:21.000000Z +809ed0d1d7e143a2b6f4c695781d4dc0 +2011-04-05T12:09:15.508559Z +5320 jplang has-props @@ -670,7 +670,7 @@ -2905 +2688 my_helper.rb file @@ -678,7 +678,7 @@ -2010-09-23T14:37:44.427784Z +2011-07-14T09:24:09.000000Z d7134d76eff99aef107d8930903b10e0 2007-03-12T17:59:02.654744Z 333 @@ -712,7 +712,7 @@ -2010-09-23T14:37:44.427784Z +2011-07-14T09:24:09.000000Z cc94b2fd5c6a87acac13bbe6e91bd39a 2007-03-12T17:59:02.654744Z 333 @@ -746,7 +746,7 @@ -2010-09-23T14:37:44.431779Z +2011-07-14T09:24:09.000000Z 2d03eb3683f312ec26736c696319ec76 2007-03-12T17:59:02.654744Z 333 @@ -780,7 +780,7 @@ -2010-09-23T14:37:44.431779Z +2011-07-14T09:24:09.000000Z 4f7bcbe149363ecb18080e3ce6c3f761 2008-09-28T12:03:17.584169Z 1914 @@ -814,7 +814,7 @@ -2010-09-24T12:48:25.903794Z +2011-07-14T09:24:09.000000Z b64edde44bceed7fb0911f87dba971aa 2010-09-05T22:57:20.669640Z 4062 @@ -848,11 +848,11 @@ -2010-09-23T14:37:44.431779Z -9daafcfffa933849b3ee09fe5fd7b0cc -2007-08-13T17:00:59.400243Z -629 -jplang +2011-07-14T09:24:21.000000Z +abbaa87dcc23e906723ca0778128bae4 +2011-05-18T11:13:45.451188Z +5850 +tmaruyama has-props @@ -874,7 +874,7 @@ -1265 +1262 custom_fields_helper.rb file @@ -882,11 +882,11 @@ -2010-09-23T14:37:44.423776Z -97753365c8eb76a948d7417d5db31079 -2010-04-16T15:34:05.970144Z -3675 -edavis10 +2011-07-14T09:24:21.000000Z +3aab3283e46880f443fed09b975f3d7f +2011-04-07T20:49:33.971753Z +5356 +jplang has-props @@ -908,7 +908,7 @@ -5322 +5840 settings_helper.rb file @@ -916,11 +916,11 @@ -2010-11-19T13:04:46.900732Z -868d0dc19e332ae2c817321637a8e31f -2010-09-28T21:09:06.467392Z -4222 -edavis10 +2011-07-14T09:24:21.000000Z +da8c43c261cd527067440f75a242c091 +2011-05-29T12:06:05.086159Z +5961 +jplang has-props @@ -942,7 +942,7 @@ -3858 +3937 timelog_helper.rb file @@ -950,7 +950,7 @@ -2010-09-23T14:37:44.431779Z +2011-07-14T09:24:09.000000Z 1888fd2d4a1be5fa0d6ad8a63238e2b4 2010-04-30T12:18:11.536180Z 3708 @@ -978,13 +978,47 @@ 6636 +users_helper.rb +file + + + + +2011-07-14T09:24:09.000000Z +1bedb4287035a6f89074da0b37640c28 +2010-12-12T14:25:23.262992Z +4497 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +2767 + issue_moves_helper.rb file -2010-09-23T14:37:44.427784Z +2011-07-14T09:24:09.000000Z 66e99bd3af036c92a773a91e92a725f9 2010-08-11T14:42:10.119704Z 3936 @@ -1012,51 +1046,17 @@ 28 -users_helper.rb -file - - - - -2010-11-19T13:04:46.900732Z -01b097606863e1e2938e7222d07fc2b7 -2010-09-30T18:22:46.611444Z -4230 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -2644 - application_helper.rb file -2010-11-19T13:04:46.900732Z -a9ac6edf6104b93a669ba1b0705f4fc6 -2010-11-11T13:39:14.764400Z -4391 -jplang +2011-07-14T09:24:21.000000Z +639bb5f1e90caa8a4d6bb8029ab55905 +2011-05-18T02:46:24.994751Z +5832 +tmaruyama has-props @@ -1078,7 +1078,7 @@ -34105 +35515 auth_sources_helper.rb file @@ -1086,7 +1086,7 @@ -2010-09-23T14:37:44.423776Z +2011-07-14T09:24:09.000000Z 19759b6e665f9063140da8ac473d9e31 2007-03-12T17:59:02.654744Z 333 @@ -1120,10 +1120,10 @@ -2010-11-19T13:04:46.900732Z -dedb3c62af67e076703aa2f60c97fb2b -2010-11-01T12:55:15.292443Z -4353 +2011-07-14T09:28:10.000000Z +dace0a8b177ecab45cf16c82bd977364 +2011-07-09T11:26:35.866966Z +6202 jplang has-props @@ -1146,7 +1146,7 @@ -2668 +2669 messages_helper.rb file @@ -1154,10 +1154,10 @@ -2010-09-23T14:37:44.427784Z -70db854f3fd0a38d203a65c44d93bb13 -2010-02-06T12:54:13.653502Z -3373 +2011-07-14T09:24:09.000000Z +d083581ae234853db09e79e4e88d6ad3 +2011-01-23T17:02:10.030897Z +4760 jplang has-props @@ -1180,41 +1180,7 @@ -1364 - -versions_helper.rb -file - - - - -2010-09-23T14:37:44.431779Z -fd18226266f3e53f6af000ac07a13313 -2007-12-07T10:26:07.864320Z -955 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -2170 +823 issue_relations_helper.rb file @@ -1222,7 +1188,7 @@ -2010-09-23T14:37:44.427784Z +2011-07-14T09:24:09.000000Z fef3a97e6644b418b44f9551aa65af95 2007-05-05T13:22:27.245135Z 506 @@ -1250,13 +1216,47 @@ 1017 +versions_helper.rb +file + + + + +2011-07-14T09:24:21.000000Z +18e0206c3b8a4fb260548f58b75c7fa9 +2011-03-20T21:09:48.299058Z +5180 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +2151 + boards_helper.rb file -2010-09-23T14:37:44.423776Z +2011-07-14T09:24:09.000000Z 0ca8f33522734ee0417089366037a7cb 2007-05-13T17:09:56.765659Z 529 @@ -1290,11 +1290,11 @@ -2010-09-23T14:37:44.423776Z -6e15ada8c772d8daf8062cec2885ad9c -2008-12-09T16:54:46.963649Z -2116 -jplang +2011-07-14T09:24:21.000000Z +a2546fe896ad77351ab052f113afd012 +2011-05-07T05:51:39.224805Z +5681 +tmaruyama has-props @@ -1316,7 +1316,7 @@ -1367 +1731 news_helper.rb file @@ -1324,7 +1324,7 @@ -2010-09-23T14:37:44.427784Z +2011-07-14T09:24:09.000000Z d808f6794a2fa7cd059ed56d5c8d1b28 2007-03-12T17:59:02.654744Z 333 diff -r f7c525dc7585 -r 0b6c82dead28 app/helpers/.svn/text-base/application_helper.rb.svn-base --- a/app/helpers/.svn/text-base/application_helper.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/helpers/.svn/text-base/application_helper.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,5 +1,5 @@ # Redmine - project management software -# Copyright (C) 2006-2010 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 @@ -63,7 +63,7 @@ # Displays a link to +issue+ with its subject. # Examples: - # + # # link_to_issue(issue) # => Defect #6: This is the subject # link_to_issue(issue, :truncate => 6) # => Defect #6: This i... # link_to_issue(issue, :subject => false) # => Defect #6 @@ -80,7 +80,7 @@ subject = truncate(subject, :length => options[:truncate]) end end - s = link_to "#{issue.tracker} ##{issue.id}", {:controller => "issues", :action => "show", :id => issue}, + s = link_to "#{issue.tracker} ##{issue.id}", {:controller => "issues", :action => "show", :id => issue}, :class => issue.css_classes, :title => title s << ": #{h subject}" if subject @@ -104,13 +104,29 @@ # * :text - Link text (default to the formatted revision) def link_to_revision(revision, project, options={}) text = options.delete(:text) || format_revision(revision) + rev = revision.respond_to?(:identifier) ? revision.identifier : revision - link_to(text, {:controller => 'repositories', :action => 'revision', :id => project, :rev => revision}, :title => l(:label_revision_id, revision)) + 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: - # + # # link_to_project(project) # => link to the specified project overview # link_to_project(project, :action=>'settings') # => link to project settings # link_to_project(project, {:only_path => false}, :class => "project") # => 3rd arg adds html options @@ -144,15 +160,15 @@ html_options[:onclick] = "promptToRemote('#{text}', '#{param}', '#{url_for(url)}'); return false;" link_to name, {}, html_options end - + def format_activity_title(text) h(truncate_single_line(text, :length => 100)) end - + def format_activity_day(date) date == Date.today ? l(:label_today).titleize : format_date(date) end - + def format_activity_description(text) h(truncate(text.to_s, :length => 120).gsub(%r{[\r\n]*<(pre|code)>.*$}m, '...')).gsub(/[\r\n]+/, "
") end @@ -164,29 +180,29 @@ h("#{version.project} - #{version}") end end - + def due_date_distance_in_words(date) if date l((date < Date.today ? :label_roadmap_overdue : :label_roadmap_due_in), distance_of_date_in_words(Date.today, date)) end end - def render_page_hierarchy(pages, node=nil) + def render_page_hierarchy(pages, node=nil, options={}) content = '' if pages[node] content << "\n" end content end - + # Renders flash messages def render_flash_messages s = '' @@ -195,7 +211,7 @@ end s end - + # Renders tabs and their content def render_tabs(tabs) if tabs.any? @@ -204,11 +220,11 @@ content_tag 'p', l(:label_no_data), :class => "nodata" end end - + # Renders the project quick-jump box def render_project_jump_box - # Retrieve them now to avoid a COUNT query - projects = User.current.projects.all + return unless User.current.logged? + projects = User.current.memberships.collect(&:project).compact.uniq if projects.any? s = '' + "" + @@ -222,7 +236,7 @@ s end end - + def project_tree_options_for_select(projects, options = {}) s = '' project_tree(projects) do |project, level| @@ -238,14 +252,14 @@ end s end - + # Yields the given block for each project with its level in the tree # # Wrapper for Project#project_tree def project_tree(projects, &block) Project.project_tree(projects, &block) end - + def project_nested_ul(projects, &block) s = '' if projects.any? @@ -256,7 +270,7 @@ else ancestors.pop s << "" - while (ancestors.any? && !project.is_descendant_of?(ancestors.last)) + while (ancestors.any? && !project.is_descendant_of?(ancestors.last)) ancestors.pop s << "\n" end @@ -269,20 +283,20 @@ end s end - + def principals_check_box_tags(name, principals) s = '' principals.sort.each do |principal| s << "\n" end - s + s end # Truncates and returns the string as a single line def truncate_single_line(string, *args) truncate(string.to_s, *args).gsub(%r{[\r\n]+}m, ' ') end - + # Truncates at line break after 250 characters or options[:length] def truncate_lines(string, options={}) length = options[:length] || 250 @@ -300,7 +314,7 @@ def authoring(created, author, options={}) l(options[:label] || :label_added_time_by, :author => link_to_user(author), :age => time_tag(created)) end - + def time_tag(time) text = distance_of_time_in_words(Time.now, time) if @project @@ -322,20 +336,18 @@ page_param = options.delete(:page_param) || :page per_page_links = options.delete(:per_page_links) url_param = params.dup - # don't reuse query params if filters are present - url_param.merge!(:fields => nil, :values => nil, :operators => nil) if url_param.delete(:set_filter) html = '' if paginator.current.previous - html << link_to_remote_content_update('« ' + l(:label_previous), url_param.merge(page_param => paginator.current.previous)) + ' ' + html << link_to_content_update('« ' + l(:label_previous), url_param.merge(page_param => paginator.current.previous)) + ' ' end html << (pagination_links_each(paginator, options) do |n| - link_to_remote_content_update(n.to_s, url_param.merge(page_param => n)) + link_to_content_update(n.to_s, url_param.merge(page_param => n)) end || '') - + if paginator.current.next - html << ' ' + link_to_remote_content_update((l(:label_next) + ' »'), url_param.merge(page_param => paginator.current.next)) + html << ' ' + link_to_content_update((l(:label_next) + ' »'), url_param.merge(page_param => paginator.current.next)) end unless count.nil? @@ -347,20 +359,14 @@ html end - + def per_page_links(selected=nil) - url_param = params.dup - url_param.clear if url_param.has_key?(:set_filter) - links = Setting.per_page_options_array.collect do |n| - n == selected ? n : link_to_remote(n, {:update => "content", - :url => params.dup.merge(:per_page => n), - :method => :get}, - {:href => url_for(url_param.merge(:per_page => n))}) + n == selected ? n : link_to_content_update(n, params.merge(:per_page => n)) end links.size > 1 ? l(:label_display_per_page, links.join(', ')) : nil end - + def reorder_links(name, url) link_to(image_tag('2uparrow.png', :alt => l(:label_sort_highest)), url.merge({"#{name}[move_to]" => 'highest'}), :method => :post, :title => l(:label_sort_highest)) + link_to(image_tag('1uparrow.png', :alt => l(:label_sort_higher)), url.merge({"#{name}[move_to]" => 'higher'}), :method => :post, :title => l(:label_sort_higher)) + @@ -372,13 +378,13 @@ elements = args.flatten elements.any? ? content_tag('p', args.join(' » ') + ' » ', :class => 'breadcrumb') : nil end - + def other_formats_links(&block) concat('

' + l(:label_export_to)) yield Redmine::Views::OtherFormatsBuilder.new(self) concat('

') end - + def page_header_title if @project.nil? || @project.new_record? a = [h(Setting.app_title), ''] @@ -386,7 +392,7 @@ else pname = [] b = [] - ancestors = (@project.root? ? [] : @project.ancestors.visible) + ancestors = (@project.root? ? [] : @project.ancestors.visible.all) if ancestors.any? root = ancestors.shift b << link_to_project(root, {:jump => current_menu_item}, :class => 'root') @@ -458,14 +464,21 @@ only_path = options.delete(:only_path) == false ? false : true text = Redmine::WikiFormatting.to_html(Setting.text_formatting, text, :object => obj, :attribute => attr) { |macro, args| exec_macro(macro, obj, args) } - - parse_non_pre_blocks(text) do |text| + + @parsed_headings = [] + text = parse_non_pre_blocks(text) do |text| [:parse_inline_attachments, :parse_wiki_links, :parse_redmine_links, :parse_headings].each do |method_name| send method_name, text, project, obj, attr, only_path, options end end + + if @parsed_headings.any? + replace_toc(text, @parsed_headings) + end + + text end - + def parse_non_pre_blocks(text) s = StringScanner.new(text) tags = [] @@ -494,13 +507,13 @@ end parsed end - + def parse_inline_attachments(text, project, obj, attr, only_path, options) # when using an image link, try to use an attachment, if possible if options[:attachments] || (obj && obj.respond_to?(:attachments)) attachments = nil text.gsub!(/src="([^\/"]+\.(bmp|gif|jpg|jpeg|png))"(\s+alt="([^"]*)")?/i) do |m| - filename, ext, alt, alttext = $1.downcase, $2, $3, $4 + filename, ext, alt, alttext = $1.downcase, $2, $3, $4 attachments ||= (options[:attachments] || obj.attachments).sort_by(&:created_on).reverse # search for the picture in attachments if found = attachments.detect { |att| att.filename.downcase == filename } @@ -563,7 +576,7 @@ end end end - + # Redmine links # # Examples: @@ -588,16 +601,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 +634,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 +657,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,25 +696,30 @@ end end end - leading + (link || "#{prefix}#{sep}#{identifier}") + leading + (link || "#{project_prefix}#{prefix}#{sep}#{identifier}") end end - - TOC_RE = /

\{\{([<>]?)toc\}\}<\/p>/i unless const_defined?(:TOC_RE) + HEADING_RE = /]+)?>(.+?)<\/h(1|2|3|4)>/i unless const_defined?(:HEADING_RE) - + # Headings and TOC - # Adds ids and links to headings and renders the TOC if needed unless options[:headings] is set to false + # Adds ids and links to headings unless options[:headings] is set to false def parse_headings(text, project, obj, attr, only_path, options) - headings = [] + return if options[:headings] == false + text.gsub!(HEADING_RE) do level, attrs, content = $1.to_i, $2, $3 item = strip_tags(content).strip anchor = item.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-') - headings << [level, anchor, item] - "#{content}" - end unless options[:headings] == false - + @parsed_headings << [level, anchor, item] + "\n#{content}" + end + end + + TOC_RE = /

\{\{([<>]?)toc\}\}<\/p>/i unless const_defined?(:TOC_RE) + + # Renders the TOC with given headings + def replace_toc(text, headings) text.gsub!(TOC_RE) do if headings.empty? '' @@ -778,13 +800,13 @@ ), :class => 'progress', :style => "width: #{width};") + content_tag('p', legend, :class => 'pourcent') end - + def checked_image(checked=true) if checked image_tag 'toggle_check.png' end end - + def context_menu(url) unless @context_menu_included content_for :header_tags do @@ -832,13 +854,15 @@ 'Calendar._FD = 1;' # Monday when 7 'Calendar._FD = 0;' # Sunday + when 6 + 'Calendar._FD = 6;' # Saturday else '' # use language end - + javascript_include_tag('calendar/calendar') + javascript_include_tag("calendar/lang/calendar-#{current_language.to_s.downcase}.js") + - javascript_tag(start_of_week) + + javascript_tag(start_of_week) + javascript_include_tag('calendar/calendar-setup') + stylesheet_link_tag('calendar') end @@ -872,10 +896,56 @@ 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 "" end + def robot_exclusion_tag + '' + end + + def stylesheet_platform_font_tag + agent = request.env['HTTP_USER_AGENT'] + name = 'fonts-generic' + if agent and agent =~ %r{Windows} + name = 'fonts-ms' + elsif agent and agent =~ %r{Macintosh} + name = 'fonts-mac' + end + stylesheet_link_tag name, :media => 'all' + end + + # Returns true if arg is expected in the API response + def include_in_api_response?(arg) + unless @included_in_api_response + param = params[:include] + @included_in_api_response = param.is_a?(Array) ? param.collect(&:to_s) : param.to_s.split(',') + @included_in_api_response.collect!(&:strip) + end + @included_in_api_response.include?(arg.to_s) + end + + # Returns options or nil if nometa param or X-Redmine-Nometa header + # was set in the request + def api_meta(options) + if params[:nometa].present? || request.headers['X-Redmine-Nometa'] + # compatibility mode for activeresource clients that raise + # an error when unserializing an array with attributes + nil + else + options + end + end + private def wiki_helper @@ -883,12 +953,8 @@ extend helper return self end - - def link_to_remote_content_update(text, url_params) - link_to_remote(text, - {:url => url_params, :method => :get, :update => 'content', :complete => 'window.scrollTo(0,0)'}, - {:href => url_for(:params => url_params)} - ) + + def link_to_content_update(text, url_params = {}, html_options = {}) + link_to(text, url_params, html_options) end - end diff -r f7c525dc7585 -r 0b6c82dead28 app/helpers/attachments_helper.rb --- a/app/helpers/attachments_helper.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/helpers/attachments_helper.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -21,14 +21,26 @@ # :author -- author names are not displayed if set to false def link_to_attachments(container, options = {}) options.assert_valid_keys(:author) - + if container.attachments.any? options = {:deletable => container.attachments_deletable?, :author => true}.merge(options) render :partial => 'attachments/links', :locals => {:attachments => container.attachments, :options => options} end end - + def to_utf8(str) - 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 + + begin + Iconv.conv('UTF-8//IGNORE', 'UTF-8', str + ' ')[0..-3] + rescue Iconv::InvalidEncoding + # "UTF-8//IGNORE" is not supported on some OS + str + end end end diff -r f7c525dc7585 -r 0b6c82dead28 app/helpers/calendars_helper.rb --- a/app/helpers/calendars_helper.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/helpers/calendars_helper.rb Mon Jul 25 14:23:37 2011 +0100 @@ -32,14 +32,6 @@ end def link_to_month(link_name, year, month, options={}) - project_id = options[:project].present? ? options[:project].to_param : nil - - link_target = calendar_path(:year => year, :month => month, :project_id => project_id) - - link_to_remote(link_name, - {:update => "content", :url => link_target, :method => :put}, - {:href => link_target}) - + link_to_content_update(link_name, params.merge(:year => year, :month => month)) end - end diff -r f7c525dc7585 -r 0b6c82dead28 app/helpers/custom_fields_helper.rb --- a/app/helpers/custom_fields_helper.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/helpers/custom_fields_helper.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -37,7 +37,7 @@ field_id = "#{name}_custom_field_values_#{custom_field.id}" field_format = Redmine::CustomFieldFormat.find_by_name(custom_field.field_format) - case field_format.edit_as + case field_format.try(:edit_as) when "date" text_field_tag(field_name, custom_value.value, :id => field_id, :size => 10) + calendar_for(field_id) @@ -49,7 +49,7 @@ blank_option = custom_field.is_required? ? (custom_field.default_value.blank? ? "" : '') : '' - select_tag(field_name, blank_option + options_for_select(custom_field.possible_values, custom_value.value), :id => field_id) + select_tag(field_name, blank_option + options_for_select(custom_field.possible_values_options(custom_value.customized), custom_value.value), :id => field_id) else text_field_tag(field_name, custom_value.value, :id => field_id) end @@ -68,11 +68,11 @@ custom_field_label_tag(name, custom_value) + custom_field_tag(name, custom_value) end - def custom_field_tag_for_bulk_edit(name, custom_field) + def custom_field_tag_for_bulk_edit(name, custom_field, projects=nil) field_name = "#{name}[custom_field_values][#{custom_field.id}]" field_id = "#{name}_custom_field_values_#{custom_field.id}" field_format = Redmine::CustomFieldFormat.find_by_name(custom_field.field_format) - case field_format.edit_as + case field_format.try(:edit_as) when "date" text_field_tag(field_name, '', :id => field_id, :size => 10) + calendar_for(field_id) @@ -83,7 +83,7 @@ [l(:general_text_yes), '1'], [l(:general_text_no), '0']]), :id => field_id) when "list" - select_tag(field_name, options_for_select([[l(:label_no_change_option), '']] + custom_field.possible_values), :id => field_id) + select_tag(field_name, options_for_select([[l(:label_no_change_option), '']] + custom_field.possible_values_options(projects)), :id => field_id) else text_field_tag(field_name, '', :id => field_id) end @@ -101,7 +101,18 @@ end # Return an array of custom field formats which can be used in select_tag - def custom_field_formats_for_select - Redmine::CustomFieldFormat.as_select + def custom_field_formats_for_select(custom_field) + Redmine::CustomFieldFormat.as_select(custom_field.class.customized_class.name) + end + + # Renders the custom_values in api views + def render_api_custom_values(custom_values, api) + api.array :custom_fields do + custom_values.each do |custom_value| + api.custom_field :id => custom_value.custom_field_id, :name => custom_value.custom_field.name do + api.value custom_value.value + end + end + end unless custom_values.empty? end end diff -r f7c525dc7585 -r 0b6c82dead28 app/helpers/gantt_helper.rb --- a/app/helpers/gantt_helper.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/helpers/gantt_helper.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -21,29 +21,21 @@ case in_or_out when :in if gantt.zoom < 4 - link_to_remote(l(:text_zoom_in), - {:url => gantt.params.merge(:zoom => (gantt.zoom+1)), :method => :get, :update => 'content'}, - {:href => url_for(gantt.params.merge(:zoom => (gantt.zoom+1))), - :class => 'icon icon-zoom-in'}) + link_to_content_update l(:text_zoom_in), + params.merge(gantt.params.merge(:zoom => (gantt.zoom+1))), + :class => 'icon icon-zoom-in' else content_tag('span', l(:text_zoom_in), :class => 'icon icon-zoom-in') end when :out if gantt.zoom > 1 - link_to_remote(l(:text_zoom_out), - {:url => gantt.params.merge(:zoom => (gantt.zoom-1)), :method => :get, :update => 'content'}, - {:href => url_for(gantt.params.merge(:zoom => (gantt.zoom-1))), - :class => 'icon icon-zoom-out'}) + link_to_content_update l(:text_zoom_out), + params.merge(gantt.params.merge(:zoom => (gantt.zoom-1))), + :class => 'icon icon-zoom-out' else content_tag('span', l(:text_zoom_out), :class => 'icon icon-zoom-out') end end end - - def number_of_issues_on_versions(gantt) - versions = gantt.events.collect {|event| (event.is_a? Version) ? event : nil}.compact - - versions.sum {|v| v.fixed_issues.for_gantt.with_query(@query).count} - end end diff -r f7c525dc7585 -r 0b6c82dead28 app/helpers/issues_helper.rb --- a/app/helpers/issues_helper.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/helpers/issues_helper.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -54,20 +54,30 @@ "#{@cached_label_assigned_to}: #{issue.assigned_to}
" + "#{@cached_label_priority}: #{issue.priority.name}" end - + + def issue_heading(issue) + h("#{issue.tracker} ##{issue.id}") + end + def render_issue_subject_with_tree(issue) s = '' - issue.ancestors.each do |ancestor| + ancestors = issue.root? ? [] : issue.ancestors.visible.all + ancestors.each do |ancestor| s << '

' + content_tag('p', link_to_issue(ancestor)) end - s << '
' + content_tag('h3', h(issue.subject)) - s << '
' * (issue.ancestors.size + 1) + s << '
' + subject = h(issue.subject) + if issue.is_private? + subject = content_tag('span', l(:field_is_private), :class => 'private') + ' ' + subject + end + s << content_tag('h3', subject) + s << '
' * (ancestors.size + 1) s end - + def render_descendants_tree(issue) s = '
' - issue_list(issue.descendants.sort_by(&:lft)) do |child, level| + issue_list(issue.descendants.visible.sort_by(&:lft)) do |child, level| s << content_tag('tr', content_tag('td', check_box_tag("ids[]", child.id, false, :id => nil), :class => 'checkbox') + content_tag('td', link_to_issue(child, :truncate => 60), :class => 'subject') + @@ -79,7 +89,7 @@ s << '
' s end - + def render_custom_fields_rows(issue) return if issue.custom_field_values.empty? ordered_values = [] @@ -98,21 +108,58 @@ s << "\n" s end - + + def issues_destroy_confirmation_message(issues) + issues = [issues] unless issues.is_a?(Array) + message = l(:text_issues_destroy_confirmation) + descendant_count = issues.inject(0) {|memo, i| memo += (i.right - i.left - 1)/2} + if descendant_count > 0 + issues.each do |issue| + next if issue.root? + issues.each do |other_issue| + descendant_count -= 1 if issue.is_descendant_of?(other_issue) + end + end + if descendant_count > 0 + message << "\n" + l(:text_issues_destroy_descendants_confirmation, :count => descendant_count) + end + end + message + end + def sidebar_queries unless @sidebar_queries # User can see public queries and his own queries visible = ARCondition.new(["is_public = ? OR user_id = ?", true, (User.current.logged? ? User.current.id : 0)]) # 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', + @sidebar_queries = Query.find(:all, + :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('
') + 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' @@ -135,6 +182,10 @@ label = l(:field_parent_issue) value = "##{detail.value}" unless detail.value.blank? old_value = "##{detail.old_value}" unless detail.old_value.blank? + + when detail.prop_key == 'is_private' + value = l(detail.value == "0" ? :general_text_No : :general_text_Yes) unless detail.value.blank? + old_value = l(detail.old_value == "0" ? :general_text_No : :general_text_Yes) unless detail.old_value.blank? end when 'cf' custom_field = CustomField.find_by_id(detail.prop_key) @@ -151,7 +202,7 @@ label ||= detail.prop_key value ||= detail.value old_value ||= detail.old_value - + unless no_html label = content_tag('strong', label) old_value = content_tag("i", h(old_value)) if detail.old_value @@ -163,8 +214,17 @@ value = content_tag("i", h(value)) if value 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? @@ -188,14 +248,28 @@ return record.name if record end end - + + # Renders issue children recursively + def render_api_issue_children(issue, api) + return if issue.leaf? + api.array :children do + issue.children.each do |child| + api.issue(:id => child.id) do + api.tracker(:id => child.tracker_id, :name => child.tracker.name) unless child.tracker.nil? + api.subject child.subject + render_api_issue_children(child, api) + end + end + end + end + def issues_to_csv(issues, project = nil) - ic = Iconv.new(l(:general_csv_encoding), 'UTF-8') + ic = Iconv.new(l(:general_csv_encoding), 'UTF-8') decimal_separator = l(:general_csv_decimal_separator) export = FCSV.generate(:col_sep => l(:general_csv_separator)) do |csv| # csv header fields headers = [ "#", - l(:field_status), + l(:field_status), l(:field_project), l(:field_tracker), l(:field_priority), @@ -222,9 +296,9 @@ # csv lines issues.each do |issue| fields = [issue.id, - issue.status.name, + issue.status.name, issue.project.name, - issue.tracker.name, + issue.tracker.name, issue.priority.name, issue.subject, issue.assigned_to, @@ -236,7 +310,7 @@ issue.done_ratio, issue.estimated_hours.to_s.gsub('.', decimal_separator), issue.parent_id, - format_time(issue.created_on), + format_time(issue.created_on), format_time(issue.updated_on) ] custom_fields.each {|f| fields << show_value(issue.custom_value_for(f)) } diff -r f7c525dc7585 -r 0b6c82dead28 app/helpers/messages_helper.rb --- a/app/helpers/messages_helper.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/helpers/messages_helper.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 app/helpers/projects_helper.rb --- a/app/helpers/projects_helper.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/helpers/projects_helper.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -20,11 +20,11 @@ return '' unless version && version.is_a?(Version) link_to_if version.visible?, format_version_name(version), { :controller => 'versions', :action => 'show', :id => version }, options end - + def project_settings_tabs tabs = [{:name => 'info', :action => :edit_project, :partial => 'projects/edit', :label => :label_information_plural}, + {:name => 'overview', :action => :edit_project, :partial => 'projects/settings/overview', :label => :label_welcome_page}, {:name => 'modules', :action => :select_project_modules, :partial => 'projects/settings/modules', :label => :label_module_plural}, - {:name => 'members', :action => :manage_members, :partial => 'projects/settings/members', :label => :label_member_plural}, {:name => 'versions', :action => :manage_versions, :partial => 'projects/settings/versions', :label => :label_version_plural}, {:name => 'categories', :action => :manage_categories, :partial => 'projects/settings/issue_categories', :label => :label_issue_category_plural}, {:name => 'wiki', :action => :manage_wiki, :partial => 'projects/settings/wiki', :label => :label_wiki}, @@ -32,9 +32,9 @@ {:name => 'boards', :action => :manage_boards, :partial => 'projects/settings/boards', :label => :label_board_plural}, {:name => 'activities', :action => :manage_project_activities, :partial => 'projects/settings/activities', :label => :enumeration_activities} ] - tabs.select {|tab| User.current.allowed_to?(tab[:action], @project)} + tabs.select {|tab| User.current.allowed_to?(tab[:action], @project)} end - + def parent_project_select_tag(project) selected = project.parent # retrieve the requested parent project @@ -42,12 +42,22 @@ if parent_id selected = (parent_id.blank? ? nil : Project.find(parent_id)) end - + options = '' options << "" if project.allowed_parents.include?(nil) options << project_tree_options_for_select(project.allowed_parents.compact, :selected => selected) content_tag('select', options, :name => 'project[parent_id]', :id => 'project_parent_id') end + + def render_project_short_description(project) + s = '' + if (project.short_description) + s << "
" + s << textilizable(project.short_description, :project => project).gsub(/<[^>]+>/, '') + s << "
" + end + s + end # Renders a tree of projects as a nested set of unordered lists # The given collection may be a subset of the whole project tree @@ -65,7 +75,7 @@ else ancestors.pop s << "" - while (ancestors.any? && !project.is_descendant_of?(ancestors.last)) + while (ancestors.any? && !project.is_descendant_of?(ancestors.last)) ancestors.pop s << "\n" end @@ -73,7 +83,7 @@ classes = (ancestors.empty? ? 'root' : 'child') s << "
  • " + link_to_project(project, {}, :class => "project #{User.current.member_of?(project) ? 'my-project' : nil}") - s << "
    #{textilizable(project.short_description, :project => project)}
    " unless project.description.blank? + s << render_project_short_description(project) s << "
    \n" ancestors << project end @@ -84,68 +94,73 @@ end + def render_my_project_in_hierarchy(project) + + s = '' + + if User.current.member_of?(project) + + # set the project environment to please macros. + @project = project + + classes = (project.root? ? 'root' : 'child') + + s << "
  • " + + link_to_project(project, {}, :class => "project my-project") + if project.is_public? + s << " " << l("field_is_public") << "" + else + s << " " << l("field_is_private") << "" + end + s << render_project_short_description(project) + s << "
    \n" + + cs = '' + project.children.each do |child| + cs << render_my_project_in_hierarchy(child) + end + + if cs != '' + s << "
      \n" << cs << "
    \n"; + end + + end + + s + + end + # Renders a tree of projects where the current user belongs # as a nested set of unordered lists # The given collection may be a subset of the whole project tree # (eg. some intermediate nodes are private and can not be seen) def render_my_project_hierarchy(projects) + s = '' - a = '' + original_project = @project - # Flag to tell if user has any projects - t = FALSE - - if projects.any? - ancestors = [] - original_project = @project - projects.each do |project| - # set the project environment to please macros. - - @project = project - - if User.current.member_of?(project): - - t = TRUE - - if (ancestors.empty? || project.is_descendant_of?(ancestors.last)) - s << "
      \n" - else - ancestors.pop - s << "" - while (ancestors.any? && !project.is_descendant_of?(ancestors.last)) - ancestors.pop - s << "
  • \n" - end - end - - classes = (ancestors.empty? ? 'root' : 'child') - s << "
  • " + - link_to_project(project, {}, :class => "project my-project") - if project.is_public? - s << " " << l("field_is_public") << "" - else - s << " " << l("field_is_private") << "" - end - s << "
    #{textilizable(project.short_description, :project => project)}
    " unless project.description.blank? - s << "
    \n" - ancestors << project - end - end - s << ("
  • \n" * ancestors.size) - @project = original_project + projects.each do |project| + if project.root? || !projects.include?(project.parent) + s << render_my_project_in_hierarchy(project) + end end - if t == TRUE + @project = original_project + + if s != '' + a = '' a << "

    " a << l("label_my_project_plural") a << "

    " + a << "
      \n" a << s - else - a = s + a << "
    \n" + s = a end + + s - a end # Renders a tree of projects that the current user does not belong @@ -198,11 +213,7 @@ s << " no_description" if project.description.blank? s << "'>" << link_to_project(project, {}, :class => "project #{User.current.member_of?(project) ? 'my-project' : nil}"); s << "
    " - unless project.description.blank? - s << "
    " - s << textilizable(project.short_description, :project => project) - s << "
    " - end + s << render_project_short_description(project) s << "" @@ -230,7 +241,9 @@ s << "" project.children.each do |child| - s << render_project_in_table(child, oddeven, level + 1) + if child.is_public? or User.current.member_of?(child) + s << render_project_in_table(child, oddeven, level + 1) + end end s @@ -247,7 +260,7 @@ if selected && !versions.include?(selected) grouped[selected.project.name] << [selected.name, selected.id] end - + if grouped.keys.size > 1 grouped_options_for_select(grouped, selected && selected.id) else diff -r f7c525dc7585 -r 0b6c82dead28 app/helpers/queries_helper.rb --- a/app/helpers/queries_helper.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/helpers/queries_helper.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -70,6 +70,7 @@ cond = "project_id IS NULL" cond << " OR project_id = #{@project.id}" if @project @query = Query.find(params[:query_id], :conditions => cond) + raise ::Unauthorized unless @query.visible? @query.project = @project session[:query] = {:id => @query.id, :project_id => @query.project_id} sort_clear @@ -78,16 +79,16 @@ # Give it a name, required to be valid @query = Query.new(:name => "_") @query.project = @project - if params[:fields] + if params[:fields] || params[:f] @query.filters = {} - @query.add_filters(params[:fields], params[:operators], params[:values]) + @query.add_filters(params[:fields] || params[:f], params[:operators] || params[:op], params[:values] || params[:v]) else @query.available_filters.keys.each do |field| @query.add_short_filter(field, params[field]) if params[field] end end @query.group_by = params[:group_by] - @query.column_names = params[:query] && params[:query][:column_names] + @query.column_names = params[:c] || (params[:query] && params[:query][:column_names]) session[:query] = {:project_id => @query.project_id, :filters => @query.filters, :group_by => @query.group_by, :column_names => @query.column_names} else @query = Query.find_by_id(session[:query][:id]) if session[:query][:id] diff -r f7c525dc7585 -r 0b6c82dead28 app/helpers/reports_helper.rb --- a/app/helpers/reports_helper.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/helpers/reports_helper.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,22 +1,22 @@ -# 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 # 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 ReportsHelper - + def aggregate(data, criteria) a = 0 data.each { |row| @@ -28,9 +28,9 @@ } unless data.nil? a end - + def aggregate_link(data, criteria, *args) a = aggregate data, criteria a > 0 ? link_to(a, *args) : '-' - end + end end diff -r f7c525dc7585 -r 0b6c82dead28 app/helpers/repositories_helper.rb --- a/app/helpers/repositories_helper.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/helpers/repositories_helper.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,48 +1,38 @@ -# 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 # 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 'iconv' +require 'redmine/codeset_util' module RepositoriesHelper - # truncate rev to 8 chars if it's quite long - def truncate_long_revision_name(rev) - rev.to_s.size <= 12 ? rev.to_s : rev.to_s[0, 8] - end - private :truncate_long_revision_name - def format_revision(revision) - if [:identifier, :revision, :scmid].all? { |e| revision.respond_to? e } - if revision.scmid and revision.revision != revision.scmid and /[^\d]/ !~ revision.revision - "#{revision.revision}:#{revision.scmid}" # number:hashid - else - truncate_long_revision_name(revision.identifier) - end + if revision.respond_to? :format_identifier + revision.format_identifier else - truncate_long_revision_name(revision) + revision.to_s end end - module_function :format_revision # callable as RepositoriesHelper.format_revision - + 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 = '' @@ -52,14 +42,15 @@ 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 when 'A' # Detects moved/copied files if !change.from_path.blank? - change.action = @changeset.changes.detect {|c| c.action == 'D' && c.path == change.from_path} ? 'R' : 'C' + change.action = + @changeset.changes.detect {|c| c.action == 'D' && c.path == change.from_path} ? 'R' : 'C' end change when 'D' @@ -67,8 +58,8 @@ else change end - end.compact - + end.compact + tree = { } changes.each do |change| p = tree @@ -83,13 +74,11 @@ end p[:c] = change end - render_changes_tree(tree[:s]) end - + def render_changes_tree(tree) return '' if tree.nil? - output = '' output << '' output end - + def to_utf8(str) + return str if str.nil? + str = to_utf8_internal(str) + if str.respond_to?(:force_encoding) + str.force_encoding('UTF-8') + end + str + end + + def to_utf8_internal(str) + return str if str.nil? + if str.respond_to?(:force_encoding) + str.force_encoding('ASCII-8BIT') + end + return str if str.empty? return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii + if str.respond_to?(:force_encoding) + str.force_encoding('UTF-8') + end @encodings ||= Setting.repositories_encodings.split(',').collect(&:strip) @encodings.each do |encoding| begin @@ -137,68 +143,142 @@ # do nothing here and try the next encoding end end - str + str = Redmine::CodesetUtil.replace_invalid_utf8(str) end - - def repository_field_tags(form, repository) + private :to_utf8_internal + + 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?)) + '
    (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 => l(:field_path_to_repository), + :size => 60, :required => true, + :disabled => (repository && !repository.new_record?))) + + content_tag('p', form.select( + :log_encoding, [nil] + Setting::ENCODINGS, + :label => l(:field_commit_logs_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 => true)) -# (repository && !repository.root_url.blank?))) + content_tag('p', form.text_field( + :url, :label => l(:field_path_to_repository), + :size => 60, :required => true, + :disabled => (repository && !repository.root_url.blank?) + ) + + '
    ' + l(:text_mercurial_repository_note)) + + content_tag('p', form.select( + :path_encoding, [nil] + Setting::ENCODINGS, + :label => l(:field_scm_path_encoding) + ) + + '
    ' + l(:text_scm_path_encoding_note)) 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 => l(:field_path_to_repository), + :size => 60, :required => true, + :disabled => (repository && !repository.root_url.blank?) + ) + + '
    ' + l(:text_git_repository_note)) + + content_tag('p', form.select( + :path_encoding, [nil] + Setting::ENCODINGS, + :label => l(:field_scm_path_encoding) + ) + + '
    ' + l(:text_scm_path_encoding_note)) + + content_tag('p', form.check_box( + :extra_report_last_commit, + :label => l(:label_git_report_last_commit) + )) 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 => l(:field_cvsroot), + :size => 60, :required => true, + :disabled => !repository.new_record?)) + + content_tag('p', form.text_field( + :url, + :label => l(:field_cvs_module), + :size => 30, :required => true, + :disabled => !repository.new_record?)) + + content_tag('p', form.select( + :log_encoding, [nil] + Setting::ENCODINGS, + :label => l(:field_commit_logs_encoding), :required => true)) + + content_tag('p', form.select( + :path_encoding, [nil] + Setting::ENCODINGS, + :label => l(:field_scm_path_encoding) + ) + + '
    ' + l(:text_scm_path_encoding_note)) 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 => l(:field_path_to_repository), + :size => 60, :required => true, + :disabled => (repository && !repository.new_record?))) + + content_tag('p', form.select( + :log_encoding, [nil] + Setting::ENCODINGS, + :label => l(:field_commit_logs_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 => l(:field_root_directory), + :size => 60, :required => true, + :disabled => (repository && !repository.root_url.blank?))) + + content_tag('p', form.select( + :path_encoding, [nil] + Setting::ENCODINGS, + :label => l(:field_scm_path_encoding) + ) + + '
    ' + l(:text_scm_path_encoding_note)) end end diff -r f7c525dc7585 -r 0b6c82dead28 app/helpers/search_helper.rb --- a/app/helpers/search_helper.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/helpers/search_helper.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -57,7 +57,7 @@ c = results_by_type[t] next if c == 0 text = "#{type_label(t)} (#{c})" - links << link_to(text, :q => params[:q], :titles_only => params[:title_only], :all_words => params[:all_words], :scope => params[:scope], t => 1) + links << link_to(text, :q => params[:q], :titles_only => params[:titles_only], :all_words => params[:all_words], :scope => params[:scope], t => 1) end ('') unless links.empty? end diff -r f7c525dc7585 -r 0b6c82dead28 app/helpers/settings_helper.rb --- a/app/helpers/settings_helper.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/helpers/settings_helper.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ # 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 # 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. @@ -27,46 +27,53 @@ {:name => 'repositories', :partial => 'settings/repositories', :label => :label_repository_plural} ] end - + def setting_select(setting, choices, options={}) if blank_text = options.delete(:blank) choices = [[blank_text.is_a?(Symbol) ? l(blank_text) : blank_text, '']] + choices end setting_label(setting, options) + - select_tag("settings[#{setting}]", options_for_select(choices, Setting.send(setting).to_s), options) + select_tag("settings[#{setting}]", + options_for_select(choices, Setting.send(setting).to_s), + options) end - + def setting_multiselect(setting, choices, options={}) setting_values = Setting.send(setting) setting_values = [] unless setting_values.is_a?(Array) - + setting_label(setting, options) + hidden_field_tag("settings[#{setting}][]", '') + choices.collect do |choice| - text, value = (choice.is_a?(Array) ? choice : [choice, choice]) - content_tag('label', - check_box_tag("settings[#{setting}][]", value, Setting.send(setting).include?(value)) + text.to_s, + text, value = (choice.is_a?(Array) ? choice : [choice, choice]) + content_tag( + 'label', + check_box_tag( + "settings[#{setting}][]", + value, + Setting.send(setting).include?(value) + ) + text.to_s, :class => 'block' - ) + ) end.join end - + def setting_text_field(setting, options={}) setting_label(setting, options) + text_field_tag("settings[#{setting}]", Setting.send(setting), options) end - + def setting_text_area(setting, options={}) setting_label(setting, options) + text_area_tag("settings[#{setting}]", Setting.send(setting), options) end - + def setting_check_box(setting, options={}) setting_label(setting, options) + hidden_field_tag("settings[#{setting}]", 0) + - check_box_tag("settings[#{setting}]", 1, Setting.send("#{setting}?"), options) + check_box_tag("settings[#{setting}]", 1, Setting.send("#{setting}?"), options) end - + def setting_label(setting, options={}) label = options.delete(:label) label != false ? content_tag("label", l(label || "setting_#{setting}")) : '' diff -r f7c525dc7585 -r 0b6c82dead28 app/helpers/sort_helper.rb --- a/app/helpers/sort_helper.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/helpers/sort_helper.rb Mon Jul 25 14:23:37 2011 +0100 @@ -200,16 +200,12 @@ caption = column.to_s.humanize unless caption sort_options = { :sort => @sort_criteria.add(column.to_s, order).to_param } - # don't reuse params if filters are present - url_options = params.has_key?(:set_filter) ? sort_options : params.merge(sort_options) + url_options = params.merge(sort_options) # Add project_id to url_options url_options = url_options.merge(:project_id => params[:project_id]) if params.has_key?(:project_id) - link_to_remote(caption, - {:update => "content", :url => url_options, :method => :get}, - {:href => url_for(url_options), - :class => css}) + link_to_content_update(caption, url_options, :class => css) end # Returns a table header tag with a sort link for the named column diff -r f7c525dc7585 -r 0b6c82dead28 app/helpers/users_helper.rb --- a/app/helpers/users_helper.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/helpers/users_helper.rb Mon Jul 25 14:23:37 2011 +0100 @@ -33,6 +33,10 @@ options end + def user_mail_notification_options(user) + user.valid_notification_options.collect {|o| [l(o.last), o.first]} + end + def change_status_link(user) url = {:controller => 'users', :action => 'update', :id => user, :page => params[:page], :status => params[:status], :tab => nil} diff -r f7c525dc7585 -r 0b6c82dead28 app/helpers/versions_helper.rb --- a/app/helpers/versions_helper.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/helpers/versions_helper.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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,11 +17,10 @@ module VersionsHelper - STATUS_BY_CRITERIAS = %w(category tracker priority author assigned_to) + STATUS_BY_CRITERIAS = %w(category tracker status priority author assigned_to) def render_issue_status_by(version, criteria) - criteria ||= 'category' - raise 'Unknown criteria' unless STATUS_BY_CRITERIAS.include?(criteria) + criteria = 'category' unless STATUS_BY_CRITERIAS.include?(criteria) h = Hash.new {|k,v| k[v] = [0, 0]} begin diff -r f7c525dc7585 -r 0b6c82dead28 app/helpers/watchers_helper.rb --- a/app/helpers/watchers_helper.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/helpers/watchers_helper.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -16,28 +16,18 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. module WatchersHelper - - # Valid options - # * :id - the element id - # * :replace - a string or array of element ids that will be - # replaced - def watcher_tag(object, user, options={:replace => 'watcher'}) - id = options[:id] - id ||= options[:replace] if options[:replace].is_a? String - content_tag("span", watcher_link(object, user, options), :id => id) + + def watcher_tag(object, user, options={}) + content_tag("span", watcher_link(object, user), :class => watcher_css(object)) end - # Valid options - # * :replace - a string or array of element ids that will be - # replaced - def watcher_link(object, user, options={:replace => 'watcher'}) + def watcher_link(object, user) return '' unless user && user.logged? && object.respond_to?('watched_by?') watched = object.watched_by?(user) url = {:controller => 'watchers', :action => (watched ? 'unwatch' : 'watch'), :object_type => object.class.to_s.underscore, - :object_id => object.id, - :replace => options[:replace]} + :object_id => object.id} link_to_remote((watched ? l(:button_unwatch) : l(:button_watch)), {:url => url}, :href => url_for(url), @@ -45,6 +35,11 @@ end + # Returns the css class used to identify watch links for a given +object+ + def watcher_css(object) + "#{object.class.to_s.underscore}-#{object.id}-watcher" + end + # Returns a comma separated list of users watching the given object def watchers_list(object) remove_allowed = User.current.allowed_to?("delete_#{object.class.name.underscore}_watchers".to_sym, object.project) diff -r f7c525dc7585 -r 0b6c82dead28 app/helpers/wiki_helper.rb --- a/app/helpers/wiki_helper.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/helpers/wiki_helper.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -18,52 +18,18 @@ module WikiHelper def wiki_page_options_for_select(pages, selected = nil, parent = nil, level = 0) + pages = pages.group_by(&:parent) unless pages.is_a?(Hash) s = '' - pages.select {|p| p.parent == parent}.each do |page| - attrs = "value='#{page.id}'" - attrs << " selected='selected'" if selected == page - indent = (level > 0) ? (' ' * level * 2 + '» ') : nil - - s << "\n" + - wiki_page_options_for_select(pages, selected, page, level + 1) + if pages.has_key?(parent) + pages[parent].each do |page| + attrs = "value='#{page.id}'" + attrs << " selected='selected'" if selected == page + indent = (level > 0) ? (' ' * level * 2 + '» ') : nil + + s << "\n" + + wiki_page_options_for_select(pages, selected, page, level + 1) + end 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] = '' + words[add_at] - words[add_to] = words[add_to] + '' - end - if del_at - words.insert del_at - del_off + dels + words_add, '' + deleted + '' - dels += 1 - del_off += words_del - words_del = 0 - end - end - simple_format_without_paragraph(words.join(' ')) - end end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/all-wcprops --- a/app/models/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,371 +1,95 @@ K 25 svn:wc:ra_dav:version-url -V 35 -/svn/!svn/ver/4404/trunk/app/models +V 49 +/svn/!svn/ver/6254/branches/1.2-stable/app/models END -document.rb +setting.rb K 25 svn:wc:ra_dav:version-url -V 47 -/svn/!svn/ver/3358/trunk/app/models/document.rb +V 60 +/svn/!svn/ver/6105/branches/1.2-stable/app/models/setting.rb +END +repository.rb +K 25 +svn:wc:ra_dav:version-url +V 63 +/svn/!svn/ver/6244/branches/1.2-stable/app/models/repository.rb END mail_handler.rb K 25 svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/4404/trunk/app/models/mail_handler.rb +V 65 +/svn/!svn/ver/6200/branches/1.2-stable/app/models/mail_handler.rb END -repository.rb +version.rb K 25 svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/3472/trunk/app/models/repository.rb +V 60 +/svn/!svn/ver/6200/branches/1.2-stable/app/models/version.rb END -time_entry.rb +issue_relation.rb K 25 svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/4277/trunk/app/models/time_entry.rb -END -token.rb -K 25 -svn:wc:ra_dav:version-url -V 44 -/svn/!svn/ver/2778/trunk/app/models/token.rb -END -journal_observer.rb -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/4221/trunk/app/models/journal_observer.rb -END -auth_source_ldap.rb -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/3492/trunk/app/models/auth_source_ldap.rb -END -principal.rb -K 25 -svn:wc:ra_dav:version-url -V 48 -/svn/!svn/ver/4076/trunk/app/models/principal.rb -END -version_custom_field.rb -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/3064/trunk/app/models/version_custom_field.rb -END -issue_custom_field.rb -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/337/trunk/app/models/issue_custom_field.rb +V 67 +/svn/!svn/ver/6125/branches/1.2-stable/app/models/issue_relation.rb END issue_category.rb K 25 svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/955/trunk/app/models/issue_category.rb -END -change.rb -K 25 -svn:wc:ra_dav:version-url -V 45 -/svn/!svn/ver/3860/trunk/app/models/change.rb +V 67 +/svn/!svn/ver/6200/branches/1.2-stable/app/models/issue_category.rb END enumeration.rb K 25 svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/3240/trunk/app/models/enumeration.rb +V 64 +/svn/!svn/ver/6200/branches/1.2-stable/app/models/enumeration.rb +END +attachment.rb +K 25 +svn:wc:ra_dav:version-url +V 63 +/svn/!svn/ver/6105/branches/1.2-stable/app/models/attachment.rb END issue.rb K 25 svn:wc:ra_dav:version-url -V 44 -/svn/!svn/ver/4394/trunk/app/models/issue.rb +V 58 +/svn/!svn/ver/6160/branches/1.2-stable/app/models/issue.rb END -time_entry_activity_custom_field.rb +tracker.rb K 25 svn:wc:ra_dav:version-url -V 71 -/svn/!svn/ver/2952/trunk/app/models/time_entry_activity_custom_field.rb +V 60 +/svn/!svn/ver/6200/branches/1.2-stable/app/models/tracker.rb END -member_role.rb +issue_status.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 -V 53 -/svn/!svn/ver/3240/trunk/app/models/issue_priority.rb -END -message_observer.rb -K 25 -svn:wc:ra_dav:version-url -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 -enabled_module.rb -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/2970/trunk/app/models/enabled_module.rb +V 65 +/svn/!svn/ver/6200/branches/1.2-stable/app/models/issue_status.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 -comment.rb -K 25 -svn:wc:ra_dav:version-url -V 45 -/svn/!svn/ver/479/trunk/app/models/comment.rb -END -wiki_content_observer.rb -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/2749/trunk/app/models/wiki_content_observer.rb +V 62 +/svn/!svn/ver/6207/branches/1.2-stable/app/models/wiki_page.rb END query.rb K 25 svn:wc:ra_dav:version-url -V 44 -/svn/!svn/ver/4387/trunk/app/models/query.rb +V 58 +/svn/!svn/ver/6175/branches/1.2-stable/app/models/query.rb END -member.rb +project.rb K 25 svn:wc:ra_dav:version-url -V 45 -/svn/!svn/ver/3929/trunk/app/models/member.rb -END -document_category_custom_field.rb -K 25 -svn:wc:ra_dav:version-url -V 69 -/svn/!svn/ver/2945/trunk/app/models/document_category_custom_field.rb -END -mailer.rb -K 25 -svn:wc:ra_dav:version-url -V 45 -/svn/!svn/ver/4373/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 +V 60 +/svn/!svn/ver/6205/branches/1.2-stable/app/models/project.rb END workflow.rb K 25 svn:wc:ra_dav:version-url -V 47 -/svn/!svn/ver/3709/trunk/app/models/workflow.rb +V 61 +/svn/!svn/ver/6159/branches/1.2-stable/app/models/workflow.rb END -user_custom_field.rb -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/333/trunk/app/models/user_custom_field.rb -END -time_entry_custom_field.rb -K 25 -svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/1689/trunk/app/models/time_entry_custom_field.rb -END -custom_field.rb -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/3672/trunk/app/models/custom_field.rb -END -setting.rb -K 25 -svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/3417/trunk/app/models/setting.rb -END -user.rb -K 25 -svn:wc:ra_dav:version-url -V 43 -/svn/!svn/ver/4234/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 -END -news_observer.rb -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/2637/trunk/app/models/news_observer.rb -END -message.rb -K 25 -svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/3373/trunk/app/models/message.rb -END -wiki_redirect.rb -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/720/trunk/app/models/wiki_redirect.rb -END -issue_relation.rb -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/3729/trunk/app/models/issue_relation.rb -END -document_observer.rb -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/2637/trunk/app/models/document_observer.rb -END -version.rb -K 25 -svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4073/trunk/app/models/version.rb -END -issue_priority_custom_field.rb -K 25 -svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/2945/trunk/app/models/issue_priority_custom_field.rb -END -board.rb -K 25 -svn:wc:ra_dav:version-url -V 44 -/svn/!svn/ver/3167/trunk/app/models/board.rb -END -attachment.rb -K 25 -svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/3774/trunk/app/models/attachment.rb -END -group_custom_field.rb -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/2869/trunk/app/models/group_custom_field.rb -END -issue_status.rb -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/3881/trunk/app/models/issue_status.rb -END -time_entry_activity.rb -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/3240/trunk/app/models/time_entry_activity.rb -END -tracker.rb -K 25 -svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/3188/trunk/app/models/tracker.rb -END -journal_detail.rb -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/478/trunk/app/models/journal_detail.rb -END -group.rb -K 25 -svn:wc:ra_dav:version-url -V 44 -/svn/!svn/ver/2869/trunk/app/models/group.rb -END -issue_observer.rb -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/2637/trunk/app/models/issue_observer.rb -END -changeset.rb -K 25 -svn:wc:ra_dav:version-url -V 48 -/svn/!svn/ver/3928/trunk/app/models/changeset.rb -END -role.rb -K 25 -svn:wc:ra_dav:version-url -V 43 -/svn/!svn/ver/3363/trunk/app/models/role.rb -END -project_custom_field.rb -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/333/trunk/app/models/project_custom_field.rb -END -wiki.rb -K 25 -svn:wc:ra_dav:version-url -V 43 -/svn/!svn/ver/3632/trunk/app/models/wiki.rb -END -custom_value.rb -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/4382/trunk/app/models/custom_value.rb -END -project.rb -K 25 -svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4402/trunk/app/models/project.rb -END -document_category.rb -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/3240/trunk/app/models/document_category.rb -END -news.rb -K 25 -svn:wc:ra_dav:version-url -V 43 -/svn/!svn/ver/3358/trunk/app/models/news.rb -END -user_preference.rb -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/1623/trunk/app/models/user_preference.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/entries --- a/app/models/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,30 +1,1050 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/models +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/models http://redmine.rubyforge.org/svn -2010-11-14T13:48:01.671461Z -4404 +2011-07-11T02:08:23.222641Z +6254 +tmaruyama + + + + + + + + + + + + + + +e93f8b46-1217-0410-a6f0-8f06a7374b81 + +repository.rb +file + + + + +2011-07-14T09:28:10.000000Z +69b0194a4a8902866cdce165285e8afc +2011-07-11T00:24:22.360802Z +6244 +tmaruyama +has-props + + + + + + + + + + + + + + + + + + + + +8881 + +time_entry.rb +file + + + + +2011-07-14T09:24:21.000000Z +12b308b5edbf61bfcdd8f08bf9395214 +2011-05-17T03:58:41.797610Z +5820 +tmaruyama +has-props + + + + + + + + + + + + + + + + + + + + +4502 + +principal.rb +file + + + + +2011-07-14T09:24:09.000000Z +01332c0957f952b76c01e7c7ebd112f0 +2010-09-10T18:46:23.747988Z +4076 +edavis10 +has-props + + + + + + + + + + + + + + + + + + + + +2265 + +version_custom_field.rb +file + + + + +2011-07-14T09:24:09.000000Z +6bf31c0491d87fff1481a91519f66363 +2009-11-15T15:22:55.021661Z +3064 jplang - - - - - - - - - - - - - - -e93f8b46-1217-0410-a6f0-8f06a7374b81 +has-props + + + + + + + + + + + + + + + + + + + + +888 + +issue_category.rb +file + + + + +2011-07-14T09:28:10.000000Z +ec31d0c8cdb2df490893c76540e1002a +2011-07-09T10:51:57.491707Z +6200 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +1746 + +change.rb +file + + + + +2011-07-14T09:24:21.000000Z +63c76383012ca1095d47a65c4bfc919f +2011-04-16T06:44:35.992296Z +5475 +tmaruyama +has-props + + + + + + + + + + + + + + + + + + + + +1237 + +enumeration.rb +file + + + + +2011-07-14T09:28:10.000000Z +e4954d5f5cfb81f4e1bab49aa36e210b +2011-07-09T10:51:57.491707Z +6200 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +3968 + +message_observer.rb +file + + + + +2011-07-14T09:24:21.000000Z +b14eaf5e829e101bc0b94269cbeaaaec +2011-05-17T03:57:57.454158Z +5818 +tmaruyama +has-props + + + + + + + + + + + + + + + + + + + + +977 + +watcher.rb +file + + + + +2011-07-14T09:24:09.000000Z +c72443f206052fafae720378fba40163 +2009-12-13T12:39:22.716082Z +3167 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +2093 + +wiki_content.rb +file + + + + +2011-07-14T09:24:21.000000Z +d554de7cd31404d9850f440ce635c3bf +2011-05-16T00:00:26.956449Z +5795 +tmaruyama +has-props + + + + + + + + + + + + + + + + + + + + +4445 + +enabled_module.rb +file + + + + +2011-07-14T09:24:21.000000Z +befbf6b5cdeb72008933c729fd7bcfeb +2011-05-18T07:52:23.784155Z +5841 +tmaruyama +has-props + + + + + + + + + + + + + + + + + + + + +1286 + +wiki_content_observer.rb +file + + + + +2011-07-14T09:24:09.000000Z +a6804cb0c0abc6de72a184e7384ed36d +2009-05-17T09:55:13.601447Z +2749 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +1201 + +query.rb +file + + + + +2011-07-14T09:28:10.000000Z +603aff236365a2eb3032722520e79b8c +2011-07-03T15:58:02.977468Z +6175 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +26518 + +document_category_custom_field.rb +file + + + + +2011-07-14T09:24:21.000000Z +1f419244916f9cab432c1a3bd2816abc +2011-05-18T07:51:51.105764Z +5840 +tmaruyama +has-props + + + + + + + + + + + + + + + + + + + + +901 + +mailer.rb +file + + + + +2011-07-14T09:24:21.000000Z +1370642e04670edfef01626bded416c9 +2011-05-17T03:57:10.939223Z +5816 +tmaruyama +has-props + + + + + + + + + + + + + + + + + + + + +19152 + +workflow.rb +file + + + + +2011-07-14T09:28:10.000000Z +7aa1cc2b6b82a9a1be3f1a02cab3a4ab +2011-07-02T17:28:33.181594Z +6159 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +4064 + +journal.rb +file + + + + +2011-07-14T09:24:21.000000Z +0d261b572288d4b000e3f92126c649f2 +2011-05-29T07:47:25.955545Z +5947 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +3418 + +user_custom_field.rb +file + + + + +2011-07-14T09:24:09.000000Z +47067c42f4d6607335adf75d11c3323b +2007-03-12T17:59:02.654744Z +333 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +878 + +custom_field.rb +file + + + + +2011-07-14T09:24:21.000000Z +3216923159aac3e5956fc6f0c3641d39 +2011-04-07T16:34:58.239484Z +5354 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +5175 + +news_observer.rb +file + + + + +2011-07-14T09:24:09.000000Z +b98015db4679606ee5f8d75e55574745 +2009-03-28T00:38:57.780983Z +2637 +edavis10 +has-props + + + + + + + + + + + + + + + + + + + + +962 + +wiki_redirect.rb +file + + + + +2011-07-14T09:24:09.000000Z +4e4c64bab677a9e081fc1230ff6a3773 +2007-09-09T17:05:38.846724Z +720 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +970 + +message.rb +file + + + + +2011-07-14T09:24:21.000000Z +357609c3b9eb9dd7d1bd0b60aba41fc0 +2011-05-17T03:57:34.529054Z +5817 +tmaruyama +has-props + + + + + + + + + + + + + + + + + + + + +3784 + +issue_relation.rb +file + + + + +2011-07-14T09:28:10.000000Z +3c39b23b283c08e3fdb054a888fbcbea +2011-06-26T12:51:09.940165Z +6125 +jbbarth +has-props + + + + + + + + + + + + + + + + + + + + +4862 + +issue_observer.rb +file + + + + +2011-07-14T09:24:09.000000Z +d4026d660fcb2601834d26268468aec2 +2009-03-28T00:38:57.780983Z +2637 +edavis10 +has-props + + + + + + + + + + + + + + + + + + + + +965 + +role.rb +file + + + + +2011-07-14T09:24:21.000000Z +b10288b80932bec34cf0ebc3d96b60bd +2011-04-15T13:23:13.506236Z +5466 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +5656 + +wiki.rb +file + + + + +2011-07-14T09:24:21.000000Z +c212affb4fc544749b3b14f4da6df9d3 +2011-04-11T19:21:57.549455Z +5423 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +3329 + +project_custom_field.rb +file + + + + +2011-07-14T09:24:09.000000Z +926ef98901f13ba13688fdc3ab0184fc +2007-03-12T17:59:02.654744Z +333 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +883 + +document_category.rb +file + + + + +2011-07-14T09:24:21.000000Z +972f4850db81506f13ca23cc5f42a7dd +2011-05-18T07:51:15.237937Z +5839 +tmaruyama +has-props + + + + + + + + + + + + + + + + + + + + +1107 + +user_preference.rb +file + + + + +2011-07-14T09:24:09.000000Z +feac9af79af67a78c767bd3def262255 +2011-02-21T09:53:29.844413Z +4900 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +1671 + +news.rb +file + + + + +2011-07-14T09:24:21.000000Z +5e1ef51f660c5013b9caec211bbe49e4 +2011-05-17T03:58:19.720730Z +5819 +tmaruyama +has-props + + + + + + + + + + + + + + + + + + + + +2207 repository dir @@ -35,11 +1055,11 @@ -2010-09-23T14:37:44.471831Z -6edd75717c818c718387e30ec7aee840 -2010-02-01T18:57:12.733490Z -3358 -edavis10 +2011-07-14T09:24:21.000000Z +8b3723a0f7c7b5927aa3d96d69d4c4ae +2011-05-15T23:52:48.954705Z +5794 +tmaruyama has-props @@ -61,7 +1081,7 @@ -1995 +2197 mail_handler.rb file @@ -69,10 +1089,10 @@ -2010-11-19T13:04:46.952746Z -dd4785525bab24b6791967d66ffe6cb9 -2010-11-14T13:48:01.671461Z -4404 +2011-07-14T09:28:10.000000Z +d556d0db1b9918f68dab8f97aa5faa23 +2011-07-09T10:51:57.491707Z +6200 jplang has-props @@ -95,75 +1115,7 @@ -13455 - -repository.rb -file - - - - -2010-09-24T11:56:52.924049Z -6d9599543924edc24abb739bd3f7e718 -2010-02-21T14:42:45.276472Z -3472 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -6831 - -time_entry.rb -file - - - - -2010-11-19T13:04:46.956816Z -aa2cc7da3c19ce52813f08949e6cefec -2010-10-22T20:40:11.668687Z -4277 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -4087 +13688 token.rb file @@ -171,7 +1123,7 @@ -2010-09-23T14:37:44.487730Z +2011-07-14T09:24:09.000000Z 441a5648e149e471c91928dc7f3f29a6 2009-06-02T17:24:50.360628Z 2778 @@ -205,11 +1157,11 @@ -2010-11-19T13:04:46.956816Z -7d895b3a013ce8f4e63dd4e7aab7eb20 -2010-09-28T20:20:00.843023Z -4221 -edavis10 +2011-07-14T09:24:21.000000Z +7936a5cd938361b60174d282035d7178 +2011-04-29T13:27:50.025194Z +5602 +jplang has-props @@ -231,7 +1183,7 @@ -1302 +1346 auth_source_ldap.rb file @@ -239,10 +1191,10 @@ -2010-09-23T14:37:44.467732Z -87f2ff0401993963de36fe7502cd6949 -2010-02-26T09:13:12.187275Z -3492 +2011-07-14T09:24:09.000000Z +82898965a0c07d8fa25a52cfced3139f +2011-02-26T13:09:25.657748Z +4950 jplang has-props @@ -267,81 +1219,13 @@ 4381 -principal.rb -file - - - - -2010-09-24T12:48:25.923798Z -01332c0957f952b76c01e7c7ebd112f0 -2010-09-10T18:46:23.747988Z -4076 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -2265 - -version_custom_field.rb -file - - - - -2010-09-23T14:37:44.491776Z -6bf31c0491d87fff1481a91519f66363 -2009-11-15T15:22:55.021661Z -3064 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -888 - issue_custom_field.rb file -2010-09-23T14:37:44.471831Z +2011-07-14T09:24:09.000000Z cd405a055651d29541f2ebcf4e22f8dc 2007-03-15T22:11:02.843262Z 337 @@ -369,16 +1253,16 @@ 1242 -issue_category.rb +issue.rb file -2010-09-23T14:37:44.471831Z -da42817b3f290549a03ada82a93dc5d0 -2007-12-07T10:26:07.864320Z -955 +2011-07-14T09:28:10.000000Z +6c04dbf1fa645577e601791e12db890f +2011-07-02T17:29:54.143205Z +6160 jplang has-props @@ -401,52 +1285,18 @@ -1626 +34224 -change.rb +member_role.rb file -2010-09-23T14:37:44.467732Z -622826f16c01373c631876eb1e480a65 -2010-07-24T00:19:32.307471Z -3860 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -1061 - -enumeration.rb -file - - - - -2010-09-23T14:37:44.471831Z -90ec955317994a58df9a5a7f85b810e7 -2009-12-25T17:13:58.090736Z -3240 +2011-07-14T09:24:09.000000Z +95caba31fc55fea2d5ff257e70cf14b2 +2009-12-26T16:14:55.591181Z +3250 jplang has-props @@ -469,7 +1319,7 @@ -3856 +2011 time_entry_activity_custom_field.rb file @@ -477,7 +1327,7 @@ -2010-09-23T14:37:44.487730Z +2011-07-14T09:24:09.000000Z d5549b2847a255d4bdd7185a670988b5 2009-10-21T22:35:03.091600Z 2952 @@ -505,81 +1355,13 @@ 896 -member_role.rb -file - - - - -2010-09-23T14:37:44.475780Z -95caba31fc55fea2d5ff257e70cf14b2 -2009-12-26T16:14:55.591181Z -3250 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -2011 - -issue.rb -file - - - - -2010-11-19T13:04:46.956816Z -35d32fdd4b71df26207f71005d93580e -2010-11-12T11:34:53.754717Z -4394 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -32352 - issue_priority.rb file -2010-09-23T14:37:44.471831Z +2011-07-14T09:24:09.000000Z 028b9a9be35e74573921f9865f953439 2009-12-25T17:13:58.090736Z 3240 @@ -607,16 +1389,16 @@ 1094 -message_observer.rb +wiki_page.rb file -2010-09-23T14:37:44.475780Z -50c2305c38ffecfb2138cd437e1c255c -2009-12-13T14:26:54.396245Z -3169 +2011-07-14T09:28:10.000000Z +b791fc39ac41d63af0ab9543b7544008 +2011-07-09T12:01:56.564746Z +6207 jplang has-props @@ -639,143 +1421,7 @@ -979 - -wiki_content.rb -file - - - - -2010-11-19T13:04:46.956816Z -3cac6a9c934a472fcbdf99cd00e5bfbb -2010-10-27T16:27:06.240747Z -4296 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -4480 - -watcher.rb -file - - - - -2010-09-23T14:37:44.491776Z -c72443f206052fafae720378fba40163 -2009-12-13T12:39:22.716082Z -3167 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -2093 - -wiki_page.rb -file - - - - -2010-11-19T13:04:46.956816Z -a45da72d99c7bc05ce93eb86205942e5 -2010-10-27T16:27:06.240747Z -4296 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -6720 - -enabled_module.rb -file - - - - -2010-09-23T14:37:44.471831Z -56631baa5560f63cbb213855761c8fcc -2009-10-25T10:31:01.135799Z -2970 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -1296 +7361 comment.rb file @@ -783,7 +1429,7 @@ -2010-09-23T14:37:44.467732Z +2011-07-14T09:24:09.000000Z 0ca314834c39ddc12f2993caf5722e79 2007-04-25T15:06:20.062636Z 479 @@ -811,81 +1457,13 @@ 1030 -wiki_content_observer.rb -file - - - - -2010-09-23T14:37:44.491776Z -a6804cb0c0abc6de72a184e7384ed36d -2009-05-17T09:55:13.601447Z -2749 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -1201 - -query.rb -file - - - - -2010-11-19T13:04:46.956816Z -ab1aeac4c9dd4c6ff846a281927b515a -2010-11-07T15:38:51.908839Z -4387 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -26148 - member.rb file -2010-09-23T14:37:44.475780Z +2011-07-14T09:24:09.000000Z 84d28844bbac90dab2c56a27ed58db18 2010-08-09T05:10:00.803890Z 3929 @@ -913,183 +1491,13 @@ 3067 -document_category_custom_field.rb -file - - - - -2010-09-23T14:37:44.471831Z -60dadf29c4da2a4e97f463a647b8e98d -2009-10-21T22:34:22.740755Z -2945 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -899 - -mailer.rb -file - - - - -2010-11-19T13:04:46.956816Z -1c4b2494e527ab830998b06f67b18f52 -2010-11-06T13:23:23.456511Z -4373 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -18490 - -workflow.rb -file - - - - -2010-09-23T14:37:44.491776Z -4561dfcb12b3fa066a9516c59a9eef94 -2010-04-30T12:19:51.238583Z -3709 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -4028 - -journal.rb -file - - - - -2010-09-24T12:48:25.923798Z -f3797cd6a4b7e4d256aba15e317e98b1 -2010-09-05T22:57:20.669640Z -4062 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -3214 - -user_custom_field.rb -file - - - - -2010-09-23T14:37:44.487730Z -47067c42f4d6607335adf75d11c3323b -2007-03-12T17:59:02.654744Z -333 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -878 - time_entry_custom_field.rb file -2010-09-23T14:37:44.487730Z +2011-07-14T09:24:09.000000Z 7dbc4f88d9fcd8f1057ea6d5982a1099 2008-07-22T18:52:00.008047Z 1689 @@ -1117,51 +1525,17 @@ 882 -custom_field.rb -file - - - - -2010-09-23T14:37:44.467732Z -48b90644181e44606c63f82c3655baa1 -2010-04-16T15:33:49.924704Z -3672 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -4344 - setting.rb file -2010-09-23T14:37:44.487730Z -5a0ad520fc95e7fefd2c6e6a1c9c3e76 -2010-02-12T22:08:02.981984Z -3417 -edavis10 +2011-07-14T09:28:10.000000Z +5f33e04c6e81693296f542dcfc16e9af +2011-06-21T03:16:49.595160Z +6105 +jbbarth has-props @@ -1183,7 +1557,7 @@ -5164 +5146 user.rb file @@ -1191,11 +1565,11 @@ -2010-11-19T13:04:46.956816Z -de9dd6a174b66d7a7f16a699f1f1698f -2010-10-06T05:08:38.847540Z -4234 -jbbarth +2011-07-14T09:24:21.000000Z +38e55360ed5e55fd5404731ea0d392af +2011-04-11T17:53:15.908614Z +5416 +jplang has-props @@ -1217,7 +1591,7 @@ -15699 +20338 auth_source.rb file @@ -1225,78 +1599,10 @@ -2010-09-23T14:37:44.467732Z -837db713425e094779466a392a668679 -2010-05-23T03:16:37.499264Z -3745 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -1811 - -news_observer.rb -file - - - - -2010-09-23T14:37:44.475780Z -b98015db4679606ee5f8d75e55574745 -2009-03-28T00:38:57.780983Z -2637 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -962 - -message.rb -file - - - - -2010-09-23T14:37:44.475780Z -66b09263cf7988c661307523991d83d5 -2010-02-06T12:54:13.653502Z -3373 +2011-07-14T09:24:09.000000Z +f746a9534698bb8db5abf4bb7c9dd5ef +2011-02-26T13:09:25.657748Z +4950 jplang has-props @@ -1319,75 +1625,7 @@ -3576 - -wiki_redirect.rb -file - - - - -2010-09-23T14:37:44.491776Z -4e4c64bab677a9e081fc1230ff6a3773 -2007-09-09T17:05:38.846724Z -720 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -970 - -issue_relation.rb -file - - - - -2010-09-23T14:37:44.475780Z -c90f5daaa6fe06429b93f2010ba90fa0 -2010-05-01T14:07:36.553776Z -3729 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -4550 +2013 document_observer.rb file @@ -1395,11 +1633,11 @@ -2010-09-23T14:37:44.471831Z -b76852d33bcfab19bb6c4e3e727da0ed -2009-03-28T00:38:57.780983Z -2637 -edavis10 +2011-07-14T09:24:21.000000Z +8059f8ff823265efb44ba8f96b6e3b6d +2011-05-18T07:52:48.342965Z +5842 +tmaruyama has-props @@ -1421,7 +1659,7 @@ -982 +980 version.rb file @@ -1429,11 +1667,11 @@ -2010-09-24T12:48:25.927735Z -7f91847223c06c86cef6696956c67846 -2010-09-10T03:09:11.557425Z -4073 -edavis10 +2011-07-14T09:28:10.000000Z +35fcc00507437d82ba65378d601233d4 +2011-07-09T10:51:57.491707Z +6200 +jplang has-props @@ -1455,7 +1693,7 @@ -7741 +7727 issue_priority_custom_field.rb file @@ -1463,7 +1701,7 @@ -2010-09-23T14:37:44.475780Z +2011-07-14T09:24:09.000000Z 478dceec50480a17a7f2c321fc59e794 2009-10-21T22:34:22.740755Z 2945 @@ -1497,10 +1735,10 @@ -2010-09-23T14:37:44.467732Z -9927f674ea1f10f785af7adfd11e6f83 -2009-12-13T12:39:22.716082Z -3167 +2011-07-14T09:24:09.000000Z +aaa3cd558c500d4db3bb506878e12fc1 +2010-11-27T12:42:11.793330Z +4431 jplang has-props @@ -1523,7 +1761,7 @@ -2140 +2137 attachment.rb file @@ -1531,11 +1769,11 @@ -2010-09-23T14:37:44.467732Z -56226fcf13a57b18ed9faf979b5cf1bc -2010-06-19T03:54:28.250424Z -3774 -edavis10 +2011-07-14T09:28:10.000000Z +f116eb338c40b4c30c60816b7803166e +2011-06-21T03:16:49.595160Z +6105 +jbbarth has-props @@ -1557,7 +1795,7 @@ -6702 +6724 group_custom_field.rb file @@ -1565,7 +1803,7 @@ -2010-09-23T14:37:44.471831Z +2011-07-14T09:24:09.000000Z 2c07c440361210f71d2eb821ce95ce12 2009-09-12T08:36:46.650954Z 2869 @@ -1599,10 +1837,10 @@ -2010-09-23T14:37:44.475780Z -44dc499c4e4dfc3601165f07e6daa4b5 -2010-07-25T10:48:27.199057Z -3881 +2011-07-14T09:28:10.000000Z +49088be7ff2a3976f71ca73eee9723ed +2011-07-09T10:51:57.491707Z +6200 jplang has-props @@ -1625,7 +1863,7 @@ -3447 +3511 time_entry_activity.rb file @@ -1633,7 +1871,7 @@ -2010-09-23T14:37:44.487730Z +2011-07-14T09:24:09.000000Z 2508e3911e5bb016a9925502244b358f 2009-12-25T17:13:58.090736Z 3240 @@ -1667,10 +1905,10 @@ -2010-09-23T14:37:44.487730Z -00670b3218d9d2d2a8435809f524827f -2009-12-18T15:41:32.828284Z -3188 +2011-07-14T09:28:10.000000Z +e26030282dad516c551452a36b4831bb +2011-07-09T10:51:57.491707Z +6200 jplang has-props @@ -1693,7 +1931,7 @@ -2205 +2265 journal_detail.rb file @@ -1701,10 +1939,10 @@ -2010-09-23T14:37:44.475780Z -4b700215d4c3bf72071a45448fa2b0e3 -2007-04-24T18:26:42.003879Z -478 +2011-07-14T09:24:21.000000Z +52a4a2060b161bbccca63be620b732d6 +2011-04-15T13:23:13.506236Z +5466 jplang has-props @@ -1727,7 +1965,7 @@ -1028 +1128 group.rb file @@ -1735,10 +1973,10 @@ -2010-09-23T14:37:44.471831Z -7fa34bcff98b6a84bbe125d949af18af -2009-09-12T08:36:46.650954Z -2869 +2011-07-14T09:24:09.000000Z +a6be23c5316bf4e17cd5601624202b18 +2010-11-27T14:46:51.426568Z +4437 jplang has-props @@ -1761,41 +1999,7 @@ -1884 - -issue_observer.rb -file - - - - -2010-09-23T14:37:44.471831Z -d4026d660fcb2601834d26268468aec2 -2009-03-28T00:38:57.780983Z -2637 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -965 +1918 changeset.rb file @@ -1803,11 +2007,11 @@ -2010-09-24T11:56:52.912062Z -434403a24695ff195df946e1db456ca7 -2010-08-08T20:26:33.212059Z -3928 -jbbarth +2011-07-14T09:24:21.000000Z +631fd8d7b1924a1afbc925c80fd18f7c +2011-05-15T23:01:21.719915Z +5792 +tmaruyama has-props @@ -1829,109 +2033,7 @@ -7481 - -role.rb -file - - - - -2010-09-23T14:37:44.487730Z -47730c63e98da3fdb40ab8551ee3d509 -2010-02-03T17:47:47.868223Z -3363 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -5143 - -project_custom_field.rb -file - - - - -2010-09-23T14:37:44.479733Z -926ef98901f13ba13688fdc3ab0184fc -2007-03-12T17:59:02.654744Z -333 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -883 - -wiki.rb -file - - - - -2010-09-23T14:37:44.491776Z -5012ec7e38525085a500671f68708ba5 -2010-04-11T12:56:18.077630Z -3632 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -3031 +9547 custom_value.rb file @@ -1939,7 +2041,7 @@ -2010-11-19T13:04:46.960863Z +2011-07-14T09:24:09.000000Z 6938d61d0f9e1fc190bb1d0e6c05546e 2010-11-07T14:15:01.891476Z 4382 @@ -1973,10 +2075,10 @@ -2010-11-19T13:04:46.960863Z -87ee5ad7f6983a739700f40cff0d65ae -2010-11-14T12:33:14.198318Z -4402 +2011-07-14T09:28:10.000000Z +fda334c7b1824cce74cbd26bba2cba0b +2011-07-09T11:42:12.586037Z +6205 jplang has-props @@ -1999,18 +2101,18 @@ -30070 +32908 -document_category.rb +comment_observer.rb file -2010-09-23T14:37:44.471831Z -aeaf540cf9f940cbec4ddfc984dd6af5 -2009-12-25T17:13:58.090736Z -3240 +2011-06-06T13:18:33.000000Z +6084f181d9e7de5535ff3ecc53fcf924 +2011-03-04T14:32:58.878627Z +5003 jplang has-props @@ -2033,73 +2135,5 @@ -1104 +1034 -news.rb -file - - - - -2010-09-23T14:37:44.475780Z -b1b4aa93c05ff00a28d777ecdd77d66d -2010-02-01T18:57:12.733490Z -3358 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -1885 - -user_preference.rb -file - - - - -2010-09-23T14:37:44.487730Z -41ea06399352eb7b8c2903357abe1ab0 -2008-07-04T17:58:14.743502Z -1623 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -1513 - diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/attachment.rb.svn-base --- a/app/models/.svn/text-base/attachment.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/attachment.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -20,7 +20,7 @@ class Attachment < ActiveRecord::Base belongs_to :container, :polymorphic => true belongs_to :author, :class_name => "User", :foreign_key => "author_id" - + validates_presence_of :container, :filename, :author validates_length_of :filename, :maximum => 255 validates_length_of :disk_filename, :maximum => 255 @@ -31,20 +31,20 @@ acts_as_activity_provider :type => 'files', :permission => :view_files, :author_key => :author_id, - :find_options => {:select => "#{Attachment.table_name}.*", + :find_options => {:select => "#{Attachment.table_name}.*", :joins => "LEFT JOIN #{Version.table_name} ON #{Attachment.table_name}.container_type='Version' AND #{Version.table_name}.id = #{Attachment.table_name}.container_id " + "LEFT JOIN #{Project.table_name} ON #{Version.table_name}.project_id = #{Project.table_name}.id OR ( #{Attachment.table_name}.container_type='Project' AND #{Attachment.table_name}.container_id = #{Project.table_name}.id )"} - + acts_as_activity_provider :type => 'documents', :permission => :view_documents, :author_key => :author_id, - :find_options => {:select => "#{Attachment.table_name}.*", + :find_options => {:select => "#{Attachment.table_name}.*", :joins => "LEFT JOIN #{Document.table_name} ON #{Attachment.table_name}.container_type='Document' AND #{Document.table_name}.id = #{Attachment.table_name}.container_id " + "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 errors.add(:base, :too_long, :count => Setting.attachment_max_size.to_i.kilobytes) @@ -76,7 +76,7 @@ if @temp_file && (@temp_file.size > 0) logger.debug("saving '#{self.diskfile}'") md5 = Digest::MD5.new - File.open(diskfile, "wb") do |f| + File.open(diskfile, "wb") do |f| buffer = "" while (buffer = @temp_file.read(8192)) f.write(buffer) @@ -100,7 +100,7 @@ def diskfile "#{@@storage_path}/#{self.disk_filename}" end - + def increment_download increment!(:downloads) end @@ -108,27 +108,27 @@ def project container.project end - + def visible?(user=User.current) container.attachments_visible?(user) end - + def deletable?(user=User.current) container.attachments_deletable?(user) end - + def image? self.filename =~ /\.(jpe?g|gif|png)$/i end - + def is_text? Redmine::MimeType.is_type?('text', filename) end - + def is_diff? self.filename =~ /\.(patch|diff)$/i end - + # Returns true if the file is readable def readable? File.readable?(diskfile) @@ -145,7 +145,7 @@ attachments.each_value do |attachment| file = attachment['file'] next unless file && file.size > 0 - a = Attachment.create(:container => obj, + a = Attachment.create(:container => obj, :file => file, :description => attachment['description'].to_s.strip, :author => User.current) @@ -160,18 +160,18 @@ end {:files => attached, :unsaved => obj.unsaved_attachments} end - + private def sanitize_filename(value) # get only the filename, not the whole path just_filename = value.gsub(/^.*(\\|\/)/, '') # NOTE: File.basename doesn't work right with Windows paths on Unix - # INCORRECT: just_filename = File.basename(value.gsub('\\\\', '/')) + # INCORRECT: just_filename = File.basename(value.gsub('\\\\', '/')) # Finally, replace all non alphanumeric, hyphens or periods with underscore - @filename = just_filename.gsub(/[^\w\.\-]/,'_') + @filename = just_filename.gsub(/[^\w\.\-]/,'_') end - + # Returns an ASCII or hashed filename def self.disk_filename(filename) timestamp = DateTime.now.strftime("%y%m%d%H%M%S") diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/auth_source.rb.svn-base --- a/app/models/.svn/text-base/auth_source.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/auth_source.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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? diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/auth_source_ldap.rb.svn-base --- a/app/models/.svn/text-base/auth_source_ldap.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/auth_source_ldap.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/board.rb.svn-base --- a/app/models/.svn/text-base/board.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/board.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -18,7 +18,7 @@ class Board < ActiveRecord::Base belongs_to :project has_many :topics, :class_name => 'Message', :conditions => "#{Message.table_name}.parent_id IS NULL", :order => "#{Message.table_name}.created_on DESC" - has_many :messages, :dependent => :delete_all, :order => "#{Message.table_name}.created_on DESC" + has_many :messages, :dependent => :destroy, :order => "#{Message.table_name}.created_on DESC" belongs_to :last_message, :class_name => 'Message', :foreign_key => :last_message_id acts_as_list :scope => :project_id acts_as_watchable diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/change.rb.svn-base --- a/app/models/.svn/text-base/change.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/change.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,30 +1,35 @@ -# 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 # 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. class Change < ActiveRecord::Base belongs_to :changeset - + validates_presence_of :changeset_id, :action, :path before_save :init_path - + def relative_path changeset.repository.relative_path(path) end - + + def before_validation + self.path = Redmine::CodesetUtil.replace_invalid_utf8(self.path) + self.from_path = Redmine::CodesetUtil.replace_invalid_utf8(self.from_path) + end + def init_path self.path ||= "" end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/changeset.rb.svn-base --- a/app/models/.svn/text-base/changeset.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/changeset.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ # Redmine - project management software -# Copyright (C) 2006-2010 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 # 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. @@ -23,155 +23,221 @@ has_many :changes, :dependent => :delete_all has_and_belongs_to_many :issues - acts_as_event :title => Proc.new {|o| "#{l(:label_revision)} #{o.revision}" + (o.short_comments.blank? ? '' : (': ' + o.short_comments))}, + acts_as_event :title => Proc.new {|o| "#{l(:label_revision)} #{o.format_identifier}" + (o.short_comments.blank? ? '' : (': ' + o.short_comments))}, :description => :long_comments, :datetime => :committed_on, - :url => Proc.new {|o| {:controller => 'repositories', :action => 'revision', :id => o.repository.project, :rev => o.revision}} - + :url => Proc.new {|o| {:controller => 'repositories', :action => 'revision', :id => o.repository.project, :rev => o.identifier}} + acts_as_searchable :columns => 'comments', :include => {:repository => :project}, :project_key => "#{Repository.table_name}.project_id", :date_column => 'committed_on' - + acts_as_activity_provider :timestamp => "#{table_name}.committed_on", :author_key => :user_id, :find_options => {:include => [:user, {:repository => :project}]} - + validates_presence_of :repository_id, :revision, :committed_on, :commit_date validates_uniqueness_of :revision, :scope => :repository_id validates_uniqueness_of :scmid, :scope => :repository_id, :allow_nil => true - + named_scope :visible, lambda {|*args| { :include => {:repository => :project}, - :conditions => Project.allowed_to_condition(args.first || User.current, :view_changesets) } } - + :conditions => Project.allowed_to_condition(args.shift || User.current, :view_changesets, *args) } } + def revision=(r) write_attribute :revision, (r.nil? ? nil : r.to_s) end - - def comments=(comment) - write_attribute(:comments, Changeset.normalize_comments(comment)) + + # Returns the identifier of this changeset; depending on repository backends + def identifier + if repository.class.respond_to? :changeset_identifier + repository.class.changeset_identifier self + else + revision.to_s + end end def committed_on=(date) self.commit_date = date super end - - def committer=(arg) - write_attribute(:committer, self.class.to_utf8(arg.to_s)) + + # Returns the readable identifier + def format_identifier + if repository.class.respond_to? :format_changeset_identifier + repository.class.format_changeset_identifier self + else + identifier + end end def project repository.project end - + def author user || committer.to_s.split('<').first 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+)(h|hours?))((\d+)(m|min)?)? + | + ((\d+)(h|hours?|m|min)) + | + (\d+):(\d+) + | + (\d+([\.,]\d+)?)h? + ) + /x + def scan_comment_for_issue_ids return if comments.blank? # keywords used to reference issues ref_keywords = Setting.commit_ref_keywords.downcase.split(",").collect(&:strip) + ref_keywords_any = ref_keywords.delete('*') # keywords used to fix issues fix_keywords = Setting.commit_fix_keywords.downcase.split(",").collect(&:strip) - + kw_regexp = (ref_keywords + fix_keywords).collect{|kw| Regexp.escape(kw)}.join("|") - return if kw_regexp.blank? - + referenced_issues = [] - - if ref_keywords.delete('*') - # find any issue ID in the comments - target_issue_ids = [] - comments.scan(%r{([\s\(\[,-]|^)#(\d+)(?=[[:punct:]]|\s|<|$)}).each { |m| target_issue_ids << m[1] } - referenced_issues += find_referenced_issues_by_id(target_issue_ids) - end - - comments.scan(Regexp.new("(#{kw_regexp})[\s:]+(([\s,;&]*#?\\d+)+)", Regexp::IGNORECASE)).each do |match| - action = match[0] - target_issue_ids = match[1].scan(/\d+/) - target_issues = find_referenced_issues_by_id(target_issue_ids) - if fix_keywords.include?(action.downcase) && fix_status = IssueStatus.find_by_id(Setting.commit_fix_status_id) - # update status of issues - logger.debug "Issues fixed by changeset #{self.revision}: #{issue_ids.join(', ')}." if logger && logger.debug? - target_issues.each do |issue| - # the issue may have been updated by the closure of another one (eg. duplicate) - issue.reload - # don't change the status is the issue is closed - next if issue.status.is_closed? - csettext = "r#{self.revision}" - if self.scmid && (! (csettext =~ /^r[0-9]+$/)) - csettext = "commit:\"#{self.scmid}\"" - end - journal = issue.init_journal(user || User.anonymous, ll(Setting.default_language, :text_status_changed_by_changeset, csettext)) - issue.status = fix_status - unless Setting.commit_fix_done_ratio.blank? - issue.done_ratio = Setting.commit_fix_done_ratio.to_i - end - Redmine::Hook.call_hook(:model_changeset_scan_commit_for_issue_ids_pre_issue_update, - { :changeset => self, :issue => issue }) - issue.save + + comments.scan(/([\s\(\[,-]|^)((#{kw_regexp})[\s:]+)?(#\d+(\s+@#{TIMELOG_RE})?([\s,;&]+#\d+(\s+@#{TIMELOG_RE})?)*)(?=[[:punct:]]|\s|<|$)/i) do |match| + action, refs = match[2], match[3] + next unless action.present? || ref_keywords_any + + refs.scan(/#(\d+)(\s+@#{TIMELOG_RE})?/).each do |m| + issue, hours = find_referenced_issue_by_id(m[0].to_i), m[2] + if issue + referenced_issues << issue + fix_issue(issue) if fix_keywords.include?(action.to_s.downcase) + log_time(issue, hours) if hours && Setting.commit_logtime_enabled? end end - referenced_issues += target_issues end - + referenced_issues.uniq! self.issues = referenced_issues unless referenced_issues.empty? end - + def short_comments @short_comments || split_comments.first end - + def long_comments @long_comments || split_comments.last end - + + def text_tag + if scmid? + "commit:#{scmid}" + else + "r#{revision}" + end + end + # Returns the previous changeset def previous - @previous ||= Changeset.find(:first, :conditions => ['id < ? AND repository_id = ?', self.id, self.repository_id], :order => 'id DESC') + @previous ||= Changeset.find(:first, + :conditions => ['id < ? AND repository_id = ?', + self.id, self.repository_id], + :order => 'id DESC') end # Returns the next changeset def next - @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) + @next ||= Changeset.find(:first, + :conditions => ['id > ? AND repository_id = ?', + self.id, self.repository_id], + :order => 'id ASC') end # Creates a new Change from it's common parameters def create_change(change) - Change.create(:changeset => self, - :action => change[:action], - :path => change[:path], - :from_path => change[:from_path], + Change.create(:changeset => self, + :action => change[:action], + :path => change[:path], + :from_path => change[:from_path], :from_revision => change[:from_revision]) end - + private - # Finds issues that can be referenced by the commit message - # i.e. issues that belong to the repository project, a subproject or a parent project - def find_referenced_issues_by_id(ids) - return [] if ids.compact.empty? - Issue.find_all_by_id(ids, :include => :project).select {|issue| - project == issue.project || project.is_ancestor_of?(issue.project) || project.is_descendant_of?(issue.project) - } + # Finds an issue that can be referenced by the commit message + # i.e. an issue that belong to the repository project, a subproject or a parent project + def find_referenced_issue_by_id(id) + return nil if id.blank? + issue = Issue.find_by_id(id.to_i, :include => :project) + if issue + unless issue.project && + (project == issue.project || project.is_ancestor_of?(issue.project) || + project.is_descendant_of?(issue.project)) + issue = nil + end + end + issue end - + + def fix_issue(issue) + status = IssueStatus.find_by_id(Setting.commit_fix_status_id.to_i) + if status.nil? + logger.warn("No status macthes commit_fix_status_id setting (#{Setting.commit_fix_status_id})") if logger + return issue + end + + # the issue may have been updated by the closure of another one (eg. duplicate) + issue.reload + # don't change the status is the issue is closed + return if issue.status && issue.status.is_closed? + + journal = issue.init_journal(user || User.anonymous, ll(Setting.default_language, :text_status_changed_by_changeset, text_tag)) + issue.status = status + unless Setting.commit_fix_done_ratio.blank? + issue.done_ratio = Setting.commit_fix_done_ratio.to_i + end + Redmine::Hook.call_hook(:model_changeset_scan_commit_for_issue_ids_pre_issue_update, + { :changeset => self, :issue => issue }) + unless issue.save + logger.warn("Issue ##{issue.id} could not be saved by changeset #{id}: #{issue.errors.full_messages}") if logger + end + issue + end + + def log_time(issue, hours) + time_entry = TimeEntry.new( + :user => user, + :hours => hours, + :issue => issue, + :spent_on => commit_date, + :comments => l(:text_time_logged_by_changeset, :value => text_tag, + :locale => Setting.default_language) + ) + time_entry.activity = log_time_activity unless log_time_activity.nil? + + unless time_entry.save + logger.warn("TimeEntry could not be created by changeset #{id}: #{time_entry.errors.full_messages}") if logger + end + time_entry + end + + def log_time_activity + if Setting.commit_logtime_activity_id.to_i > 0 + TimeEntryActivity.find_by_id(Setting.commit_logtime_activity_id.to_i) + end + end + def split_comments comments =~ /\A(.+?)\r?\n(.*)$/m @short_comments = $1 || comments @@ -179,22 +245,47 @@ return @short_comments, @long_comments end - def self.to_utf8(str) - return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii - encoding = Setting.commit_logs_encoding.to_s.strip - unless encoding.blank? || encoding == 'UTF-8' + public + + # 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 + + def self.to_utf8(str, encoding) + return str if str.nil? + str.force_encoding("ASCII-8BIT") if str.respond_to?(:force_encoding) + if str.empty? + str.force_encoding("UTF-8") if str.respond_to?(:force_encoding) + return str + end + enc = encoding.blank? ? "UTF-8" : encoding + if str.respond_to?(:force_encoding) + if enc.upcase != "UTF-8" + str.force_encoding(enc) + str = str.encode("UTF-8", :invalid => :replace, + :undef => :replace, :replace => '?') + else + str.force_encoding("UTF-8") + if ! str.valid_encoding? + str = str.encode("US-ASCII", :invalid => :replace, + :undef => :replace, :replace => '?').encode("UTF-8") + end + end + else + ic = Iconv.new('UTF-8', enc) + txtar = "" begin - str = Iconv.conv('UTF-8', encoding, str) - rescue Iconv::Failure - # do nothing here + txtar += ic.iconv(str) + rescue Iconv::IllegalSequence + txtar += $!.success + str = '?' + $!.failed[1,$!.failed.length] + retry + rescue + txtar += $!.success end + str = txtar 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 - end + str end end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/custom_field.rb.svn-base --- a/app/models/.svn/text-base/custom_field.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/custom_field.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -23,7 +23,6 @@ validates_presence_of :name, :field_format validates_uniqueness_of :name, :scope => :type validates_length_of :name, :maximum => 30 - validates_format_of :name, :with => /^[\w\s\.\'\-]*$/i validates_inclusion_of :field_format, :in => Redmine::CustomFieldFormat.available_formats def initialize(attributes = nil) @@ -49,6 +48,35 @@ errors.add(:default_value, :invalid) unless v.valid? end + def possible_values_options(obj=nil) + case field_format + when 'user', 'version' + if obj.respond_to?(:project) && obj.project + case field_format + when 'user' + obj.project.users.sort.collect {|u| [u.to_s, u.id.to_s]} + when 'version' + obj.project.versions.sort.collect {|u| [u.to_s, u.id.to_s]} + end + elsif obj.is_a?(Array) + obj.collect {|o| possible_values_options(o)}.inject {|memo, v| memo & v} + else + [] + end + else + read_attribute :possible_values + end + end + + def possible_values(obj=nil) + case field_format + when 'user', 'version' + possible_values_options(obj).collect(&:last) + else + read_attribute :possible_values + end + end + # Makes possible_values accept a multiline string def possible_values=(arg) if arg.is_a?(Array) @@ -72,6 +100,8 @@ casted = value.to_i when 'float' casted = value.to_f + when 'user', 'version' + casted = (value.blank? ? nil : field_format.classify.constantize.find_by_id(value.to_i)) end end casted diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/document.rb.svn-base --- a/app/models/.svn/text-base/document.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/document.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -25,20 +25,23 @@ :author => Proc.new {|o| (a = o.attachments.find(:first, :order => "#{Attachment.table_name}.created_on ASC")) ? a.author : nil }, :url => Proc.new {|o| {:controller => 'documents', :action => 'show', :id => o.id}} acts_as_activity_provider :find_options => {:include => :project} - + 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.shift || User.current, :view_documents, *args) } } + def visible?(user=User.current) !user.nil? && user.allowed_to?(:view_documents, project) end - + def after_initialize if new_record? self.category ||= DocumentCategory.default end end - + def updated_on unless @updated_on a = attachments.find(:first, :order => 'created_on DESC') diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/document_category.rb.svn-base --- a/app/models/.svn/text-base/document_category.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/document_category.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/document_category_custom_field.rb.svn-base --- a/app/models/.svn/text-base/document_category_custom_field.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/document_category_custom_field.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -20,4 +20,3 @@ :enumeration_doc_categories end end - diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/document_observer.rb.svn-base --- a/app/models/.svn/text-base/document_observer.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/document_observer.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/enabled_module.rb.svn-base --- a/app/models/.svn/text-base/enabled_module.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/enabled_module.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,30 +1,30 @@ # 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 # 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. class EnabledModule < ActiveRecord::Base belongs_to :project - + validates_presence_of :name validates_uniqueness_of :name, :scope => :project_id - + after_create :module_enabled - + private - + # after_create callback used to do things when a module is enabled def module_enabled case name diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/enumeration.rb.svn-base --- a/app/models/.svn/text-base/enumeration.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/enumeration.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -32,6 +32,7 @@ named_scope :shared, :conditions => { :project_id => nil } named_scope :active, :conditions => { :active => true } + named_scope :named, lambda {|arg| { :conditions => ["LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip]}} def self.default # Creates a fake default scope so Enumeration.default will check diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/group.rb.svn-base --- a/app/models/.svn/text-base/group.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/group.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -31,6 +31,7 @@ def user_added(user) members.each do |member| + next if member.project.nil? user_member = Member.find_by_project_id_and_user_id(member.project_id, user.id) || Member.new(:project_id => member.project_id, :user_id => user.id) member.member_roles.each do |member_role| user_member.member_roles << MemberRole.new(:role => member_role.role, :inherited_from => member_role.id) diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/issue.rb.svn-base --- a/app/models/.svn/text-base/issue.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/issue.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,21 +1,23 @@ -# 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 # 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. class Issue < ActiveRecord::Base + include Redmine::SafeAttributes + belongs_to :project belongs_to :tracker belongs_to :status, :class_name => 'IssueStatus', :foreign_key => 'status_id' @@ -28,11 +30,11 @@ has_many :journals, :as => :journalized, :dependent => :destroy has_many :time_entries, :dependent => :delete_all has_and_belongs_to_many :changesets, :order => "#{Changeset.table_name}.committed_on ASC, #{Changeset.table_name}.id ASC" - + 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 @@ -43,7 +45,7 @@ acts_as_event :title => Proc.new {|o| "#{o.tracker.name} ##{o.id} (#{o.status}): #{o.subject}"}, :url => Proc.new {|o| {:controller => 'issues', :action => 'show', :id => o.id}}, :type => Proc.new {|o| 'issue' + (o.closed? ? ' closed' : '') } - + acts_as_activity_provider :find_options => {:include => [:project, :author, :tracker]}, :author_key => :author_id @@ -58,20 +60,14 @@ validates_numericality_of :estimated_hours, :allow_nil => true named_scope :visible, lambda {|*args| { :include => :project, - :conditions => Project.allowed_to_condition(args.first || User.current, :view_issues) } } - + :conditions => Issue.visible_condition(args.shift || User.current, *args) } } + named_scope :open, :conditions => ["#{IssueStatus.table_name}.is_closed = ?", false], :include => :status named_scope :recently_updated, :order => "#{Issue.table_name}.updated_on DESC" named_scope :with_limit, lambda { |limit| { :limit => limit} } named_scope :on_active_project, :include => [:status, :project, :tracker], :conditions => ["#{Project.table_name}.status=#{Project::STATUS_ACTIVE}"] - named_scope :for_gantt, lambda { - { - :include => [:tracker, :status, :assigned_to, :priority, :project, :fixed_version], - :order => "#{Issue.table_name}.due_date ASC, #{Issue.table_name}.start_date ASC, #{Issue.table_name}.id ASC" - } - } named_scope :without_version, lambda { { @@ -88,14 +84,40 @@ 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 a SQL conditions string used to find all issues visible by the specified user + def self.visible_condition(user, options={}) + Project.allowed_to_condition(user, :view_issues, options) do |role, user| + case role.issues_visibility + when 'all' + nil + when 'default' + "(#{table_name}.is_private = #{connection.quoted_false} OR #{table_name}.author_id = #{user.id} OR #{table_name}.assigned_to_id = #{user.id})" + when 'own' + "(#{table_name}.author_id = #{user.id} OR #{table_name}.assigned_to_id = #{user.id})" + else + '1=0' + end + end + end + # Returns true if usr or current user is allowed to view the issue def visible?(usr=nil) - (usr || User.current).allowed_to?(:view_issues, self.project) + (usr || User.current).allowed_to?(:view_issues, self.project) do |role, user| + case role.issues_visibility + when 'all' + true + when 'default' + !self.is_private? || self.author == user || self.assigned_to == user + when 'own' + self.author == user || self.assigned_to == user + else + false + end + end end - + def after_initialize if new_record? # set default values for new records only @@ -103,12 +125,12 @@ self.priority ||= IssuePriority.default end end - + # Overrides Redmine::Acts::Customizable::InstanceMethods#available_custom_fields def available_custom_fields - (project && tracker) ? project.all_issue_custom_fields.select {|c| tracker.custom_fields.include? c } : [] + (project && tracker) ? (project.all_issue_custom_fields & tracker.custom_fields.all) : [] end - + def copy_from(arg) issue = arg.is_a?(Issue) ? arg : Issue.visible.find(arg) self.attributes = issue.attributes.dup.except("id", "root_id", "parent_id", "lft", "rgt", "created_on", "updated_on") @@ -116,7 +138,7 @@ self.status = issue.status self end - + # Moves/copies an issue to a new project and tracker # Returns the moved/copied issue on success, false on failure def move_to_project(*args) @@ -124,11 +146,11 @@ move_to_project_without_transaction(*args) || raise(ActiveRecord::Rollback) end || false end - + def move_to_project_without_transaction(new_project, new_tracker = nil, options = {}) options ||= {} issue = options[:copy] ? self.class.new.copy_from(self) : self - + if new_project && issue.project_id != new_project.id # delete issue relations unless Setting.cross_project_issue_relations? @@ -153,6 +175,7 @@ issue.reset_custom_values! end if options[:copy] + issue.author = User.current issue.custom_field_values = self.custom_field_values.inject({}) {|h,v| h[v.custom_field_id] = v.value; h} issue.status = if options[:attributes] && options[:attributes][:status_id] IssueStatus.find_by_id(options[:attributes][:status_id]) @@ -165,10 +188,16 @@ issue.attributes = options[:attributes] end if issue.save - unless options[:copy] + if options[:copy] + if current_journal && current_journal.notes.present? + issue.init_journal(current_journal.user, current_journal.notes) + issue.current_journal.notify = false + issue.save + end + else # Manually update project_id on related time entries TimeEntry.update_all("project_id = #{new_project.id}", {:issue_id => id}) - + issue.children.each do |child| unless child.move_to_project_without_transaction(new_project) # Move failed and transaction was rollback'd @@ -186,7 +215,7 @@ self.status = nil write_attribute(:status_id, sid) end - + def priority_id=(pid) self.priority = nil write_attribute(:priority_id, pid) @@ -199,6 +228,13 @@ result end + def description=(arg) + if arg.is_a?(String) + arg = arg.gsub(/(\r\n|\n|\r)/, "\r\n") + end + write_attribute(:description, arg) + end + # Overrides attributes= so that tracker_id gets assigned first def attributes_with_tracker_first=(new_attributes, *args) return if new_attributes.nil? @@ -210,35 +246,40 @@ end # Do not redefine alias chain on reload (see #4838) alias_method_chain(:attributes=, :tracker_first) unless method_defined?(:attributes_without_tracker_first=) - + def estimated_hours=(h) write_attribute :estimated_hours, (h.is_a?(String) ? h.to_hours : h) end - - SAFE_ATTRIBUTES = %w( - tracker_id - status_id - parent_issue_id - category_id - assigned_to_id - priority_id - fixed_version_id - subject - description - start_date - due_date - done_ratio - estimated_hours - custom_field_values - lock_version - ) unless const_defined?(:SAFE_ATTRIBUTES) - - SAFE_ATTRIBUTES_ON_TRANSITION = %w( - status_id - assigned_to_id - fixed_version_id - done_ratio - ) unless const_defined?(:SAFE_ATTRIBUTES_ON_TRANSITION) + + safe_attributes 'tracker_id', + 'status_id', + 'parent_issue_id', + 'category_id', + 'assigned_to_id', + 'priority_id', + 'fixed_version_id', + 'subject', + 'description', + 'start_date', + 'due_date', + 'done_ratio', + 'estimated_hours', + 'custom_field_values', + 'custom_fields', + 'lock_version', + :if => lambda {|issue, user| issue.new_record? || user.allowed_to?(:edit_issues, issue.project) } + + safe_attributes 'status_id', + 'assigned_to_id', + 'fixed_version_id', + 'done_ratio', + :if => lambda {|issue, user| issue.new_statuses_allowed_to(user).any? } + + safe_attributes 'is_private', + :if => lambda {|issue, user| + user.allowed_to?(:set_issues_private, issue.project) || + (issue.author == user && user.allowed_to?(:set_own_issues_private, issue.project)) + } # Safely sets attributes # Should be called from controllers instead of #attributes= @@ -247,42 +288,37 @@ # TODO: move workflow/permission checks from controllers to here def safe_attributes=(attrs, user=User.current) return unless attrs.is_a?(Hash) - + # User can change issue attributes only if he has :edit permission or if a workflow transition is allowed - if new_record? || user.allowed_to?(:edit_issues, project) - attrs = attrs.reject {|k,v| !SAFE_ATTRIBUTES.include?(k)} - elsif new_statuses_allowed_to(user).any? - attrs = attrs.reject {|k,v| !SAFE_ATTRIBUTES_ON_TRANSITION.include?(k)} - else - return - end - + attrs = delete_unsafe_attributes(attrs, user) + return if attrs.empty? + # Tracker must be set before since new_statuses_allowed_to depends on it. if t = attrs.delete('tracker_id') self.tracker_id = t end - + if attrs['status_id'] unless new_statuses_allowed_to(user).collect(&:id).include?(attrs['status_id'].to_i) attrs.delete('status_id') end end - + unless leaf? attrs.reject! {|k,v| %w(priority_id done_ratio start_date due_date estimated_hours).include?(k)} end - + if attrs.has_key?('parent_issue_id') if !user.allowed_to?(:manage_subtasks, project) attrs.delete('parent_issue_id') elsif !attrs['parent_issue_id'].blank? - attrs.delete('parent_issue_id') unless Issue.visible(user).exists?(attrs['parent_issue_id']) + attrs.delete('parent_issue_id') unless Issue.visible(user).exists?(attrs['parent_issue_id'].to_i) end end - + self.attributes = attrs end - + def done_ratio if Issue.use_status_for_done_ratio? && status && status.default_done_ratio status.default_done_ratio @@ -298,20 +334,20 @@ def self.use_field_for_done_ratio? Setting.issue_done_ratio == 'issue_field' end - + def validate if self.due_date.nil? && @attributes['due_date'] && !@attributes['due_date'].empty? errors.add :due_date, :not_a_date end - + if self.due_date and self.start_date and self.due_date < self.start_date errors.add :due_date, :greater_than_start_date end - + if start_date && soonest_start && start_date < soonest_start errors.add :start_date, :invalid end - + if fixed_version if !assignable_versions.include?(fixed_version) errors.add :fixed_version_id, :inclusion @@ -319,14 +355,14 @@ errors.add_to_base I18n.t(:error_can_not_reopen_issue_on_closed_version) end end - + # Checks that the issue can not be added/moved to a disabled tracker if project && (tracker_id_changed? || project_id_changed?) unless project.trackers.include?(tracker) errors.add :tracker_id, :inclusion end end - + # Checks parent issue assignment if @parent_issue if @parent_issue.project_id != project_id @@ -343,7 +379,7 @@ end end end - + # Set the done_ratio using the status if that setting is set. This will keep the done_ratios # even if the user turns off the setting later def update_done_ratio_from_issue_status @@ -351,7 +387,7 @@ self.done_ratio = status.default_done_ratio end end - + def init_journal(user, notes = "") @current_journal ||= Journal.new(:journalized => self, :user => user, :notes => notes) @issue_before_change = self.clone @@ -362,12 +398,12 @@ updated_on_will_change! @current_journal end - + # Return true if the issue is closed, otherwise false def closed? self.status.is_closed? end - + # Return true if the issue is being reopened def reopened? if !new_record? && status_id_changed? @@ -391,7 +427,7 @@ end false end - + # Returns true if the issue is overdue def overdue? !due_date.nil? && (due_date < Date.today) && !status.is_closed? @@ -408,33 +444,38 @@ def children? !leaf? end - + # Users the issue can be assigned to def assignable_users users = project.assignable_users users << author if author users.uniq.sort end - + # Versions that the issue can be assigned to def assignable_versions @assignable_versions ||= (project.shared_versions.open + [Version.find_by_id(fixed_version_id_was)]).compact.uniq.sort end - + # Returns true if this issue is blocked by another issue that is still open def blocked? !relations_to.detect {|ir| ir.relation_type == 'blocks' && !ir.issue_from.closed?}.nil? end - + # 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 blocked? ? statuses.reject {|s| s.is_closed?} : statuses end - + # Returns the mail adresses of users that should be notified def recipients notified = project.notified_users @@ -447,7 +488,7 @@ notified.reject! {|user| !visible?(user)} notified.collect(&:mail) end - + # Returns the total number of hours spent on this issue and its descendants # # Example: @@ -456,47 +497,50 @@ def spent_hours @spent_hours ||= self_and_descendants.sum("#{TimeEntry.table_name}.hours", :include => :time_entries).to_f || 0.0 end - + def relations (relations_from + relations_to).sort end - - def all_dependent_issues + + def all_dependent_issues(except=[]) + except << self dependencies = [] relations_from.each do |relation| - dependencies << relation.issue_to - dependencies += relation.issue_to.all_dependent_issues + if relation.issue_to && !except.include?(relation.issue_to) + dependencies << relation.issue_to + dependencies += relation.issue_to.all_dependent_issues(except) + end end dependencies end - + # Returns an array of issues that duplicate this one def duplicates relations_to.select {|r| r.relation_type == IssueRelation::TYPE_DUPLICATES}.collect {|r| r.issue_from} end - + # Returns the due date or the target due date if any # Used on gantt chart def due_before due_date || (fixed_version ? fixed_version.effective_date : nil) end - + # Returns the time scheduled for this issue. - # + # # Example: # Start Date: 2/26/09, End Date: 3/04/09 # duration => 6 def duration (start_date && due_date) ? due_date - start_date : 0 end - + def soonest_start @soonest_start ||= ( relations_to.collect{|relation| relation.successor_soonest_start} + ancestors.collect(&:soonest_start) ).compact.max end - + def reschedule_after(date) return if date.nil? if leaf? @@ -510,7 +554,7 @@ end end end - + def <=>(issue) if issue.nil? -1 @@ -520,16 +564,19 @@ (lft || 0) <=> (issue.lft || 0) end end - + def to_s "#{tracker} ##{id}: #{subject}" end - + # Returns a string of css classes that apply to the issue def css_classes s = "issue status-#{status.position} priority-#{priority.position}" s << ' closed' if closed? s << ' overdue' if overdue? + s << ' child' if child? + s << ' parent' unless leaf? + s << ' private' if is_private? s << ' created-by-me' if User.current.logged? && author_id == User.current.id s << ' assigned-to-me' if User.current.logged? && assigned_to_id == User.current.id s @@ -539,7 +586,7 @@ # Returns false if save fails def save_issue_with_child_records(params, existing_time_entry=nil) Issue.transaction do - if params[:time_entry] && params[:time_entry][:hours].present? && User.current.allowed_to?(:log_time, project) + if params[:time_entry] && (params[:time_entry][:hours].present? || params[:time_entry][:comments].present?) && User.current.allowed_to?(:log_time, project) @time_entry = existing_time_entry || TimeEntry.new @time_entry.project = project @time_entry.issue = self @@ -548,10 +595,10 @@ @time_entry.attributes = params[:time_entry] self.time_entries << @time_entry end - + if valid? attachments = Attachment.attach_files(self, params[:attachments]) - + attachments[:files].each {|a| @current_journal.details << JournalDetail.new(:property => 'attachment', :prop_key => a.id, :value => a.filename)} # TODO: Rename hook Redmine::Hook.call_hook(:controller_issues_edit_before_save, { :params => params, :issue => self, :time_entry => @time_entry, :journal => @current_journal}) @@ -576,7 +623,7 @@ # Update issues assigned to the version update_versions(["#{Issue.table_name}.fixed_version_id = ?", version.id]) end - + # Unassigns issues from versions that are no longer shared # after +project+ was moved def self.update_versions_from_hierarchy_change(project) @@ -594,7 +641,7 @@ nil end end - + def parent_issue_id if instance_variable_defined? :@parent_issue @parent_issue.nil? ? nil : @parent_issue.id @@ -643,17 +690,19 @@ def self.by_subproject(project) ActiveRecord::Base.connection.select_all("select s.id as status_id, s.is_closed as closed, - i.project_id as project_id, - count(i.id) as total + #{Issue.table_name}.project_id as project_id, + count(#{Issue.table_name}.id) as total from - #{Issue.table_name} i, #{IssueStatus.table_name} s + #{Issue.table_name}, #{Project.table_name}, #{IssueStatus.table_name} s where - i.status_id=s.id - and i.project_id IN (#{project.descendants.active.collect{|p| p.id}.join(',')}) - group by s.id, s.is_closed, i.project_id") if project.descendants.active.any? + #{Issue.table_name}.status_id=s.id + and #{Issue.table_name}.project_id = #{Project.table_name}.id + and #{visible_condition(User.current, :project => project, :with_subprojects => true)} + and #{Issue.table_name}.project_id <> #{project.id} + group by s.id, s.is_closed, #{Issue.table_name}.project_id") if project.descendants.active.any? end # End ReportsController extraction - + # Returns an array of projects that current user can move issues to def self.allowed_target_projects_on_move projects = [] @@ -669,9 +718,9 @@ end projects end - + private - + def update_nested_set_attributes if root_id.nil? # issue was just created @@ -718,7 +767,7 @@ end remove_instance_variable(:@parent_issue) if instance_variable_defined?(:@parent_issue) end - + def update_parent_attributes recalculate_attributes_for(parent_id) if parent_id end @@ -729,14 +778,14 @@ if priority_position = p.children.maximum("#{IssuePriority.table_name}.position", :include => :priority) p.priority = IssuePriority.find_by_position(priority_position) end - + # start/due dates = lowest/highest dates of children p.start_date = p.children.minimum(:start_date) p.due_date = p.children.maximum(:due_date) if p.start_date && p.due_date && p.due_date < p.start_date p.start_date, p.due_date = p.due_date, p.start_date end - + # done ratio = weighted average ratio of leaves unless Issue.use_status_for_done_ratio? && p.status && p.status.default_done_ratio leaves_count = p.leaves.count @@ -750,24 +799,16 @@ p.done_ratio = progress.round end end - + # estimate = sum of leaves estimates p.estimated_hours = p.leaves.sum(:estimated_hours).to_f p.estimated_hours = nil if p.estimated_hours == 0.0 - + # ancestors will be recursively updated p.save(false) 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) @@ -787,7 +828,7 @@ end end end - + # Callback on attachment deletion def attachment_removed(obj) journal = init_journal(User.current) @@ -796,7 +837,7 @@ :old_value => obj.filename) journal.save end - + # Default assignment based on category def default_assign if assigned_to.nil? && category && category.assigned_to @@ -829,27 +870,30 @@ end end end - + # Saves the changes in a Journal # Called after_save 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| + before = @issue_before_change.send(c) + after = send(c) + next if before == after || (before.blank? && after.blank?) @current_journal.details << JournalDetail.new(:property => 'attr', :prop_key => c, :old_value => @issue_before_change.send(c), - :value => send(c)) unless send(c)==@issue_before_change.send(c) + :value => send(c)) } # custom fields changes custom_values.each {|c| next if (@custom_values_before_change[c.custom_field_id]==c.value || (@custom_values_before_change[c.custom_field_id].blank? && c.value.blank?)) - @current_journal.details << JournalDetail.new(:property => 'cf', + @current_journal.details << JournalDetail.new(:property => 'cf', :prop_key => c.custom_field_id, :old_value => @custom_values_before_change[c.custom_field_id], :value => c.value) - } + } @current_journal.save # reset current journal init_journal @current_journal.user, @current_journal.notes @@ -868,20 +912,19 @@ select_field = options.delete(:field) joins = options.delete(:joins) - where = "i.#{select_field}=j.id" - + where = "#{Issue.table_name}.#{select_field}=j.id" + ActiveRecord::Base.connection.select_all("select s.id as status_id, s.is_closed as closed, j.id as #{select_field}, - count(i.id) as total + count(#{Issue.table_name}.id) as total from - #{Issue.table_name} i, #{IssueStatus.table_name} s, #{joins} j + #{Issue.table_name}, #{Project.table_name}, #{IssueStatus.table_name} s, #{joins} j where - i.status_id=s.id + #{Issue.table_name}.status_id=s.id and #{where} - and i.project_id=#{project.id} + and #{Issue.table_name}.project_id=#{Project.table_name}.id + and #{visible_condition(User.current, :project => project)} group by s.id, s.is_closed, j.id") end - - end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/issue_category.rb.svn-base --- a/app/models/.svn/text-base/issue_category.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/issue_category.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -24,6 +24,8 @@ validates_uniqueness_of :name, :scope => [:project_id] validates_length_of :name, :maximum => 30 + named_scope :named, lambda {|arg| { :conditions => ["LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip]}} + alias :destroy_without_reassign :destroy # Destroy the category diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/issue_relation.rb.svn-base --- a/app/models/.svn/text-base/issue_relation.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/issue_relation.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -47,7 +47,12 @@ if issue_from && issue_to errors.add :issue_to_id, :invalid if issue_from_id == issue_to_id errors.add :issue_to_id, :not_same_project unless issue_from.project_id == issue_to.project_id || Setting.cross_project_issue_relations? - errors.add_to_base :circular_dependency if issue_to.all_dependent_issues.include? issue_from + #detect circular dependencies depending wether the relation should be reversed + if TYPES.has_key?(relation_type) && TYPES[relation_type][:reverse] + errors.add_to_base :circular_dependency if issue_from.all_dependent_issues.include? issue_to + else + errors.add_to_base :circular_dependency if issue_to.all_dependent_issues.include? issue_from + end errors.add_to_base :cant_link_an_issue_with_a_descendant if issue_from.is_descendant_of?(issue_to) || issue_from.is_ancestor_of?(issue_to) end end @@ -84,14 +89,15 @@ def set_issue_to_dates soonest_start = self.successor_soonest_start - if soonest_start + if soonest_start && issue_to issue_to.reschedule_after(soonest_start) end end def successor_soonest_start - return nil unless (TYPE_PRECEDES == self.relation_type) && (issue_from.start_date || issue_from.due_date) - (issue_from.due_date || issue_from.start_date) + 1 + delay + if (TYPE_PRECEDES == self.relation_type) && delay && issue_from && (issue_from.start_date || issue_from.due_date) + (issue_from.due_date || issue_from.start_date) + 1 + delay + end end def <=>(relation) diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/issue_status.rb.svn-base --- a/app/models/.svn/text-base/issue_status.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/issue_status.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -25,8 +25,9 @@ validates_presence_of :name validates_uniqueness_of :name validates_length_of :name, :maximum => 30 - validates_format_of :name, :with => /^[\w\s\'\-]*$/i validates_inclusion_of :default_done_ratio, :in => 0..100, :allow_nil => true + + named_scope :named, lambda {|arg| { :conditions => ["LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip]}} def after_save IssueStatus.update_all("is_default=#{connection.quoted_false}", ['id <> ?', id]) if self.is_default? @@ -51,10 +52,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 @@ -62,24 +69,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 diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/journal.rb.svn-base --- a/app/models/.svn/text-base/journal.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/journal.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -32,12 +32,16 @@ :url => Proc.new {|o| {:controller => 'issues', :action => 'show', :id => o.issue.id, :anchor => "change-#{o.id}"}} acts_as_activity_provider :type => 'issues', - :permission => :view_issues, :author_key => :user_id, :find_options => {:include => [{:issue => :project}, :details, :user], :conditions => "#{Journal.table_name}.journalized_type = 'Issue' AND" + " (#{JournalDetail.table_name}.prop_key = 'status_id' OR #{Journal.table_name}.notes <> '')"} + named_scope :visible, lambda {|*args| { + :include => {:issue => :project}, + :conditions => Issue.visible_condition(args.shift || User.current, *args) + }} + def save(*args) # Do not save an empty journal (details.empty? && notes.blank?) ? false : super @@ -73,4 +77,12 @@ s << ' has-details' unless details.blank? s end + + def notify? + @notify != false + end + + def notify=(arg) + @notify = arg + end end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/journal_detail.rb.svn-base --- a/app/models/.svn/text-base/journal_detail.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/journal_detail.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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,22 @@ class JournalDetail < ActiveRecord::Base belongs_to :journal + before_save :normalize_values - 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) + private + + def normalize_values + self.value = normalize(value) + self.old_value = normalize(old_value) + end + + def normalize(v) + if v == true + "1" + elsif v == false + "0" + else + v + end end end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/journal_observer.rb.svn-base --- a/app/models/.svn/text-base/journal_observer.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/journal_observer.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -17,10 +17,12 @@ class JournalObserver < ActiveRecord::Observer def after_create(journal) - if Setting.notified_events.include?('issue_updated') || - (Setting.notified_events.include?('issue_note_added') && journal.notes.present?) || - (Setting.notified_events.include?('issue_status_updated') && journal.new_status.present?) || - (Setting.notified_events.include?('issue_priority_updated') && journal.new_value_for('priority_id').present?) + if journal.notify? && + (Setting.notified_events.include?('issue_updated') || + (Setting.notified_events.include?('issue_note_added') && journal.notes.present?) || + (Setting.notified_events.include?('issue_status_updated') && journal.new_status.present?) || + (Setting.notified_events.include?('issue_priority_updated') && journal.new_value_for('priority_id').present?) + ) Mailer.deliver_issue_edit(journal) end end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/mail_handler.rb.svn-base --- a/app/models/.svn/text-base/mail_handler.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/mail_handler.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -21,25 +21,25 @@ class UnauthorizedAction < StandardError; end class MissingInformation < StandardError; end - + attr_reader :email, :user def self.receive(email, options={}) @@handler_options = options.dup - + @@handler_options[:issue] ||= {} - + @@handler_options[:allow_override] = @@handler_options[:allow_override].split(',').collect(&:strip) if @@handler_options[:allow_override].is_a?(String) @@handler_options[:allow_override] ||= [] # Project needs to be overridable if not specified @@handler_options[:allow_override] << 'project' unless @@handler_options[:issue].has_key?(:project) # Status overridable by default - @@handler_options[:allow_override] << 'status' unless @@handler_options[:issue].has_key?(:status) - + @@handler_options[:allow_override] << 'status' unless @@handler_options[:issue].has_key?(:status) + @@handler_options[:no_permission_check] = (@@handler_options[:no_permission_check].to_s == '1' ? true : false) super email end - + # Processes incoming emails # Returns the created object (eg. an issue, a message) or false def receive(email) @@ -78,13 +78,13 @@ User.current = @user dispatch end - + private MESSAGE_ID_RE = %r{^ e # TODO: send a email to the user @@ -113,7 +113,11 @@ 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 project = target_project @@ -130,7 +134,7 @@ issue.subject = '(no subject)' end issue.description = cleaned_up_text_body - + # add To and Cc as watchers before saving so the watchers can reply to Redmine add_watchers(issue) issue.save! @@ -138,7 +142,7 @@ logger.info "MailHandler: issue ##{issue.id} created by #{user}" if logger && logger.info issue end - + # Adds a note to an existing issue def receive_issue_reply(issue_id) issue = Issue.find_by_id(issue_id) @@ -147,16 +151,20 @@ unless @@handler_options[:no_permission_check] raise UnauthorizedAction unless user.allowed_to?(:add_issue_notes, issue.project) || user.allowed_to?(:edit_issues, issue.project) end - - journal = issue.init_journal(user, cleaned_up_text_body) + + # ignore CLI-supplied defaults for new issues + @@handler_options[:issue].clear + + journal = issue.init_journal(user) issue.safe_attributes = issue_attributes_from_keywords(issue) issue.safe_attributes = {'custom_field_values' => custom_field_values_from_keywords(issue)} + journal.notes = cleaned_up_text_body add_attachments(issue) issue.save! logger.info "MailHandler: issue ##{issue.id} updated by #{user}" if logger && logger.info journal end - + # Reply will be added to the issue def receive_journal_reply(journal_id) journal = Journal.find_by_id(journal_id) @@ -164,17 +172,17 @@ receive_issue_reply(journal.journalized_id) end end - + # Receives a reply to a forum message def receive_message_reply(message_id) message = Message.find_by_id(message_id) if message message = message.root - + unless @@handler_options[:no_permission_check] raise UnauthorizedAction unless user.allowed_to?(:add_messages, message.project) end - + if !message.locked? reply = Message.new(:subject => email.subject.gsub(%r{^.*msg\d+\]}, '').strip, :content => cleaned_up_text_body) @@ -188,7 +196,7 @@ end end end - + def add_attachments(obj) if email.has_attachments? email.attachments.each do |attachment| @@ -199,7 +207,7 @@ end end end - + # Adds To and Cc as watchers of the given object if the sender has the # appropriate permission def add_watchers(obj) @@ -211,7 +219,7 @@ end end end - + def get_keyword(attr, options={}) @keywords ||= {} if @keywords.has_key?(attr) @@ -226,14 +234,14 @@ end end end - + # Destructively extracts the value for +attr+ in +text+ # Returns nil if no matching keyword found def extract_keyword!(text, attr, format=nil) keys = [attr.to_s.humanize] if attr.is_a?(Symbol) - keys << l("field_#{attr}", :default => '', :locale => user.language) if user - keys << l("field_#{attr}", :default => '', :locale => Setting.default_language) + keys << l("field_#{attr}", :default => '', :locale => user.language) if user && user.language.present? + keys << l("field_#{attr}", :default => '', :locale => Setting.default_language) if Setting.default_language.present? end keys.reject! {|k| k.blank?} keys.collect! {|k| Regexp.escape(k)} @@ -250,28 +258,34 @@ raise MissingInformation.new('Unable to determine target project') if target.nil? target end - + # Returns a Hash of issue attributes extracted from keywords in the email body def issue_attributes_from_keywords(issue) assigned_to = (k = get_keyword(:assigned_to, :override => true)) && find_user_from_keyword(k) assigned_to = nil if assigned_to && !issue.assignable_users.include?(assigned_to) - - { - 'tracker_id' => ((k = get_keyword(:tracker)) && issue.project.trackers.find_by_name(k).try(:id)) || issue.project.trackers.find(:first).try(:id), - 'status_id' => (k = get_keyword(:status)) && IssueStatus.find_by_name(k).try(:id), - 'priority_id' => (k = get_keyword(:priority)) && IssuePriority.find_by_name(k).try(:id), - 'category_id' => (k = get_keyword(:category)) && issue.project.issue_categories.find_by_name(k).try(:id), + + attrs = { + 'tracker_id' => (k = get_keyword(:tracker)) && issue.project.trackers.named(k).first.try(:id), + 'status_id' => (k = get_keyword(:status)) && IssueStatus.named(k).first.try(:id), + 'priority_id' => (k = get_keyword(:priority)) && IssuePriority.named(k).first.try(:id), + 'category_id' => (k = get_keyword(:category)) && issue.project.issue_categories.named(k).first.try(:id), 'assigned_to_id' => assigned_to.try(:id), - 'fixed_version_id' => (k = get_keyword(:fixed_version, :override => true)) && issue.project.shared_versions.find_by_name(k).try(:id), + 'fixed_version_id' => (k = get_keyword(:fixed_version, :override => true)) && issue.project.shared_versions.named(k).first.try(:id), 'start_date' => get_keyword(:start_date, :override => true, :format => '\d{4}-\d{2}-\d{2}'), 'due_date' => get_keyword(:due_date, :override => true, :format => '\d{4}-\d{2}-\d{2}'), 'estimated_hours' => get_keyword(:estimated_hours, :override => true), 'done_ratio' => get_keyword(:done_ratio, :override => true, :format => '(\d|10)?0') }.delete_if {|k, v| v.blank? } + + if issue.new_record? && attrs['tracker_id'].nil? + attrs['tracker_id'] = issue.project.trackers.find(:first).try(:id) + end + + attrs end - + # Returns a Hash of issue custom field values extracted from keywords in the email body - def custom_field_values_from_keywords(customized) + def custom_field_values_from_keywords(customized) customized.custom_field_values.inject({}) do |h, v| if value = get_keyword(v.custom_field.name, :override => true) h[v.custom_field.id.to_s] = value @@ -279,7 +293,7 @@ h end end - + # Returns the text/plain part of the email # If not found (eg. HTML-only email), returns the body with tags removed def plain_text_body @@ -300,7 +314,7 @@ @plain_text_body.strip! @plain_text_body end - + def cleaned_up_text_body cleanup_body(plain_text_body) end @@ -308,19 +322,19 @@ def self.full_sanitizer @full_sanitizer ||= HTML::FullSanitizer.new end - + # Creates a user account for the +email+ sender def self.create_user_from_email(email) addr = email.from_addrs.to_a.first if addr && !addr.spec.blank? user = User.new user.mail = addr.spec - + names = addr.name.blank? ? addr.spec.gsub(/@.*$/, '').split('.') : addr.name.split user.firstname = names.shift user.lastname = names.join(' ') user.lastname = '-' if user.lastname.blank? - + user.login = user.mail user.password = ActiveSupport::SecureRandom.hex(5) user.language = Setting.default_language @@ -329,7 +343,7 @@ end private - + # Removes the email body of text after the truncation configurations. def cleanup_body(body) delimiters = Setting.mail_handler_body_delimiters.to_s.split(/[\r\n]+/).reject(&:blank?).map {|s| Regexp.escape(s)} diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/mailer.rb.svn-base --- a/app/models/.svn/text-base/mailer.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/mailer.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -31,7 +31,7 @@ h = h.to_s.gsub(%r{\/.*$}, '') unless Redmine::Utils.relative_url_root.blank? { :host => h, :protocol => Setting.protocol } end - + # Builds a tmail object used to email recipients of the added issue. # # Example: @@ -85,7 +85,7 @@ subject l(:mail_subject_reminder, :count => issues.size, :days => days) body :issues => issues, :days => days, - :issues_url => url_for(:controller => 'issues', :action => 'index', :set_filter => 1, :assigned_to_id => user.id, :sort_key => 'due_date', :sort_order => 'asc') + :issues_url => url_for(:controller => 'issues', :action => 'index', :set_filter => 1, :assigned_to_id => user.id, :sort => 'due_date:asc') render_multipart('reminder', body) end @@ -114,11 +114,11 @@ added_to_url = '' case container.class.name when 'Project' - added_to_url = url_for(:controller => 'projects', :action => 'list_files', :id => container) + added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container) added_to = "#{l(:label_project)}: #{container}" recipients container.project.notified_users.select {|user| user.allowed_to?(:view_files, container.project)}.collect {|u| u.mail} when 'Version' - added_to_url = url_for(:controller => 'projects', :action => 'list_files', :id => container.project_id) + added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container.project) added_to = "#{l(:label_version)}: #{container.name}" recipients container.project.notified_users.select {|user| user.allowed_to?(:view_files, container.project)}.collect {|u| u.mail} when 'Document' @@ -133,7 +133,7 @@ :added_to_url => added_to_url render_multipart('attachments_added', body) end - + # Builds a tmail object used to email recipients of a news' project when a news item is added. # # Example: @@ -149,7 +149,25 @@ render_multipart('news_added', body) end - # Builds a tmail object used to email the recipients of the specified message that was posted. + # Builds a tmail object used to email recipients of a news' project when a news comment is added. + # + # Example: + # news_comment_added(comment) => tmail object + # Mailer.news_comment_added(comment) => sends an email to the news' project recipients + def news_comment_added(comment) + news = comment.commented + redmine_headers 'Project' => news.project.identifier + message_id comment + recipients news.recipients + cc news.watcher_recipients + subject "Re: [#{news.project.name}] #{l(:label_news)}: #{news.title}" + body :news => news, + :comment => comment, + :news_url => url_for(:controller => 'news', :action => 'show', :id => news) + render_multipart('news_comment_added', body) + end + + # Builds a tmail object used to email the recipients of the specified message that was posted. # # Example: # message_posted(message) => tmail object @@ -166,8 +184,8 @@ :message_url => url_for(message.event_url) render_multipart('message_posted', body) end - - # Builds a tmail object used to email the recipients of a project of the specified wiki content was added. + + # Builds a tmail object used to email the recipients of a project of the specified wiki content was added. # # Example: # wiki_content_added(wiki_content) => tmail object @@ -183,8 +201,8 @@ :wiki_content_url => url_for(:controller => 'wiki', :action => 'show', :project_id => wiki_content.project, :id => wiki_content.page.title) render_multipart('wiki_content_added', body) end - - # Builds a tmail object used to email the recipients of a project of the specified wiki content was updated. + + # Builds a tmail object used to email the recipients of a project of the specified wiki content was updated. # # Example: # wiki_content_updated(wiki_content) => tmail object @@ -278,7 +296,7 @@ return false if (recipients.nil? || recipients.empty?) && (cc.nil? || cc.empty?) && (bcc.nil? || bcc.empty?) - + # Set Message-Id and References if @message_id_object mail.message_id = self.class.message_id_for(@message_id_object) @@ -286,7 +304,7 @@ if @references_objects mail.references = @references_objects.collect {|o| self.class.message_id_for(o)} end - + # Log errors when raise_delivery_errors is set to false, Rails does not raise_errors = self.class.raise_delivery_errors self.class.raise_delivery_errors = true @@ -296,7 +314,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 @@ -326,10 +344,10 @@ :conditions => s.conditions ).group_by(&:assigned_to) issues_by_assignee.each do |assignee, issues| - deliver_reminder(assignee, issues, days) unless assignee.nil? + deliver_reminder(assignee, issues, days) if assignee && assignee.active? end end - + # Activates/desactivates email deliveries during +block+ def self.with_deliveries(enabled = true, &block) was_enabled = ActionMailer::Base.perform_deliveries @@ -345,7 +363,7 @@ @initial_language = current_language set_language_if_valid Setting.default_language from Setting.mail_from - + # Common headers headers 'X-Mailer' => 'Redmine', 'X-Redmine-Host' => Setting.host_name, @@ -368,11 +386,11 @@ recipients.delete(@author.mail) if recipients cc.delete(@author.mail) if cc end - + notified_users = [recipients, cc].flatten.compact.uniq # Rails would log recipients only, not cc and bcc mylogger.info "Sending email notification to: #{notified_users.join(', ')}" if mylogger - + # Blind carbon copy recipients if Setting.bcc_recipients? bcc(notified_users) @@ -388,7 +406,7 @@ # # https://rails.lighthouseapp.com/projects/8994/tickets/2338-actionmailer-mailer-views-and-content-type # https://rails.lighthouseapp.com/projects/8994/tickets/1799-actionmailer-doesnt-set-template_format-when-rendering-layouts - + def render_multipart(method_name, body) if Setting.plain_text_mail? content_type "text/plain" @@ -404,29 +422,29 @@ def self.controller_path '' end unless respond_to?('controller_path') - + # Returns a predictable Message-Id for the given object def self.message_id_for(object) # id + timestamp should reduce the odds of a collision # as far as we don't send multiple emails for the same object - timestamp = object.send(object.respond_to?(:created_on) ? :created_on : :updated_on) + timestamp = object.send(object.respond_to?(:created_on) ? :created_on : :updated_on) hash = "redmine.#{object.class.name.demodulize.underscore}-#{object.id}.#{timestamp.strftime("%Y%m%d%H%M%S")}" host = Setting.mail_from.to_s.gsub(%r{^.*@}, '') host = "#{::Socket.gethostname}.redmine" if host.empty? "<#{hash}@#{host}>" end - + private - + def message_id(object) @message_id_object = object end - + def references(object) @references_objects ||= [] @references_objects << object end - + def mylogger RAILS_DEFAULT_LOGGER end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/message.rb.svn-base --- a/app/models/.svn/text-base/message.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/message.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -21,10 +21,10 @@ acts_as_tree :counter_cache => :replies_count, :order => "#{Message.table_name}.created_on ASC" acts_as_attachable belongs_to :last_reply, :class_name => 'Message', :foreign_key => 'last_reply_id' - + acts_as_searchable :columns => ['subject', 'content'], :include => {:board => :project}, - :project_key => 'project_id', + :project_key => "#{Board.table_name}.project_id", :date_column => "#{table_name}.created_on" acts_as_event :title => Proc.new {|o| "#{o.board.name}: #{o.subject}"}, :description => :content, @@ -35,29 +35,32 @@ acts_as_activity_provider :find_options => {:include => [{:board => :project}, :author]}, :author_key => :author_id acts_as_watchable - + attr_protected :locked, :sticky validates_presence_of :board, :subject, :content validates_length_of :subject, :maximum => 255 - + after_create :add_author_as_watcher - + + named_scope :visible, lambda {|*args| { :include => {:board => :project}, + :conditions => Project.allowed_to_condition(args.shift || User.current, :view_messages, *args) } } + def visible?(user=User.current) !user.nil? && user.allowed_to?(:view_messages, project) end - + def validate_on_create # Can not reply to a locked topic errors.add_to_base 'Topic is locked' if root.locked? && self != root end - + def after_create if parent parent.reload.update_attribute(:last_reply_id, self.id) end board.reset_counters! end - + def after_update if board_id_changed? Message.update_all("board_id = #{board_id}", ["id = ? OR parent_id = ?", root.id, root.id]) @@ -65,19 +68,19 @@ Board.reset_counters!(board_id) end end - + def after_destroy board.reset_counters! end - + def sticky=(arg) write_attribute :sticky, (arg == true || arg.to_s == '1' ? 1 : 0) end - + def sticky? sticky == 1 end - + def project board.project end @@ -89,9 +92,9 @@ def destroyable_by?(usr) usr && usr.logged? && (usr.allowed_to?(:delete_messages, project) || (self.author == usr && usr.allowed_to?(:delete_own_messages, project))) end - + private - + def add_author_as_watcher Watcher.create(:watchable => self.root, :user => author) end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/message_observer.rb.svn-base --- a/app/models/.svn/text-base/message_observer.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/message_observer.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/news.rb.svn-base --- a/app/models/.svn/text-base/news.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/news.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ # Redmine - project management software -# Copyright (C) 2006-2008 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 # 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. @@ -19,7 +19,7 @@ belongs_to :project belongs_to :author, :class_name => 'User', :foreign_key => 'author_id' has_many :comments, :as => :commented, :dependent => :delete_all, :order => "created_on" - + validates_presence_of :title, :description validates_length_of :title, :maximum => 60 validates_length_of :summary, :maximum => 255 @@ -28,13 +28,27 @@ acts_as_event :url => Proc.new {|o| {:controller => 'news', :action => 'show', :id => o.id}} acts_as_activity_provider :find_options => {:include => [:project, :author]}, :author_key => :author_id - + acts_as_watchable + + after_create :add_author_as_watcher + + named_scope :visible, lambda {|*args| { + :include => :project, + :conditions => Project.allowed_to_condition(args.shift || User.current, :view_news, *args) + }} + def visible?(user=User.current) !user.nil? && user.allowed_to?(:view_news, project) end - + # returns latest news for projects visible by user def self.latest(user = User.current, count = 5) find(:all, :limit => count, :conditions => Project.allowed_to_condition(user, :view_news), :include => [ :author, :project ], :order => "#{News.table_name}.created_on DESC") end + + private + + def add_author_as_watcher + Watcher.create(:watchable => self, :user => author) + end end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/project.rb.svn-base --- a/app/models/.svn/text-base/project.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/project.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -16,6 +16,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. class Project < ActiveRecord::Base + include Redmine::SafeAttributes + # Project statuses STATUS_ACTIVE = 1 STATUS_ARCHIVED = 9 @@ -41,7 +43,7 @@ has_many :time_entries, :dependent => :delete_all has_many :queries, :dependent => :delete_all has_many :documents, :dependent => :destroy - has_many :news, :dependent => :delete_all, :include => :author + has_many :news, :dependent => :destroy, :include => :author has_many :issue_categories, :dependent => :delete_all, :order => "#{IssueCategory.table_name}.name" has_many :boards, :dependent => :destroy, :order => "position ASC" has_one :repository, :dependent => :destroy @@ -54,7 +56,7 @@ :join_table => "#{table_name_prefix}custom_fields_projects#{table_name_suffix}", :association_foreign_key => 'custom_field_id' - acts_as_nested_set :order => 'name' + acts_as_nested_set :order => 'name', :dependent => :destroy acts_as_attachable :view_permission => :view_files, :delete_permission => :manage_files @@ -64,7 +66,7 @@ :url => Proc.new {|o| {:controller => 'projects', :action => 'show', :id => o}}, :author => nil - attr_protected :status, :enabled_module_names + attr_protected :status validates_presence_of :name, :identifier validates_uniqueness_of :identifier @@ -77,12 +79,30 @@ # reserved words validates_exclusion_of :identifier, :in => %w( new ) - before_destroy :delete_all_members, :destroy_children + before_destroy :delete_all_members named_scope :has_module, lambda { |mod| { :conditions => ["#{Project.table_name}.id IN (SELECT em.project_id FROM #{EnabledModule.table_name} em WHERE em.name=?)", mod.to_s] } } named_scope :active, { :conditions => "#{Project.table_name}.status = #{STATUS_ACTIVE}"} named_scope :all_public, { :conditions => { :is_public => true } } - named_scope :visible, lambda { { :conditions => Project.visible_by(User.current) } } + named_scope :visible, lambda {|*args| {:conditions => Project.visible_condition(args.shift || User.current, *args) }} + + def initialize(attributes = nil) + super + + initialized = (attributes || {}).stringify_keys + if !initialized.key?('identifier') && Setting.sequential_project_identifiers? + self.identifier = Project.next_identifier + end + if !initialized.key?('is_public') + self.is_public = Setting.default_projects_public? + end + if !initialized.key?('enabled_module_names') + self.enabled_module_names = Setting.default_projects_modules + end + if !initialized.key?('trackers') && !initialized.key?('tracker_ids') + self.trackers = Tracker.all + end + end def identifier=(identifier) super unless identifier_frozen? @@ -95,27 +115,36 @@ # returns latest created projects # non public projects will be returned only if user is a member of those def self.latest(user=nil, count=5) - find(:all, :limit => count, :conditions => visible_by(user), :order => "created_on DESC") + visible(user).find(:all, :limit => count, :order => "created_on DESC") end - # Returns a SQL :conditions string used to find all active projects for the specified user. + # Returns true if the project is visible to +user+ or to the current user. + def visible?(user=User.current) + user.allowed_to?(:view_project, self) + end + + def self.visible_by(user=nil) + ActiveSupport::Deprecation.warn "Project.visible_by is deprecated and will be removed in Redmine 1.3.0. Use Project.visible_condition instead." + visible_condition(user || User.current) + end + + # Returns a SQL conditions string used to find all projects visible by the specified user. # # Examples: - # Projects.visible_by(admin) => "projects.status = 1" - # Projects.visible_by(normal_user) => "projects.status = 1 AND projects.is_public = 1" - def self.visible_by(user=nil) - user ||= User.current - if user && user.admin? - return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE}" - elsif user && user.memberships.any? - return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE} AND (#{Project.table_name}.is_public = #{connection.quoted_true} or #{Project.table_name}.id IN (#{user.memberships.collect{|m| m.project_id}.join(',')}))" - else - return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE} AND #{Project.table_name}.is_public = #{connection.quoted_true}" - end + # Project.visible_condition(admin) => "projects.status = 1" + # Project.visible_condition(normal_user) => "((projects.status = 1) AND (projects.is_public = 1 OR projects.id IN (1,3,4)))" + # Project.visible_condition(anonymous) => "((projects.status = 1) AND (projects.is_public = 1))" + def self.visible_condition(user, options={}) + allowed_to_condition(user, :view_project, options) end + # Returns a SQL conditions string used to find all projects for which +user+ has the given +permission+ + # + # Valid options: + # * :project => limit the condition to project + # * :with_subprojects => limit the condition to project and its subprojects + # * :member => limit the condition to the user projects def self.allowed_to_condition(user, permission, options={}) - statements = [] base_statement = "#{Project.table_name}.status=#{Project::STATUS_ACTIVE}" if perm = Redmine::AccessControl.permission(permission) unless perm.project_module.nil? @@ -128,24 +157,37 @@ project_statement << " OR (#{Project.table_name}.lft > #{options[:project].lft} AND #{Project.table_name}.rgt < #{options[:project].rgt})" if options[:with_subprojects] base_statement = "(#{project_statement}) AND (#{base_statement})" end + if user.admin? - # no restriction + base_statement else - statements << "1=0" + statement_by_role = {} + unless options[:member] + role = user.logged? ? Role.non_member : Role.anonymous + if role.allowed_to?(permission) + statement_by_role[role] = "#{Project.table_name}.is_public = #{connection.quoted_true}" + end + end if user.logged? - if Role.non_member.allowed_to?(permission) && !options[:member] - statements << "#{Project.table_name}.is_public = #{connection.quoted_true}" + user.projects_by_role.each do |role, projects| + if role.allowed_to?(permission) + statement_by_role[role] = "#{Project.table_name}.id IN (#{projects.collect(&:id).join(',')})" + end end - allowed_project_ids = user.memberships.select {|m| m.roles.detect {|role| role.allowed_to?(permission)}}.collect {|m| m.project_id} - statements << "#{Project.table_name}.id IN (#{allowed_project_ids.join(',')})" if allowed_project_ids.any? + end + if statement_by_role.empty? + "1=0" else - if Role.anonymous.allowed_to?(permission) && !options[:member] - # anonymous user allowed on public project - statements << "#{Project.table_name}.is_public = #{connection.quoted_true}" - end + if block_given? + statement_by_role.each do |role, statement| + if s = yield(role, user) + statement_by_role[role] = "(#{statement} AND (#{s}))" + end + end + end + "((#{base_statement}) AND (#{statement_by_role.values.join(' OR ')}))" end end - statements.empty? ? base_statement : "((#{base_statement}) AND (#{statements.join(' OR ')}))" end # Returns the Systemwide and project specific activities @@ -327,7 +369,7 @@ # Returns an array of the trackers used by the project and its active sub projects def rolled_up_trackers @rolled_up_trackers ||= - Tracker.find(:all, :include => :projects, + Tracker.find(:all, :joins => :projects, :select => "DISTINCT #{Tracker.table_name}.*", :conditions => ["#{Project.table_name}.lft >= ? AND #{Project.table_name}.rgt <= ? AND #{Project.table_name}.status = #{STATUS_ACTIVE}", lft, rgt], :order => "#{Tracker.table_name}.position") @@ -353,15 +395,17 @@ # Returns a scope of the Versions used by the project def shared_versions - @shared_versions ||= + @shared_versions ||= begin + r = root? ? self : root Version.scoped(:include => :project, :conditions => "#{Project.table_name}.id = #{id}" + " OR (#{Project.table_name}.status = #{Project::STATUS_ACTIVE} AND (" + " #{Version.table_name}.sharing = 'system'" + - " OR (#{Project.table_name}.lft >= #{root.lft} AND #{Project.table_name}.rgt <= #{root.rgt} AND #{Version.table_name}.sharing = 'tree')" + + " OR (#{Project.table_name}.lft >= #{r.lft} AND #{Project.table_name}.rgt <= #{r.rgt} AND #{Version.table_name}.sharing = 'tree')" + " OR (#{Project.table_name}.lft < #{lft} AND #{Project.table_name}.rgt > #{rgt} AND #{Version.table_name}.sharing IN ('hierarchy', 'descendants'))" + " OR (#{Project.table_name}.lft > #{lft} AND #{Project.table_name}.rgt < #{rgt} AND #{Version.table_name}.sharing = 'hierarchy')" + "))") + end end # Returns a hash of project users grouped by role @@ -403,6 +447,12 @@ def all_issue_custom_fields @all_issue_custom_fields ||= (IssueCustomField.for_all + issue_custom_fields).uniq.sort end + + # Returns an array of all custom fields enabled for project time entries + # (explictly associated custom fields and custom fields enabled for all projects) + def all_time_entry_custom_fields + @all_time_entry_custom_fields ||= (TimeEntryCustomField.for_all + time_entry_custom_fields).uniq.sort + end def project self @@ -431,24 +481,20 @@ # The earliest start date of a project, based on it's issues and versions def start_date - if module_enabled?(:issue_tracking) - [ - issues.minimum('start_date'), - shared_versions.collect(&:effective_date), - shared_versions.collect {|v| v.fixed_issues.minimum('start_date')} - ].flatten.compact.min - end + [ + issues.minimum('start_date'), + shared_versions.collect(&:effective_date), + shared_versions.collect(&:start_date) + ].flatten.compact.min end # The latest due date of an issue or version def due_date - if module_enabled?(:issue_tracking) - [ - issues.maximum('due_date'), - shared_versions.collect(&:effective_date), - shared_versions.collect {|v| v.fixed_issues.maximum('due_date')} - ].flatten.compact.max - end + [ + issues.maximum('due_date'), + shared_versions.collect(&:effective_date), + shared_versions.collect {|v| v.fixed_issues.maximum('due_date')} + ].flatten.compact.max end def overdue? @@ -492,16 +538,51 @@ def enabled_module_names=(module_names) if module_names && module_names.is_a?(Array) - module_names = module_names.collect(&:to_s) - # remove disabled modules - enabled_modules.each {|mod| mod.destroy unless module_names.include?(mod.name)} - # add new modules - module_names.reject {|name| module_enabled?(name)}.each {|name| enabled_modules << EnabledModule.new(:name => name)} + module_names = module_names.collect(&:to_s).reject(&:blank?) + self.enabled_modules = module_names.collect {|name| enabled_modules.detect {|mod| mod.name == name} || EnabledModule.new(:name => name)} else enabled_modules.clear end end + + # Returns an array of the enabled modules names + def enabled_module_names + enabled_modules.collect(&:name) + end + # Enable a specific module + # + # Examples: + # project.enable_module!(:issue_tracking) + # project.enable_module!("issue_tracking") + def enable_module!(name) + enabled_modules << EnabledModule.new(:name => name.to_s) unless module_enabled?(name) + end + + # Disable a module if it exists + # + # Examples: + # project.disable_module!(:issue_tracking) + # project.disable_module!("issue_tracking") + # project.disable_module!(project.enabled_modules.first) + def disable_module!(target) + target = enabled_modules.detect{|mod| target.to_s == mod.name} unless enabled_modules.include?(target) + target.destroy unless target.blank? + end + + safe_attributes 'name', + 'description', + 'homepage', + 'is_public', + 'identifier', + 'custom_field_values', + 'custom_fields', + 'tracker_ids', + 'issue_custom_field_ids' + + safe_attributes 'enabled_module_names', + :if => lambda {|project, user| project.new_record? || user.allowed_to?(:select_project_modules, project) } + # Returns an array of projects that are in this project's hierarchy # # Example: parents, children, siblings @@ -587,13 +668,6 @@ private - # Destroys children before destroying self - def destroy_children - children.each do |child| - child.destroy - end - end - # Copies wiki from +project+ def copy_wiki(project) # Check that the source project has a wiki first @@ -640,6 +714,7 @@ end # Copies issues from +project+ + # Note: issues assigned to a closed version won't be copied due to validation rules def copy_issues(project) # Stores the source issue id as a key and the copied issues as the # value. Used to map the two togeather for issue relations. @@ -669,12 +744,20 @@ end self.issues << new_issue - issues_map[issue.id] = new_issue + if new_issue.new_record? + logger.info "Project#copy_issues: issue ##{issue.id} could not be copied: #{new_issue.errors.full_messages}" if logger && logger.info + else + issues_map[issue.id] = new_issue unless new_issue.new_record? + end end # Relations after in case issues related each other project.issues.each do |issue| new_issue = issues_map[issue.id] + unless new_issue + # Issue was not copied + next + end # Relations issue.relations_from.each do |source_relation| @@ -701,7 +784,12 @@ # Copies members from +project+ def copy_members(project) - project.memberships.each do |member| + # Copy users first, then groups to handle members with inherited and given roles + members_to_copy = [] + members_to_copy += project.memberships.select {|m| m.principal.is_a?(User)} + members_to_copy += project.memberships.select {|m| !m.principal.is_a?(User)} + + members_to_copy.each do |member| new_member = Member.new new_member.attributes = member.attributes.dup.except("id", "project_id", "created_on") # only copy non inherited roles diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/query.rb.svn-base --- a/app/models/.svn/text-base/query.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/query.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,24 +1,24 @@ # Redmine - project management software -# Copyright (C) 2006-2008 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 # 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. -class QueryColumn +class QueryColumn attr_accessor :name, :sortable, :groupable, :default_order include Redmine::I18n - + def initialize(name, options={}) self.name = name self.sortable = options[:sortable] @@ -29,19 +29,23 @@ self.default_order = options[:default_order] @caption_key = options[:caption] || "field_#{name}" end - + def caption l(@caption_key) end - + # Returns true if the column is sortable, otherwise false def sortable? !sortable.nil? end - + def value(issue) issue.send name end + + def css_classes + name + end end class QueryCustomFieldColumn < QueryColumn @@ -55,37 +59,41 @@ self.groupable ||= false @cf = custom_field end - + def caption @cf.name end - + def custom_field @cf end - + def value(issue) cv = issue.custom_values.detect {|v| v.custom_field_id == @cf.id} cv && @cf.cast_value(cv.value) end + + def css_classes + @css_classes ||= "#{name} #{@cf.field_format}" + end end class Query < ActiveRecord::Base class StatementInvalid < ::ActiveRecord::StatementInvalid end - + belongs_to :project belongs_to :user serialize :filters serialize :column_names serialize :sort_criteria, Array - + attr_protected :project_id, :user_id - + validates_presence_of :name, :on => :save validates_length_of :name, :maximum => 255 - - @@operators = { "=" => :label_equals, + + @@operators = { "=" => :label_equals, "!" => :label_not_equals, "o" => :label_open_issues, "c" => :label_closed_issues, @@ -105,7 +113,7 @@ "!~" => :label_not_contains } cattr_reader :operators - + @@operators_by_filter_type = { :list => [ "=", "!" ], :list_status => [ "o", "=", "!", "c", "*" ], :list_optional => [ "=", "!", "!*", "*" ], @@ -137,27 +145,32 @@ QueryColumn.new(:created_on, :sortable => "#{Issue.table_name}.created_on", :default_order => 'desc'), ] cattr_reader :available_columns - + def initialize(attributes = nil) super attributes self.filters ||= { 'status_id' => {:operator => "o", :values => [""]} } end - + def after_initialize # Store the fact that project is nil (used in #editable_by?) @is_for_all = project.nil? end - + def validate filters.each_key do |field| - errors.add label_for(field), :blank unless + errors.add label_for(field), :blank unless # filter requires one or more values - (values_for(field) and !values_for(field).first.blank?) or + (values_for(field) and !values_for(field).first.blank?) or # filter doesn't require any value ["o", "c", "!*", "*", "t", "w"].include? operator_for(field) end if filters end + # Returns true if the query is visible to +user+ or the current user. + def visible?(user=User.current) + self.is_public? || self.user_id == user.id + end + def editable_by?(user) return false unless user # Admin can edit them all and regular users can edit their private queries @@ -165,32 +178,40 @@ # Members can not edit public queries that are for all project (only admin is allowed to) is_public && !@is_for_all && user.allowed_to?(:manage_public_queries, project) end - + def available_filters return @available_filters if @available_filters - + trackers = project.nil? ? Tracker.find(:all, :order => 'position') : project.rolled_up_trackers - - @available_filters = { "status_id" => { :type => :list_status, :order => 1, :values => IssueStatus.find(:all, :order => 'position').collect{|s| [s.name, s.id.to_s] } }, - "tracker_id" => { :type => :list, :order => 2, :values => trackers.collect{|s| [s.name, s.id.to_s] } }, + + @available_filters = { "status_id" => { :type => :list_status, :order => 1, :values => IssueStatus.find(:all, :order => 'position').collect{|s| [s.name, s.id.to_s] } }, + "tracker_id" => { :type => :list, :order => 2, :values => trackers.collect{|s| [s.name, s.id.to_s] } }, "priority_id" => { :type => :list, :order => 3, :values => IssuePriority.all.collect{|s| [s.name, s.id.to_s] } }, - "subject" => { :type => :text, :order => 8 }, - "created_on" => { :type => :date_past, :order => 9 }, + "subject" => { :type => :text, :order => 8 }, + "created_on" => { :type => :date_past, :order => 9 }, "updated_on" => { :type => :date_past, :order => 10 }, "start_date" => { :type => :date, :order => 11 }, "due_date" => { :type => :date, :order => 12 }, "estimated_hours" => { :type => :integer, :order => 13 }, "done_ratio" => { :type => :integer, :order => 14 }} - + user_values = [] user_values << ["<< #{l(:label_me)} >>", "me"] if User.current.logged? if project user_values += project.users.sort.collect{|s| [s.name, s.id.to_s] } else - project_ids = Project.all(:conditions => Project.visible_by(User.current)).collect(&:id) - if project_ids.any? - # members of the user's projects - user_values += User.active.find(:all, :conditions => ["#{User.table_name}.id IN (SELECT DISTINCT user_id FROM members WHERE project_id IN (?))", project_ids]).sort.collect{|s| [s.name, s.id.to_s] } + all_projects = Project.visible.all + if all_projects.any? + # members of visible projects + user_values += User.active.find(:all, :conditions => ["#{User.table_name}.id IN (SELECT DISTINCT user_id FROM members WHERE project_id IN (?))", all_projects.collect(&:id)]).sort.collect{|s| [s.name, s.id.to_s] } + + # project filter + project_values = [] + Project.project_tree(all_projects) do |p, level| + prefix = (level > 0 ? ('--' * level + ' ') : '') + project_values << ["#{prefix}#{p.name}", p.id.to_s] + end + @available_filters["project_id"] = { :type => :list, :order => 1, :values => project_values} unless project_values.empty? end end @available_filters["assigned_to_id"] = { :type => :list_optional, :order => 4, :values => user_values } unless user_values.empty? @@ -201,21 +222,26 @@ role_values = Role.givable.collect {|r| [r.name, r.id.to_s] } @available_filters["assigned_to_role"] = { :type => :list_optional, :order => 7, :values => role_values } unless role_values.empty? - + if User.current.logged? @available_filters["watcher_id"] = { :type => :list, :order => 15, :values => [["<< #{l(:label_me)} >>", "me"]] } end - + if project # project specific filters - unless @project.issue_categories.empty? - @available_filters["category_id"] = { :type => :list_optional, :order => 6, :values => @project.issue_categories.collect{|s| [s.name, s.id.to_s] } } + categories = @project.issue_categories.all + unless categories.empty? + @available_filters["category_id"] = { :type => :list_optional, :order => 6, :values => categories.collect{|s| [s.name, s.id.to_s] } } end - unless @project.shared_versions.empty? - @available_filters["fixed_version_id"] = { :type => :list_optional, :order => 7, :values => @project.shared_versions.sort.collect{|s| ["#{s.project.name} - #{s.name}", s.id.to_s] } } + versions = @project.shared_versions.all + unless versions.empty? + @available_filters["fixed_version_id"] = { :type => :list_optional, :order => 7, :values => versions.sort.collect{|s| ["#{s.project.name} - #{s.name}", s.id.to_s] } } end - unless @project.descendants.active.empty? - @available_filters["subproject_id"] = { :type => :list_subprojects, :order => 13, :values => @project.descendants.visible.collect{|s| [s.name, s.id.to_s] } } + unless @project.leaf? + subprojects = @project.descendants.visible.all + unless subprojects.empty? + @available_filters["subproject_id"] = { :type => :list_subprojects, :order => 13, :values => subprojects.collect{|s| [s.name, s.id.to_s] } } + end end add_custom_fields_filters(@project.all_issue_custom_fields) else @@ -225,16 +251,10 @@ @available_filters["fixed_version_id"] = { :type => :list_optional, :order => 7, :values => system_shared_versions.sort.collect{|s| ["#{s.project.name} - #{s.name}", s.id.to_s] } } end add_custom_fields_filters(IssueCustomField.find(:all, :conditions => {:is_filter => true, :is_for_all => true})) - # project filter - project_values = Project.all(:conditions => Project.visible_by(User.current), :order => 'lft').map do |p| - pre = (p.level > 0 ? ('--' * p.level + ' ') : '') - ["#{pre}#{p.name}",p.id.to_s] - end - @available_filters["project_id"] = { :type => :list, :order => 1, :values => project_values} end @available_filters end - + def add_filter(field, operator, values) # values must be an array return unless values and values.is_a? Array # and !values.first.empty? @@ -249,7 +269,7 @@ filters[field] = {:operator => operator, :values => values } end end - + def add_short_filter(field, expression) return unless expression parms = expression.scan(/^(o|c|!\*|!|\*)?(.*)$/).first @@ -264,19 +284,19 @@ end end end - + def has_filter?(field) filters and filters[field] end - + def operator_for(field) has_filter?(field) ? filters[field][:operator] : nil end - + def values_for(field) has_filter?(field) ? filters[field][:values] : nil end - + def label_for(field) label = available_filters[field][:name] if available_filters.has_key?(field) label ||= field.gsub(/\_id$/, "") @@ -288,17 +308,17 @@ @available_columns += (project ? project.all_issue_custom_fields : IssueCustomField.find(:all) - ).collect {|cf| QueryCustomFieldColumn.new(cf) } + ).collect {|cf| QueryCustomFieldColumn.new(cf) } end def self.available_columns=(v) self.available_columns = (v) end - + def self.add_available_column(column) self.available_columns << (column) if column.is_a?(QueryColumn) end - + # Returns an array of columns that can be used to group the results def groupable_columns available_columns.select {|c| c.groupable} @@ -311,7 +331,7 @@ h }) end - + def columns if has_default_columns? available_columns.select do |c| @@ -323,7 +343,7 @@ column_names.collect {|name| available_columns.find {|col| col.name == name}}.compact end end - + def column_names=(names) if names names = names.select {|n| n.is_a?(Symbol) || !n.blank? } @@ -335,15 +355,15 @@ end write_attribute(:column_names, names) end - + def has_column?(column) column_names && column_names.include?(column.name) end - + def has_default_columns? column_names.nil? || column_names.empty? end - + def sort_criteria=(arg) c = [] if arg.is_a?(Hash) @@ -352,19 +372,19 @@ c = arg.select {|k,o| !k.to_s.blank?}.slice(0,3).collect {|k,o| [k.to_s, o == 'desc' ? o : 'asc']} write_attribute(:sort_criteria, c) end - + def sort_criteria read_attribute(:sort_criteria) || [] end - + def sort_criteria_key(arg) sort_criteria && sort_criteria[arg] && sort_criteria[arg].first end - + def sort_criteria_order(arg) sort_criteria && sort_criteria[arg] && sort_criteria[arg].last end - + # Returns the SQL sort order that should be prepended for grouping def group_by_sort_order if grouped? && (column = group_by_column) @@ -373,20 +393,20 @@ "#{column.sortable} #{column.default_order}" end end - + # Returns true if the query is a grouped query def grouped? - !group_by.blank? + !group_by_column.nil? end - + def group_by_column - groupable_columns.detect {|c| c.name.to_s == group_by} + groupable_columns.detect {|c| c.groupable && c.name.to_s == group_by} end - + def group_by_statement - group_by_column.groupable + group_by_column.try(:groupable) end - + def project_statement project_clauses = [] if project && !@project.descendants.active.empty? @@ -409,8 +429,7 @@ elsif project project_clauses << "#{Project.table_name}.id = %d" % project.id end - project_clauses << Project.allowed_to_condition(User.current, :view_issues) - project_clauses.join(' AND ') + project_clauses.any? ? project_clauses.join(' AND ') : nil end def statement @@ -421,12 +440,12 @@ v = values_for(field).clone next unless v and !v.empty? operator = operator_for(field) - + # "me" value subsitution if %w(assigned_to_id author_id watcher_id).include?(field) v.push(User.current.logged? ? User.current.id.to_s : "0") if v.delete("me") end - + sql = '' if field =~ /^cf_(\d+)$/ # custom field @@ -458,7 +477,7 @@ end user_ids.flatten.uniq.compact }.sort.collect(&:to_s) - + sql << '(' + sql_for_field("assigned_to_id", operator, members_of_groups, Issue.table_name, "assigned_to_id", false) + ')' elsif field == "assigned_to_role" # named field @@ -472,14 +491,14 @@ roles = Role.givable.find_all_by_id(v) end roles ||= [] - + members_of_roles = roles.inject([]) {|user_ids, role| if role && role.members user_ids << role.members.collect(&:user_id) end user_ids.flatten.uniq.compact }.sort.collect(&:to_s) - + sql << '(' + sql_for_field("assigned_to_id", operator, members_of_roles, Issue.table_name, "assigned_to_id", false) + ')' else # regular field @@ -488,26 +507,29 @@ sql << '(' + sql_for_field(field, operator, v, db_table, db_field) + ')' end filters_clauses << sql - + end if filters and valid? - - (filters_clauses << project_statement).join(' AND ') + + filters_clauses << project_statement + filters_clauses.reject!(&:blank?) + + filters_clauses.any? ? filters_clauses.join(' AND ') : nil end - + # Returns the issue count def issue_count Issue.count(:include => [:status, :project], :conditions => statement) rescue ::ActiveRecord::StatementInvalid => e raise StatementInvalid.new(e.message) end - + # Returns the issue count by group or nil if query is not grouped def issue_count_by_group r = nil if grouped? begin # Rails will raise an (unexpected) RecordNotFound if there's only a nil group value - r = Issue.count(:group => group_by_statement, :include => [:status, :project], :conditions => statement) + r = Issue.visible.count(:group => group_by_statement, :include => [:status, :project], :conditions => statement) rescue ActiveRecord::RecordNotFound r = {nil => issue_count} end @@ -520,14 +542,14 @@ rescue ::ActiveRecord::StatementInvalid => e raise StatementInvalid.new(e.message) end - + # Returns the issues # Valid options are :order, :offset, :limit, :include, :conditions def issues(options={}) order_option = [group_by_sort_order, options[:order]].reject {|s| s.blank?}.join(',') order_option = nil if order_option.blank? - - Issue.find :all, :include => ([:status, :project] + (options[:include] || [])).uniq, + + Issue.visible.find :all, :include => ([:status, :project] + (options[:include] || [])).uniq, :conditions => Query.merge_conditions(statement, options[:conditions]), :order => order_option, :limit => options[:limit], @@ -539,7 +561,7 @@ # Returns the journals # Valid options are :order, :offset, :limit def journals(options={}) - Journal.find :all, :include => [:details, :user, {:issue => [:project, :author, :tracker, :status]}], + Journal.visible.find :all, :include => [:details, :user, {:issue => [:project, :author, :tracker, :status]}], :conditions => statement, :order => options[:order], :limit => options[:limit], @@ -547,26 +569,36 @@ rescue ::ActiveRecord::StatementInvalid => e raise StatementInvalid.new(e.message) end - + # Returns the versions # Valid options are :conditions def versions(options={}) - Version.find :all, :include => :project, + Version.visible.find :all, :include => :project, :conditions => Query.merge_conditions(project_statement, options[:conditions]) rescue ::ActiveRecord::StatementInvalid => e raise StatementInvalid.new(e.message) end - + private - + # Helper method to generate the WHERE sql for a +field+, +operator+ and a +value+ def sql_for_field(field, operator, value, db_table, db_field, is_custom_filter=false) 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 @@ -596,24 +628,22 @@ when "t" sql = date_range_clause(db_table, db_field, 0, 0) when "w" - from = l(:general_first_day_of_week) == '7' ? - # week starts on sunday - ((Date.today.cwday == 7) ? Time.now.at_beginning_of_day : Time.now.at_beginning_of_week - 1.day) : - # week starts on monday (Rails default) - Time.now.at_beginning_of_week - sql = "#{db_table}.#{db_field} BETWEEN '%s' AND '%s'" % [connection.quoted_date(from), connection.quoted_date(from + 7.days)] + first_day_of_week = l(:general_first_day_of_week).to_i + day_of_week = Date.today.cwday + days_ago = (day_of_week >= first_day_of_week ? day_of_week - first_day_of_week : day_of_week + 7 - first_day_of_week) + sql = date_range_clause(db_table, db_field, - days_ago, - days_ago + 6) when "~" sql = "LOWER(#{db_table}.#{db_field}) LIKE '%#{connection.quote_string(value.first.to_s.downcase)}%'" when "!~" sql = "LOWER(#{db_table}.#{db_field}) NOT LIKE '%#{connection.quote_string(value.first.to_s.downcase)}%'" end - + return sql end - + def add_custom_fields_filters(custom_fields) @available_filters ||= {} - + custom_fields.select(&:is_filter?).each do |field| case field.field_format when "text" @@ -624,13 +654,16 @@ options = { :type => :date, :order => 20 } when "bool" options = { :type => :list, :values => [[l(:general_text_yes), "1"], [l(:general_text_no), "0"]], :order => 20 } + when "user", "version" + next unless project + options = { :type => :list_optional, :values => field.possible_values_options(project), :order => 20} else options = { :type => :string, :order => 20 } end @available_filters["cf_#{field.id}"] = options.merge({ :name => field.name }) end end - + # Returns a SQL clause for a date or datetime field. def date_range_clause(table, field, from, to) s = [] diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/repository.rb.svn-base --- a/app/models/.svn/text-base/repository.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/repository.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,52 +1,89 @@ -# 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 # 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. 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 - + + serialize :extra_info + # Raw SQL to delete changesets and changes in the database # 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) } - + + def self.human_attribute_name(attribute_key_name) + attr_name = attribute_key_name + if attr_name == "log_encoding" + attr_name = "commit_logs_encoding" + end + super(attr_name) + end + # 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 merge_extra_info(arg) + h = extra_info || {} + return h if arg.nil? + h.merge!(arg) + write_attribute(:extra_info, h) + end + + def report_last_commit + true + end + def supports_cat? scm.supports_cat? end @@ -54,11 +91,19 @@ def supports_annotate? scm.supports_annotate? end - + + def supports_all_revisions? + true + end + + def supports_directory_revisions? + false + end + def entry(path=nil, identifier=nil) scm.entry(path, identifier) end - + def entries(path=nil, identifier=nil) scm.entries(path, identifier) end @@ -72,31 +117,40 @@ end def default_branch - scm.default_branch + nil end - + def properties(path, identifier=nil) scm.properties(path, identifier) end - + def cat(path, identifier=nil) scm.cat(path, identifier) end - + def diff(path, rev, rev_to) scm.diff(path, rev, rev_to) end - + + def diff_format_revisions(cs, cs_to, sep=':') + text = "" + text << cs_to.format_identifier + sep if cs_to + text << cs.format_identifier if cs + text + end + # Returns a path relative to the url of the repository def relative_path(path) path end - + # Finds and returns a revision with a number or the beginning of a hash def find_changeset_by_name(name) - changesets.find(:first, :conditions => (name.match(/^\d*$/) ? ["revision = ?", name.to_s] : ["revision LIKE ?", name + '%'])) + return nil if name.blank? + changesets.find(:first, :conditions => (name.match(/^\d*$/) ? + ["revision = ?", name.to_s] : ["revision LIKE ?", name + '%'])) end - + def latest_changeset @latest_changeset ||= changesets.find(:first) end @@ -105,26 +159,32 @@ # Default behaviour is to search in cached changesets def latest_changesets(path, rev, limit=10) if path.blank? - changesets.find(:all, :include => :user, - :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC", - :limit => limit) + changesets.find( + :all, + :include => :user, + :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC", + :limit => limit) else - changes.find(:all, :include => {:changeset => :user}, - :conditions => ["path = ?", path.with_leading_slash], - :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC", - :limit => limit).collect(&:changeset) + changes.find( + :all, + :include => {:changeset => :user}, + :conditions => ["path = ?", path.with_leading_slash], + :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC", + :limit => limit + ).collect(&:changeset) end end - + def scan_changesets_for_issue_ids self.changesets.each(&:scan_comment_for_issue_ids) end # Returns an array of committers usernames and associated user_id def committers - @committers ||= Changeset.connection.select_rows("SELECT DISTINCT committer, user_id FROM #{Changeset.table_name} WHERE repository_id = #{id}") + @committers ||= Changeset.connection.select_rows( + "SELECT DISTINCT committer, user_id FROM #{Changeset.table_name} WHERE repository_id = #{id}") end - + # Maps committers username to a user ids def committer_ids=(h) if h.is_a?(Hash) @@ -132,17 +192,19 @@ new_user_id = h[committer] if new_user_id && (new_user_id.to_i != user_id.to_i) new_user_id = (new_user_id.to_i > 0 ? new_user_id.to_i : nil) - Changeset.update_all("user_id = #{ new_user_id.nil? ? 'NULL' : new_user_id }", ["repository_id = ? AND committer = ?", id, committer]) + Changeset.update_all( + "user_id = #{ new_user_id.nil? ? 'NULL' : new_user_id }", + ["repository_id = ? AND committer = ?", id, committer]) end end - @committers = nil + @committers = nil @found_committer_users = nil true else false end end - + # Returns the Redmine User corresponding to the given +committer+ # It will return nil if the committer is not yet mapped and if no User # with the same username or email was found @@ -150,7 +212,7 @@ unless committer.blank? @found_committer_users ||= {} return @found_committer_users[committer] if @found_committer_users.has_key?(committer) - + user = nil c = changesets.find(:first, :conditions => {:committer => committer}, :include => :user) if c && c.user @@ -165,18 +227,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) @@ -185,27 +256,61 @@ def self.scm_name 'Abstract' end - + 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 Exception => 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 Exception => 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 Exception => 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! root_url.strip! true end - + def clear_changesets cs, ch, ci = Changeset.table_name, Change.table_name, "#{table_name_prefix}changesets_issues#{table_name_suffix}" connection.delete("DELETE FROM #{ch} WHERE #{ch}.changeset_id IN (SELECT #{cs}.id FROM #{cs} WHERE #{cs}.repository_id = #{id})") diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/role.rb.svn-base --- a/app/models/.svn/text-base/role.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/role.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -19,6 +19,12 @@ # Built-in roles BUILTIN_NON_MEMBER = 1 BUILTIN_ANONYMOUS = 2 + + ISSUES_VISIBILITY_OPTIONS = [ + ['all', :label_issues_visibility_all], + ['default', :label_issues_visibility_public], + ['own', :label_issues_visibility_own] + ] named_scope :givable, { :conditions => "builtin = 0", :order => 'position' } named_scope :builtin, lambda { |*args| @@ -43,8 +49,10 @@ validates_presence_of :name validates_uniqueness_of :name validates_length_of :name, :maximum => 30 - validates_format_of :name, :with => /^[\w\s\'\-]*$/i - + validates_inclusion_of :issues_visibility, + :in => ISSUES_VISIBILITY_OPTIONS.collect(&:first), + :if => lambda {|role| role.respond_to?(:issues_visibility)} + def permissions read_attribute(:permissions) || [] end @@ -85,6 +93,14 @@ name end + def name + case builtin + when 1; l(:label_role_non_member, :default => read_attribute(:name)) + when 2; l(:label_role_anonymous, :default => read_attribute(:name)) + else; read_attribute(:name) + end + end + # Return true if the role is a builtin role def builtin? self.builtin != 0 diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/setting.rb.svn-base --- a/app/models/.svn/text-base/setting.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/setting.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -28,12 +28,12 @@ '%b %d, %Y', '%B %d, %Y' ] - + TIME_FORMATS = [ '%H:%M', '%I:%M %p' ] - + ENCODINGS = %w(US-ASCII windows-1250 windows-1251 @@ -65,6 +65,7 @@ UTF-16LE EUC-JP Shift_JIS + CP932 GB18030 GBK ISCII91 @@ -72,22 +73,22 @@ Big5 Big5-HKSCS TIS-620) - + cattr_accessor :available_settings @@available_settings = YAML::load(File.open("#{RAILS_ROOT}/config/settings.yml")) Redmine::Plugin.all.each do |plugin| next unless plugin.settings - @@available_settings["plugin_#{plugin.id}"] = {'default' => plugin.settings[:default], 'serialized' => true} + @@available_settings["plugin_#{plugin.id}"] = {'default' => plugin.settings[:default], 'serialized' => true} end - + validates_uniqueness_of :name validates_inclusion_of :name, :in => @@available_settings.keys - validates_numericality_of :value, :only_integer => true, :if => Proc.new { |setting| @@available_settings[setting.name]['format'] == 'int' } + validates_numericality_of :value, :only_integer => true, :if => Proc.new { |setting| @@available_settings[setting.name]['format'] == 'int' } # Hash used to cache setting values @cached_settings = {} @cached_cleared_on = Time.now - + def value v = read_attribute(:value) # Unserialize serialized settings @@ -95,18 +96,18 @@ v = v.to_sym if @@available_settings[name]['format'] == 'symbol' && !v.blank? v end - + def value=(v) v = v.to_yaml if v && @@available_settings[name] && @@available_settings[name]['serialized'] write_attribute(:value, v.to_s) end - + # Returns the value of the setting named name def self.[](name) v = @cached_settings[name] v ? v : (@cached_settings[name] = find_or_default(name).value) end - + def self.[]=(name, v) setting = find_or_default(name) setting.value = (v ? v : "") @@ -114,7 +115,7 @@ setting.save setting.value end - + # Defines getter and setter for each setting # Then setting values can be read using: Setting.some_setting_name # or set using Setting.some_setting_name = "some value" @@ -134,16 +135,16 @@ END_SRC class_eval src, __FILE__, __LINE__ end - + # Helper that returns an array based on per_page_options setting def self.per_page_options_array per_page_options.split(%r{[\s,]}).collect(&:to_i).select {|n| n > 0}.sort end - + def self.openid? Object.const_defined?(:OpenID) && self[:openid].to_i > 0 end - + # Checks if settings have changed since the values were read # and clears the cache hash if it's the case # Called once per request @@ -155,13 +156,13 @@ logger.info "Settings cache cleared." if logger end end - + private # Returns the Setting instance for the setting named name # (record found in database or new record with default value) def self.find_or_default(name) name = name.to_s - raise "There's no setting named #{name}" unless @@available_settings.has_key?(name) + raise "There's no setting named #{name}" unless @@available_settings.has_key?(name) setting = find_by_name(name) setting ||= new(:name => name, :value => @@available_settings[name]['default']) if @@available_settings.has_key? name end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/time_entry.rb.svn-base --- a/app/models/.svn/text-base/time_entry.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/time_entry.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -22,7 +22,7 @@ belongs_to :issue belongs_to :user belongs_to :activity, :class_name => 'TimeEntryActivity', :foreign_key => 'activity_id' - + attr_protected :project_id, :user_id, :tyear, :tmonth, :tweek acts_as_customizable @@ -33,12 +33,17 @@ acts_as_activity_provider :timestamp => "#{table_name}.created_on", :author_key => :user_id, - :find_options => {:include => :project} + :find_options => {:include => :project} validates_presence_of :user_id, :activity_id, :project_id, :hours, :spent_on validates_numericality_of :hours, :allow_nil => true, :message => :invalid validates_length_of :comments, :maximum => 255, :allow_nil => true + named_scope :visible, lambda {|*args| { + :include => :project, + :conditions => Project.allowed_to_condition(args.shift || User.current, :view_time_entries, *args) + }} + def after_initialize if new_record? && self.activity.nil? if default_activity = TimeEntryActivity.default @@ -47,36 +52,41 @@ self.hours = nil if hours == 0 end end - + def before_validation self.project = issue.project if issue && project.nil? end - + def validate errors.add :hours, :invalid if hours && (hours < 0 || hours >= 1000) errors.add :project_id, :invalid if project.nil? errors.add :issue_id, :invalid if (issue_id && !issue) || (issue && project!=issue.project) end - + def hours=(h) write_attribute :hours, (h.is_a?(String) ? (h.to_hours || h) : h) end - + # tyear, tmonth, tweek assigned where setting spent_on attributes # these attributes make time aggregations easier def spent_on=(date) super + if spent_on.is_a?(Time) + self.spent_on = spent_on.to_date + end self.tyear = spent_on ? spent_on.year : nil self.tmonth = spent_on ? spent_on.month : nil self.tweek = spent_on ? Date.civil(spent_on.year, spent_on.month, spent_on.day).cweek : nil end - + # Returns true if the time entry can be edited by usr, otherwise false def editable_by?(usr) (usr == user && usr.allowed_to?(:edit_own_time_entries, project)) || usr.allowed_to?(:edit_time_entries, project) end - + + # TODO: remove this method in 1.3.0 def self.visible_by(usr) + ActiveSupport::Deprecation.warn "TimeEntry.visible_by is deprecated and will be removed in Redmine 1.3.0. Use the visible scope instead." with_scope(:find => { :conditions => Project.allowed_to_condition(usr, :view_time_entries) }) do yield end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/tracker.rb.svn-base --- a/app/models/.svn/text-base/tracker.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/tracker.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -31,8 +31,9 @@ validates_presence_of :name validates_uniqueness_of :name validates_length_of :name, :maximum => 30 - validates_format_of :name, :with => /^[\w\s\'\-]*$/i + named_scope :named, lambda {|arg| { :conditions => ["LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip]}} + def to_s; name end def <=>(tracker) diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/user.rb.svn-base --- a/app/models/.svn/text-base/user.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/user.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -18,7 +18,8 @@ require "digest/sha1" class User < Principal - + include Redmine::SafeAttributes + # Account statuses STATUS_ANONYMOUS = 0 STATUS_ACTIVE = 1 @@ -34,21 +35,21 @@ } MAIL_NOTIFICATION_OPTIONS = [ - [:all, :label_user_mail_option_all], - [:selected, :label_user_mail_option_selected], - [:none, :label_user_mail_option_none], - [:only_my_events, :label_user_mail_option_only_my_events], - [:only_assigned, :label_user_mail_option_only_assigned], - [:only_owner, :label_user_mail_option_only_owner] - ] + ['all', :label_user_mail_option_all], + ['selected', :label_user_mail_option_selected], + ['only_my_events', :label_user_mail_option_only_my_events], + ['only_assigned', :label_user_mail_option_only_assigned], + ['only_owner', :label_user_mail_option_only_owner], + ['none', :label_user_mail_option_none] + ] has_and_belongs_to_many :groups, :after_add => Proc.new {|user, group| group.user_added(user)}, :after_remove => Proc.new {|user, group| group.user_removed(user)} has_many :issue_categories, :foreign_key => 'assigned_to_id', :dependent => :nullify has_many :changesets, :dependent => :nullify has_one :preference, :dependent => :destroy, :class_name => 'UserPreference' - has_one :rss_token, :dependent => :destroy, :class_name => 'Token', :conditions => "action='feeds'" - has_one :api_token, :dependent => :destroy, :class_name => 'Token', :conditions => "action='api'" + has_one :rss_token, :class_name => 'Token', :conditions => "action='feeds'" + has_one :api_token, :class_name => 'Token', :conditions => "action='api'" belongs_to :auth_source # Active non-anonymous users scope @@ -59,7 +60,7 @@ attr_accessor :password, :password_confirmation attr_accessor :last_before_login_on # Prevents unauthorized assignments - attr_protected :login, :admin, :password, :password_confirmation, :hashed_password, :group_ids + attr_protected :login, :admin, :password, :password_confirmation, :hashed_password validates_presence_of :login, :firstname, :lastname, :mail, :if => Proc.new { |user| !user.is_a?(AnonymousUser) } validates_uniqueness_of :login, :if => Proc.new { |user| !user.login.blank? }, :case_sensitive => false @@ -67,12 +68,23 @@ # Login must contain lettres, numbers, underscores only validates_format_of :login, :with => /^[a-z0-9_\-@\.]*$/i validates_length_of :login, :maximum => 30 - validates_format_of :firstname, :lastname, :with => /^[\w\s\'\-\.]*$/i validates_length_of :firstname, :lastname, :maximum => 30 validates_format_of :mail, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i, :allow_nil => true validates_length_of :mail, :maximum => 60, :allow_nil => true validates_confirmation_of :password, :allow_nil => true + validates_inclusion_of :mail_notification, :in => MAIL_NOTIFICATION_OPTIONS.collect(&:first), :allow_blank => true + before_destroy :remove_references_before_destroy + + named_scope :in_group, lambda {|group| + group_id = group.is_a?(Group) ? group.id : group.to_i + { :conditions => ["#{User.table_name}.id IN (SELECT gu.user_id FROM #{table_name_prefix}groups_users#{table_name_suffix} gu WHERE gu.group_id = ?)", group_id] } + } + named_scope :not_in_group, lambda {|group| + group_id = group.is_a?(Group) ? group.id : group.to_i + { :conditions => ["#{User.table_name}.id NOT IN (SELECT gu.user_id FROM #{table_name_prefix}groups_users#{table_name_suffix} gu WHERE gu.group_id = ?)", group_id] } + } + def before_create self.mail_notification = Setting.default_notification_option if self.mail_notification.blank? true @@ -80,11 +92,14 @@ 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) @name = nil + @projects_by_role = nil super end @@ -118,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 @@ -197,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? @@ -259,12 +282,16 @@ notified_projects_ids end + def valid_notification_options + self.class.valid_notification_options(self) + end + # Only users that belong to more than 1 project can select projects for which they are notified - def valid_notification_options + def self.valid_notification_options(user=nil) # Note that @user.membership.size would fail since AR ignores # :include association option when doing a count - if memberships.length < 1 - MAIL_NOTIFICATION_OPTIONS.delete_if {|option| option.first == :selected} + if user.nil? || user.memberships.length < 1 + MAIL_NOTIFICATION_OPTIONS.reject {|option| option.first == 'selected'} else MAIL_NOTIFICATION_OPTIONS end @@ -344,16 +371,33 @@ !roles_for_project(project).detect {|role| role.member?}.nil? end + # Returns a hash of user's projects grouped by roles + def projects_by_role + return @projects_by_role if @projects_by_role + + @projects_by_role = Hash.new {|h,k| h[k]=[]} + memberships.each do |membership| + membership.roles.each do |role| + @projects_by_role[role] << membership.project if membership.project + end + end + @projects_by_role.each do |role, projects| + projects.uniq! + end + + @projects_by_role + end + # Return true if the user is allowed to do the specified action on a specific context # Action can be: # * a parameter-like Hash (eg. :controller => 'projects', :action => 'edit') # * a permission Symbol (eg. :edit_project) # Context can be: # * a project : returns true if user is allowed to do the specified action on this project - # * a group of projects : returns true if user is allowed on every project + # * an array of projects : returns true if user is allowed on every project # * nil with options[:global] set : check if user has at least one role allowed for this action, # or falls back to Non Member / Anonymous permissions depending if the user is logged - def allowed_to?(action, context, options={}) + def allowed_to?(action, context, options={}, &block) if context && context.is_a?(Project) # No action allowed on archived projects return false unless context.active? @@ -364,12 +408,15 @@ roles = roles_for_project(context) return false unless roles - roles.detect {|role| (context.is_public? || role.member?) && role.allowed_to?(action)} - + roles.detect {|role| + (context.is_public? || role.member?) && + role.allowed_to?(action) && + (block_given? ? yield(role, self) : true) + } elsif context && context.is_a?(Array) # Authorize if user is authorized on every element of the array context.map do |project| - allowed_to?(action,project,options) + allowed_to?(action, project, options, &block) end.inject do |memo,allowed| memo && allowed end @@ -379,7 +426,11 @@ # authorize if user has at least one role that has this permission roles = memberships.collect {|m| m.roles}.flatten.uniq - roles.detect {|r| r.allowed_to?(action)} || (self.logged? ? Role.non_member.allowed_to?(action) : Role.anonymous.allowed_to?(action)) + roles << (self.logged? ? Role.non_member : Role.anonymous) + roles.detect {|role| + role.allowed_to?(action) && + (block_given? ? yield(role, self) : true) + } else false end @@ -387,35 +438,57 @@ # Is the user allowed to do the specified action on any project? # See allowed_to? for the actions and valid options. - def allowed_to_globally?(action, options) - allowed_to?(action, nil, options.reverse_merge(:global => true)) + def allowed_to_globally?(action, options, &block) + allowed_to?(action, nil, options.reverse_merge(:global => true), &block) end + + safe_attributes 'login', + 'firstname', + 'lastname', + 'mail', + 'mail_notification', + 'language', + 'custom_field_values', + 'custom_fields', + 'identity_url' + + safe_attributes 'status', + 'auth_source_id', + :if => lambda {|user, current_user| current_user.admin?} + + safe_attributes 'group_ids', + :if => lambda {|user, current_user| current_user.admin? && !user.new_record?} # Utility method to help check if a user should be notified about an # event. # # TODO: only supports Issue events currently def notify_about?(object) - case mail_notification.to_sym - when :all + case mail_notification + when 'all' true - when :selected - # Handled by the Project - when :none - false - when :only_my_events + when 'selected' + # 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 :only_assigned + when 'none' + false + when 'only_my_events' + if object.is_a?(Issue) && (object.author == self || object.assigned_to == self) + true + else + false + end + when 'only_assigned' if object.is_a?(Issue) && object.assigned_to == self true else false end - when :only_owner + when 'only_owner' if object.is_a?(Issue) && object.author == self true else @@ -444,6 +517,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 @@ -455,11 +542,42 @@ end private + + # Removes references that are not handled by associations + # Things that are not deleted are reassociated with the anonymous user + def remove_references_before_destroy + return if self.id.nil? + + substitute = User.anonymous + Attachment.update_all ['author_id = ?', substitute.id], ['author_id = ?', id] + Comment.update_all ['author_id = ?', substitute.id], ['author_id = ?', id] + Issue.update_all ['author_id = ?', substitute.id], ['author_id = ?', id] + Issue.update_all 'assigned_to_id = NULL', ['assigned_to_id = ?', id] + Journal.update_all ['user_id = ?', substitute.id], ['user_id = ?', id] + JournalDetail.update_all ['old_value = ?', substitute.id.to_s], ["property = 'attr' AND prop_key = 'assigned_to_id' AND old_value = ?", id.to_s] + JournalDetail.update_all ['value = ?', substitute.id.to_s], ["property = 'attr' AND prop_key = 'assigned_to_id' AND value = ?", id.to_s] + Message.update_all ['author_id = ?', substitute.id], ['author_id = ?', id] + News.update_all ['author_id = ?', substitute.id], ['author_id = ?', id] + # Remove private queries and keep public ones + Query.delete_all ['user_id = ? AND is_public = ?', id, false] + Query.update_all ['user_id = ?', substitute.id], ['user_id = ?', id] + TimeEntry.update_all ['user_id = ?', substitute.id], ['user_id = ?', id] + Token.delete_all ['user_id = ?', id] + Watcher.delete_all ['user_id = ?', id] + WikiContent.update_all ['author_id = ?', substitute.id], ['author_id = ?', id] + WikiContent::Version.update_all ['author_id = ?', substitute.id], ['author_id = ?', id] + end # Return password digest 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 @@ -480,4 +598,9 @@ def mail; nil end def time_zone; nil end def rss_key; nil end + + # Anonymous user can not be destroyed + def destroy + false + end end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/user_preference.rb.svn-base --- a/app/models/.svn/text-base/user_preference.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/user_preference.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/version.rb.svn-base --- a/app/models/.svn/text-base/version.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/version.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -33,6 +33,7 @@ validates_inclusion_of :status, :in => VERSION_STATUSES validates_inclusion_of :sharing, :in => VERSION_SHARINGS + named_scope :named, lambda {|arg| { :conditions => ["LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip]}} named_scope :open, :conditions => {:status => 'open'} named_scope :visible, lambda {|*args| { :include => :project, :conditions => Project.allowed_to_condition(args.first || User.current, :view_issues) } } @@ -43,7 +44,7 @@ end def start_date - effective_date + @start_date ||= fixed_issues.minimum('start_date') end def due_date @@ -77,8 +78,7 @@ def behind_schedule? if completed_pourcent == 100 return false - elsif due_date && fixed_issues.present? && fixed_issues.minimum('start_date') # TODO: should use #start_date but that method is wrong... - start_date = fixed_issues.minimum('start_date') + elsif due_date && start_date done_date = start_date + ((due_date - start_date+1)* completed_pourcent/100).floor return done_date <= Date.today else diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/wiki.rb.svn-base --- a/app/models/.svn/text-base/wiki.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/wiki.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -44,17 +44,26 @@ # find the page with the given title def find_page(title, options = {}) + @page_found_with_redirect = false title = start_page if title.blank? title = Wiki.titleize(title) - page = pages.find_by_title(title) + page = pages.first(:conditions => ["LOWER(title) = LOWER(?)", title]) if !page && !(options[:with_redirect] == false) # search for a redirect - redirect = redirects.find_by_title(title) - page = find_page(redirect.redirects_to, :with_redirect => false) if redirect + redirect = redirects.first(:conditions => ["LOWER(title) = LOWER(?)", title]) + if redirect + page = find_page(redirect.redirects_to, :with_redirect => false) + @page_found_with_redirect = true + end end page end + # Returns true if the last page was found with a redirect + def page_found_with_redirect? + @page_found_with_redirect + end + # Finds a page by title # The given string can be of one of the forms: "title" or "project:title" # Examples: diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/wiki_content.rb.svn-base --- a/app/models/.svn/text-base/wiki_content.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/wiki_content.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -23,28 +23,28 @@ belongs_to :author, :class_name => 'User', :foreign_key => 'author_id' validates_presence_of :text validates_length_of :comments, :maximum => 255, :allow_nil => true - + acts_as_versioned - + def visible?(user=User.current) page.visible?(user) end - + def project page.project end - + def attachments page.nil? ? [] : page.attachments end - + # Returns the mail adresses of users that should be notified def recipients notified = project.notified_users notified.reject! {|user| !visible?(user)} notified.collect(&:mail) end - + class Version belongs_to :page, :class_name => '::WikiPage', :foreign_key => 'page_id' belongs_to :author, :class_name => '::User', :foreign_key => 'author_id' @@ -84,7 +84,7 @@ end plain end - + def text @text ||= case compression when 'gzip' @@ -92,16 +92,16 @@ else # uncompressed data data - end + end end - + def project page.project end - + # Returns the previous version or nil def previous - @previous ||= WikiContent::Version.find(:first, + @previous ||= WikiContent::Version.find(:first, :order => 'version DESC', :include => :author, :conditions => ["wiki_content_id = ? AND version < ?", wiki_content_id, version]) diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/wiki_page.rb.svn-base --- a/app/models/.svn/text-base/wiki_page.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/wiki_page.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -32,6 +32,7 @@ acts_as_searchable :columns => ['title', 'text'], :include => [{:wiki => :project}, :content], + :permission => :view_wiki_pages, :project_key => "#{Wiki.table_name}.project_id" attr_accessor :redirect_existing_links @@ -41,6 +42,12 @@ validates_uniqueness_of :title, :scope => :wiki_id, :case_sensitive => false validates_associated :content + # eager load information about last updates, without loading text + named_scope :with_updated_on, { + :select => "#{WikiPage.table_name}.*, #{WikiContent.table_name}.updated_on", + :joins => "LEFT JOIN #{WikiContent.table_name} ON #{WikiContent.table_name}.page_id = #{WikiPage.table_name}.id" + } + # Wiki pages that are protected by default DEFAULT_PROTECTED_PAGES = %w(sidebar) @@ -121,6 +128,18 @@ content.text if content end + def updated_on + unless @updated_on + if time = read_attribute(:updated_on) + # content updated_on was eager loaded with the page + @updated_on = Time.parse(time) rescue nil + else + @updated_on = content && content.updated_on + end + end + @updated_on + end + # Returns true if usr is allowed to edit the page, otherwise false def editable_by?(usr) !protected? || usr.allowed_to?(:protect_wiki_pages, wiki.project) @@ -149,17 +168,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 @@ -197,6 +212,10 @@ break unless @lines.detect { |line| line[0].nil? } current = current.previous end - @lines.each { |line| line[0] ||= current.version } + @lines.each { |line| + line[0] ||= current.version + # if the last known version is > 1 (eg. history was cleared), we don't know the author + line[1] ||= current.author if current.version == 1 + } end end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/.svn/text-base/workflow.rb.svn-base --- a/app/models/.svn/text-base/workflow.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/.svn/text-base/workflow.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -89,8 +89,8 @@ else transaction do delete_all :tracker_id => target_tracker.id, :role_id => target_role.id - connection.insert "INSERT INTO #{Workflow.table_name} (tracker_id, role_id, old_status_id, new_status_id)" + - " SELECT #{target_tracker.id}, #{target_role.id}, old_status_id, new_status_id" + + connection.insert "INSERT INTO #{Workflow.table_name} (tracker_id, role_id, old_status_id, new_status_id, author, assignee)" + + " SELECT #{target_tracker.id}, #{target_role.id}, old_status_id, new_status_id, author, assignee" + " FROM #{Workflow.table_name}" + " WHERE tracker_id = #{source_tracker.id} AND role_id = #{source_role.id}" end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/attachment.rb --- a/app/models/attachment.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/attachment.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -20,7 +20,7 @@ class Attachment < ActiveRecord::Base belongs_to :container, :polymorphic => true belongs_to :author, :class_name => "User", :foreign_key => "author_id" - + validates_presence_of :container, :filename, :author validates_length_of :filename, :maximum => 255 validates_length_of :disk_filename, :maximum => 255 @@ -31,20 +31,20 @@ acts_as_activity_provider :type => 'files', :permission => :view_files, :author_key => :author_id, - :find_options => {:select => "#{Attachment.table_name}.*", + :find_options => {:select => "#{Attachment.table_name}.*", :joins => "LEFT JOIN #{Version.table_name} ON #{Attachment.table_name}.container_type='Version' AND #{Version.table_name}.id = #{Attachment.table_name}.container_id " + "LEFT JOIN #{Project.table_name} ON #{Version.table_name}.project_id = #{Project.table_name}.id OR ( #{Attachment.table_name}.container_type='Project' AND #{Attachment.table_name}.container_id = #{Project.table_name}.id )"} - + acts_as_activity_provider :type => 'documents', :permission => :view_documents, :author_key => :author_id, - :find_options => {:select => "#{Attachment.table_name}.*", + :find_options => {:select => "#{Attachment.table_name}.*", :joins => "LEFT JOIN #{Document.table_name} ON #{Attachment.table_name}.container_type='Document' AND #{Document.table_name}.id = #{Attachment.table_name}.container_id " + "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 errors.add(:base, :too_long, :count => Setting.attachment_max_size.to_i.kilobytes) @@ -76,7 +76,7 @@ if @temp_file && (@temp_file.size > 0) logger.debug("saving '#{self.diskfile}'") md5 = Digest::MD5.new - File.open(diskfile, "wb") do |f| + File.open(diskfile, "wb") do |f| buffer = "" while (buffer = @temp_file.read(8192)) f.write(buffer) @@ -100,7 +100,7 @@ def diskfile "#{@@storage_path}/#{self.disk_filename}" end - + def increment_download increment!(:downloads) end @@ -108,27 +108,27 @@ def project container.project end - + def visible?(user=User.current) container.attachments_visible?(user) end - + def deletable?(user=User.current) container.attachments_deletable?(user) end - + def image? self.filename =~ /\.(jpe?g|gif|png)$/i end - + def is_text? Redmine::MimeType.is_type?('text', filename) end - + def is_diff? self.filename =~ /\.(patch|diff)$/i end - + # Returns true if the file is readable def readable? File.readable?(diskfile) @@ -145,7 +145,7 @@ attachments.each_value do |attachment| file = attachment['file'] next unless file && file.size > 0 - a = Attachment.create(:container => obj, + a = Attachment.create(:container => obj, :file => file, :description => attachment['description'].to_s.strip, :author => User.current) @@ -160,18 +160,18 @@ end {:files => attached, :unsaved => obj.unsaved_attachments} end - + private def sanitize_filename(value) # get only the filename, not the whole path just_filename = value.gsub(/^.*(\\|\/)/, '') # NOTE: File.basename doesn't work right with Windows paths on Unix - # INCORRECT: just_filename = File.basename(value.gsub('\\\\', '/')) + # INCORRECT: just_filename = File.basename(value.gsub('\\\\', '/')) # Finally, replace all non alphanumeric, hyphens or periods with underscore - @filename = just_filename.gsub(/[^\w\.\-]/,'_') + @filename = just_filename.gsub(/[^\w\.\-]/,'_') end - + # Returns an ASCII or hashed filename def self.disk_filename(filename) timestamp = DateTime.now.strftime("%y%m%d%H%M%S") diff -r f7c525dc7585 -r 0b6c82dead28 app/models/auth_source.rb --- a/app/models/auth_source.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/auth_source.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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? diff -r f7c525dc7585 -r 0b6c82dead28 app/models/auth_source_ldap.rb --- a/app/models/auth_source_ldap.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/auth_source_ldap.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 app/models/board.rb --- a/app/models/board.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/board.rb Mon Jul 25 14:23:37 2011 +0100 @@ -18,7 +18,7 @@ class Board < ActiveRecord::Base belongs_to :project has_many :topics, :class_name => 'Message', :conditions => "#{Message.table_name}.parent_id IS NULL", :order => "#{Message.table_name}.created_on DESC" - has_many :messages, :dependent => :delete_all, :order => "#{Message.table_name}.created_on DESC" + has_many :messages, :dependent => :destroy, :order => "#{Message.table_name}.created_on DESC" belongs_to :last_message, :class_name => 'Message', :foreign_key => :last_message_id acts_as_list :scope => :project_id acts_as_watchable diff -r f7c525dc7585 -r 0b6c82dead28 app/models/change.rb --- a/app/models/change.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/change.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,30 +1,35 @@ -# 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 # 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. class Change < ActiveRecord::Base belongs_to :changeset - + validates_presence_of :changeset_id, :action, :path before_save :init_path - + def relative_path changeset.repository.relative_path(path) end - + + def before_validation + self.path = Redmine::CodesetUtil.replace_invalid_utf8(self.path) + self.from_path = Redmine::CodesetUtil.replace_invalid_utf8(self.from_path) + end + def init_path self.path ||= "" end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/changeset.rb --- a/app/models/changeset.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/changeset.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ # Redmine - project management software -# Copyright (C) 2006-2010 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 # 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. @@ -23,167 +23,221 @@ has_many :changes, :dependent => :delete_all has_and_belongs_to_many :issues - acts_as_event :title => Proc.new {|o| "#{l(:label_revision)} #{RepositoriesHelper.format_revision(o)}" + (o.short_comments.blank? ? '' : (': ' + o.short_comments))}, + acts_as_event :title => Proc.new {|o| "#{l(:label_revision)} #{o.format_identifier}" + (o.short_comments.blank? ? '' : (': ' + o.short_comments))}, :description => :long_comments, :datetime => :committed_on, :url => Proc.new {|o| {:controller => 'repositories', :action => 'revision', :id => o.repository.project, :rev => o.identifier}} - + acts_as_searchable :columns => 'comments', :include => {:repository => :project}, :project_key => "#{Repository.table_name}.project_id", :date_column => 'committed_on' - + acts_as_activity_provider :timestamp => "#{table_name}.committed_on", :author_key => :user_id, :find_options => {:include => [:user, {:repository => :project}]} - + validates_presence_of :repository_id, :revision, :committed_on, :commit_date validates_uniqueness_of :revision, :scope => :repository_id validates_uniqueness_of :scmid, :scope => :repository_id, :allow_nil => true - + named_scope :visible, lambda {|*args| { :include => {:repository => :project}, - :conditions => Project.allowed_to_condition(args.first || User.current, :view_changesets) } } - + :conditions => Project.allowed_to_condition(args.shift || User.current, :view_changesets, *args) } } + def revision=(r) write_attribute :revision, (r.nil? ? nil : r.to_s) end - # Returns the identifier of this changeset. - # e.g. revision number for centralized system; hash id for DVCS + # Returns the identifier of this changeset; depending on repository backends def identifier - scmid || revision - end - - # Returns the wiki identifier, "rN" or "commit:ABCDEF" - def wiki_identifier - if scmid # hash-like - "commit:#{scmid}" - else # numeric - "r#{revision}" + if repository.class.respond_to? :changeset_identifier + repository.class.changeset_identifier self + else + revision.to_s end end - private :wiki_identifier - - def comments=(comment) - write_attribute(:comments, Changeset.normalize_comments(comment)) - end def committed_on=(date) self.commit_date = date super end - - def committer=(arg) - write_attribute(:committer, self.class.to_utf8(arg.to_s)) + + # Returns the readable identifier + def format_identifier + if repository.class.respond_to? :format_changeset_identifier + repository.class.format_changeset_identifier self + else + identifier + end end def project repository.project end - + def author user || committer.to_s.split('<').first 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+)(h|hours?))((\d+)(m|min)?)? + | + ((\d+)(h|hours?|m|min)) + | + (\d+):(\d+) + | + (\d+([\.,]\d+)?)h? + ) + /x + def scan_comment_for_issue_ids return if comments.blank? # keywords used to reference issues ref_keywords = Setting.commit_ref_keywords.downcase.split(",").collect(&:strip) + ref_keywords_any = ref_keywords.delete('*') # keywords used to fix issues fix_keywords = Setting.commit_fix_keywords.downcase.split(",").collect(&:strip) - + kw_regexp = (ref_keywords + fix_keywords).collect{|kw| Regexp.escape(kw)}.join("|") - return if kw_regexp.blank? - + referenced_issues = [] - - if ref_keywords.delete('*') - # find any issue ID in the comments - target_issue_ids = [] - comments.scan(%r{([\s\(\[,-]|^)#(\d+)(?=[[:punct:]]|\s|<|$)}).each { |m| target_issue_ids << m[1] } - referenced_issues += find_referenced_issues_by_id(target_issue_ids) - end - - comments.scan(Regexp.new("(#{kw_regexp})[\s:]+(([\s,;&]*#?\\d+)+)", Regexp::IGNORECASE)).each do |match| - action = match[0] - target_issue_ids = match[1].scan(/\d+/) - target_issues = find_referenced_issues_by_id(target_issue_ids) - if fix_keywords.include?(action.downcase) && fix_status = IssueStatus.find_by_id(Setting.commit_fix_status_id) - # update status of issues - logger.debug "Issues fixed by changeset #{self.revision}: #{issue_ids.join(', ')}." if logger && logger.debug? - target_issues.each do |issue| - # the issue may have been updated by the closure of another one (eg. duplicate) - issue.reload - # don't change the status is the issue is closed - next if issue.status.is_closed? - journal = issue.init_journal(user || User.anonymous, ll(Setting.default_language, :text_status_changed_by_changeset, wiki_identifier)) - issue.status = fix_status - unless Setting.commit_fix_done_ratio.blank? - issue.done_ratio = Setting.commit_fix_done_ratio.to_i - end - Redmine::Hook.call_hook(:model_changeset_scan_commit_for_issue_ids_pre_issue_update, - { :changeset => self, :issue => issue }) - issue.save + + comments.scan(/([\s\(\[,-]|^)((#{kw_regexp})[\s:]+)?(#\d+(\s+@#{TIMELOG_RE})?([\s,;&]+#\d+(\s+@#{TIMELOG_RE})?)*)(?=[[:punct:]]|\s|<|$)/i) do |match| + action, refs = match[2], match[3] + next unless action.present? || ref_keywords_any + + refs.scan(/#(\d+)(\s+@#{TIMELOG_RE})?/).each do |m| + issue, hours = find_referenced_issue_by_id(m[0].to_i), m[2] + if issue + referenced_issues << issue + fix_issue(issue) if fix_keywords.include?(action.to_s.downcase) + log_time(issue, hours) if hours && Setting.commit_logtime_enabled? end end - referenced_issues += target_issues end - + referenced_issues.uniq! self.issues = referenced_issues unless referenced_issues.empty? end - + def short_comments @short_comments || split_comments.first end - + def long_comments @long_comments || split_comments.last end - + + def text_tag + if scmid? + "commit:#{scmid}" + else + "r#{revision}" + end + end + # Returns the previous changeset def previous - @previous ||= Changeset.find(:first, :conditions => ['id < ? AND repository_id = ?', self.id, self.repository_id], :order => 'id DESC') + @previous ||= Changeset.find(:first, + :conditions => ['id < ? AND repository_id = ?', + self.id, self.repository_id], + :order => 'id DESC') end # Returns the next changeset def next - @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) + @next ||= Changeset.find(:first, + :conditions => ['id > ? AND repository_id = ?', + self.id, self.repository_id], + :order => 'id ASC') end # Creates a new Change from it's common parameters def create_change(change) - Change.create(:changeset => self, - :action => change[:action], - :path => change[:path], - :from_path => change[:from_path], + Change.create(:changeset => self, + :action => change[:action], + :path => change[:path], + :from_path => change[:from_path], :from_revision => change[:from_revision]) end - + private - # Finds issues that can be referenced by the commit message - # i.e. issues that belong to the repository project, a subproject or a parent project - def find_referenced_issues_by_id(ids) - return [] if ids.compact.empty? - Issue.find_all_by_id(ids, :include => :project).select {|issue| - project == issue.project || project.is_ancestor_of?(issue.project) || project.is_descendant_of?(issue.project) - } + # Finds an issue that can be referenced by the commit message + # i.e. an issue that belong to the repository project, a subproject or a parent project + def find_referenced_issue_by_id(id) + return nil if id.blank? + issue = Issue.find_by_id(id.to_i, :include => :project) + if issue + unless issue.project && + (project == issue.project || project.is_ancestor_of?(issue.project) || + project.is_descendant_of?(issue.project)) + issue = nil + end + end + issue end - + + def fix_issue(issue) + status = IssueStatus.find_by_id(Setting.commit_fix_status_id.to_i) + if status.nil? + logger.warn("No status macthes commit_fix_status_id setting (#{Setting.commit_fix_status_id})") if logger + return issue + end + + # the issue may have been updated by the closure of another one (eg. duplicate) + issue.reload + # don't change the status is the issue is closed + return if issue.status && issue.status.is_closed? + + journal = issue.init_journal(user || User.anonymous, ll(Setting.default_language, :text_status_changed_by_changeset, text_tag)) + issue.status = status + unless Setting.commit_fix_done_ratio.blank? + issue.done_ratio = Setting.commit_fix_done_ratio.to_i + end + Redmine::Hook.call_hook(:model_changeset_scan_commit_for_issue_ids_pre_issue_update, + { :changeset => self, :issue => issue }) + unless issue.save + logger.warn("Issue ##{issue.id} could not be saved by changeset #{id}: #{issue.errors.full_messages}") if logger + end + issue + end + + def log_time(issue, hours) + time_entry = TimeEntry.new( + :user => user, + :hours => hours, + :issue => issue, + :spent_on => commit_date, + :comments => l(:text_time_logged_by_changeset, :value => text_tag, + :locale => Setting.default_language) + ) + time_entry.activity = log_time_activity unless log_time_activity.nil? + + unless time_entry.save + logger.warn("TimeEntry could not be created by changeset #{id}: #{time_entry.errors.full_messages}") if logger + end + time_entry + end + + def log_time_activity + if Setting.commit_logtime_activity_id.to_i > 0 + TimeEntryActivity.find_by_id(Setting.commit_logtime_activity_id.to_i) + end + end + def split_comments comments =~ /\A(.+?)\r?\n(.*)$/m @short_comments = $1 || comments @@ -191,22 +245,47 @@ return @short_comments, @long_comments end - def self.to_utf8(str) - return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii - encoding = Setting.commit_logs_encoding.to_s.strip - unless encoding.blank? || encoding == 'UTF-8' + public + + # 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 + + def self.to_utf8(str, encoding) + return str if str.nil? + str.force_encoding("ASCII-8BIT") if str.respond_to?(:force_encoding) + if str.empty? + str.force_encoding("UTF-8") if str.respond_to?(:force_encoding) + return str + end + enc = encoding.blank? ? "UTF-8" : encoding + if str.respond_to?(:force_encoding) + if enc.upcase != "UTF-8" + str.force_encoding(enc) + str = str.encode("UTF-8", :invalid => :replace, + :undef => :replace, :replace => '?') + else + str.force_encoding("UTF-8") + if ! str.valid_encoding? + str = str.encode("US-ASCII", :invalid => :replace, + :undef => :replace, :replace => '?').encode("UTF-8") + end + end + else + ic = Iconv.new('UTF-8', enc) + txtar = "" begin - str = Iconv.conv('UTF-8', encoding, str) - rescue Iconv::Failure - # do nothing here + txtar += ic.iconv(str) + rescue Iconv::IllegalSequence + txtar += $!.success + str = '?' + $!.failed[1,$!.failed.length] + retry + rescue + txtar += $!.success end + str = txtar 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 - end + str end end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/comment_observer.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/models/comment_observer.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,24 @@ +# 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. + +class CommentObserver < ActiveRecord::Observer + def after_create(comment) + if comment.commented.is_a?(News) && Setting.notified_events.include?('news_comment_added') + Mailer.deliver_news_comment_added(comment) + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/custom_field.rb --- a/app/models/custom_field.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/custom_field.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -23,7 +23,6 @@ validates_presence_of :name, :field_format validates_uniqueness_of :name, :scope => :type validates_length_of :name, :maximum => 30 - validates_format_of :name, :with => /^[\w\s\.\'\-]*$/i validates_inclusion_of :field_format, :in => Redmine::CustomFieldFormat.available_formats def initialize(attributes = nil) @@ -49,6 +48,35 @@ errors.add(:default_value, :invalid) unless v.valid? end + def possible_values_options(obj=nil) + case field_format + when 'user', 'version' + if obj.respond_to?(:project) && obj.project + case field_format + when 'user' + obj.project.users.sort.collect {|u| [u.to_s, u.id.to_s]} + when 'version' + obj.project.versions.sort.collect {|u| [u.to_s, u.id.to_s]} + end + elsif obj.is_a?(Array) + obj.collect {|o| possible_values_options(o)}.inject {|memo, v| memo & v} + else + [] + end + else + read_attribute :possible_values + end + end + + def possible_values(obj=nil) + case field_format + when 'user', 'version' + possible_values_options(obj).collect(&:last) + else + read_attribute :possible_values + end + end + # Makes possible_values accept a multiline string def possible_values=(arg) if arg.is_a?(Array) @@ -72,6 +100,8 @@ casted = value.to_i when 'float' casted = value.to_f + when 'user', 'version' + casted = (value.blank? ? nil : field_format.classify.constantize.find_by_id(value.to_i)) end end casted diff -r f7c525dc7585 -r 0b6c82dead28 app/models/document.rb --- a/app/models/document.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/document.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -25,20 +25,23 @@ :author => Proc.new {|o| (a = o.attachments.find(:first, :order => "#{Attachment.table_name}.created_on ASC")) ? a.author : nil }, :url => Proc.new {|o| {:controller => 'documents', :action => 'show', :id => o.id}} acts_as_activity_provider :find_options => {:include => :project} - + 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.shift || User.current, :view_documents, *args) } } + def visible?(user=User.current) !user.nil? && user.allowed_to?(:view_documents, project) end - + def after_initialize if new_record? self.category ||= DocumentCategory.default end end - + def updated_on unless @updated_on a = attachments.find(:first, :order => 'created_on DESC') diff -r f7c525dc7585 -r 0b6c82dead28 app/models/document_category.rb --- a/app/models/document_category.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/document_category.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. diff -r f7c525dc7585 -r 0b6c82dead28 app/models/document_category_custom_field.rb --- a/app/models/document_category_custom_field.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/document_category_custom_field.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -20,4 +20,3 @@ :enumeration_doc_categories end end - diff -r f7c525dc7585 -r 0b6c82dead28 app/models/document_observer.rb --- a/app/models/document_observer.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/document_observer.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. diff -r f7c525dc7585 -r 0b6c82dead28 app/models/enabled_module.rb --- a/app/models/enabled_module.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/enabled_module.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,30 +1,30 @@ # 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 # 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. class EnabledModule < ActiveRecord::Base belongs_to :project - + validates_presence_of :name validates_uniqueness_of :name, :scope => :project_id - + after_create :module_enabled - + private - + # after_create callback used to do things when a module is enabled def module_enabled case name diff -r f7c525dc7585 -r 0b6c82dead28 app/models/enumeration.rb --- a/app/models/enumeration.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/enumeration.rb Mon Jul 25 14:23:37 2011 +0100 @@ -32,6 +32,7 @@ named_scope :shared, :conditions => { :project_id => nil } named_scope :active, :conditions => { :active => true } + named_scope :named, lambda {|arg| { :conditions => ["LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip]}} def self.default # Creates a fake default scope so Enumeration.default will check diff -r f7c525dc7585 -r 0b6c82dead28 app/models/group.rb --- a/app/models/group.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/group.rb Mon Jul 25 14:23:37 2011 +0100 @@ -31,6 +31,7 @@ def user_added(user) members.each do |member| + next if member.project.nil? user_member = Member.find_by_project_id_and_user_id(member.project_id, user.id) || Member.new(:project_id => member.project_id, :user_id => user.id) member.member_roles.each do |member_role| user_member.member_roles << MemberRole.new(:role => member_role.role, :inherited_from => member_role.id) diff -r f7c525dc7585 -r 0b6c82dead28 app/models/issue.rb --- a/app/models/issue.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/issue.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,21 +1,23 @@ -# 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 # 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. class Issue < ActiveRecord::Base + include Redmine::SafeAttributes + belongs_to :project belongs_to :tracker belongs_to :status, :class_name => 'IssueStatus', :foreign_key => 'status_id' @@ -27,12 +29,12 @@ has_many :journals, :as => :journalized, :dependent => :destroy has_many :time_entries, :dependent => :delete_all - has_and_belongs_to_many :changesets, :order => "#{Changeset.table_name}.id ASC" - + has_and_belongs_to_many :changesets, :order => "#{Changeset.table_name}.committed_on ASC, #{Changeset.table_name}.id ASC" + 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 @@ -43,7 +45,7 @@ acts_as_event :title => Proc.new {|o| "#{o.tracker.name} ##{o.id} (#{o.status}): #{o.subject}"}, :url => Proc.new {|o| {:controller => 'issues', :action => 'show', :id => o.id}}, :type => Proc.new {|o| 'issue' + (o.closed? ? ' closed' : '') } - + acts_as_activity_provider :find_options => {:include => [:project, :author, :tracker]}, :author_key => :author_id @@ -58,20 +60,14 @@ validates_numericality_of :estimated_hours, :allow_nil => true named_scope :visible, lambda {|*args| { :include => :project, - :conditions => Project.allowed_to_condition(args.first || User.current, :view_issues) } } - + :conditions => Issue.visible_condition(args.shift || User.current, *args) } } + named_scope :open, :conditions => ["#{IssueStatus.table_name}.is_closed = ?", false], :include => :status named_scope :recently_updated, :order => "#{Issue.table_name}.updated_on DESC" named_scope :with_limit, lambda { |limit| { :limit => limit} } named_scope :on_active_project, :include => [:status, :project, :tracker], :conditions => ["#{Project.table_name}.status=#{Project::STATUS_ACTIVE}"] - named_scope :for_gantt, lambda { - { - :include => [:tracker, :status, :assigned_to, :priority, :project, :fixed_version], - :order => "#{Issue.table_name}.due_date ASC, #{Issue.table_name}.start_date ASC, #{Issue.table_name}.id ASC" - } - } named_scope :without_version, lambda { { @@ -88,14 +84,40 @@ 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 a SQL conditions string used to find all issues visible by the specified user + def self.visible_condition(user, options={}) + Project.allowed_to_condition(user, :view_issues, options) do |role, user| + case role.issues_visibility + when 'all' + nil + when 'default' + "(#{table_name}.is_private = #{connection.quoted_false} OR #{table_name}.author_id = #{user.id} OR #{table_name}.assigned_to_id = #{user.id})" + when 'own' + "(#{table_name}.author_id = #{user.id} OR #{table_name}.assigned_to_id = #{user.id})" + else + '1=0' + end + end + end + # Returns true if usr or current user is allowed to view the issue def visible?(usr=nil) - (usr || User.current).allowed_to?(:view_issues, self.project) + (usr || User.current).allowed_to?(:view_issues, self.project) do |role, user| + case role.issues_visibility + when 'all' + true + when 'default' + !self.is_private? || self.author == user || self.assigned_to == user + when 'own' + self.author == user || self.assigned_to == user + else + false + end + end end - + def after_initialize if new_record? # set default values for new records only @@ -103,12 +125,12 @@ self.priority ||= IssuePriority.default end end - + # Overrides Redmine::Acts::Customizable::InstanceMethods#available_custom_fields def available_custom_fields - (project && tracker) ? project.all_issue_custom_fields.select {|c| tracker.custom_fields.include? c } : [] + (project && tracker) ? (project.all_issue_custom_fields & tracker.custom_fields.all) : [] end - + def copy_from(arg) issue = arg.is_a?(Issue) ? arg : Issue.visible.find(arg) self.attributes = issue.attributes.dup.except("id", "root_id", "parent_id", "lft", "rgt", "created_on", "updated_on") @@ -116,7 +138,7 @@ self.status = issue.status self end - + # Moves/copies an issue to a new project and tracker # Returns the moved/copied issue on success, false on failure def move_to_project(*args) @@ -124,11 +146,11 @@ move_to_project_without_transaction(*args) || raise(ActiveRecord::Rollback) end || false end - + def move_to_project_without_transaction(new_project, new_tracker = nil, options = {}) options ||= {} issue = options[:copy] ? self.class.new.copy_from(self) : self - + if new_project && issue.project_id != new_project.id # delete issue relations unless Setting.cross_project_issue_relations? @@ -153,6 +175,7 @@ issue.reset_custom_values! end if options[:copy] + issue.author = User.current issue.custom_field_values = self.custom_field_values.inject({}) {|h,v| h[v.custom_field_id] = v.value; h} issue.status = if options[:attributes] && options[:attributes][:status_id] IssueStatus.find_by_id(options[:attributes][:status_id]) @@ -165,10 +188,16 @@ issue.attributes = options[:attributes] end if issue.save - unless options[:copy] + if options[:copy] + if current_journal && current_journal.notes.present? + issue.init_journal(current_journal.user, current_journal.notes) + issue.current_journal.notify = false + issue.save + end + else # Manually update project_id on related time entries TimeEntry.update_all("project_id = #{new_project.id}", {:issue_id => id}) - + issue.children.each do |child| unless child.move_to_project_without_transaction(new_project) # Move failed and transaction was rollback'd @@ -186,7 +215,7 @@ self.status = nil write_attribute(:status_id, sid) end - + def priority_id=(pid) self.priority = nil write_attribute(:priority_id, pid) @@ -199,6 +228,13 @@ result end + def description=(arg) + if arg.is_a?(String) + arg = arg.gsub(/(\r\n|\n|\r)/, "\r\n") + end + write_attribute(:description, arg) + end + # Overrides attributes= so that tracker_id gets assigned first def attributes_with_tracker_first=(new_attributes, *args) return if new_attributes.nil? @@ -210,35 +246,40 @@ end # Do not redefine alias chain on reload (see #4838) alias_method_chain(:attributes=, :tracker_first) unless method_defined?(:attributes_without_tracker_first=) - + def estimated_hours=(h) write_attribute :estimated_hours, (h.is_a?(String) ? h.to_hours : h) end - - SAFE_ATTRIBUTES = %w( - tracker_id - status_id - parent_issue_id - category_id - assigned_to_id - priority_id - fixed_version_id - subject - description - start_date - due_date - done_ratio - estimated_hours - custom_field_values - lock_version - ) unless const_defined?(:SAFE_ATTRIBUTES) - - SAFE_ATTRIBUTES_ON_TRANSITION = %w( - status_id - assigned_to_id - fixed_version_id - done_ratio - ) unless const_defined?(:SAFE_ATTRIBUTES_ON_TRANSITION) + + safe_attributes 'tracker_id', + 'status_id', + 'parent_issue_id', + 'category_id', + 'assigned_to_id', + 'priority_id', + 'fixed_version_id', + 'subject', + 'description', + 'start_date', + 'due_date', + 'done_ratio', + 'estimated_hours', + 'custom_field_values', + 'custom_fields', + 'lock_version', + :if => lambda {|issue, user| issue.new_record? || user.allowed_to?(:edit_issues, issue.project) } + + safe_attributes 'status_id', + 'assigned_to_id', + 'fixed_version_id', + 'done_ratio', + :if => lambda {|issue, user| issue.new_statuses_allowed_to(user).any? } + + safe_attributes 'is_private', + :if => lambda {|issue, user| + user.allowed_to?(:set_issues_private, issue.project) || + (issue.author == user && user.allowed_to?(:set_own_issues_private, issue.project)) + } # Safely sets attributes # Should be called from controllers instead of #attributes= @@ -247,42 +288,37 @@ # TODO: move workflow/permission checks from controllers to here def safe_attributes=(attrs, user=User.current) return unless attrs.is_a?(Hash) - + # User can change issue attributes only if he has :edit permission or if a workflow transition is allowed - if new_record? || user.allowed_to?(:edit_issues, project) - attrs = attrs.reject {|k,v| !SAFE_ATTRIBUTES.include?(k)} - elsif new_statuses_allowed_to(user).any? - attrs = attrs.reject {|k,v| !SAFE_ATTRIBUTES_ON_TRANSITION.include?(k)} - else - return - end - + attrs = delete_unsafe_attributes(attrs, user) + return if attrs.empty? + # Tracker must be set before since new_statuses_allowed_to depends on it. if t = attrs.delete('tracker_id') self.tracker_id = t end - + if attrs['status_id'] unless new_statuses_allowed_to(user).collect(&:id).include?(attrs['status_id'].to_i) attrs.delete('status_id') end end - + unless leaf? attrs.reject! {|k,v| %w(priority_id done_ratio start_date due_date estimated_hours).include?(k)} end - + if attrs.has_key?('parent_issue_id') if !user.allowed_to?(:manage_subtasks, project) attrs.delete('parent_issue_id') elsif !attrs['parent_issue_id'].blank? - attrs.delete('parent_issue_id') unless Issue.visible(user).exists?(attrs['parent_issue_id']) + attrs.delete('parent_issue_id') unless Issue.visible(user).exists?(attrs['parent_issue_id'].to_i) end end - + self.attributes = attrs end - + def done_ratio if Issue.use_status_for_done_ratio? && status && status.default_done_ratio status.default_done_ratio @@ -298,20 +334,20 @@ def self.use_field_for_done_ratio? Setting.issue_done_ratio == 'issue_field' end - + def validate if self.due_date.nil? && @attributes['due_date'] && !@attributes['due_date'].empty? errors.add :due_date, :not_a_date end - + if self.due_date and self.start_date and self.due_date < self.start_date errors.add :due_date, :greater_than_start_date end - + if start_date && soonest_start && start_date < soonest_start errors.add :start_date, :invalid end - + if fixed_version if !assignable_versions.include?(fixed_version) errors.add :fixed_version_id, :inclusion @@ -319,14 +355,14 @@ errors.add_to_base I18n.t(:error_can_not_reopen_issue_on_closed_version) end end - + # Checks that the issue can not be added/moved to a disabled tracker if project && (tracker_id_changed? || project_id_changed?) unless project.trackers.include?(tracker) errors.add :tracker_id, :inclusion end end - + # Checks parent issue assignment if @parent_issue if @parent_issue.project_id != project_id @@ -343,7 +379,7 @@ end end end - + # Set the done_ratio using the status if that setting is set. This will keep the done_ratios # even if the user turns off the setting later def update_done_ratio_from_issue_status @@ -351,7 +387,7 @@ self.done_ratio = status.default_done_ratio end end - + def init_journal(user, notes = "") @current_journal ||= Journal.new(:journalized => self, :user => user, :notes => notes) @issue_before_change = self.clone @@ -362,12 +398,12 @@ updated_on_will_change! @current_journal end - + # Return true if the issue is closed, otherwise false def closed? self.status.is_closed? end - + # Return true if the issue is being reopened def reopened? if !new_record? && status_id_changed? @@ -391,7 +427,7 @@ end false end - + # Returns true if the issue is overdue def overdue? !due_date.nil? && (due_date < Date.today) && !status.is_closed? @@ -408,33 +444,38 @@ def children? !leaf? end - + # Users the issue can be assigned to def assignable_users users = project.assignable_users users << author if author users.uniq.sort end - + # Versions that the issue can be assigned to def assignable_versions @assignable_versions ||= (project.shared_versions.open + [Version.find_by_id(fixed_version_id_was)]).compact.uniq.sort end - + # Returns true if this issue is blocked by another issue that is still open def blocked? !relations_to.detect {|ir| ir.relation_type == 'blocks' && !ir.issue_from.closed?}.nil? end - + # 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 blocked? ? statuses.reject {|s| s.is_closed?} : statuses end - + # Returns the mail adresses of users that should be notified def recipients notified = project.notified_users @@ -447,7 +488,7 @@ notified.reject! {|user| !visible?(user)} notified.collect(&:mail) end - + # Returns the total number of hours spent on this issue and its descendants # # Example: @@ -456,47 +497,50 @@ def spent_hours @spent_hours ||= self_and_descendants.sum("#{TimeEntry.table_name}.hours", :include => :time_entries).to_f || 0.0 end - + def relations (relations_from + relations_to).sort end - - def all_dependent_issues + + def all_dependent_issues(except=[]) + except << self dependencies = [] relations_from.each do |relation| - dependencies << relation.issue_to - dependencies += relation.issue_to.all_dependent_issues + if relation.issue_to && !except.include?(relation.issue_to) + dependencies << relation.issue_to + dependencies += relation.issue_to.all_dependent_issues(except) + end end dependencies end - + # Returns an array of issues that duplicate this one def duplicates relations_to.select {|r| r.relation_type == IssueRelation::TYPE_DUPLICATES}.collect {|r| r.issue_from} end - + # Returns the due date or the target due date if any # Used on gantt chart def due_before due_date || (fixed_version ? fixed_version.effective_date : nil) end - + # Returns the time scheduled for this issue. - # + # # Example: # Start Date: 2/26/09, End Date: 3/04/09 # duration => 6 def duration (start_date && due_date) ? due_date - start_date : 0 end - + def soonest_start @soonest_start ||= ( relations_to.collect{|relation| relation.successor_soonest_start} + ancestors.collect(&:soonest_start) ).compact.max end - + def reschedule_after(date) return if date.nil? if leaf? @@ -510,7 +554,7 @@ end end end - + def <=>(issue) if issue.nil? -1 @@ -520,17 +564,20 @@ (lft || 0) <=> (issue.lft || 0) end end - + def to_s "#{tracker} ##{id}: #{subject}" end - + # Returns a string of css classes that apply to the issue def css_classes s = "issue status-#{status.position} " s << "priority-#{priority.position}" s << ' closed' if closed? s << ' overdue' if overdue? + s << ' child' if child? + s << ' parent' unless leaf? + s << ' private' if is_private? s << ' created-by-me' if User.current.logged? && author_id == User.current.id s << ' assigned-to-me' if User.current.logged? && assigned_to_id == User.current.id s @@ -540,7 +587,7 @@ # Returns false if save fails def save_issue_with_child_records(params, existing_time_entry=nil) Issue.transaction do - if params[:time_entry] && params[:time_entry][:hours].present? && User.current.allowed_to?(:log_time, project) + if params[:time_entry] && (params[:time_entry][:hours].present? || params[:time_entry][:comments].present?) && User.current.allowed_to?(:log_time, project) @time_entry = existing_time_entry || TimeEntry.new @time_entry.project = project @time_entry.issue = self @@ -549,10 +596,10 @@ @time_entry.attributes = params[:time_entry] self.time_entries << @time_entry end - + if valid? attachments = Attachment.attach_files(self, params[:attachments]) - + attachments[:files].each {|a| @current_journal.details << JournalDetail.new(:property => 'attachment', :prop_key => a.id, :value => a.filename)} # TODO: Rename hook Redmine::Hook.call_hook(:controller_issues_edit_before_save, { :params => params, :issue => self, :time_entry => @time_entry, :journal => @current_journal}) @@ -577,7 +624,7 @@ # Update issues assigned to the version update_versions(["#{Issue.table_name}.fixed_version_id = ?", version.id]) end - + # Unassigns issues from versions that are no longer shared # after +project+ was moved def self.update_versions_from_hierarchy_change(project) @@ -595,7 +642,7 @@ nil end end - + def parent_issue_id if instance_variable_defined? :@parent_issue @parent_issue.nil? ? nil : @parent_issue.id @@ -644,17 +691,19 @@ def self.by_subproject(project) ActiveRecord::Base.connection.select_all("select s.id as status_id, s.is_closed as closed, - i.project_id as project_id, - count(i.id) as total + #{Issue.table_name}.project_id as project_id, + count(#{Issue.table_name}.id) as total from - #{Issue.table_name} i, #{IssueStatus.table_name} s + #{Issue.table_name}, #{Project.table_name}, #{IssueStatus.table_name} s where - i.status_id=s.id - and i.project_id IN (#{project.descendants.active.collect{|p| p.id}.join(',')}) - group by s.id, s.is_closed, i.project_id") if project.descendants.active.any? + #{Issue.table_name}.status_id=s.id + and #{Issue.table_name}.project_id = #{Project.table_name}.id + and #{visible_condition(User.current, :project => project, :with_subprojects => true)} + and #{Issue.table_name}.project_id <> #{project.id} + group by s.id, s.is_closed, #{Issue.table_name}.project_id") if project.descendants.active.any? end # End ReportsController extraction - + # Returns an array of projects that current user can move issues to def self.allowed_target_projects_on_move projects = [] @@ -670,9 +719,9 @@ end projects end - + private - + def update_nested_set_attributes if root_id.nil? # issue was just created @@ -719,7 +768,7 @@ end remove_instance_variable(:@parent_issue) if instance_variable_defined?(:@parent_issue) end - + def update_parent_attributes recalculate_attributes_for(parent_id) if parent_id end @@ -730,14 +779,14 @@ if priority_position = p.children.maximum("#{IssuePriority.table_name}.position", :include => :priority) p.priority = IssuePriority.find_by_position(priority_position) end - + # start/due dates = lowest/highest dates of children p.start_date = p.children.minimum(:start_date) p.due_date = p.children.maximum(:due_date) if p.start_date && p.due_date && p.due_date < p.start_date p.start_date, p.due_date = p.due_date, p.start_date end - + # done ratio = weighted average ratio of leaves unless Issue.use_status_for_done_ratio? && p.status && p.status.default_done_ratio leaves_count = p.leaves.count @@ -751,24 +800,16 @@ p.done_ratio = progress.round end end - + # estimate = sum of leaves estimates p.estimated_hours = p.leaves.sum(:estimated_hours).to_f p.estimated_hours = nil if p.estimated_hours == 0.0 - + # ancestors will be recursively updated p.save(false) 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) @@ -788,7 +829,7 @@ end end end - + # Callback on attachment deletion def attachment_removed(obj) journal = init_journal(User.current) @@ -797,7 +838,7 @@ :old_value => obj.filename) journal.save end - + # Default assignment based on category def default_assign if assigned_to.nil? && category && category.assigned_to @@ -830,27 +871,30 @@ end end end - + # Saves the changes in a Journal # Called after_save 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| + before = @issue_before_change.send(c) + after = send(c) + next if before == after || (before.blank? && after.blank?) @current_journal.details << JournalDetail.new(:property => 'attr', :prop_key => c, :old_value => @issue_before_change.send(c), - :value => send(c)) unless send(c)==@issue_before_change.send(c) + :value => send(c)) } # custom fields changes custom_values.each {|c| next if (@custom_values_before_change[c.custom_field_id]==c.value || (@custom_values_before_change[c.custom_field_id].blank? && c.value.blank?)) - @current_journal.details << JournalDetail.new(:property => 'cf', + @current_journal.details << JournalDetail.new(:property => 'cf', :prop_key => c.custom_field_id, :old_value => @custom_values_before_change[c.custom_field_id], :value => c.value) - } + } @current_journal.save # reset current journal init_journal @current_journal.user, @current_journal.notes @@ -869,20 +913,19 @@ select_field = options.delete(:field) joins = options.delete(:joins) - where = "i.#{select_field}=j.id" - + where = "#{Issue.table_name}.#{select_field}=j.id" + ActiveRecord::Base.connection.select_all("select s.id as status_id, s.is_closed as closed, j.id as #{select_field}, - count(i.id) as total + count(#{Issue.table_name}.id) as total from - #{Issue.table_name} i, #{IssueStatus.table_name} s, #{joins} j + #{Issue.table_name}, #{Project.table_name}, #{IssueStatus.table_name} s, #{joins} j where - i.status_id=s.id + #{Issue.table_name}.status_id=s.id and #{where} - and i.project_id=#{project.id} + and #{Issue.table_name}.project_id=#{Project.table_name}.id + and #{visible_condition(User.current, :project => project)} group by s.id, s.is_closed, j.id") end - - end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/issue_category.rb --- a/app/models/issue_category.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/issue_category.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -24,6 +24,8 @@ validates_uniqueness_of :name, :scope => [:project_id] validates_length_of :name, :maximum => 30 + named_scope :named, lambda {|arg| { :conditions => ["LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip]}} + alias :destroy_without_reassign :destroy # Destroy the category diff -r f7c525dc7585 -r 0b6c82dead28 app/models/issue_relation.rb --- a/app/models/issue_relation.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/issue_relation.rb Mon Jul 25 14:23:37 2011 +0100 @@ -47,7 +47,12 @@ if issue_from && issue_to errors.add :issue_to_id, :invalid if issue_from_id == issue_to_id errors.add :issue_to_id, :not_same_project unless issue_from.project_id == issue_to.project_id || Setting.cross_project_issue_relations? - errors.add_to_base :circular_dependency if issue_to.all_dependent_issues.include? issue_from + #detect circular dependencies depending wether the relation should be reversed + if TYPES.has_key?(relation_type) && TYPES[relation_type][:reverse] + errors.add_to_base :circular_dependency if issue_from.all_dependent_issues.include? issue_to + else + errors.add_to_base :circular_dependency if issue_to.all_dependent_issues.include? issue_from + end errors.add_to_base :cant_link_an_issue_with_a_descendant if issue_from.is_descendant_of?(issue_to) || issue_from.is_ancestor_of?(issue_to) end end @@ -84,14 +89,15 @@ def set_issue_to_dates soonest_start = self.successor_soonest_start - if soonest_start + if soonest_start && issue_to issue_to.reschedule_after(soonest_start) end end def successor_soonest_start - return nil unless (TYPE_PRECEDES == self.relation_type) && (issue_from.start_date || issue_from.due_date) - (issue_from.due_date || issue_from.start_date) + 1 + delay + if (TYPE_PRECEDES == self.relation_type) && delay && issue_from && (issue_from.start_date || issue_from.due_date) + (issue_from.due_date || issue_from.start_date) + 1 + delay + end end def <=>(relation) diff -r f7c525dc7585 -r 0b6c82dead28 app/models/issue_status.rb --- a/app/models/issue_status.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/issue_status.rb Mon Jul 25 14:23:37 2011 +0100 @@ -25,8 +25,9 @@ validates_presence_of :name validates_uniqueness_of :name validates_length_of :name, :maximum => 30 - validates_format_of :name, :with => /^[\w\s\'\-]*$/i validates_inclusion_of :default_done_ratio, :in => 0..100, :allow_nil => true + + named_scope :named, lambda {|arg| { :conditions => ["LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip]}} def after_save IssueStatus.update_all("is_default=#{connection.quoted_false}", ['id <> ?', id]) if self.is_default? @@ -51,10 +52,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 @@ -62,24 +69,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 diff -r f7c525dc7585 -r 0b6c82dead28 app/models/journal.rb --- a/app/models/journal.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/journal.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -32,12 +32,16 @@ :url => Proc.new {|o| {:controller => 'issues', :action => 'show', :id => o.issue.id, :anchor => "change-#{o.id}"}} acts_as_activity_provider :type => 'issues', - :permission => :view_issues, :author_key => :user_id, :find_options => {:include => [{:issue => :project}, :details, :user], :conditions => "#{Journal.table_name}.journalized_type = 'Issue' AND" + " (#{JournalDetail.table_name}.prop_key = 'status_id' OR #{Journal.table_name}.notes <> '')"} + named_scope :visible, lambda {|*args| { + :include => {:issue => :project}, + :conditions => Issue.visible_condition(args.shift || User.current, *args) + }} + def save(*args) # Do not save an empty journal (details.empty? && notes.blank?) ? false : super @@ -73,4 +77,12 @@ s << ' has-details' unless details.blank? s end + + def notify? + @notify != false + end + + def notify=(arg) + @notify = arg + end end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/journal_detail.rb --- a/app/models/journal_detail.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/journal_detail.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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,22 @@ class JournalDetail < ActiveRecord::Base belongs_to :journal + before_save :normalize_values - 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) + private + + def normalize_values + self.value = normalize(value) + self.old_value = normalize(old_value) + end + + def normalize(v) + if v == true + "1" + elsif v == false + "0" + else + v + end end end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/journal_observer.rb --- a/app/models/journal_observer.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/journal_observer.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -17,10 +17,12 @@ class JournalObserver < ActiveRecord::Observer def after_create(journal) - if Setting.notified_events.include?('issue_updated') || - (Setting.notified_events.include?('issue_note_added') && journal.notes.present?) || - (Setting.notified_events.include?('issue_status_updated') && journal.new_status.present?) || - (Setting.notified_events.include?('issue_priority_updated') && journal.new_value_for('priority_id').present?) + if journal.notify? && + (Setting.notified_events.include?('issue_updated') || + (Setting.notified_events.include?('issue_note_added') && journal.notes.present?) || + (Setting.notified_events.include?('issue_status_updated') && journal.new_status.present?) || + (Setting.notified_events.include?('issue_priority_updated') && journal.new_value_for('priority_id').present?) + ) Mailer.deliver_issue_edit(journal) end end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/mail_handler.rb --- a/app/models/mail_handler.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/mail_handler.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -21,25 +21,25 @@ class UnauthorizedAction < StandardError; end class MissingInformation < StandardError; end - + attr_reader :email, :user def self.receive(email, options={}) @@handler_options = options.dup - + @@handler_options[:issue] ||= {} - + @@handler_options[:allow_override] = @@handler_options[:allow_override].split(',').collect(&:strip) if @@handler_options[:allow_override].is_a?(String) @@handler_options[:allow_override] ||= [] # Project needs to be overridable if not specified @@handler_options[:allow_override] << 'project' unless @@handler_options[:issue].has_key?(:project) # Status overridable by default - @@handler_options[:allow_override] << 'status' unless @@handler_options[:issue].has_key?(:status) - + @@handler_options[:allow_override] << 'status' unless @@handler_options[:issue].has_key?(:status) + @@handler_options[:no_permission_check] = (@@handler_options[:no_permission_check].to_s == '1' ? true : false) super email end - + # Processes incoming emails # Returns the created object (eg. an issue, a message) or false def receive(email) @@ -78,13 +78,13 @@ User.current = @user dispatch end - + private MESSAGE_ID_RE = %r{^ e # TODO: send a email to the user @@ -113,7 +113,11 @@ 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 project = target_project @@ -130,7 +134,7 @@ issue.subject = '(no subject)' end issue.description = cleaned_up_text_body - + # add To and Cc as watchers before saving so the watchers can reply to Redmine add_watchers(issue) issue.save! @@ -138,7 +142,7 @@ logger.info "MailHandler: issue ##{issue.id} created by #{user}" if logger && logger.info issue end - + # Adds a note to an existing issue def receive_issue_reply(issue_id) issue = Issue.find_by_id(issue_id) @@ -147,16 +151,20 @@ unless @@handler_options[:no_permission_check] raise UnauthorizedAction unless user.allowed_to?(:add_issue_notes, issue.project) || user.allowed_to?(:edit_issues, issue.project) end - - journal = issue.init_journal(user, cleaned_up_text_body) + + # ignore CLI-supplied defaults for new issues + @@handler_options[:issue].clear + + journal = issue.init_journal(user) issue.safe_attributes = issue_attributes_from_keywords(issue) issue.safe_attributes = {'custom_field_values' => custom_field_values_from_keywords(issue)} + journal.notes = cleaned_up_text_body add_attachments(issue) issue.save! logger.info "MailHandler: issue ##{issue.id} updated by #{user}" if logger && logger.info journal end - + # Reply will be added to the issue def receive_journal_reply(journal_id) journal = Journal.find_by_id(journal_id) @@ -164,17 +172,17 @@ receive_issue_reply(journal.journalized_id) end end - + # Receives a reply to a forum message def receive_message_reply(message_id) message = Message.find_by_id(message_id) if message message = message.root - + unless @@handler_options[:no_permission_check] raise UnauthorizedAction unless user.allowed_to?(:add_messages, message.project) end - + if !message.locked? reply = Message.new(:subject => email.subject.gsub(%r{^.*msg\d+\]}, '').strip, :content => cleaned_up_text_body) @@ -188,7 +196,7 @@ end end end - + def add_attachments(obj) if email.has_attachments? email.attachments.each do |attachment| @@ -199,7 +207,7 @@ end end end - + # Adds To and Cc as watchers of the given object if the sender has the # appropriate permission def add_watchers(obj) @@ -211,7 +219,7 @@ end end end - + def get_keyword(attr, options={}) @keywords ||= {} if @keywords.has_key?(attr) @@ -226,14 +234,14 @@ end end end - + # Destructively extracts the value for +attr+ in +text+ # Returns nil if no matching keyword found def extract_keyword!(text, attr, format=nil) keys = [attr.to_s.humanize] if attr.is_a?(Symbol) - keys << l("field_#{attr}", :default => '', :locale => user.language) if user - keys << l("field_#{attr}", :default => '', :locale => Setting.default_language) + keys << l("field_#{attr}", :default => '', :locale => user.language) if user && user.language.present? + keys << l("field_#{attr}", :default => '', :locale => Setting.default_language) if Setting.default_language.present? end keys.reject! {|k| k.blank?} keys.collect! {|k| Regexp.escape(k)} @@ -250,28 +258,34 @@ raise MissingInformation.new('Unable to determine target project') if target.nil? target end - + # Returns a Hash of issue attributes extracted from keywords in the email body def issue_attributes_from_keywords(issue) assigned_to = (k = get_keyword(:assigned_to, :override => true)) && find_user_from_keyword(k) assigned_to = nil if assigned_to && !issue.assignable_users.include?(assigned_to) - - { - 'tracker_id' => ((k = get_keyword(:tracker)) && issue.project.trackers.find_by_name(k).try(:id)) || issue.project.trackers.find(:first).try(:id), - 'status_id' => (k = get_keyword(:status)) && IssueStatus.find_by_name(k).try(:id), - 'priority_id' => (k = get_keyword(:priority)) && IssuePriority.find_by_name(k).try(:id), - 'category_id' => (k = get_keyword(:category)) && issue.project.issue_categories.find_by_name(k).try(:id), + + attrs = { + 'tracker_id' => (k = get_keyword(:tracker)) && issue.project.trackers.named(k).first.try(:id), + 'status_id' => (k = get_keyword(:status)) && IssueStatus.named(k).first.try(:id), + 'priority_id' => (k = get_keyword(:priority)) && IssuePriority.named(k).first.try(:id), + 'category_id' => (k = get_keyword(:category)) && issue.project.issue_categories.named(k).first.try(:id), 'assigned_to_id' => assigned_to.try(:id), - 'fixed_version_id' => (k = get_keyword(:fixed_version, :override => true)) && issue.project.shared_versions.find_by_name(k).try(:id), + 'fixed_version_id' => (k = get_keyword(:fixed_version, :override => true)) && issue.project.shared_versions.named(k).first.try(:id), 'start_date' => get_keyword(:start_date, :override => true, :format => '\d{4}-\d{2}-\d{2}'), 'due_date' => get_keyword(:due_date, :override => true, :format => '\d{4}-\d{2}-\d{2}'), 'estimated_hours' => get_keyword(:estimated_hours, :override => true), 'done_ratio' => get_keyword(:done_ratio, :override => true, :format => '(\d|10)?0') }.delete_if {|k, v| v.blank? } + + if issue.new_record? && attrs['tracker_id'].nil? + attrs['tracker_id'] = issue.project.trackers.find(:first).try(:id) + end + + attrs end - + # Returns a Hash of issue custom field values extracted from keywords in the email body - def custom_field_values_from_keywords(customized) + def custom_field_values_from_keywords(customized) customized.custom_field_values.inject({}) do |h, v| if value = get_keyword(v.custom_field.name, :override => true) h[v.custom_field.id.to_s] = value @@ -279,7 +293,7 @@ h end end - + # Returns the text/plain part of the email # If not found (eg. HTML-only email), returns the body with tags removed def plain_text_body @@ -300,7 +314,7 @@ @plain_text_body.strip! @plain_text_body end - + def cleaned_up_text_body cleanup_body(plain_text_body) end @@ -308,19 +322,19 @@ def self.full_sanitizer @full_sanitizer ||= HTML::FullSanitizer.new end - + # Creates a user account for the +email+ sender def self.create_user_from_email(email) addr = email.from_addrs.to_a.first if addr && !addr.spec.blank? user = User.new user.mail = addr.spec - + names = addr.name.blank? ? addr.spec.gsub(/@.*$/, '').split('.') : addr.name.split user.firstname = names.shift user.lastname = names.join(' ') user.lastname = '-' if user.lastname.blank? - + user.login = user.mail user.password = ActiveSupport::SecureRandom.hex(5) user.language = Setting.default_language @@ -329,7 +343,7 @@ end private - + # Removes the email body of text after the truncation configurations. def cleanup_body(body) delimiters = Setting.mail_handler_body_delimiters.to_s.split(/[\r\n]+/).reject(&:blank?).map {|s| Regexp.escape(s)} diff -r f7c525dc7585 -r 0b6c82dead28 app/models/mailer.rb --- a/app/models/mailer.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/mailer.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -106,7 +106,7 @@ subject l(:mail_subject_reminder, :count => issues.size, :days => days) body :issues => issues, :days => days, - :issues_url => url_for(:controller => 'issues', :action => 'index', :set_filter => 1, :assigned_to_id => user.id, :sort_key => 'due_date', :sort_order => 'asc') + :issues_url => url_for(:controller => 'issues', :action => 'index', :set_filter => 1, :assigned_to_id => user.id, :sort => 'due_date:asc') render_multipart('reminder', body) end @@ -135,11 +135,11 @@ added_to_url = '' case container.class.name when 'Project' - added_to_url = url_for(:controller => 'projects', :action => 'list_files', :id => container) + added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container) added_to = "#{l(:label_project)}: #{container}" recipients container.project.notified_users.select {|user| user.allowed_to?(:view_files, container.project)}.collect {|u| u.mail} when 'Version' - added_to_url = url_for(:controller => 'projects', :action => 'list_files', :id => container.project_id) + added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container.project) added_to = "#{l(:label_version)}: #{container.name}" recipients container.project.notified_users.select {|user| user.allowed_to?(:view_files, container.project)}.collect {|u| u.mail} when 'Document' @@ -154,7 +154,7 @@ :added_to_url => added_to_url render_multipart('attachments_added', body) end - + # Builds a tmail object used to email recipients of a news' project when a news item is added. # # Example: @@ -170,7 +170,25 @@ render_multipart('news_added', body) end - # Builds a tmail object used to email the recipients of the specified message that was posted. + # Builds a tmail object used to email recipients of a news' project when a news comment is added. + # + # Example: + # news_comment_added(comment) => tmail object + # Mailer.news_comment_added(comment) => sends an email to the news' project recipients + def news_comment_added(comment) + news = comment.commented + redmine_headers 'Project' => news.project.identifier + message_id comment + recipients news.recipients + cc news.watcher_recipients + subject "Re: [#{news.project.name}] #{l(:label_news)}: #{news.title}" + body :news => news, + :comment => comment, + :news_url => url_for(:controller => 'news', :action => 'show', :id => news) + render_multipart('news_comment_added', body) + end + + # Builds a tmail object used to email the recipients of the specified message that was posted. # # Example: # message_posted(message) => tmail object @@ -187,8 +205,8 @@ :message_url => url_for(message.event_url) render_multipart('message_posted', body) end - - # Builds a tmail object used to email the recipients of a project of the specified wiki content was added. + + # Builds a tmail object used to email the recipients of a project of the specified wiki content was added. # # Example: # wiki_content_added(wiki_content) => tmail object @@ -204,8 +222,8 @@ :wiki_content_url => url_for(:controller => 'wiki', :action => 'show', :project_id => wiki_content.project, :id => wiki_content.page.title) render_multipart('wiki_content_added', body) end - - # Builds a tmail object used to email the recipients of a project of the specified wiki content was updated. + + # Builds a tmail object used to email the recipients of a project of the specified wiki content was updated. # # Example: # wiki_content_updated(wiki_content) => tmail object @@ -299,7 +317,7 @@ return false if (recipients.nil? || recipients.empty?) && (cc.nil? || cc.empty?) && (bcc.nil? || bcc.empty?) - + # Set Message-Id and References if @message_id_object mail.message_id = self.class.message_id_for(@message_id_object) @@ -307,7 +325,7 @@ if @references_objects mail.references = @references_objects.collect {|o| self.class.message_id_for(o)} end - + # Log errors when raise_delivery_errors is set to false, Rails does not raise_errors = self.class.raise_delivery_errors self.class.raise_delivery_errors = true @@ -317,7 +335,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 @@ -347,10 +365,10 @@ :conditions => s.conditions ).group_by(&:assigned_to) issues_by_assignee.each do |assignee, issues| - deliver_reminder(assignee, issues, days) unless assignee.nil? + deliver_reminder(assignee, issues, days) if assignee && assignee.active? end end - + # Activates/desactivates email deliveries during +block+ def self.with_deliveries(enabled = true, &block) was_enabled = ActionMailer::Base.perform_deliveries @@ -366,7 +384,7 @@ @initial_language = current_language set_language_if_valid Setting.default_language from Setting.mail_from - + # Common headers headers 'X-Mailer' => 'Redmine', 'X-Redmine-Host' => Setting.host_name, @@ -389,11 +407,11 @@ recipients.delete(@author.mail) if recipients cc.delete(@author.mail) if cc end - + notified_users = [recipients, cc].flatten.compact.uniq # Rails would log recipients only, not cc and bcc mylogger.info "Sending email notification to: #{notified_users.join(', ')}" if mylogger - + # Blind carbon copy recipients if Setting.bcc_recipients? bcc(notified_users) @@ -409,7 +427,7 @@ # # https://rails.lighthouseapp.com/projects/8994/tickets/2338-actionmailer-mailer-views-and-content-type # https://rails.lighthouseapp.com/projects/8994/tickets/1799-actionmailer-doesnt-set-template_format-when-rendering-layouts - + def render_multipart(method_name, body) if Setting.plain_text_mail? content_type "text/plain" @@ -425,29 +443,29 @@ def self.controller_path '' end unless respond_to?('controller_path') - + # Returns a predictable Message-Id for the given object def self.message_id_for(object) # id + timestamp should reduce the odds of a collision # as far as we don't send multiple emails for the same object - timestamp = object.send(object.respond_to?(:created_on) ? :created_on : :updated_on) + timestamp = object.send(object.respond_to?(:created_on) ? :created_on : :updated_on) hash = "redmine.#{object.class.name.demodulize.underscore}-#{object.id}.#{timestamp.strftime("%Y%m%d%H%M%S")}" host = Setting.mail_from.to_s.gsub(%r{^.*@}, '') host = "#{::Socket.gethostname}.redmine" if host.empty? "<#{hash}@#{host}>" end - + private - + def message_id(object) @message_id_object = object end - + def references(object) @references_objects ||= [] @references_objects << object end - + def mylogger RAILS_DEFAULT_LOGGER end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/message.rb --- a/app/models/message.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/message.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -21,10 +21,10 @@ acts_as_tree :counter_cache => :replies_count, :order => "#{Message.table_name}.created_on ASC" acts_as_attachable belongs_to :last_reply, :class_name => 'Message', :foreign_key => 'last_reply_id' - + acts_as_searchable :columns => ['subject', 'content'], :include => {:board => :project}, - :project_key => 'project_id', + :project_key => "#{Board.table_name}.project_id", :date_column => "#{table_name}.created_on" acts_as_event :title => Proc.new {|o| "#{o.board.name}: #{o.subject}"}, :description => :content, @@ -35,29 +35,32 @@ acts_as_activity_provider :find_options => {:include => [{:board => :project}, :author]}, :author_key => :author_id acts_as_watchable - + attr_protected :locked, :sticky validates_presence_of :board, :subject, :content validates_length_of :subject, :maximum => 255 - + after_create :add_author_as_watcher - + + named_scope :visible, lambda {|*args| { :include => {:board => :project}, + :conditions => Project.allowed_to_condition(args.shift || User.current, :view_messages, *args) } } + def visible?(user=User.current) !user.nil? && user.allowed_to?(:view_messages, project) end - + def validate_on_create # Can not reply to a locked topic errors.add_to_base 'Topic is locked' if root.locked? && self != root end - + def after_create if parent parent.reload.update_attribute(:last_reply_id, self.id) end board.reset_counters! end - + def after_update if board_id_changed? Message.update_all("board_id = #{board_id}", ["id = ? OR parent_id = ?", root.id, root.id]) @@ -65,19 +68,19 @@ Board.reset_counters!(board_id) end end - + def after_destroy board.reset_counters! end - + def sticky=(arg) write_attribute :sticky, (arg == true || arg.to_s == '1' ? 1 : 0) end - + def sticky? sticky == 1 end - + def project board.project end @@ -89,9 +92,9 @@ def destroyable_by?(usr) usr && usr.logged? && (usr.allowed_to?(:delete_messages, project) || (self.author == usr && usr.allowed_to?(:delete_own_messages, project))) end - + private - + def add_author_as_watcher Watcher.create(:watchable => self.root, :user => author) end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/message_observer.rb --- a/app/models/message_observer.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/message_observer.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. diff -r f7c525dc7585 -r 0b6c82dead28 app/models/news.rb --- a/app/models/news.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/news.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ # Redmine - project management software -# Copyright (C) 2006-2008 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 # 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. @@ -19,7 +19,7 @@ belongs_to :project belongs_to :author, :class_name => 'User', :foreign_key => 'author_id' has_many :comments, :as => :commented, :dependent => :delete_all, :order => "created_on" - + validates_presence_of :title, :description validates_length_of :title, :maximum => 60 validates_length_of :summary, :maximum => 255 @@ -28,13 +28,32 @@ acts_as_event :url => Proc.new {|o| {:controller => 'news', :action => 'show', :id => o.id}} acts_as_activity_provider :find_options => {:include => [:project, :author]}, :author_key => :author_id - + acts_as_watchable + + after_create :add_author_as_watcher + + named_scope :visible, lambda {|*args| { + :include => :project, + :conditions => Project.allowed_to_condition(args.shift || User.current, :view_news, *args) + }} + def visible?(user=User.current) !user.nil? && user.allowed_to?(:view_news, project) end - + # returns latest news for projects visible by user def self.latest(user = User.current, count = 5) find(:all, :limit => count, :conditions => Project.allowed_to_condition(user, :view_news), :include => [ :author, :project ], :order => "#{News.table_name}.created_on DESC") end + + private + + def add_author_as_watcher + Watcher.create(:watchable => self, :user => author) + end + + # returns latest news for a specific project + def self.latest_for(project, count = 5) + find(:all, :limit => count, :conditions => [ "#{News.table_name}.project_id = #{project.id}", Project.allowed_to_condition(User.current, :view_news) ], :include => [ :author, :project ], :order => "#{News.table_name}.created_on DESC") + end end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/project.rb --- a/app/models/project.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/project.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -16,6 +16,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. class Project < ActiveRecord::Base + include Redmine::SafeAttributes + # Project statuses STATUS_ACTIVE = 1 STATUS_ARCHIVED = 9 @@ -41,7 +43,7 @@ has_many :time_entries, :dependent => :delete_all has_many :queries, :dependent => :delete_all has_many :documents, :dependent => :destroy - has_many :news, :dependent => :delete_all, :include => :author + has_many :news, :dependent => :destroy, :include => :author has_many :issue_categories, :dependent => :delete_all, :order => "#{IssueCategory.table_name}.name" has_many :boards, :dependent => :destroy, :order => "position ASC" has_one :repository, :dependent => :destroy @@ -54,7 +56,7 @@ :join_table => "#{table_name_prefix}custom_fields_projects#{table_name_suffix}", :association_foreign_key => 'custom_field_id' - acts_as_nested_set :order => 'name' + acts_as_nested_set :order => 'name', :dependent => :destroy acts_as_attachable :view_permission => :view_files, :delete_permission => :manage_files @@ -64,7 +66,7 @@ :url => Proc.new {|o| {:controller => 'projects', :action => 'show', :id => o}}, :author => nil - attr_protected :status, :enabled_module_names + attr_protected :status validates_presence_of :name, :identifier validates_uniqueness_of :identifier @@ -77,14 +79,32 @@ # reserved words validates_exclusion_of :identifier, :in => %w( new ) - before_destroy :delete_all_members, :destroy_children + before_destroy :delete_all_members named_scope :has_module, lambda { |mod| { :conditions => ["#{Project.table_name}.id IN (SELECT em.project_id FROM #{EnabledModule.table_name} em WHERE em.name=?)", mod.to_s] } } named_scope :active, { :conditions => "#{Project.table_name}.status = #{STATUS_ACTIVE}"} named_scope :all_public, { :conditions => { :is_public => true } } - named_scope :visible, lambda { { :conditions => Project.visible_by(User.current) } } + named_scope :visible, lambda {|*args| {:conditions => Project.visible_condition(args.shift || User.current, *args) }} named_scope :visible_roots, lambda { { :conditions => Project.root_visible_by(User.current) } } + def initialize(attributes = nil) + super + + initialized = (attributes || {}).stringify_keys + if !initialized.key?('identifier') && Setting.sequential_project_identifiers? + self.identifier = Project.next_identifier + end + if !initialized.key?('is_public') + self.is_public = Setting.default_projects_public? + end + if !initialized.key?('enabled_module_names') + self.enabled_module_names = Setting.default_projects_modules + end + if !initialized.key?('trackers') && !initialized.key?('tracker_ids') + self.trackers = Tracker.all + end + end + def identifier=(identifier) super unless identifier_frozen? end @@ -96,31 +116,40 @@ # returns latest created projects # non public projects will be returned only if user is a member of those def self.latest(user=nil, count=5) - find(:all, :limit => count, :conditions => visible_by(user), :order => "created_on DESC") + visible(user).find(:all, :limit => count, :order => "created_on DESC") end - # Returns a SQL :conditions string used to find all active projects for the specified user. + # Returns true if the project is visible to +user+ or to the current user. + def visible?(user=User.current) + user.allowed_to?(:view_project, self) + end + + def self.visible_by(user=nil) + ActiveSupport::Deprecation.warn "Project.visible_by is deprecated and will be removed in Redmine 1.3.0. Use Project.visible_condition instead." + visible_condition(user || User.current) + end + + # Returns a SQL conditions string used to find all projects visible by the specified user. # # Examples: - # Projects.visible_by(admin) => "projects.status = 1" - # Projects.visible_by(normal_user) => "projects.status = 1 AND projects.is_public = 1" - def self.visible_by(user=nil) - user ||= User.current - if user && user.admin? - return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE}" - elsif user && user.memberships.any? - return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE} AND (#{Project.table_name}.is_public = #{connection.quoted_true} or #{Project.table_name}.id IN (#{user.memberships.collect{|m| m.project_id}.join(',')}))" - else - return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE} AND #{Project.table_name}.is_public = #{connection.quoted_true}" - end + # Project.visible_condition(admin) => "projects.status = 1" + # Project.visible_condition(normal_user) => "((projects.status = 1) AND (projects.is_public = 1 OR projects.id IN (1,3,4)))" + # Project.visible_condition(anonymous) => "((projects.status = 1) AND (projects.is_public = 1))" + def self.visible_condition(user, options={}) + allowed_to_condition(user, :view_project, options) end def self.root_visible_by(user=nil) return "#{Project.table_name}.parent_id IS NULL AND " + visible_by(user) end + # Returns a SQL conditions string used to find all projects for which +user+ has the given +permission+ + # + # Valid options: + # * :project => limit the condition to project + # * :with_subprojects => limit the condition to project and its subprojects + # * :member => limit the condition to the user projects def self.allowed_to_condition(user, permission, options={}) - statements = [] base_statement = "#{Project.table_name}.status=#{Project::STATUS_ACTIVE}" if perm = Redmine::AccessControl.permission(permission) unless perm.project_module.nil? @@ -133,24 +162,37 @@ project_statement << " OR (#{Project.table_name}.lft > #{options[:project].lft} AND #{Project.table_name}.rgt < #{options[:project].rgt})" if options[:with_subprojects] base_statement = "(#{project_statement}) AND (#{base_statement})" end + if user.admin? - # no restriction + base_statement else - statements << "1=0" + statement_by_role = {} + unless options[:member] + role = user.logged? ? Role.non_member : Role.anonymous + if role.allowed_to?(permission) + statement_by_role[role] = "#{Project.table_name}.is_public = #{connection.quoted_true}" + end + end if user.logged? - if Role.non_member.allowed_to?(permission) && !options[:member] - statements << "#{Project.table_name}.is_public = #{connection.quoted_true}" + user.projects_by_role.each do |role, projects| + if role.allowed_to?(permission) + statement_by_role[role] = "#{Project.table_name}.id IN (#{projects.collect(&:id).join(',')})" + end end - allowed_project_ids = user.memberships.select {|m| m.roles.detect {|role| role.allowed_to?(permission)}}.collect {|m| m.project_id} - statements << "#{Project.table_name}.id IN (#{allowed_project_ids.join(',')})" if allowed_project_ids.any? + end + if statement_by_role.empty? + "1=0" else - if Role.anonymous.allowed_to?(permission) && !options[:member] - # anonymous user allowed on public project - statements << "#{Project.table_name}.is_public = #{connection.quoted_true}" - end + if block_given? + statement_by_role.each do |role, statement| + if s = yield(role, user) + statement_by_role[role] = "(#{statement} AND (#{s}))" + end + end + end + "((#{base_statement}) AND (#{statement_by_role.values.join(' OR ')}))" end end - statements.empty? ? base_statement : "((#{base_statement}) AND (#{statements.join(' OR ')}))" end # Returns the Systemwide and project specific activities @@ -332,7 +374,7 @@ # Returns an array of the trackers used by the project and its active sub projects def rolled_up_trackers @rolled_up_trackers ||= - Tracker.find(:all, :include => :projects, + Tracker.find(:all, :joins => :projects, :select => "DISTINCT #{Tracker.table_name}.*", :conditions => ["#{Project.table_name}.lft >= ? AND #{Project.table_name}.rgt <= ? AND #{Project.table_name}.status = #{STATUS_ACTIVE}", lft, rgt], :order => "#{Tracker.table_name}.position") @@ -358,15 +400,17 @@ # Returns a scope of the Versions used by the project def shared_versions - @shared_versions ||= + @shared_versions ||= begin + r = root? ? self : root Version.scoped(:include => :project, :conditions => "#{Project.table_name}.id = #{id}" + " OR (#{Project.table_name}.status = #{Project::STATUS_ACTIVE} AND (" + " #{Version.table_name}.sharing = 'system'" + - " OR (#{Project.table_name}.lft >= #{root.lft} AND #{Project.table_name}.rgt <= #{root.rgt} AND #{Version.table_name}.sharing = 'tree')" + + " OR (#{Project.table_name}.lft >= #{r.lft} AND #{Project.table_name}.rgt <= #{r.rgt} AND #{Version.table_name}.sharing = 'tree')" + " OR (#{Project.table_name}.lft < #{lft} AND #{Project.table_name}.rgt > #{rgt} AND #{Version.table_name}.sharing IN ('hierarchy', 'descendants'))" + " OR (#{Project.table_name}.lft > #{lft} AND #{Project.table_name}.rgt < #{rgt} AND #{Version.table_name}.sharing = 'hierarchy')" + "))") + end end # Returns a hash of project users grouped by role @@ -408,6 +452,12 @@ def all_issue_custom_fields @all_issue_custom_fields ||= (IssueCustomField.for_all + issue_custom_fields).uniq.sort end + + # Returns an array of all custom fields enabled for project time entries + # (explictly associated custom fields and custom fields enabled for all projects) + def all_time_entry_custom_fields + @all_time_entry_custom_fields ||= (TimeEntryCustomField.for_all + time_entry_custom_fields).uniq.sort + end def project self @@ -423,13 +473,20 @@ # Returns a short description of the projects (first lines) def short_description(length = 255) + + ## The short description is used in lists, e.g. Latest projects, + ## My projects etc. It should be no more than a line or two with + ## no text formatting. + ## Original Redmine code: this truncates to the CR that is more ## than "length" characters from the start. # description.gsub(/^(.{#{length}}[^\n\r]*).*$/m, '\1...').strip if description - ## That's too much for us, and also we want to omit images and the - ## like. Truncate instead to the first CR that follows _any_ - ## non-blank text, and to the next word break beyond "length" - ## characters if the result is still longer than that. + + ## That can leave too much text for us, and also we want to omit + ## images and the like. Truncate instead to the first CR that + ## follows _any_ non-blank text, and to the next word break beyond + ## "length" characters if the result is still longer than that. + ## description.gsub(/![^\s]+!/, '').gsub(/^(\s*[^\n\r]*).*$/m, '\1').gsub(/^(.{#{length}}\b).*$/m, '\1 ...').strip if description end @@ -443,24 +500,20 @@ # The earliest start date of a project, based on it's issues and versions def start_date - if module_enabled?(:issue_tracking) - [ - issues.minimum('start_date'), - shared_versions.collect(&:effective_date), - shared_versions.collect {|v| v.fixed_issues.minimum('start_date')} - ].flatten.compact.min - end + [ + issues.minimum('start_date'), + shared_versions.collect(&:effective_date), + shared_versions.collect(&:start_date) + ].flatten.compact.min end # The latest due date of an issue or version def due_date - if module_enabled?(:issue_tracking) - [ - issues.maximum('due_date'), - shared_versions.collect(&:effective_date), - shared_versions.collect {|v| v.fixed_issues.maximum('due_date')} - ].flatten.compact.max - end + [ + issues.maximum('due_date'), + shared_versions.collect(&:effective_date), + shared_versions.collect {|v| v.fixed_issues.maximum('due_date')} + ].flatten.compact.max end def overdue? @@ -504,16 +557,51 @@ def enabled_module_names=(module_names) if module_names && module_names.is_a?(Array) - module_names = module_names.collect(&:to_s) - # remove disabled modules - enabled_modules.each {|mod| mod.destroy unless module_names.include?(mod.name)} - # add new modules - module_names.reject {|name| module_enabled?(name)}.each {|name| enabled_modules << EnabledModule.new(:name => name)} + module_names = module_names.collect(&:to_s).reject(&:blank?) + self.enabled_modules = module_names.collect {|name| enabled_modules.detect {|mod| mod.name == name} || EnabledModule.new(:name => name)} else enabled_modules.clear end end + + # Returns an array of the enabled modules names + def enabled_module_names + enabled_modules.collect(&:name) + end + # Enable a specific module + # + # Examples: + # project.enable_module!(:issue_tracking) + # project.enable_module!("issue_tracking") + def enable_module!(name) + enabled_modules << EnabledModule.new(:name => name.to_s) unless module_enabled?(name) + end + + # Disable a module if it exists + # + # Examples: + # project.disable_module!(:issue_tracking) + # project.disable_module!("issue_tracking") + # project.disable_module!(project.enabled_modules.first) + def disable_module!(target) + target = enabled_modules.detect{|mod| target.to_s == mod.name} unless enabled_modules.include?(target) + target.destroy unless target.blank? + end + + safe_attributes 'name', + 'description', + 'homepage', + 'is_public', + 'identifier', + 'custom_field_values', + 'custom_fields', + 'tracker_ids', + 'issue_custom_field_ids' + + safe_attributes 'enabled_module_names', + :if => lambda {|project, user| project.new_record? || user.allowed_to?(:select_project_modules, project) } + # Returns an array of projects that are in this project's hierarchy # # Example: parents, children, siblings @@ -599,13 +687,6 @@ private - # Destroys children before destroying self - def destroy_children - children.each do |child| - child.destroy - end - end - # Copies wiki from +project+ def copy_wiki(project) # Check that the source project has a wiki first @@ -652,6 +733,7 @@ end # Copies issues from +project+ + # Note: issues assigned to a closed version won't be copied due to validation rules def copy_issues(project) # Stores the source issue id as a key and the copied issues as the # value. Used to map the two togeather for issue relations. @@ -681,12 +763,20 @@ end self.issues << new_issue - issues_map[issue.id] = new_issue + if new_issue.new_record? + logger.info "Project#copy_issues: issue ##{issue.id} could not be copied: #{new_issue.errors.full_messages}" if logger && logger.info + else + issues_map[issue.id] = new_issue unless new_issue.new_record? + end end # Relations after in case issues related each other project.issues.each do |issue| new_issue = issues_map[issue.id] + unless new_issue + # Issue was not copied + next + end # Relations issue.relations_from.each do |source_relation| @@ -713,7 +803,12 @@ # Copies members from +project+ def copy_members(project) - project.memberships.each do |member| + # Copy users first, then groups to handle members with inherited and given roles + members_to_copy = [] + members_to_copy += project.memberships.select {|m| m.principal.is_a?(User)} + members_to_copy += project.memberships.select {|m| !m.principal.is_a?(User)} + + members_to_copy.each do |member| new_member = Member.new new_member.attributes = member.attributes.dup.except("id", "project_id", "created_on") # only copy non inherited roles diff -r f7c525dc7585 -r 0b6c82dead28 app/models/query.rb --- a/app/models/query.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/query.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,24 +1,24 @@ # Redmine - project management software -# Copyright (C) 2006-2008 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 # 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. -class QueryColumn +class QueryColumn attr_accessor :name, :sortable, :groupable, :default_order include Redmine::I18n - + def initialize(name, options={}) self.name = name self.sortable = options[:sortable] @@ -29,19 +29,23 @@ self.default_order = options[:default_order] @caption_key = options[:caption] || "field_#{name}" end - + def caption l(@caption_key) end - + # Returns true if the column is sortable, otherwise false def sortable? !sortable.nil? end - + def value(issue) issue.send name end + + def css_classes + name + end end class QueryCustomFieldColumn < QueryColumn @@ -55,37 +59,41 @@ self.groupable ||= false @cf = custom_field end - + def caption @cf.name end - + def custom_field @cf end - + def value(issue) cv = issue.custom_values.detect {|v| v.custom_field_id == @cf.id} cv && @cf.cast_value(cv.value) end + + def css_classes + @css_classes ||= "#{name} #{@cf.field_format}" + end end class Query < ActiveRecord::Base class StatementInvalid < ::ActiveRecord::StatementInvalid end - + belongs_to :project belongs_to :user serialize :filters serialize :column_names serialize :sort_criteria, Array - + attr_protected :project_id, :user_id - + validates_presence_of :name, :on => :save validates_length_of :name, :maximum => 255 - - @@operators = { "=" => :label_equals, + + @@operators = { "=" => :label_equals, "!" => :label_not_equals, "o" => :label_open_issues, "c" => :label_closed_issues, @@ -105,7 +113,7 @@ "!~" => :label_not_contains } cattr_reader :operators - + @@operators_by_filter_type = { :list => [ "=", "!" ], :list_status => [ "o", "=", "!", "c", "*" ], :list_optional => [ "=", "!", "!*", "*" ], @@ -137,27 +145,32 @@ QueryColumn.new(:created_on, :sortable => "#{Issue.table_name}.created_on", :default_order => 'desc'), ] cattr_reader :available_columns - + def initialize(attributes = nil) super attributes self.filters ||= { 'status_id' => {:operator => "o", :values => [""]} } end - + def after_initialize # Store the fact that project is nil (used in #editable_by?) @is_for_all = project.nil? end - + def validate filters.each_key do |field| - errors.add label_for(field), :blank unless + errors.add label_for(field), :blank unless # filter requires one or more values - (values_for(field) and !values_for(field).first.blank?) or + (values_for(field) and !values_for(field).first.blank?) or # filter doesn't require any value ["o", "c", "!*", "*", "t", "w"].include? operator_for(field) end if filters end + # Returns true if the query is visible to +user+ or the current user. + def visible?(user=User.current) + self.is_public? || self.user_id == user.id + end + def editable_by?(user) return false unless user # Admin can edit them all and regular users can edit their private queries @@ -165,32 +178,40 @@ # Members can not edit public queries that are for all project (only admin is allowed to) is_public && !@is_for_all && user.allowed_to?(:manage_public_queries, project) end - + def available_filters return @available_filters if @available_filters - + trackers = project.nil? ? Tracker.find(:all, :order => 'position') : project.rolled_up_trackers - - @available_filters = { "status_id" => { :type => :list_status, :order => 1, :values => IssueStatus.find(:all, :order => 'position').collect{|s| [s.name, s.id.to_s] } }, - "tracker_id" => { :type => :list, :order => 2, :values => trackers.collect{|s| [s.name, s.id.to_s] } }, + + @available_filters = { "status_id" => { :type => :list_status, :order => 1, :values => IssueStatus.find(:all, :order => 'position').collect{|s| [s.name, s.id.to_s] } }, + "tracker_id" => { :type => :list, :order => 2, :values => trackers.collect{|s| [s.name, s.id.to_s] } }, "priority_id" => { :type => :list, :order => 3, :values => IssuePriority.all.collect{|s| [s.name, s.id.to_s] } }, - "subject" => { :type => :text, :order => 8 }, - "created_on" => { :type => :date_past, :order => 9 }, + "subject" => { :type => :text, :order => 8 }, + "created_on" => { :type => :date_past, :order => 9 }, "updated_on" => { :type => :date_past, :order => 10 }, "start_date" => { :type => :date, :order => 11 }, "due_date" => { :type => :date, :order => 12 }, "estimated_hours" => { :type => :integer, :order => 13 }, "done_ratio" => { :type => :integer, :order => 14 }} - + user_values = [] user_values << ["<< #{l(:label_me)} >>", "me"] if User.current.logged? if project user_values += project.users.sort.collect{|s| [s.name, s.id.to_s] } else - project_ids = Project.all(:conditions => Project.visible_by(User.current)).collect(&:id) - if project_ids.any? - # members of the user's projects - user_values += User.active.find(:all, :conditions => ["#{User.table_name}.id IN (SELECT DISTINCT user_id FROM members WHERE project_id IN (?))", project_ids]).sort.collect{|s| [s.name, s.id.to_s] } + all_projects = Project.visible.all + if all_projects.any? + # members of visible projects + user_values += User.active.find(:all, :conditions => ["#{User.table_name}.id IN (SELECT DISTINCT user_id FROM members WHERE project_id IN (?))", all_projects.collect(&:id)]).sort.collect{|s| [s.name, s.id.to_s] } + + # project filter + project_values = [] + Project.project_tree(all_projects) do |p, level| + prefix = (level > 0 ? ('--' * level + ' ') : '') + project_values << ["#{prefix}#{p.name}", p.id.to_s] + end + @available_filters["project_id"] = { :type => :list, :order => 1, :values => project_values} unless project_values.empty? end end @available_filters["assigned_to_id"] = { :type => :list_optional, :order => 4, :values => user_values } unless user_values.empty? @@ -201,21 +222,26 @@ role_values = Role.givable.collect {|r| [r.name, r.id.to_s] } @available_filters["assigned_to_role"] = { :type => :list_optional, :order => 7, :values => role_values } unless role_values.empty? - + if User.current.logged? @available_filters["watcher_id"] = { :type => :list, :order => 15, :values => [["<< #{l(:label_me)} >>", "me"]] } end - + if project # project specific filters - unless @project.issue_categories.empty? - @available_filters["category_id"] = { :type => :list_optional, :order => 6, :values => @project.issue_categories.collect{|s| [s.name, s.id.to_s] } } + categories = @project.issue_categories.all + unless categories.empty? + @available_filters["category_id"] = { :type => :list_optional, :order => 6, :values => categories.collect{|s| [s.name, s.id.to_s] } } end - unless @project.shared_versions.empty? - @available_filters["fixed_version_id"] = { :type => :list_optional, :order => 7, :values => @project.shared_versions.sort.collect{|s| ["#{s.project.name} - #{s.name}", s.id.to_s] } } + versions = @project.shared_versions.all + unless versions.empty? + @available_filters["fixed_version_id"] = { :type => :list_optional, :order => 7, :values => versions.sort.collect{|s| ["#{s.project.name} - #{s.name}", s.id.to_s] } } end - unless @project.descendants.active.empty? - @available_filters["subproject_id"] = { :type => :list_subprojects, :order => 13, :values => @project.descendants.visible.collect{|s| [s.name, s.id.to_s] } } + unless @project.leaf? + subprojects = @project.descendants.visible.all + unless subprojects.empty? + @available_filters["subproject_id"] = { :type => :list_subprojects, :order => 13, :values => subprojects.collect{|s| [s.name, s.id.to_s] } } + end end add_custom_fields_filters(@project.all_issue_custom_fields) else @@ -225,16 +251,10 @@ @available_filters["fixed_version_id"] = { :type => :list_optional, :order => 7, :values => system_shared_versions.sort.collect{|s| ["#{s.project.name} - #{s.name}", s.id.to_s] } } end add_custom_fields_filters(IssueCustomField.find(:all, :conditions => {:is_filter => true, :is_for_all => true})) - # project filter - project_values = Project.all(:conditions => Project.visible_by(User.current), :order => 'lft').map do |p| - pre = (p.level > 0 ? ('--' * p.level + ' ') : '') - ["#{pre}#{p.name}",p.id.to_s] - end - @available_filters["project_id"] = { :type => :list, :order => 1, :values => project_values} end @available_filters end - + def add_filter(field, operator, values) # values must be an array return unless values and values.is_a? Array # and !values.first.empty? @@ -249,7 +269,7 @@ filters[field] = {:operator => operator, :values => values } end end - + def add_short_filter(field, expression) return unless expression parms = expression.scan(/^(o|c|!\*|!|\*)?(.*)$/).first @@ -264,19 +284,19 @@ end end end - + def has_filter?(field) filters and filters[field] end - + def operator_for(field) has_filter?(field) ? filters[field][:operator] : nil end - + def values_for(field) has_filter?(field) ? filters[field][:values] : nil end - + def label_for(field) label = available_filters[field][:name] if available_filters.has_key?(field) label ||= field.gsub(/\_id$/, "") @@ -288,17 +308,17 @@ @available_columns += (project ? project.all_issue_custom_fields : IssueCustomField.find(:all) - ).collect {|cf| QueryCustomFieldColumn.new(cf) } + ).collect {|cf| QueryCustomFieldColumn.new(cf) } end def self.available_columns=(v) self.available_columns = (v) end - + def self.add_available_column(column) self.available_columns << (column) if column.is_a?(QueryColumn) end - + # Returns an array of columns that can be used to group the results def groupable_columns available_columns.select {|c| c.groupable} @@ -311,7 +331,7 @@ h }) end - + def columns if has_default_columns? available_columns.select do |c| @@ -323,7 +343,7 @@ column_names.collect {|name| available_columns.find {|col| col.name == name}}.compact end end - + def column_names=(names) if names names = names.select {|n| n.is_a?(Symbol) || !n.blank? } @@ -335,15 +355,15 @@ end write_attribute(:column_names, names) end - + def has_column?(column) column_names && column_names.include?(column.name) end - + def has_default_columns? column_names.nil? || column_names.empty? end - + def sort_criteria=(arg) c = [] if arg.is_a?(Hash) @@ -352,19 +372,19 @@ c = arg.select {|k,o| !k.to_s.blank?}.slice(0,3).collect {|k,o| [k.to_s, o == 'desc' ? o : 'asc']} write_attribute(:sort_criteria, c) end - + def sort_criteria read_attribute(:sort_criteria) || [] end - + def sort_criteria_key(arg) sort_criteria && sort_criteria[arg] && sort_criteria[arg].first end - + def sort_criteria_order(arg) sort_criteria && sort_criteria[arg] && sort_criteria[arg].last end - + # Returns the SQL sort order that should be prepended for grouping def group_by_sort_order if grouped? && (column = group_by_column) @@ -373,20 +393,20 @@ "#{column.sortable} #{column.default_order}" end end - + # Returns true if the query is a grouped query def grouped? - !group_by.blank? + !group_by_column.nil? end - + def group_by_column - groupable_columns.detect {|c| c.name.to_s == group_by} + groupable_columns.detect {|c| c.groupable && c.name.to_s == group_by} end - + def group_by_statement - group_by_column.groupable + group_by_column.try(:groupable) end - + def project_statement project_clauses = [] if project && !@project.descendants.active.empty? @@ -409,8 +429,7 @@ elsif project project_clauses << "#{Project.table_name}.id = %d" % project.id end - project_clauses << Project.allowed_to_condition(User.current, :view_issues) - project_clauses.join(' AND ') + project_clauses.any? ? project_clauses.join(' AND ') : nil end def statement @@ -421,12 +440,12 @@ v = values_for(field).clone next unless v and !v.empty? operator = operator_for(field) - + # "me" value subsitution if %w(assigned_to_id author_id watcher_id).include?(field) v.push(User.current.logged? ? User.current.id.to_s : "0") if v.delete("me") end - + sql = '' if field =~ /^cf_(\d+)$/ # custom field @@ -458,7 +477,7 @@ end user_ids.flatten.uniq.compact }.sort.collect(&:to_s) - + sql << '(' + sql_for_field("assigned_to_id", operator, members_of_groups, Issue.table_name, "assigned_to_id", false) + ')' elsif field == "assigned_to_role" # named field @@ -472,14 +491,14 @@ roles = Role.givable.find_all_by_id(v) end roles ||= [] - + members_of_roles = roles.inject([]) {|user_ids, role| if role && role.members user_ids << role.members.collect(&:user_id) end user_ids.flatten.uniq.compact }.sort.collect(&:to_s) - + sql << '(' + sql_for_field("assigned_to_id", operator, members_of_roles, Issue.table_name, "assigned_to_id", false) + ')' else # regular field @@ -488,26 +507,29 @@ sql << '(' + sql_for_field(field, operator, v, db_table, db_field) + ')' end filters_clauses << sql - + end if filters and valid? - - (filters_clauses << project_statement).join(' AND ') + + filters_clauses << project_statement + filters_clauses.reject!(&:blank?) + + filters_clauses.any? ? filters_clauses.join(' AND ') : nil end - + # Returns the issue count def issue_count Issue.count(:include => [:status, :project], :conditions => statement) rescue ::ActiveRecord::StatementInvalid => e raise StatementInvalid.new(e.message) end - + # Returns the issue count by group or nil if query is not grouped def issue_count_by_group r = nil if grouped? begin # Rails will raise an (unexpected) RecordNotFound if there's only a nil group value - r = Issue.count(:group => group_by_statement, :include => [:status, :project], :conditions => statement) + r = Issue.visible.count(:group => group_by_statement, :include => [:status, :project], :conditions => statement) rescue ActiveRecord::RecordNotFound r = {nil => issue_count} end @@ -520,14 +542,14 @@ rescue ::ActiveRecord::StatementInvalid => e raise StatementInvalid.new(e.message) end - + # Returns the issues # Valid options are :order, :offset, :limit, :include, :conditions def issues(options={}) order_option = [group_by_sort_order, options[:order]].reject {|s| s.blank?}.join(',') order_option = nil if order_option.blank? - - Issue.find :all, :include => ([:status, :project] + (options[:include] || [])).uniq, + + Issue.visible.find :all, :include => ([:status, :project] + (options[:include] || [])).uniq, :conditions => Query.merge_conditions(statement, options[:conditions]), :order => order_option, :limit => options[:limit], @@ -539,7 +561,7 @@ # Returns the journals # Valid options are :order, :offset, :limit def journals(options={}) - Journal.find :all, :include => [:details, :user, {:issue => [:project, :author, :tracker, :status]}], + Journal.visible.find :all, :include => [:details, :user, {:issue => [:project, :author, :tracker, :status]}], :conditions => statement, :order => options[:order], :limit => options[:limit], @@ -547,26 +569,36 @@ rescue ::ActiveRecord::StatementInvalid => e raise StatementInvalid.new(e.message) end - + # Returns the versions # Valid options are :conditions def versions(options={}) - Version.find :all, :include => :project, + Version.visible.find :all, :include => :project, :conditions => Query.merge_conditions(project_statement, options[:conditions]) rescue ::ActiveRecord::StatementInvalid => e raise StatementInvalid.new(e.message) end - + private - + # Helper method to generate the WHERE sql for a +field+, +operator+ and a +value+ def sql_for_field(field, operator, value, db_table, db_field, is_custom_filter=false) 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 @@ -596,24 +628,22 @@ when "t" sql = date_range_clause(db_table, db_field, 0, 0) when "w" - from = l(:general_first_day_of_week) == '7' ? - # week starts on sunday - ((Date.today.cwday == 7) ? Time.now.at_beginning_of_day : Time.now.at_beginning_of_week - 1.day) : - # week starts on monday (Rails default) - Time.now.at_beginning_of_week - sql = "#{db_table}.#{db_field} BETWEEN '%s' AND '%s'" % [connection.quoted_date(from), connection.quoted_date(from + 7.days)] + first_day_of_week = l(:general_first_day_of_week).to_i + day_of_week = Date.today.cwday + days_ago = (day_of_week >= first_day_of_week ? day_of_week - first_day_of_week : day_of_week + 7 - first_day_of_week) + sql = date_range_clause(db_table, db_field, - days_ago, - days_ago + 6) when "~" sql = "LOWER(#{db_table}.#{db_field}) LIKE '%#{connection.quote_string(value.first.to_s.downcase)}%'" when "!~" sql = "LOWER(#{db_table}.#{db_field}) NOT LIKE '%#{connection.quote_string(value.first.to_s.downcase)}%'" end - + return sql end - + def add_custom_fields_filters(custom_fields) @available_filters ||= {} - + custom_fields.select(&:is_filter?).each do |field| case field.field_format when "text" @@ -624,13 +654,16 @@ options = { :type => :date, :order => 20 } when "bool" options = { :type => :list, :values => [[l(:general_text_yes), "1"], [l(:general_text_no), "0"]], :order => 20 } + when "user", "version" + next unless project + options = { :type => :list_optional, :values => field.possible_values_options(project), :order => 20} else options = { :type => :string, :order => 20 } end @available_filters["cf_#{field.id}"] = options.merge({ :name => field.name }) end end - + # Returns a SQL clause for a date or datetime field. def date_range_clause(table, field, from, to) s = [] diff -r f7c525dc7585 -r 0b6c82dead28 app/models/repository.rb --- a/app/models/repository.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/repository.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,52 +1,89 @@ -# 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 # 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. class Repository < ActiveRecord::Base + include Redmine::Ciphering + belongs_to :project - has_many :changesets, :order => "#{Changeset.table_name}.id DESC" + has_many :changesets, :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC" has_many :changes, :through => :changesets - + + serialize :extra_info + # Raw SQL to delete changesets and changes in the database # 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) } - + + def self.human_attribute_name(attribute_key_name) + attr_name = attribute_key_name + if attr_name == "log_encoding" + attr_name = "commit_logs_encoding" + end + super(attr_name) + end + # 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 merge_extra_info(arg) + h = extra_info || {} + return h if arg.nil? + h.merge!(arg) + write_attribute(:extra_info, h) + end + + def report_last_commit + true + end + def supports_cat? scm.supports_cat? end @@ -54,11 +91,19 @@ def supports_annotate? scm.supports_annotate? end - + + def supports_all_revisions? + true + end + + def supports_directory_revisions? + false + end + def entry(path=nil, identifier=nil) scm.entry(path, identifier) end - + def entries(path=nil, identifier=nil) scm.entries(path, identifier) end @@ -72,34 +117,40 @@ end def default_branch - scm.default_branch + nil end - + def properties(path, identifier=nil) scm.properties(path, identifier) end - + def cat(path, identifier=nil) scm.cat(path, identifier) end - + def diff(path, rev, rev_to) scm.diff(path, rev, rev_to) end - + + def diff_format_revisions(cs, cs_to, sep=':') + text = "" + text << cs_to.format_identifier + sep if cs_to + text << cs.format_identifier if cs + text + end + # Returns a path relative to the url of the repository def relative_path(path) path end - + # Finds and returns a revision with a number or the beginning of a hash def find_changeset_by_name(name) - # TODO: is this query efficient enough? can we write as single query? - e = changesets.find(:first, :conditions => ['revision = ? OR scmid = ?', name.to_s, name.to_s]) - return e if e - changesets.find(:first, :conditions => ['scmid LIKE ?', "#{name}%"]) + return nil if name.blank? + changesets.find(:first, :conditions => (name.match(/^\d*$/) ? + ["revision = ?", name.to_s] : ["revision LIKE ?", name + '%'])) end - + def latest_changeset @latest_changeset ||= changesets.find(:first) end @@ -108,25 +159,32 @@ # Default behaviour is to search in cached changesets def latest_changesets(path, rev, limit=10) if path.blank? - changesets.find(:all, :include => :user, - :limit => limit) + changesets.find( + :all, + :include => :user, + :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC", + :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) + changes.find( + :all, + :include => {:changeset => :user}, + :conditions => ["path = ?", path.with_leading_slash], + :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC", + :limit => limit + ).collect(&:changeset) end end - + def scan_changesets_for_issue_ids self.changesets.each(&:scan_comment_for_issue_ids) end # Returns an array of committers usernames and associated user_id def committers - @committers ||= Changeset.connection.select_rows("SELECT DISTINCT committer, user_id FROM #{Changeset.table_name} WHERE repository_id = #{id}") + @committers ||= Changeset.connection.select_rows( + "SELECT DISTINCT committer, user_id FROM #{Changeset.table_name} WHERE repository_id = #{id}") end - + # Maps committers username to a user ids def committer_ids=(h) if h.is_a?(Hash) @@ -134,17 +192,19 @@ new_user_id = h[committer] if new_user_id && (new_user_id.to_i != user_id.to_i) new_user_id = (new_user_id.to_i > 0 ? new_user_id.to_i : nil) - Changeset.update_all("user_id = #{ new_user_id.nil? ? 'NULL' : new_user_id }", ["repository_id = ? AND committer = ?", id, committer]) + Changeset.update_all( + "user_id = #{ new_user_id.nil? ? 'NULL' : new_user_id }", + ["repository_id = ? AND committer = ?", id, committer]) end end - @committers = nil + @committers = nil @found_committer_users = nil true else false end end - + # Returns the Redmine User corresponding to the given +committer+ # It will return nil if the committer is not yet mapped and if no User # with the same username or email was found @@ -152,7 +212,7 @@ unless committer.blank? @found_committer_users ||= {} return @found_committer_users[committer] if @found_committer_users.has_key?(committer) - + user = nil c = changesets.find(:first, :conditions => {:committer => committer}, :include => :user) if c && c.user @@ -167,7 +227,12 @@ 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" @@ -177,12 +242,12 @@ begin project.repository.fetch_changesets rescue Redmine::Scm::Adapters::CommandFailed => e - logger.error "Repository: error during fetching changesets: #{e.message}" + 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) @@ -191,27 +256,65 @@ def self.scm_name 'Abstract' end - + 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 clear_cache + clear_changesets + 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 Exception => 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 Exception => 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 Exception => 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! root_url.strip! true end - + def clear_changesets cs, ch, ci = Changeset.table_name, Change.table_name, "#{table_name_prefix}changesets_issues#{table_name_suffix}" connection.delete("DELETE FROM #{ch} WHERE #{ch}.changeset_id IN (SELECT #{cs}.id FROM #{cs} WHERE #{cs}.repository_id = #{id})") diff -r f7c525dc7585 -r 0b6c82dead28 app/models/repository/.svn/all-wcprops --- a/app/models/repository/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/repository/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,47 +1,47 @@ K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/3394/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/3394/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/3360/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 diff -r f7c525dc7585 -r 0b6c82dead28 app/models/repository/.svn/entries --- a/app/models/repository/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/repository/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/models/repository +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/models/repository http://redmine.rubyforge.org/svn -2010-02-07T15:17:21.677785Z -3394 -jplang +2011-07-11T02:08:23.222641Z +6254 +tmaruyama @@ -32,11 +32,11 @@ -2010-09-23T14:37:44.487730Z -b02ecaea01c5990cbde09689be12ec7d -2010-02-02T17:02:32.020293Z -3360 -edavis10 +2011-07-14T09:24:21.000000Z +2950b88e98eed34048c7f007a8f7fb21 +2011-05-12T07:15:39.740135Z +5751 +tmaruyama has-props @@ -58,7 +58,7 @@ -3306 +3397 bazaar.rb file @@ -66,11 +66,11 @@ -2010-09-23T14:37:44.483732Z -84591e1c5afa1b74a10954dd521ceb4e -2008-06-14T15:44:36.838876Z -1537 -jplang +2011-07-14T09:24:21.000000Z +d4568bac22baf6121a7ea8883b59c58c +2011-05-18T07:11:41.584755Z +5834 +tmaruyama has-props @@ -92,7 +92,7 @@ -3617 +3916 git.rb file @@ -100,11 +100,11 @@ -2010-09-24T11:56:52.924049Z -b3a159a082904eaf5e084eb0ea2a6988 -2010-02-07T15:17:21.677785Z -3394 -jplang +2011-07-14T09:28:10.000000Z +088218d9e44676f0d7cc681e0c2d478f +2011-07-11T00:24:22.360802Z +6244 +tmaruyama has-props @@ -126,7 +126,7 @@ -2872 +5264 mercurial.rb file @@ -134,11 +134,11 @@ -2010-09-24T11:56:52.932091Z -6ca7d031f8d4d508518892a607462b88 -2010-02-02T17:02:32.020293Z -3360 -edavis10 +2011-07-14T09:28:10.000000Z +a6d749563379e794248f32aa715ca957 +2011-07-11T02:08:23.222641Z +6254 +tmaruyama has-props @@ -160,7 +160,7 @@ -3505 +5245 filesystem.rb file @@ -168,11 +168,11 @@ -2010-09-23T14:37:44.483732Z -ed75a7df6cfdc54b7059c9bb20c079d3 -2008-06-08T15:40:24.603157Z -1508 -jplang +2011-07-14T09:24:21.000000Z +a2170e3cb1161b0ea016414b724438f0 +2011-05-12T07:41:08.517774Z +5754 +tmaruyama has-props @@ -194,7 +194,7 @@ -1258 +1491 cvs.rb file @@ -202,11 +202,11 @@ -2010-09-23T14:37:44.483732Z -4bf6afb2a5e03df854a06fb116fc6fd2 -2008-08-26T12:28:15.338708Z -1768 -jplang +2011-07-14T09:24:21.000000Z +a5f74e302ec1d5d5d4a0677b6537c399 +2011-05-12T07:16:20.564757Z +5753 +tmaruyama has-props @@ -228,7 +228,7 @@ -6357 +7651 darcs.rb file @@ -236,11 +236,11 @@ -2010-09-23T14:37:44.483732Z -75c2836fd6ba92e0aef7a9cfc249ebb7 -2010-02-02T17:02:32.020293Z -3360 -edavis10 +2011-07-14T09:24:21.000000Z +5fa94193e544a8c9d94a2cb501a273de +2011-05-12T07:41:29.099665Z +5755 +tmaruyama has-props @@ -262,5 +262,5 @@ -3566 +3881 diff -r f7c525dc7585 -r 0b6c82dead28 app/models/repository/.svn/text-base/bazaar.rb.svn-base --- a/app/models/repository/.svn/text-base/bazaar.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/repository/.svn/text-base/bazaar.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -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 + def self.human_attribute_name(attribute_key_name) + attr_name = attribute_key_name + if attr_name == "url" + attr_name = "path_to_repository" + end + super(attr_name) + 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 @@ -39,19 +47,24 @@ full_path = File.join(root_url, e.path) e.size = File.stat(full_path).size if File.file?(full_path) end - c = Change.find(:first, - :include => :changeset, - :conditions => ["#{Change.table_name}.revision = ? and #{Changeset.table_name}.repository_id = ?", e.lastrev.revision, id], - :order => "#{Changeset.table_name}.revision DESC") + c = Change.find( + :first, + :include => :changeset, + :conditions => [ + "#{Change.table_name}.revision = ? and #{Changeset.table_name}.repository_id = ?", + e.lastrev.revision, + id + ], + :order => "#{Changeset.table_name}.revision DESC") if c e.lastrev.identifier = c.changeset.revision - e.lastrev.name = c.changeset.revision - e.lastrev.author = c.changeset.committer + e.lastrev.name = c.changeset.revision + e.lastrev.author = c.changeset.committer end end end end - + def fetch_changesets scm_info = scm.info if scm_info @@ -68,18 +81,18 @@ revisions = scm.revisions('', identifier_to, identifier_from, :with_paths => true) transaction do revisions.reverse_each do |revision| - changeset = Changeset.create(:repository => self, - :revision => revision.identifier, - :committer => revision.author, + changeset = Changeset.create(:repository => self, + :revision => revision.identifier, + :committer => revision.author, :committed_on => revision.time, - :scmid => revision.scmid, - :comments => revision.message) - + :scmid => revision.scmid, + :comments => revision.message) + revision.paths.each do |change| Change.create(:changeset => changeset, - :action => change[:action], - :path => change[:path], - :revision => change[:revision]) + :action => change[:action], + :path => change[:path], + :revision => change[:revision]) end end end unless revisions.nil? diff -r f7c525dc7585 -r 0b6c82dead28 app/models/repository/.svn/text-base/cvs.rb.svn-base --- a/app/models/repository/.svn/text-base/cvs.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/repository/.svn/text-base/cvs.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -19,67 +19,95 @@ require 'digest/sha1' class Repository::Cvs < Repository - validates_presence_of :url, :root_url + validates_presence_of :url, :root_url, :log_encoding - def scm_adapter + def self.human_attribute_name(attribute_key_name) + attr_name = attribute_key_name + if attr_name == "root_url" + attr_name = "cvsroot" + elsif attr_name == "url" + attr_name = "cvs_module" + end + super(attr_name) + 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) end - + def entries(path=nil, identifier=nil) - rev = identifier.nil? ? nil : changesets.find_by_revision(identifier) + rev = nil + if ! identifier.nil? + rev = changesets.find_by_revision(identifier) + return nil if rev.nil? + end entries = scm.entries(path, rev.nil? ? nil : rev.committed_on) if entries entries.each() do |entry| - unless entry.lastrev.nil? || entry.lastrev.identifier - change=changes.find_by_revision_and_path( entry.lastrev.revision, scm.with_leading_slash(entry.path) ) + if ( ! entry.lastrev.nil? ) && ( ! entry.lastrev.revision.nil? ) + change=changes.find_by_revision_and_path( + entry.lastrev.revision, + scm.with_leading_slash(entry.path) ) if change - entry.lastrev.identifier=change.changeset.revision - entry.lastrev.author=change.changeset.committer - entry.lastrev.revision=change.revision - entry.lastrev.branch=change.branch + entry.lastrev.identifier = change.changeset.revision + entry.lastrev.revision = change.changeset.revision + entry.lastrev.author = change.changeset.committer + # entry.lastrev.branch = change.branch end end end end entries end - + def cat(path, identifier=nil) - rev = identifier.nil? ? nil : changesets.find_by_revision(identifier) + rev = nil + if ! identifier.nil? + rev = changesets.find_by_revision(identifier) + return nil if rev.nil? + end scm.cat(path, rev.nil? ? nil : rev.committed_on) end - + + def annotate(path, identifier=nil) + rev = nil + if ! identifier.nil? + rev = changesets.find_by_revision(identifier) + return nil if rev.nil? + end + scm.annotate(path, rev.nil? ? nil : rev.committed_on) + end + def diff(path, rev, rev_to) - #convert rev to revision. CVS can't handle changesets here + # convert rev to revision. CVS can't handle changesets here diff=[] - changeset_from=changesets.find_by_revision(rev) - if rev_to.to_i > 0 - changeset_to=changesets.find_by_revision(rev_to) + changeset_from = changesets.find_by_revision(rev) + if rev_to.to_i > 0 + changeset_to = changesets.find_by_revision(rev_to) end changeset_from.changes.each() do |change_from| - - revision_from=nil - revision_to=nil - - revision_from=change_from.revision if path.nil? || (change_from.path.starts_with? scm.with_leading_slash(path)) - + revision_from = nil + revision_to = nil + if path.nil? || (change_from.path.starts_with? scm.with_leading_slash(path)) + revision_from = change_from.revision + end if revision_from if changeset_to changeset_to.changes.each() do |change_to| - revision_to=change_to.revision if change_to.path==change_from.path + revision_to = change_to.revision if change_to.path == change_from.path end end unless revision_to - revision_to=scm.get_previous_revision(revision_from) + revision_to = scm.get_previous_revision(revision_from) end file_diff = scm.diff(change_from.path, revision_from, revision_to) diff = diff + file_diff unless file_diff.nil? @@ -87,75 +115,91 @@ end return diff end - + def fetch_changesets # some nifty bits to introduce a commit-id with cvs - # natively cvs doesn't provide any kind of changesets, there is only a revision per file. + # natively cvs doesn't provide any kind of changesets, + # there is only a revision per file. # we now take a guess using the author, the commitlog and the commit-date. - - # last one is the next step to take. the commit-date is not equal for all + + # last one is the next step to take. the commit-date is not equal for all # commits in one changeset. cvs update the commit-date when the *,v file was touched. so # we use a small delta here, to merge all changes belonging to _one_ changeset - time_delta=10.seconds - + time_delta = 10.seconds fetch_since = latest_changeset ? latest_changeset.committed_on : nil transaction do tmp_rev_num = 1 - scm.revisions('', fetch_since, nil, :with_paths => true) do |revision| + scm.revisions('', fetch_since, nil, :log_encoding => repo_log_encoding) 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 - cs = changesets.find(:first, :conditions=>{ - :committed_on=>revision.time-time_delta..revision.time+time_delta, - :committer=>revision.author, - :comments=>Changeset.normalize_comments(revision.message) - }) - - # create a new changeset.... + # is not exclusive at all. + 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) + author_utf8 = Changeset.to_utf8(revision.author, repo_log_encoding) + cs = changesets.find( + :first, + :conditions => { + :committed_on => tmp_time - time_delta .. tmp_time + time_delta, + :committer => author_utf8, + :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') - cs = Changeset.create(:repository => self, - :revision => "_#{tmp_rev_num}", - :committer => revision.author, - :committed_on => revision.time, - :comments => revision.message) + 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#{tmp_rev_num}", + :scmid => scmid, + :committer => revision.author, + :committed_on => tmp_time, + :comments => revision.message) tmp_rev_num += 1 end - - #convert CVS-File-States to internal Action-abbrevations - #default action is (M)odified - action="M" - if revision.paths[0][:action]=="Exp" && revision.paths[0][:revision]=="1.1" - action="A" #add-action always at first revision (= 1.1) - elsif revision.paths[0][:action]=="dead" - action="D" #dead-state is similar to Delete + # convert CVS-File-States to internal Action-abbrevations + # default action is (M)odified + action = "M" + if revision.paths[0][:action] == "Exp" && revision.paths[0][:revision] == "1.1" + action = "A" # add-action always at first revision (= 1.1) + elsif revision.paths[0][:action] == "dead" + action = "D" # dead-state is similar to Delete end - - Change.create(:changeset => cs, - :action => action, - :path => scm.with_leading_slash(revision.paths[0][:path]), - :revision => revision.paths[0][:revision], - :branch => revision.paths[0][:branch] - ) + Change.create( + :changeset => cs, + :action => action, + :path => scm.with_leading_slash(revision.paths[0][:path]), + :revision => revision.paths[0][:revision], + :branch => revision.paths[0][:branch] + ) end 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 - + # 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 diff -r f7c525dc7585 -r 0b6c82dead28 app/models/repository/.svn/text-base/darcs.rb.svn-base --- a/app/models/repository/.svn/text-base/darcs.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/repository/.svn/text-base/darcs.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -18,44 +18,62 @@ require 'redmine/scm/adapters/darcs_adapter' class Repository::Darcs < Repository - validates_presence_of :url + validates_presence_of :url, :log_encoding - def scm_adapter + def self.human_attribute_name(attribute_key_name) + attr_name = attribute_key_name + if attr_name == "url" + attr_name = "path_to_repository" + end + super(attr_name) + end + + def self.scm_adapter_class Redmine::Scm::Adapters::DarcsAdapter end - + def self.scm_name 'Darcs' end - + + def supports_directory_revisions? + true + end + def entry(path=nil, identifier=nil) patch = identifier.nil? ? nil : changesets.find_by_revision(identifier) scm.entry(path, patch.nil? ? nil : patch.scmid) end - + def entries(path=nil, identifier=nil) - patch = identifier.nil? ? nil : changesets.find_by_revision(identifier) + patch = nil + if ! identifier.nil? + patch = changesets.find_by_revision(identifier) + return nil if patch.nil? + end entries = scm.entries(path, patch.nil? ? nil : patch.scmid) if entries entries.each do |entry| # Search the DB for the entry's last change - changeset = changesets.find_by_scmid(entry.lastrev.scmid) if entry.lastrev && !entry.lastrev.scmid.blank? + if entry.lastrev && !entry.lastrev.scmid.blank? + changeset = changesets.find_by_scmid(entry.lastrev.scmid) + end if changeset entry.lastrev.identifier = changeset.revision - entry.lastrev.name = changeset.revision - entry.lastrev.time = changeset.committed_on - entry.lastrev.author = changeset.committer + entry.lastrev.name = changeset.revision + entry.lastrev.time = changeset.committed_on + entry.lastrev.author = changeset.committer end end end entries end - + def cat(path, identifier=nil) patch = identifier.nil? ? nil : changesets.find_by_revision(identifier.to_s) scm.cat(path, patch.nil? ? nil : patch.scmid) end - + def diff(path, rev, rev_to) patch_from = changesets.find_by_revision(rev) return nil if patch_from.nil? @@ -65,25 +83,24 @@ end patch_from ? scm.diff(path, patch_from.scmid, patch_to ? patch_to.scmid : nil) : nil end - + def fetch_changesets scm_info = scm.info if scm_info db_last_id = latest_changeset ? latest_changeset.scmid : nil - next_rev = latest_changeset ? latest_changeset.revision.to_i + 1 : 1 + next_rev = latest_changeset ? latest_changeset.revision.to_i + 1 : 1 # latest revision in the repository - scm_revision = scm_info.lastrev.scmid + scm_revision = scm_info.lastrev.scmid unless changesets.find_by_scmid(scm_revision) revisions = scm.revisions('', db_last_id, nil, :with_path => true) transaction do revisions.reverse_each do |revision| - changeset = Changeset.create(:repository => self, - :revision => next_rev, - :scmid => revision.scmid, - :committer => revision.author, + changeset = Changeset.create(:repository => self, + :revision => next_rev, + :scmid => revision.scmid, + :committer => revision.author, :committed_on => revision.time, - :comments => revision.message) - + :comments => revision.message) revision.paths.each do |change| changeset.create_change(change) end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/repository/.svn/text-base/filesystem.rb.svn-base --- a/app/models/repository/.svn/text-base/filesystem.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/repository/.svn/text-base/filesystem.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 # # FileSystem adapter # File written by Paul Rivier, at Demotera. @@ -8,12 +8,12 @@ # 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. @@ -24,14 +24,26 @@ attr_protected :root_url validates_presence_of :url - def scm_adapter + def self.human_attribute_name(attribute_key_name) + attr_name = attribute_key_name + if attr_name == "url" + attr_name = "root_directory" + end + super(attr_name) + end + + def self.scm_adapter_class Redmine::Scm::Adapters::FilesystemAdapter end - + def self.scm_name 'Filesystem' end - + + def supports_all_revisions? + false + end + def entries(path=nil, identifier=nil) scm.entries(path, identifier) end @@ -39,5 +51,4 @@ def fetch_changesets nil end - end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/repository/.svn/text-base/git.rb.svn-base --- a/app/models/repository/.svn/text-base/git.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/repository/.svn/text-base/git.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,17 @@ -# redMine - project management software -# Copyright (C) 2006-2007 Jean-Philippe Lang +# Redmine - project management software +# Copyright (C) 2006-2011 Jean-Philippe Lang # Copyright (C) 2007 Patrick Aljord patcito@ŋmail.com +# # 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. @@ -21,14 +22,51 @@ attr_protected :root_url validates_presence_of :url - def scm_adapter + def self.human_attribute_name(attribute_key_name) + attr_name = attribute_key_name + if attr_name == "url" + attr_name = "path_to_repository" + end + super(attr_name) + end + + def self.scm_adapter_class Redmine::Scm::Adapters::GitAdapter end - + def self.scm_name 'Git' end + def report_last_commit + extra_report_last_commit + end + + def extra_report_last_commit + return false if extra_info.nil? + v = extra_info["extra_report_last_commit"] + return false if v.nil? + v.to_s != '0' + end + + def supports_directory_revisions? + true + end + + def repo_log_encoding + 'UTF-8' + end + + # Returns the identifier for the given git changeset + def self.changeset_identifier(changeset) + changeset.scmid + end + + # Returns the readable identifier for the given git changeset + def self.format_changeset_identifier(changeset) + changeset.revision[0, 8] + end + def branches scm.branches end @@ -37,42 +75,103 @@ scm.tags 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 - # commits into the middle of the repository history, so we should parse - # the entire log. Since it's way too slow for large repositories, we only - # parse 1 week before the last known commit. + def default_branch + scm.default_branch + 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 + + def entries(path=nil, identifier=nil) + scm.entries(path, + identifier, + options = {:report_last_commit => extra_report_last_commit}) + end + + # In Git and Mercurial, revisions are not in date order. + # Redmine Mercurial fixed issues. + # * Redmine Takes Too Long On Large Mercurial Repository + # http://www.redmine.org/issues/3449 + # * Sorting for changesets might go wrong on Mercurial repos + # http://www.redmine.org/issues/3567 + # + # Database revision column is text, so Redmine can not sort by revision. + # Mercurial has revision number, and revision number guarantees revision order. + # Redmine Mercurial model stored revisions ordered by database id to database. + # So, Redmine Mercurial model can use correct ordering revisions. + # + # Redmine Mercurial adapter uses "hg log -r 0:tip --limit 10" + # to get limited revisions from old to new. + # But, Git 1.7.3.4 does not support --reverse with -n or --skip. + # # The repository can still be fully reloaded by calling #clear_changesets # before fetching changesets (eg. for offline resync) def fetch_changesets - c = changesets.find(:first, :order => 'committed_on DESC') - since = (c ? c.committed_on - 7.days : nil) + scm_brs = branches + return if scm_brs.nil? || scm_brs.empty? + h1 = extra_info || {} + h = h1.dup + h["branches"] ||= {} + h["db_consistent"] ||= {} + if changesets.count == 0 + h["db_consistent"]["ordering"] = 1 + merge_extra_info(h) + self.save + elsif ! h["db_consistent"].has_key?("ordering") + h["db_consistent"]["ordering"] = 0 + merge_extra_info(h) + self.save + end + scm_brs.each do |br| + from_scmid = nil + from_scmid = h["branches"][br]["last_scmid"] if h["branches"][br] + h["branches"][br] ||= {} + scm.revisions('', from_scmid, br, {:reverse => true}) do |rev| + db_rev = find_changeset_by_name(rev.revision) + transaction do + if db_rev.nil? + save_revision(rev) + end + h["branches"][br]["last_scmid"] = rev.scmid + merge_extra_info(h) + self.save + end + end + end + end - revisions = scm.revisions('', nil, nil, :all => true, :since => since) - return if revisions.nil? || revisions.empty? - - recent_changesets = changesets.find(:all, :conditions => ['committed_on >= ?', since]) - - # Clean out revisions that are no longer in git - recent_changesets.each {|c| c.destroy unless revisions.detect {|r| r.scmid.to_s == c.scmid.to_s }} - - # Subtract revisions that redmine already knows about - recent_revisions = recent_changesets.map{|c| c.scmid} - revisions.reject!{|r| recent_revisions.include?(r.scmid)} - - # Save the remaining ones to the database - revisions.each{|r| r.save(self)} unless revisions.nil? + def save_revision(rev) + 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 + private :save_revision def latest_changesets(path,rev,limit=10) revisions = scm.revisions(path, nil, rev, :limit => limit, :all => false) return [] if revisions.nil? || revisions.empty? changesets.find( - :all, + :all, :conditions => [ - "scmid IN (?)", + "scmid IN (?)", revisions.map!{|c| c.scmid} ], :order => 'committed_on DESC' diff -r f7c525dc7585 -r 0b6c82dead28 app/models/repository/.svn/text-base/mercurial.rb.svn-base --- a/app/models/repository/.svn/text-base/mercurial.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/repository/.svn/text-base/mercurial.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -18,73 +18,130 @@ require 'redmine/scm/adapters/mercurial_adapter' class Repository::Mercurial < Repository + # sort changesets by revision number + has_many :changesets, :order => "#{Changeset.table_name}.id DESC", :foreign_key => 'repository_id' + attr_protected :root_url validates_presence_of :url - def scm_adapter + FETCH_AT_ONCE = 100 # number of changesets to fetch at once + + def self.human_attribute_name(attribute_key_name) + attr_name = attribute_key_name + if attr_name == "url" + attr_name = "path_to_repository" + end + super(attr_name) + end + + def self.scm_adapter_class Redmine::Scm::Adapters::MercurialAdapter end - + def self.scm_name 'Mercurial' 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 + + def supports_directory_revisions? + true + 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}" + end + + # Returns the identifier for the given Mercurial changeset + def self.changeset_identifier(changeset) + changeset.scmid + end + + def diff_format_revisions(cs, cs_to, sep=':') + super(cs, cs_to, ' ') + 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? + if /[^\d]/ =~ name or name.to_s.size > 8 + e = changesets.find(:first, :conditions => ['scmid = ?', name.to_s]) + else + e = changesets.find(:first, :conditions => ['revision = ?', name.to_s]) + end + return e if e + changesets.find(:first, :conditions => ['scmid LIKE ?', "#{name}%"]) # last ditch + end + + # Returns the latest changesets for +path+; sorted by revision number + # + # Because :order => 'id DESC' is defined at 'has_many', + # there is no need to set 'order'. + # But, MySQL test fails. + # Sqlite3 and PostgreSQL pass. + # Is this MySQL bug? + def latest_changesets(path, rev, limit=10) + changesets.find(:all, :include => :user, + :conditions => latest_changesets_cond(path, rev, limit), + :limit => limit, :order => "#{Changeset.table_name}.id DESC") + end + + def latest_changesets_cond(path, rev, limit) + cond, args = [], [] + if scm.branchmap.member? rev + # Mercurial named branch is *stable* in each revision. + # So, named branch can be stored in database. + # Mercurial provides *bookmark* which is equivalent with git branch. + # But, bookmark is not implemented. + cond << "#{Changeset.table_name}.scmid IN (?)" + # Revisions in root directory and sub directory are not equal. + # So, in order to get correct limit, we need to get all revisions. + # But, it is very heavy. + # Mercurial does not treat direcotry. + # So, "hg log DIR" is very heavy. + branch_limit = path.blank? ? limit : ( limit * 5 ) + args << scm.nodes_in_branch(rev, :limit => branch_limit) + elsif last = rev ? find_changeset_by_name(scm.tagmap[rev] || rev) : nil + cond << "#{Changeset.table_name}.id <= ?" + args << last.id + end + + unless path.blank? + cond << "EXISTS (SELECT * FROM #{Change.table_name} + WHERE #{Change.table_name}.changeset_id = #{Changeset.table_name}.id + AND (#{Change.table_name}.path = ? + OR #{Change.table_name}.path LIKE ? ESCAPE ?))" + args << path.with_leading_slash + args << "#{path.with_leading_slash.gsub(/[%_\\]/) { |s| "\\#{s}" }}/%" << '\\' + end + + [cond.join(' AND '), *args] unless cond.empty? + end + private :latest_changesets_cond + + def fetch_changesets + return if scm.info.nil? + 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 - entries - 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 - end - end - end + self end end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/repository/.svn/text-base/subversion.rb.svn-base --- a/app/models/repository/.svn/text-base/subversion.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/repository/.svn/text-base/subversion.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -22,24 +22,32 @@ 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 supports_directory_revisions? + true + 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) : [] end - + # Returns a path relative to the url of the repository def relative_path(path) path.gsub(Regexp.new("^\/?#{Regexp.escape(relative_url)}"), '') end - + def fetch_changesets scm_info = scm.info if scm_info @@ -56,12 +64,12 @@ revisions = scm.revisions('', identifier_to, identifier_from, :with_paths => true) revisions.reverse_each do |revision| transaction do - changeset = Changeset.create(:repository => self, - :revision => revision.identifier, - :committer => revision.author, + changeset = Changeset.create(:repository => self, + :revision => revision.identifier, + :committer => revision.author, :committed_on => revision.time, - :comments => revision.message) - + :comments => revision.message) + revision.paths.each do |change| changeset.create_change(change) end unless changeset.new_record? @@ -72,9 +80,9 @@ end end end - + private - + # Returns the relative url of the repository # Eg: root_url = file:///var/svn/foo # url = file:///var/svn/foo/bar diff -r f7c525dc7585 -r 0b6c82dead28 app/models/repository/bazaar.rb --- a/app/models/repository/bazaar.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/repository/bazaar.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -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 + def self.human_attribute_name(attribute_key_name) + attr_name = attribute_key_name + if attr_name == "url" + attr_name = "path_to_repository" + end + super(attr_name) + 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 @@ -39,19 +47,24 @@ full_path = File.join(root_url, e.path) e.size = File.stat(full_path).size if File.file?(full_path) end - c = Change.find(:first, - :include => :changeset, - :conditions => ["#{Change.table_name}.revision = ? and #{Changeset.table_name}.repository_id = ?", e.lastrev.revision, id], - :order => "#{Changeset.table_name}.revision DESC") + c = Change.find( + :first, + :include => :changeset, + :conditions => [ + "#{Change.table_name}.revision = ? and #{Changeset.table_name}.repository_id = ?", + e.lastrev.revision, + id + ], + :order => "#{Changeset.table_name}.revision DESC") if c e.lastrev.identifier = c.changeset.revision - e.lastrev.name = c.changeset.revision - e.lastrev.author = c.changeset.committer + e.lastrev.name = c.changeset.revision + e.lastrev.author = c.changeset.committer end end end end - + def fetch_changesets scm_info = scm.info if scm_info @@ -68,18 +81,18 @@ revisions = scm.revisions('', identifier_to, identifier_from, :with_paths => true) transaction do revisions.reverse_each do |revision| - changeset = Changeset.create(:repository => self, - :revision => revision.identifier, - :committer => revision.author, + changeset = Changeset.create(:repository => self, + :revision => revision.identifier, + :committer => revision.author, :committed_on => revision.time, - :scmid => revision.scmid, - :comments => revision.message) - + :scmid => revision.scmid, + :comments => revision.message) + revision.paths.each do |change| Change.create(:changeset => changeset, - :action => change[:action], - :path => change[:path], - :revision => change[:revision]) + :action => change[:action], + :path => change[:path], + :revision => change[:revision]) end end end unless revisions.nil? diff -r f7c525dc7585 -r 0b6c82dead28 app/models/repository/cvs.rb --- a/app/models/repository/cvs.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/repository/cvs.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -19,67 +19,95 @@ require 'digest/sha1' class Repository::Cvs < Repository - validates_presence_of :url, :root_url + validates_presence_of :url, :root_url, :log_encoding - def scm_adapter + def self.human_attribute_name(attribute_key_name) + attr_name = attribute_key_name + if attr_name == "root_url" + attr_name = "cvsroot" + elsif attr_name == "url" + attr_name = "cvs_module" + end + super(attr_name) + 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) end - + def entries(path=nil, identifier=nil) - rev = identifier.nil? ? nil : changesets.find_by_revision(identifier) + rev = nil + if ! identifier.nil? + rev = changesets.find_by_revision(identifier) + return nil if rev.nil? + end entries = scm.entries(path, rev.nil? ? nil : rev.committed_on) if entries entries.each() do |entry| - unless entry.lastrev.nil? || entry.lastrev.identifier - change=changes.find_by_revision_and_path( entry.lastrev.revision, scm.with_leading_slash(entry.path) ) + if ( ! entry.lastrev.nil? ) && ( ! entry.lastrev.revision.nil? ) + change=changes.find_by_revision_and_path( + entry.lastrev.revision, + scm.with_leading_slash(entry.path) ) if change - entry.lastrev.identifier=change.changeset.revision - entry.lastrev.author=change.changeset.committer - entry.lastrev.revision=change.revision - entry.lastrev.branch=change.branch + entry.lastrev.identifier = change.changeset.revision + entry.lastrev.revision = change.changeset.revision + entry.lastrev.author = change.changeset.committer + # entry.lastrev.branch = change.branch end end end end entries end - + def cat(path, identifier=nil) - rev = identifier.nil? ? nil : changesets.find_by_revision(identifier) + rev = nil + if ! identifier.nil? + rev = changesets.find_by_revision(identifier) + return nil if rev.nil? + end scm.cat(path, rev.nil? ? nil : rev.committed_on) end - + + def annotate(path, identifier=nil) + rev = nil + if ! identifier.nil? + rev = changesets.find_by_revision(identifier) + return nil if rev.nil? + end + scm.annotate(path, rev.nil? ? nil : rev.committed_on) + end + def diff(path, rev, rev_to) - #convert rev to revision. CVS can't handle changesets here + # convert rev to revision. CVS can't handle changesets here diff=[] - changeset_from=changesets.find_by_revision(rev) - if rev_to.to_i > 0 - changeset_to=changesets.find_by_revision(rev_to) + changeset_from = changesets.find_by_revision(rev) + if rev_to.to_i > 0 + changeset_to = changesets.find_by_revision(rev_to) end changeset_from.changes.each() do |change_from| - - revision_from=nil - revision_to=nil - - revision_from=change_from.revision if path.nil? || (change_from.path.starts_with? scm.with_leading_slash(path)) - + revision_from = nil + revision_to = nil + if path.nil? || (change_from.path.starts_with? scm.with_leading_slash(path)) + revision_from = change_from.revision + end if revision_from if changeset_to changeset_to.changes.each() do |change_to| - revision_to=change_to.revision if change_to.path==change_from.path + revision_to = change_to.revision if change_to.path == change_from.path end end unless revision_to - revision_to=scm.get_previous_revision(revision_from) + revision_to = scm.get_previous_revision(revision_from) end file_diff = scm.diff(change_from.path, revision_from, revision_to) diff = diff + file_diff unless file_diff.nil? @@ -87,75 +115,91 @@ end return diff end - + def fetch_changesets # some nifty bits to introduce a commit-id with cvs - # natively cvs doesn't provide any kind of changesets, there is only a revision per file. + # natively cvs doesn't provide any kind of changesets, + # there is only a revision per file. # we now take a guess using the author, the commitlog and the commit-date. - - # last one is the next step to take. the commit-date is not equal for all + + # last one is the next step to take. the commit-date is not equal for all # commits in one changeset. cvs update the commit-date when the *,v file was touched. so # we use a small delta here, to merge all changes belonging to _one_ changeset - time_delta=10.seconds - + time_delta = 10.seconds fetch_since = latest_changeset ? latest_changeset.committed_on : nil transaction do tmp_rev_num = 1 - scm.revisions('', fetch_since, nil, :with_paths => true) do |revision| + scm.revisions('', fetch_since, nil, :log_encoding => repo_log_encoding) 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 - cs = changesets.find(:first, :conditions=>{ - :committed_on=>revision.time-time_delta..revision.time+time_delta, - :committer=>revision.author, - :comments=>Changeset.normalize_comments(revision.message) - }) - - # create a new changeset.... + # is not exclusive at all. + 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) + author_utf8 = Changeset.to_utf8(revision.author, repo_log_encoding) + cs = changesets.find( + :first, + :conditions => { + :committed_on => tmp_time - time_delta .. tmp_time + time_delta, + :committer => author_utf8, + :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') - cs = Changeset.create(:repository => self, - :revision => "_#{tmp_rev_num}", - :committer => revision.author, - :committed_on => revision.time, - :comments => revision.message) + 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#{tmp_rev_num}", + :scmid => scmid, + :committer => revision.author, + :committed_on => tmp_time, + :comments => revision.message) tmp_rev_num += 1 end - - #convert CVS-File-States to internal Action-abbrevations - #default action is (M)odified - action="M" - if revision.paths[0][:action]=="Exp" && revision.paths[0][:revision]=="1.1" - action="A" #add-action always at first revision (= 1.1) - elsif revision.paths[0][:action]=="dead" - action="D" #dead-state is similar to Delete + # convert CVS-File-States to internal Action-abbrevations + # default action is (M)odified + action = "M" + if revision.paths[0][:action] == "Exp" && revision.paths[0][:revision] == "1.1" + action = "A" # add-action always at first revision (= 1.1) + elsif revision.paths[0][:action] == "dead" + action = "D" # dead-state is similar to Delete end - - Change.create(:changeset => cs, - :action => action, - :path => scm.with_leading_slash(revision.paths[0][:path]), - :revision => revision.paths[0][:revision], - :branch => revision.paths[0][:branch] - ) + Change.create( + :changeset => cs, + :action => action, + :path => scm.with_leading_slash(revision.paths[0][:path]), + :revision => revision.paths[0][:revision], + :branch => revision.paths[0][:branch] + ) end 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 - + # 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 diff -r f7c525dc7585 -r 0b6c82dead28 app/models/repository/darcs.rb --- a/app/models/repository/darcs.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/repository/darcs.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -18,44 +18,62 @@ require 'redmine/scm/adapters/darcs_adapter' class Repository::Darcs < Repository - validates_presence_of :url + validates_presence_of :url, :log_encoding - def scm_adapter + def self.human_attribute_name(attribute_key_name) + attr_name = attribute_key_name + if attr_name == "url" + attr_name = "path_to_repository" + end + super(attr_name) + end + + def self.scm_adapter_class Redmine::Scm::Adapters::DarcsAdapter end - + def self.scm_name 'Darcs' end - + + def supports_directory_revisions? + true + end + def entry(path=nil, identifier=nil) patch = identifier.nil? ? nil : changesets.find_by_revision(identifier) scm.entry(path, patch.nil? ? nil : patch.scmid) end - + def entries(path=nil, identifier=nil) - patch = identifier.nil? ? nil : changesets.find_by_revision(identifier) + patch = nil + if ! identifier.nil? + patch = changesets.find_by_revision(identifier) + return nil if patch.nil? + end entries = scm.entries(path, patch.nil? ? nil : patch.scmid) if entries entries.each do |entry| # Search the DB for the entry's last change - changeset = changesets.find_by_scmid(entry.lastrev.scmid) if entry.lastrev && !entry.lastrev.scmid.blank? + if entry.lastrev && !entry.lastrev.scmid.blank? + changeset = changesets.find_by_scmid(entry.lastrev.scmid) + end if changeset entry.lastrev.identifier = changeset.revision - entry.lastrev.name = changeset.revision - entry.lastrev.time = changeset.committed_on - entry.lastrev.author = changeset.committer + entry.lastrev.name = changeset.revision + entry.lastrev.time = changeset.committed_on + entry.lastrev.author = changeset.committer end end end entries end - + def cat(path, identifier=nil) patch = identifier.nil? ? nil : changesets.find_by_revision(identifier.to_s) scm.cat(path, patch.nil? ? nil : patch.scmid) end - + def diff(path, rev, rev_to) patch_from = changesets.find_by_revision(rev) return nil if patch_from.nil? @@ -65,25 +83,24 @@ end patch_from ? scm.diff(path, patch_from.scmid, patch_to ? patch_to.scmid : nil) : nil end - + def fetch_changesets scm_info = scm.info if scm_info db_last_id = latest_changeset ? latest_changeset.scmid : nil - next_rev = latest_changeset ? latest_changeset.revision.to_i + 1 : 1 + next_rev = latest_changeset ? latest_changeset.revision.to_i + 1 : 1 # latest revision in the repository - scm_revision = scm_info.lastrev.scmid + scm_revision = scm_info.lastrev.scmid unless changesets.find_by_scmid(scm_revision) revisions = scm.revisions('', db_last_id, nil, :with_path => true) transaction do revisions.reverse_each do |revision| - changeset = Changeset.create(:repository => self, - :revision => next_rev, - :scmid => revision.scmid, - :committer => revision.author, + changeset = Changeset.create(:repository => self, + :revision => next_rev, + :scmid => revision.scmid, + :committer => revision.author, :committed_on => revision.time, - :comments => revision.message) - + :comments => revision.message) revision.paths.each do |change| changeset.create_change(change) end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/repository/filesystem.rb --- a/app/models/repository/filesystem.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/repository/filesystem.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 # # FileSystem adapter # File written by Paul Rivier, at Demotera. @@ -8,12 +8,12 @@ # 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. @@ -24,14 +24,26 @@ attr_protected :root_url validates_presence_of :url - def scm_adapter + def self.human_attribute_name(attribute_key_name) + attr_name = attribute_key_name + if attr_name == "url" + attr_name = "root_directory" + end + super(attr_name) + end + + def self.scm_adapter_class Redmine::Scm::Adapters::FilesystemAdapter end - + def self.scm_name 'Filesystem' end - + + def supports_all_revisions? + false + end + def entries(path=nil, identifier=nil) scm.entries(path, identifier) end @@ -39,5 +51,4 @@ def fetch_changesets nil end - end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/repository/git.rb --- a/app/models/repository/git.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/repository/git.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,17 @@ -# redMine - project management software -# Copyright (C) 2006-2007 Jean-Philippe Lang +# Redmine - project management software +# Copyright (C) 2006-2011 Jean-Philippe Lang # Copyright (C) 2007 Patrick Aljord patcito@ŋmail.com +# # 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. @@ -21,14 +22,51 @@ attr_protected :root_url validates_presence_of :url - def scm_adapter + def self.human_attribute_name(attribute_key_name) + attr_name = attribute_key_name + if attr_name == "url" + attr_name = "path_to_repository" + end + super(attr_name) + end + + def self.scm_adapter_class Redmine::Scm::Adapters::GitAdapter end - + def self.scm_name 'Git' end + def report_last_commit + extra_report_last_commit + end + + def extra_report_last_commit + return false if extra_info.nil? + v = extra_info["extra_report_last_commit"] + return false if v.nil? + v.to_s != '0' + end + + def supports_directory_revisions? + true + end + + def repo_log_encoding + 'UTF-8' + end + + # Returns the identifier for the given git changeset + def self.changeset_identifier(changeset) + changeset.scmid + end + + # Returns the readable identifier for the given git changeset + def self.format_changeset_identifier(changeset) + changeset.revision[0, 8] + end + def branches scm.branches end @@ -37,45 +75,106 @@ scm.tags 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 - # commits into the middle of the repository history, so we should parse - # the entire log. Since it's way too slow for large repositories, we only - # parse 1 week before the last known commit. + def default_branch + scm.default_branch + 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 + + def entries(path=nil, identifier=nil) + scm.entries(path, + identifier, + options = {:report_last_commit => extra_report_last_commit}) + end + + # In Git and Mercurial, revisions are not in date order. + # Redmine Mercurial fixed issues. + # * Redmine Takes Too Long On Large Mercurial Repository + # http://www.redmine.org/issues/3449 + # * Sorting for changesets might go wrong on Mercurial repos + # http://www.redmine.org/issues/3567 + # + # Database revision column is text, so Redmine can not sort by revision. + # Mercurial has revision number, and revision number guarantees revision order. + # Redmine Mercurial model stored revisions ordered by database id to database. + # So, Redmine Mercurial model can use correct ordering revisions. + # + # Redmine Mercurial adapter uses "hg log -r 0:tip --limit 10" + # to get limited revisions from old to new. + # But, Git 1.7.3.4 does not support --reverse with -n or --skip. + # # The repository can still be fully reloaded by calling #clear_changesets # before fetching changesets (eg. for offline resync) def fetch_changesets - c = changesets.find(:first, :order => 'committed_on DESC') - since = (c ? c.committed_on - 7.days : nil) + scm_brs = branches + return if scm_brs.nil? || scm_brs.empty? + h1 = extra_info || {} + h = h1.dup + h["branches"] ||= {} + h["db_consistent"] ||= {} + if changesets.count == 0 + h["db_consistent"]["ordering"] = 1 + merge_extra_info(h) + self.save + elsif ! h["db_consistent"].has_key?("ordering") + h["db_consistent"]["ordering"] = 0 + merge_extra_info(h) + self.save + end + scm_brs.each do |br| + from_scmid = nil + from_scmid = h["branches"][br]["last_scmid"] if h["branches"][br] + h["branches"][br] ||= {} + scm.revisions('', from_scmid, br, {:reverse => true}) do |rev| + db_rev = find_changeset_by_name(rev.revision) + transaction do + if db_rev.nil? + save_revision(rev) + end + h["branches"][br]["last_scmid"] = rev.scmid + merge_extra_info(h) + self.save + end + end + end + end - revisions = scm.revisions('', nil, nil, :all => true, :since => since, :reverse => true) - return if revisions.nil? || revisions.empty? - - recent_changesets = changesets.find(:all, :conditions => ['committed_on >= ?', since]) - - # Clean out revisions that are no longer in git - recent_changesets.each {|c| c.destroy unless revisions.detect {|r| r.scmid.to_s == c.scmid.to_s }} - - # Subtract revisions that redmine already knows about - recent_revisions = recent_changesets.map{|c| c.scmid} - revisions.reject!{|r| recent_revisions.include?(r.scmid)} - - # Save the remaining ones to the database - revisions.each{|r| r.save(self)} unless revisions.nil? + def save_revision(rev) + 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 + private :save_revision def latest_changesets(path,rev,limit=10) revisions = scm.revisions(path, nil, rev, :limit => limit, :all => false) return [] if revisions.nil? || revisions.empty? changesets.find( - :all, + :all, :conditions => [ - "scmid IN (?)", + "scmid IN (?)", revisions.map!{|c| c.scmid} ], - :order => 'id DESC' + :order => 'committed_on DESC' ) end end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/repository/mercurial.rb --- a/app/models/repository/mercurial.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/repository/mercurial.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -18,53 +18,104 @@ require 'redmine/scm/adapters/mercurial_adapter' class Repository::Mercurial < Repository + # sort changesets by revision number + has_many :changesets, :order => "#{Changeset.table_name}.id DESC", :foreign_key => 'repository_id' + attr_protected :root_url # validates_presence_of :url FETCH_AT_ONCE = 100 # number of changesets to fetch at once - def scm_adapter + def self.human_attribute_name(attribute_key_name) + attr_name = attribute_key_name + if attr_name == "url" + attr_name = "path_to_repository" + end + super(attr_name) + end + + def self.scm_adapter_class Redmine::Scm::Adapters::MercurialAdapter end - + def self.scm_name 'Mercurial' end - - def entries(path=nil, identifier=nil) - scm.entries(path, identifier) + + def supports_directory_revisions? + true end - def branches - bras = scm.branches - bras.sort unless bras == %w|default| + def repo_log_encoding + 'UTF-8' end - # Returns the latest changesets for +path+ + # Returns the readable identifier for the given mercurial changeset + def self.format_changeset_identifier(changeset) + "#{changeset.revision}:#{changeset.scmid}" + end + + # Returns the identifier for the given Mercurial changeset + def self.changeset_identifier(changeset) + changeset.scmid + end + + def diff_format_revisions(cs, cs_to, sep=':') + super(cs, cs_to, ' ') + 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? + if /[^\d]/ =~ name or name.to_s.size > 8 + e = changesets.find(:first, :conditions => ['scmid = ?', name.to_s]) + else + e = changesets.find(:first, :conditions => ['revision = ?', name.to_s]) + end + return e if e + changesets.find(:first, :conditions => ['scmid LIKE ?', "#{name}%"]) # last ditch + end + + # Returns the latest changesets for +path+; sorted by revision number + # + # Because :order => 'id DESC' is defined at 'has_many', + # there is no need to set 'order'. + # But, MySQL test fails. + # Sqlite3 and PostgreSQL pass. + # Is this MySQL bug? def latest_changesets(path, rev, limit=10) changesets.find(:all, :include => :user, :conditions => latest_changesets_cond(path, rev, limit), - :limit => limit) + :limit => limit, :order => "#{Changeset.table_name}.id DESC") end def latest_changesets_cond(path, rev, limit) cond, args = [], [] - if scm.branchmap.member? rev - # dirty hack to filter by branch. branch name should be in database. + # Mercurial named branch is *stable* in each revision. + # So, named branch can be stored in database. + # Mercurial provides *bookmark* which is equivalent with git branch. + # But, bookmark is not implemented. cond << "#{Changeset.table_name}.scmid IN (?)" - args << scm.nodes_in_branch(rev, path, rev, 0, :limit => limit) + # Revisions in root directory and sub directory are not equal. + # So, in order to get correct limit, we need to get all revisions. + # But, it is very heavy. + # Mercurial does not treat direcotry. + # So, "hg log DIR" is very heavy. + branch_limit = path.blank? ? limit : ( limit * 5 ) + args << scm.nodes_in_branch(rev, :limit => branch_limit) elsif last = rev ? find_changeset_by_name(scm.tagmap[rev] || rev) : nil cond << "#{Changeset.table_name}.id <= ?" args << last.id end unless path.blank? - # TODO: there must be a better way to build sub-query cond << "EXISTS (SELECT * FROM #{Change.table_name} WHERE #{Change.table_name}.changeset_id = #{Changeset.table_name}.id - AND (#{Change.table_name}.path = ? OR #{Change.table_name}.path LIKE ?))" - args << path.with_leading_slash << "#{path.with_leading_slash}/%" + AND (#{Change.table_name}.path = ? + OR #{Change.table_name}.path LIKE ? ESCAPE ?))" + args << path.with_leading_slash + args << "#{path.with_leading_slash.gsub(/[%_\\]/) { |s| "\\#{s}" }}/%" << '\\' end [cond.join(' AND '), *args] unless cond.empty? @@ -72,6 +123,7 @@ private :latest_changesets_cond def fetch_changesets + return if scm.info.nil? 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 diff -r f7c525dc7585 -r 0b6c82dead28 app/models/repository/subversion.rb --- a/app/models/repository/subversion.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/repository/subversion.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -22,24 +22,32 @@ 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 supports_directory_revisions? + true + 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) : [] end - + # Returns a path relative to the url of the repository def relative_path(path) path.gsub(Regexp.new("^\/?#{Regexp.escape(relative_url)}"), '') end - + def fetch_changesets scm_info = scm.info if scm_info @@ -56,12 +64,12 @@ revisions = scm.revisions('', identifier_to, identifier_from, :with_paths => true) revisions.reverse_each do |revision| transaction do - changeset = Changeset.create(:repository => self, - :revision => revision.identifier, - :committer => revision.author, + changeset = Changeset.create(:repository => self, + :revision => revision.identifier, + :committer => revision.author, :committed_on => revision.time, - :comments => revision.message) - + :comments => revision.message) + revision.paths.each do |change| changeset.create_change(change) end unless changeset.new_record? @@ -72,9 +80,9 @@ end end end - + private - + # Returns the relative url of the repository # Eg: root_url = file:///var/svn/foo # url = file:///var/svn/foo/bar diff -r f7c525dc7585 -r 0b6c82dead28 app/models/role.rb --- a/app/models/role.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/role.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -19,6 +19,12 @@ # Built-in roles BUILTIN_NON_MEMBER = 1 BUILTIN_ANONYMOUS = 2 + + ISSUES_VISIBILITY_OPTIONS = [ + ['all', :label_issues_visibility_all], + ['default', :label_issues_visibility_public], + ['own', :label_issues_visibility_own] + ] named_scope :givable, { :conditions => "builtin = 0", :order => 'position' } named_scope :builtin, lambda { |*args| @@ -43,8 +49,10 @@ validates_presence_of :name validates_uniqueness_of :name validates_length_of :name, :maximum => 30 - validates_format_of :name, :with => /^[\w\s\'\-]*$/i - + validates_inclusion_of :issues_visibility, + :in => ISSUES_VISIBILITY_OPTIONS.collect(&:first), + :if => lambda {|role| role.respond_to?(:issues_visibility)} + def permissions read_attribute(:permissions) || [] end @@ -85,6 +93,14 @@ name end + def name + case builtin + when 1; l(:label_role_non_member, :default => read_attribute(:name)) + when 2; l(:label_role_anonymous, :default => read_attribute(:name)) + else; read_attribute(:name) + end + end + # Return true if the role is a builtin role def builtin? self.builtin != 0 diff -r f7c525dc7585 -r 0b6c82dead28 app/models/setting.rb --- a/app/models/setting.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/setting.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -28,12 +28,12 @@ '%b %d, %Y', '%B %d, %Y' ] - + TIME_FORMATS = [ '%H:%M', '%I:%M %p' ] - + ENCODINGS = %w(US-ASCII windows-1250 windows-1251 @@ -65,6 +65,7 @@ UTF-16LE EUC-JP Shift_JIS + CP932 GB18030 GBK ISCII91 @@ -72,22 +73,22 @@ Big5 Big5-HKSCS TIS-620) - + cattr_accessor :available_settings @@available_settings = YAML::load(File.open("#{RAILS_ROOT}/config/settings.yml")) Redmine::Plugin.all.each do |plugin| next unless plugin.settings - @@available_settings["plugin_#{plugin.id}"] = {'default' => plugin.settings[:default], 'serialized' => true} + @@available_settings["plugin_#{plugin.id}"] = {'default' => plugin.settings[:default], 'serialized' => true} end - + validates_uniqueness_of :name validates_inclusion_of :name, :in => @@available_settings.keys - validates_numericality_of :value, :only_integer => true, :if => Proc.new { |setting| @@available_settings[setting.name]['format'] == 'int' } + validates_numericality_of :value, :only_integer => true, :if => Proc.new { |setting| @@available_settings[setting.name]['format'] == 'int' } # Hash used to cache setting values @cached_settings = {} @cached_cleared_on = Time.now - + def value v = read_attribute(:value) # Unserialize serialized settings @@ -95,18 +96,18 @@ v = v.to_sym if @@available_settings[name]['format'] == 'symbol' && !v.blank? v end - + def value=(v) v = v.to_yaml if v && @@available_settings[name] && @@available_settings[name]['serialized'] write_attribute(:value, v.to_s) end - + # Returns the value of the setting named name def self.[](name) v = @cached_settings[name] v ? v : (@cached_settings[name] = find_or_default(name).value) end - + def self.[]=(name, v) setting = find_or_default(name) setting.value = (v ? v : "") @@ -114,7 +115,7 @@ setting.save setting.value end - + # Defines getter and setter for each setting # Then setting values can be read using: Setting.some_setting_name # or set using Setting.some_setting_name = "some value" @@ -134,16 +135,16 @@ END_SRC class_eval src, __FILE__, __LINE__ end - + # Helper that returns an array based on per_page_options setting def self.per_page_options_array per_page_options.split(%r{[\s,]}).collect(&:to_i).select {|n| n > 0}.sort end - + def self.openid? Object.const_defined?(:OpenID) && self[:openid].to_i > 0 end - + # Checks if settings have changed since the values were read # and clears the cache hash if it's the case # Called once per request @@ -155,13 +156,13 @@ logger.info "Settings cache cleared." if logger end end - + private # Returns the Setting instance for the setting named name # (record found in database or new record with default value) def self.find_or_default(name) name = name.to_s - raise "There's no setting named #{name}" unless @@available_settings.has_key?(name) + raise "There's no setting named #{name}" unless @@available_settings.has_key?(name) setting = find_by_name(name) setting ||= new(:name => name, :value => @@available_settings[name]['default']) if @@available_settings.has_key? name end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/time_entry.rb --- a/app/models/time_entry.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/time_entry.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -22,7 +22,7 @@ belongs_to :issue belongs_to :user belongs_to :activity, :class_name => 'TimeEntryActivity', :foreign_key => 'activity_id' - + attr_protected :project_id, :user_id, :tyear, :tmonth, :tweek acts_as_customizable @@ -33,12 +33,17 @@ acts_as_activity_provider :timestamp => "#{table_name}.created_on", :author_key => :user_id, - :find_options => {:include => :project} + :find_options => {:include => :project} validates_presence_of :user_id, :activity_id, :project_id, :hours, :spent_on validates_numericality_of :hours, :allow_nil => true, :message => :invalid validates_length_of :comments, :maximum => 255, :allow_nil => true + named_scope :visible, lambda {|*args| { + :include => :project, + :conditions => Project.allowed_to_condition(args.shift || User.current, :view_time_entries, *args) + }} + def after_initialize if new_record? && self.activity.nil? if default_activity = TimeEntryActivity.default @@ -47,36 +52,41 @@ self.hours = nil if hours == 0 end end - + def before_validation self.project = issue.project if issue && project.nil? end - + def validate errors.add :hours, :invalid if hours && (hours < 0 || hours >= 1000) errors.add :project_id, :invalid if project.nil? errors.add :issue_id, :invalid if (issue_id && !issue) || (issue && project!=issue.project) end - + def hours=(h) write_attribute :hours, (h.is_a?(String) ? (h.to_hours || h) : h) end - + # tyear, tmonth, tweek assigned where setting spent_on attributes # these attributes make time aggregations easier def spent_on=(date) super + if spent_on.is_a?(Time) + self.spent_on = spent_on.to_date + end self.tyear = spent_on ? spent_on.year : nil self.tmonth = spent_on ? spent_on.month : nil self.tweek = spent_on ? Date.civil(spent_on.year, spent_on.month, spent_on.day).cweek : nil end - + # Returns true if the time entry can be edited by usr, otherwise false def editable_by?(usr) (usr == user && usr.allowed_to?(:edit_own_time_entries, project)) || usr.allowed_to?(:edit_time_entries, project) end - + + # TODO: remove this method in 1.3.0 def self.visible_by(usr) + ActiveSupport::Deprecation.warn "TimeEntry.visible_by is deprecated and will be removed in Redmine 1.3.0. Use the visible scope instead." with_scope(:find => { :conditions => Project.allowed_to_condition(usr, :view_time_entries) }) do yield end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/tracker.rb --- a/app/models/tracker.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/tracker.rb Mon Jul 25 14:23:37 2011 +0100 @@ -31,8 +31,9 @@ validates_presence_of :name validates_uniqueness_of :name validates_length_of :name, :maximum => 30 - validates_format_of :name, :with => /^[\w\s\'\-]*$/i + named_scope :named, lambda {|arg| { :conditions => ["LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip]}} + def to_s; name end def <=>(tracker) diff -r f7c525dc7585 -r 0b6c82dead28 app/models/user.rb --- a/app/models/user.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/user.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -18,7 +18,8 @@ require "digest/sha1" class User < Principal - + include Redmine::SafeAttributes + # Account statuses STATUS_ANONYMOUS = 0 STATUS_ACTIVE = 1 @@ -34,21 +35,21 @@ } MAIL_NOTIFICATION_OPTIONS = [ - [:all, :label_user_mail_option_all], - [:selected, :label_user_mail_option_selected], - [:none, :label_user_mail_option_none], - [:only_my_events, :label_user_mail_option_only_my_events], - [:only_assigned, :label_user_mail_option_only_assigned], - [:only_owner, :label_user_mail_option_only_owner] - ] + ['all', :label_user_mail_option_all], + ['selected', :label_user_mail_option_selected], + ['only_my_events', :label_user_mail_option_only_my_events], + ['only_assigned', :label_user_mail_option_only_assigned], + ['only_owner', :label_user_mail_option_only_owner], + ['none', :label_user_mail_option_none] + ] has_and_belongs_to_many :groups, :after_add => Proc.new {|user, group| group.user_added(user)}, :after_remove => Proc.new {|user, group| group.user_removed(user)} has_many :issue_categories, :foreign_key => 'assigned_to_id', :dependent => :nullify has_many :changesets, :dependent => :nullify has_one :preference, :dependent => :destroy, :class_name => 'UserPreference' - has_one :rss_token, :dependent => :destroy, :class_name => 'Token', :conditions => "action='feeds'" - has_one :api_token, :dependent => :destroy, :class_name => 'Token', :conditions => "action='api'" + has_one :rss_token, :class_name => 'Token', :conditions => "action='feeds'" + has_one :api_token, :class_name => 'Token', :conditions => "action='api'" belongs_to :auth_source has_one :ssamr_user_detail, :dependent => :destroy, :class_name => 'SsamrUserDetail' @@ -62,7 +63,7 @@ attr_accessor :password, :password_confirmation attr_accessor :last_before_login_on # Prevents unauthorized assignments - attr_protected :login, :admin, :password, :password_confirmation, :hashed_password, :group_ids + attr_protected :login, :admin, :password, :password_confirmation, :hashed_password validates_presence_of :login, :firstname, :lastname, :mail, :if => Proc.new { |user| !user.is_a?(AnonymousUser) } @@ -73,14 +74,25 @@ # Login must contain lettres, numbers, underscores only validates_format_of :login, :with => /^[a-z0-9_\-@\.]*$/i validates_length_of :login, :maximum => 30 - validates_format_of :firstname, :lastname, :with => /^[\w\s\'\-\.]*$/i validates_length_of :firstname, :lastname, :maximum => 30 validates_format_of :mail, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i, :allow_nil => true validates_length_of :mail, :maximum => 60, :allow_nil => true validates_confirmation_of :password, :allow_nil => true + validates_inclusion_of :mail_notification, :in => MAIL_NOTIFICATION_OPTIONS.collect(&:first), :allow_blank => true + before_destroy :remove_references_before_destroy + validates_acceptance_of :terms_and_conditions, :on => :create, :message => :must_accept_terms_and_conditions + named_scope :in_group, lambda {|group| + group_id = group.is_a?(Group) ? group.id : group.to_i + { :conditions => ["#{User.table_name}.id IN (SELECT gu.user_id FROM #{table_name_prefix}groups_users#{table_name_suffix} gu WHERE gu.group_id = ?)", group_id] } + } + named_scope :not_in_group, lambda {|group| + group_id = group.is_a?(Group) ? group.id : group.to_i + { :conditions => ["#{User.table_name}.id NOT IN (SELECT gu.user_id FROM #{table_name_prefix}groups_users#{table_name_suffix} gu WHERE gu.group_id = ?)", group_id] } + } + def before_create self.mail_notification = Setting.default_notification_option if self.mail_notification.blank? true @@ -88,11 +100,14 @@ 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) @name = nil + @projects_by_role = nil super end @@ -130,7 +145,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 @@ -209,13 +224,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? @@ -271,12 +294,16 @@ notified_projects_ids end + def valid_notification_options + self.class.valid_notification_options(self) + end + # Only users that belong to more than 1 project can select projects for which they are notified - def valid_notification_options + def self.valid_notification_options(user=nil) # Note that @user.membership.size would fail since AR ignores # :include association option when doing a count - if memberships.length < 1 - MAIL_NOTIFICATION_OPTIONS.delete_if {|option| option.first == :selected} + if user.nil? || user.memberships.length < 1 + MAIL_NOTIFICATION_OPTIONS.reject {|option| option.first == 'selected'} else MAIL_NOTIFICATION_OPTIONS end @@ -356,16 +383,33 @@ !roles_for_project(project).detect {|role| role.member?}.nil? end + # Returns a hash of user's projects grouped by roles + def projects_by_role + return @projects_by_role if @projects_by_role + + @projects_by_role = Hash.new {|h,k| h[k]=[]} + memberships.each do |membership| + membership.roles.each do |role| + @projects_by_role[role] << membership.project if membership.project + end + end + @projects_by_role.each do |role, projects| + projects.uniq! + end + + @projects_by_role + end + # Return true if the user is allowed to do the specified action on a specific context # Action can be: # * a parameter-like Hash (eg. :controller => 'projects', :action => 'edit') # * a permission Symbol (eg. :edit_project) # Context can be: # * a project : returns true if user is allowed to do the specified action on this project - # * a group of projects : returns true if user is allowed on every project + # * an array of projects : returns true if user is allowed on every project # * nil with options[:global] set : check if user has at least one role allowed for this action, # or falls back to Non Member / Anonymous permissions depending if the user is logged - def allowed_to?(action, context, options={}) + def allowed_to?(action, context, options={}, &block) if context && context.is_a?(Project) # No action allowed on archived projects return false unless context.active? @@ -376,12 +420,15 @@ roles = roles_for_project(context) return false unless roles - roles.detect {|role| (context.is_public? || role.member?) && role.allowed_to?(action)} - + roles.detect {|role| + (context.is_public? || role.member?) && + role.allowed_to?(action) && + (block_given? ? yield(role, self) : true) + } elsif context && context.is_a?(Array) # Authorize if user is authorized on every element of the array context.map do |project| - allowed_to?(action,project,options) + allowed_to?(action, project, options, &block) end.inject do |memo,allowed| memo && allowed end @@ -391,7 +438,11 @@ # authorize if user has at least one role that has this permission roles = memberships.collect {|m| m.roles}.flatten.uniq - roles.detect {|r| r.allowed_to?(action)} || (self.logged? ? Role.non_member.allowed_to?(action) : Role.anonymous.allowed_to?(action)) + roles << (self.logged? ? Role.non_member : Role.anonymous) + roles.detect {|role| + role.allowed_to?(action) && + (block_given? ? yield(role, self) : true) + } else false end @@ -399,35 +450,57 @@ # Is the user allowed to do the specified action on any project? # See allowed_to? for the actions and valid options. - def allowed_to_globally?(action, options) - allowed_to?(action, nil, options.reverse_merge(:global => true)) + def allowed_to_globally?(action, options, &block) + allowed_to?(action, nil, options.reverse_merge(:global => true), &block) end + + safe_attributes 'login', + 'firstname', + 'lastname', + 'mail', + 'mail_notification', + 'language', + 'custom_field_values', + 'custom_fields', + 'identity_url' + + safe_attributes 'status', + 'auth_source_id', + :if => lambda {|user, current_user| current_user.admin?} + + safe_attributes 'group_ids', + :if => lambda {|user, current_user| current_user.admin? && !user.new_record?} # Utility method to help check if a user should be notified about an # event. # # TODO: only supports Issue events currently def notify_about?(object) - case mail_notification.to_sym - when :all + case mail_notification + when 'all' true - when :selected - # Handled by the Project - when :none - false - when :only_my_events + when 'selected' + # 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 :only_assigned + when 'none' + false + when 'only_my_events' + if object.is_a?(Issue) && (object.author == self || object.assigned_to == self) + true + else + false + end + when 'only_assigned' if object.is_a?(Issue) && object.assigned_to == self true else false end - when :only_owner + when 'only_owner' if object.is_a?(Issue) && object.author == self true else @@ -456,6 +529,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 @@ -467,11 +554,42 @@ end private + + # Removes references that are not handled by associations + # Things that are not deleted are reassociated with the anonymous user + def remove_references_before_destroy + return if self.id.nil? + + substitute = User.anonymous + Attachment.update_all ['author_id = ?', substitute.id], ['author_id = ?', id] + Comment.update_all ['author_id = ?', substitute.id], ['author_id = ?', id] + Issue.update_all ['author_id = ?', substitute.id], ['author_id = ?', id] + Issue.update_all 'assigned_to_id = NULL', ['assigned_to_id = ?', id] + Journal.update_all ['user_id = ?', substitute.id], ['user_id = ?', id] + JournalDetail.update_all ['old_value = ?', substitute.id.to_s], ["property = 'attr' AND prop_key = 'assigned_to_id' AND old_value = ?", id.to_s] + JournalDetail.update_all ['value = ?', substitute.id.to_s], ["property = 'attr' AND prop_key = 'assigned_to_id' AND value = ?", id.to_s] + Message.update_all ['author_id = ?', substitute.id], ['author_id = ?', id] + News.update_all ['author_id = ?', substitute.id], ['author_id = ?', id] + # Remove private queries and keep public ones + Query.delete_all ['user_id = ? AND is_public = ?', id, false] + Query.update_all ['user_id = ?', substitute.id], ['user_id = ?', id] + TimeEntry.update_all ['user_id = ?', substitute.id], ['user_id = ?', id] + Token.delete_all ['user_id = ?', id] + Watcher.delete_all ['user_id = ?', id] + WikiContent.update_all ['author_id = ?', substitute.id], ['author_id = ?', id] + WikiContent::Version.update_all ['author_id = ?', substitute.id], ['author_id = ?', id] + end # Return password digest 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 @@ -492,4 +610,9 @@ def mail; nil end def time_zone; nil end def rss_key; nil end + + # Anonymous user can not be destroyed + def destroy + false + end end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/user_preference.rb --- a/app/models/user_preference.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/user_preference.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 app/models/version.rb --- a/app/models/version.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/version.rb Mon Jul 25 14:23:37 2011 +0100 @@ -33,6 +33,7 @@ validates_inclusion_of :status, :in => VERSION_STATUSES validates_inclusion_of :sharing, :in => VERSION_SHARINGS + named_scope :named, lambda {|arg| { :conditions => ["LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip]}} named_scope :open, :conditions => {:status => 'open'} named_scope :visible, lambda {|*args| { :include => :project, :conditions => Project.allowed_to_condition(args.first || User.current, :view_issues) } } @@ -43,7 +44,7 @@ end def start_date - effective_date + @start_date ||= fixed_issues.minimum('start_date') end def due_date @@ -77,8 +78,7 @@ def behind_schedule? if completed_pourcent == 100 return false - elsif due_date && fixed_issues.present? && fixed_issues.minimum('start_date') # TODO: should use #start_date but that method is wrong... - start_date = fixed_issues.minimum('start_date') + elsif due_date && start_date done_date = start_date + ((due_date - start_date+1)* completed_pourcent/100).floor return done_date <= Date.today else diff -r f7c525dc7585 -r 0b6c82dead28 app/models/wiki.rb --- a/app/models/wiki.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/wiki.rb Mon Jul 25 14:23:37 2011 +0100 @@ -44,17 +44,26 @@ # find the page with the given title def find_page(title, options = {}) + @page_found_with_redirect = false title = start_page if title.blank? title = Wiki.titleize(title) - page = pages.find_by_title(title) + page = pages.first(:conditions => ["LOWER(title) = LOWER(?)", title]) if !page && !(options[:with_redirect] == false) # search for a redirect - redirect = redirects.find_by_title(title) - page = find_page(redirect.redirects_to, :with_redirect => false) if redirect + redirect = redirects.first(:conditions => ["LOWER(title) = LOWER(?)", title]) + if redirect + page = find_page(redirect.redirects_to, :with_redirect => false) + @page_found_with_redirect = true + end end page end + # Returns true if the last page was found with a redirect + def page_found_with_redirect? + @page_found_with_redirect + end + # Finds a page by title # The given string can be of one of the forms: "title" or "project:title" # Examples: diff -r f7c525dc7585 -r 0b6c82dead28 app/models/wiki_content.rb --- a/app/models/wiki_content.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/wiki_content.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -23,28 +23,28 @@ belongs_to :author, :class_name => 'User', :foreign_key => 'author_id' validates_presence_of :text validates_length_of :comments, :maximum => 255, :allow_nil => true - + acts_as_versioned - + def visible?(user=User.current) page.visible?(user) end - + def project page.project end - + def attachments page.nil? ? [] : page.attachments end - + # Returns the mail adresses of users that should be notified def recipients notified = project.notified_users notified.reject! {|user| !visible?(user)} notified.collect(&:mail) end - + class Version belongs_to :page, :class_name => '::WikiPage', :foreign_key => 'page_id' belongs_to :author, :class_name => '::User', :foreign_key => 'author_id' @@ -84,7 +84,7 @@ end plain end - + def text @text ||= case compression when 'gzip' @@ -92,16 +92,16 @@ else # uncompressed data data - end + end end - + def project page.project end - + # Returns the previous version or nil def previous - @previous ||= WikiContent::Version.find(:first, + @previous ||= WikiContent::Version.find(:first, :order => 'version DESC', :include => :author, :conditions => ["wiki_content_id = ? AND version < ?", wiki_content_id, version]) diff -r f7c525dc7585 -r 0b6c82dead28 app/models/wiki_page.rb --- a/app/models/wiki_page.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/wiki_page.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -32,6 +32,7 @@ acts_as_searchable :columns => ['title', 'text'], :include => [{:wiki => :project}, :content], + :permission => :view_wiki_pages, :project_key => "#{Wiki.table_name}.project_id" attr_accessor :redirect_existing_links @@ -41,6 +42,12 @@ validates_uniqueness_of :title, :scope => :wiki_id, :case_sensitive => false validates_associated :content + # eager load information about last updates, without loading text + named_scope :with_updated_on, { + :select => "#{WikiPage.table_name}.*, #{WikiContent.table_name}.updated_on", + :joins => "LEFT JOIN #{WikiContent.table_name} ON #{WikiContent.table_name}.page_id = #{WikiPage.table_name}.id" + } + # Wiki pages that are protected by default DEFAULT_PROTECTED_PAGES = %w(sidebar) @@ -121,6 +128,18 @@ content.text if content end + def updated_on + unless @updated_on + if time = read_attribute(:updated_on) + # content updated_on was eager loaded with the page + @updated_on = Time.parse(time) rescue nil + else + @updated_on = content && content.updated_on + end + end + @updated_on + end + # Returns true if usr is allowed to edit the page, otherwise false def editable_by?(usr) !protected? || usr.allowed_to?(:protect_wiki_pages, wiki.project) @@ -149,17 +168,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 @@ -197,6 +212,10 @@ break unless @lines.detect { |line| line[0].nil? } current = current.previous end - @lines.each { |line| line[0] ||= current.version } + @lines.each { |line| + line[0] ||= current.version + # if the last known version is > 1 (eg. history was cleared), we don't know the author + line[1] ||= current.author if current.version == 1 + } end end diff -r f7c525dc7585 -r 0b6c82dead28 app/models/workflow.rb --- a/app/models/workflow.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/models/workflow.rb Mon Jul 25 14:23:37 2011 +0100 @@ -89,8 +89,8 @@ else transaction do delete_all :tracker_id => target_tracker.id, :role_id => target_role.id - connection.insert "INSERT INTO #{Workflow.table_name} (tracker_id, role_id, old_status_id, new_status_id)" + - " SELECT #{target_tracker.id}, #{target_role.id}, old_status_id, new_status_id" + + connection.insert "INSERT INTO #{Workflow.table_name} (tracker_id, role_id, old_status_id, new_status_id, author, assignee)" + + " SELECT #{target_tracker.id}, #{target_role.id}, old_status_id, new_status_id, author, assignee" + " FROM #{Workflow.table_name}" + " WHERE tracker_id = #{source_tracker.id} AND role_id = #{source_role.id}" end diff -r f7c525dc7585 -r 0b6c82dead28 app/sweepers/.svn/all-wcprops --- a/app/sweepers/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 37 -/svn/!svn/ver/1157/trunk/app/sweepers -END diff -r f7c525dc7585 -r 0b6c82dead28 app/sweepers/.svn/entries --- a/app/sweepers/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/sweepers/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/sweepers +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/sweepers http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 app/views/.svn/all-wcprops --- a/app/views/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,5 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 34 -/svn/!svn/ver/4409/trunk/app/views +V 48 +/svn/!svn/ver/6205/branches/1.2-stable/app/views END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/.svn/entries --- a/app/views/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views http://redmine.rubyforge.org/svn -2010-11-16T19:49:08.085592Z -4409 +2011-07-09T11:42:12.586037Z +6205 jplang @@ -38,49 +38,49 @@ 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 -users +settings +dir + +timelog dir issue_moves dir +users +dir + files dir -ldap_auth_sources +auth_sources dir -auth_sources +ldap_auth_sources dir previews @@ -92,10 +92,10 @@ messages dir -issue_relations +versions dir -versions +issue_relations dir mailer diff -r f7c525dc7585 -r 0b6c82dead28 app/views/account/.svn/all-wcprops --- a/app/views/account/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 42 -/svn/!svn/ver/3530/trunk/app/views/account -END -password_recovery.rhtml -K 25 -svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/3341/trunk/app/views/account/password_recovery.rhtml -END -lost_password.rhtml -K 25 -svn:wc:ra_dav:version-url -V 61 -/svn/!svn/ver/747/trunk/app/views/account/lost_password.rhtml -END -register.rhtml -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/2678/trunk/app/views/account/register.rhtml -END -login.rhtml -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/3530/trunk/app/views/account/login.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/account/.svn/entries --- a/app/views/account/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/account/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/account +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/account http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.495777Z +2011-07-14T09:24:09.000000Z 232ce32581d2f869b81c300244decff5 2010-01-28T18:54:51.800438Z 3341 @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.495777Z +2011-07-14T09:24:09.000000Z cf3d603bbb4825640988086c7871c165 2007-09-22T13:17:49.935719Z 747 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.495777Z +2011-07-14T09:24:09.000000Z 82c6920dc6c95e35b0248de4be82885b 2009-04-21T13:43:57.529967Z 2678 @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.495777Z +2011-07-14T09:24:09.000000Z 72b586f183037fcab519bc7575d3b2b5 2010-03-03T20:21:05.265018Z 3530 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/activities/.svn/all-wcprops --- a/app/views/activities/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 45 -/svn/!svn/ver/4047/trunk/app/views/activities -END -index.html.erb -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/4047/trunk/app/views/activities/index.html.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/activities/.svn/entries --- a/app/views/activities/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/activities/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/activities +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/activities http://redmine.rubyforge.org/svn -2010-08-27T14:05:54.014502Z -4047 -edavis10 +2011-04-03T14:01:32.419875Z +5301 +jplang @@ -32,11 +32,11 @@ -2010-09-24T12:48:29.578245Z -9e6d9091be2c8769f8e262500d974f84 -2010-08-27T14:05:54.014502Z -4047 -edavis10 +2011-07-14T09:24:21.000000Z +842302ab754ce754f88204a7074c4b9d +2011-04-03T14:01:32.419875Z +5301 +jplang has-props @@ -58,5 +58,5 @@ -3266 +2936 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/activities/.svn/text-base/index.html.erb.svn-base --- a/app/views/activities/.svn/text-base/index.html.erb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/activities/.svn/text-base/index.html.erb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -21,16 +21,14 @@ <%= content_tag('p', l(:label_no_data), :class => 'nodata') if @events_by_day.empty? %>
    -<%= link_to_remote(('« ' + l(:label_previous)), - {:update => "content", :url => params.merge(:from => @date_to - @days - 1), :method => :get, :complete => 'window.scrollTo(0,0)'}, - {:href => url_for(params.merge(:from => @date_to - @days - 1)), - :title => l(:label_date_from_to, :start => format_date(@date_to - 2*@days), :end => format_date(@date_to - @days - 1))}) %> +<%= link_to_content_update('« ' + l(:label_previous), + params.merge(:from => @date_to - @days - 1), + :title => l(:label_date_from_to, :start => format_date(@date_to - 2*@days), :end => format_date(@date_to - @days - 1))) %>
    -<%= link_to_remote((l(:label_next) + ' »'), - {:update => "content", :url => params.merge(:from => @date_to + @days - 1), :method => :get, :complete => 'window.scrollTo(0,0)'}, - {:href => url_for(params.merge(:from => @date_to + @days - 1)), - :title => l(:label_date_from_to, :start => format_date(@date_to), :end => format_date(@date_to + @days - 1))}) unless @date_to >= Date.today %> +<%= link_to_content_update(l(:label_next) + ' »', + params.merge(:from => @date_to + @days - 1), + :title => l(:label_date_from_to, :start => format_date(@date_to), :end => format_date(@date_to + @days - 1))) unless @date_to >= Date.today %>
      <% other_formats_links do |f| %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/activities/_recent.rhtml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/activities/_recent.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,65 @@ +<% events = @events_by_day %> +<% max = 5 %> +<% if (events.nil?) + activity = Redmine::Activity::Fetcher.new(User.current, :project => @project) + + if @project + # Don't show news (duplicated with News box) or wiki edits (too + # tedious) in project front page + activity.scope = [ "changesets", "files", "issues", "documents" ] + end + + events = activity.events(Date.today - 28, Date.today + 1) + + if defined? user + events = events.select { |e| user.member_of? e.project } + end + + events = events.first(max) + + end +%> + +
    + +<% if @project.nil? %> + <%= content_tag('h3', l(:label_activity_my_recent)) %> +
    +<% end %> + +<% if events.empty? %> + + <% if @project.nil? %> +

    <%= l(:label_activity_my_recent_none) %>

    + <% end %> + +<% else %> + + <% if !@project.nil? %> +
    + <%= content_tag('h3', l(:label_activity_recent)) %> + <% end %> + +
    + <% events.sort {|x,y| y.event_datetime <=> x.event_datetime }.each do |e| -%> +
    + <%= avatar(e.event_author, :size => "24") if e.respond_to?(:event_author) %> + <%= format_time(e.event_datetime) %> + <%= content_tag('span', link_to_project(e.project), :class => 'project') if @project.nil? || @project != e.project %> + <% if e.respond_to?(:event_author) %> + <%= e.event_author %> + <% end %> +
    +
    <%= link_to format_activity_title(e.event_title), e.event_url %> + <%= format_activity_description(e.event_description) %> +
    + <% end -%> +
    + +
    + +<% end %> + +<% if events.empty? and @project.nil? %>
    <% end %> + +
    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/activities/index.html.erb --- a/app/views/activities/index.html.erb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/activities/index.html.erb Mon Jul 25 14:23:37 2011 +0100 @@ -21,16 +21,14 @@ <%= content_tag('p', l(:label_no_data), :class => 'nodata') if @events_by_day.empty? %>
    -<%= link_to_remote(('« ' + l(:label_previous)), - {:update => "content", :url => params.merge(:from => @date_to - @days - 1), :method => :get, :complete => 'window.scrollTo(0,0)'}, - {:href => url_for(params.merge(:from => @date_to - @days - 1)), - :title => l(:label_date_from_to, :start => format_date(@date_to - 2*@days), :end => format_date(@date_to - @days - 1))}) %> +<%= link_to_content_update('« ' + l(:label_previous), + params.merge(:from => @date_to - @days - 1), + :title => l(:label_date_from_to, :start => format_date(@date_to - 2*@days), :end => format_date(@date_to - @days - 1))) %>
    -<%= link_to_remote((l(:label_next) + ' »'), - {:update => "content", :url => params.merge(:from => @date_to + @days - 1), :method => :get, :complete => 'window.scrollTo(0,0)'}, - {:href => url_for(params.merge(:from => @date_to + @days - 1)), - :title => l(:label_date_from_to, :start => format_date(@date_to), :end => format_date(@date_to + @days - 1))}) unless @date_to >= Date.today %> +<%= link_to_content_update(l(:label_next) + ' »', + params.merge(:from => @date_to + @days - 1), + :title => l(:label_date_from_to, :start => format_date(@date_to), :end => format_date(@date_to + @days - 1))) unless @date_to >= Date.today %>
      <% other_formats_links do |f| %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/admin/.svn/all-wcprops --- a/app/views/admin/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/admin/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,41 +1,5 @@ -K 25 -svn:wc:ra_dav:version-url -V 40 -/svn/!svn/ver/4271/trunk/app/views/admin -END -info.rhtml -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/3200/trunk/app/views/admin/info.rhtml -END -plugins.rhtml K 25 svn:wc:ra_dav:version-url V 54 -/svn/!svn/ver/2041/trunk/app/views/admin/plugins.rhtml +/svn/!svn/ver/5878/branches/1.2-stable/app/views/admin END -_menu.rhtml -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/3909/trunk/app/views/admin/_menu.rhtml -END -_no_data.rhtml -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/1040/trunk/app/views/admin/_no_data.rhtml -END -index.rhtml -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/3176/trunk/app/views/admin/index.rhtml -END -projects.rhtml -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/4271/trunk/app/views/admin/projects.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/admin/.svn/entries --- a/app/views/admin/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/admin/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/admin +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/admin http://redmine.rubyforge.org/svn -2010-10-22T15:11:04.321155Z -4271 -jplang +2011-04-28T12:35:25.773529Z +5562 +tmaruyama @@ -32,11 +32,11 @@ -2010-09-23T14:37:44.499776Z -a7b3d0461b8dac7e68d5b758e6b93b45 -2009-12-19T20:33:24.113306Z -3200 -jplang +2011-07-14T09:24:21.000000Z +7890b8a0425776aeb77070710f89d8ce +2011-04-28T12:35:25.773529Z +5562 +tmaruyama has-props @@ -58,7 +58,7 @@ -456 +498 plugins.rhtml file @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.503775Z +2011-07-14T09:24:09.000000Z aacfd3ff934f52585eba4f460f52df31 2008-11-16T17:12:02.001794Z 2041 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.499776Z +2011-07-14T09:24:09.000000Z a2dcf50c0d70604e64f18cd28f15280b 2010-08-04T00:38:22.739166Z 3909 @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.499776Z +2011-07-14T09:24:09.000000Z 8db715728d1f5851c242e085110f2bb6 2008-01-05T11:33:49.132886Z 1040 @@ -168,7 +168,7 @@ -2010-09-23T14:37:44.499776Z +2011-07-14T09:24:09.000000Z 35378eb3f0e385475e3bd0586f22324a 2009-12-17T18:21:02.630202Z 3176 @@ -202,10 +202,10 @@ -2010-11-19T13:04:49.448967Z -9aaefdc17951db18479f38fb0db73ea7 -2010-10-22T15:11:04.321155Z -4271 +2011-07-14T09:24:21.000000Z +9b6daf583836b76e9183e9e125ca7ced +2011-03-16T18:23:51.946930Z +5151 jplang has-props @@ -228,5 +228,5 @@ -2136 +2247 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/admin/.svn/text-base/info.rhtml.svn-base --- a/app/views/admin/.svn/text-base/info.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/admin/.svn/text-base/info.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -4,10 +4,11 @@ <% @checklist.each do |label, result| %> - - - - + + + + <% end %>
    <%= l(label) %><%= image_tag((result ? 'true.png' : 'exclamation.png'), :style => "vertical-align:bottom;") %>
    <%= l(label) %><%= image_tag((result ? 'true.png' : 'exclamation.png'), + :style => "vertical-align:bottom;") %>
    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/admin/.svn/text-base/projects.rhtml.svn-base --- a/app/views/admin/.svn/text-base/projects.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/admin/.svn/text-base/projects.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -11,6 +11,7 @@ <%= text_field_tag 'name', params[:name], :size => 30 %> <%= submit_tag l(:button_apply), :class => "small", :name => nil %> +<%= link_to l(:button_clear), {:controller => 'admin', :action => 'projects'}, :class => 'icon icon-reload' %> <% end %>   diff -r f7c525dc7585 -r 0b6c82dead28 app/views/admin/info.rhtml --- a/app/views/admin/info.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/admin/info.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -4,10 +4,11 @@ <% @checklist.each do |label, result| %> - - - - + + + + <% end %>
    <%= l(label) %><%= image_tag((result ? 'true.png' : 'exclamation.png'), :style => "vertical-align:bottom;") %>
    <%= l(label) %><%= image_tag((result ? 'true.png' : 'exclamation.png'), + :style => "vertical-align:bottom;") %>
    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/admin/projects.rhtml --- a/app/views/admin/projects.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/admin/projects.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -11,6 +11,7 @@ <%= text_field_tag 'name', params[:name], :size => 30 %> <%= submit_tag l(:button_apply), :class => "small", :name => nil %> +<%= link_to l(:button_clear), {:controller => 'admin', :action => 'projects'}, :class => 'icon icon-reload' %> <% end %>   diff -r f7c525dc7585 -r 0b6c82dead28 app/views/attachments/.svn/all-wcprops --- a/app/views/attachments/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/3879/trunk/app/views/attachments -END -_links.rhtml -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/2116/trunk/app/views/attachments/_links.rhtml -END -file.rhtml -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/2693/trunk/app/views/attachments/file.rhtml -END -_form.rhtml -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/3879/trunk/app/views/attachments/_form.rhtml -END -diff.rhtml -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/2693/trunk/app/views/attachments/diff.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/attachments/.svn/entries --- a/app/views/attachments/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/attachments/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/attachments +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/attachments http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.503775Z +2011-07-14T09:24:09.000000Z 6f5329a1a81f3798a84a26b0261f5000 2008-12-09T16:54:46.963649Z 2116 @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.507774Z +2011-07-14T09:24:09.000000Z b8bc854a91c56c3e3d45390e8ed4bb8d 2009-04-25T09:35:14.494071Z 2693 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.503775Z +2011-07-14T09:24:09.000000Z 9cd3f9685ce632814961d9f7e67c4d26 2010-07-25T10:34:55.569539Z 3879 @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.503775Z +2011-07-14T09:24:09.000000Z 43e4ae1b5703daa55b37eb438a169304 2009-04-25T09:35:14.494071Z 2693 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/auth_sources/.svn/all-wcprops --- a/app/views/auth_sources/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 47 -/svn/!svn/ver/3744/trunk/app/views/auth_sources -END -index.html.erb -K 25 -svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/3436/trunk/app/views/auth_sources/index.html.erb -END -edit.rhtml -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/333/trunk/app/views/auth_sources/edit.rhtml -END -_form.html.erb -K 25 -svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/3744/trunk/app/views/auth_sources/_form.html.erb -END -new.rhtml -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/333/trunk/app/views/auth_sources/new.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/auth_sources/.svn/entries --- a/app/views/auth_sources/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/auth_sources/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/auth_sources +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/auth_sources http://redmine.rubyforge.org/svn -2010-05-23T03:16:31.304135Z -3744 -edavis10 +2011-06-27T23:19:41.132706Z +6128 +tmaruyama @@ -32,11 +32,11 @@ -2010-09-23T14:37:44.507774Z -2f1b944eb2979ed37624c653969fa6bf -2010-02-15T16:41:21.789274Z -3436 -edavis10 +2011-07-14T09:28:10.000000Z +17ed40b5810c708c0184ae7255cdc17d +2011-06-27T23:19:41.132706Z +6128 +tmaruyama has-props @@ -58,7 +58,7 @@ -1306 +1312 edit.rhtml file @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.507774Z +2011-07-14T09:24:09.000000Z 6f4f645b6d66417180eaadb0e204a56e 2007-03-12T17:59:02.654744Z 333 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.507774Z +2011-07-14T09:24:09.000000Z 4ea0fc7f46738e3709d552778de7a756 2010-05-23T03:16:31.304135Z 3744 @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.507774Z +2011-07-14T09:24:09.000000Z 1cc2f5049536de6e5d6d4e926f96ab38 2007-03-12T17:59:02.654744Z 333 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/auth_sources/.svn/text-base/index.html.erb.svn-base --- a/app/views/auth_sources/.svn/text-base/index.html.erb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/auth_sources/.svn/text-base/index.html.erb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -15,10 +15,10 @@ <% for source in @auth_sources %> "> - <%= link_to source.name, :action => 'edit', :id => source%> - <%= source.auth_method_name %> - <%= source.host %> - <%= source.users.count %> + <%= link_to(h(source.name), :action => 'edit', :id => source)%> + <%= h source.auth_method_name %> + <%= h source.host %> + <%= h source.users.count %> <%= link_to l(:button_test), :action => 'test_connection', :id => source %> <%= link_to l(:button_delete), { :action => 'destroy', :id => source }, diff -r f7c525dc7585 -r 0b6c82dead28 app/views/auth_sources/index.html.erb --- a/app/views/auth_sources/index.html.erb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/auth_sources/index.html.erb Mon Jul 25 14:23:37 2011 +0100 @@ -15,10 +15,10 @@ <% for source in @auth_sources %> "> - <%= link_to source.name, :action => 'edit', :id => source%> - <%= source.auth_method_name %> - <%= source.host %> - <%= source.users.count %> + <%= link_to(h(source.name), :action => 'edit', :id => source)%> + <%= h source.auth_method_name %> + <%= h source.host %> + <%= h source.users.count %> <%= link_to l(:button_test), :action => 'test_connection', :id => source %> <%= link_to l(:button_delete), { :action => 'destroy', :id => source }, diff -r f7c525dc7585 -r 0b6c82dead28 app/views/auto_completes/.svn/all-wcprops --- a/app/views/auto_completes/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/3945/trunk/app/views/auto_completes -END -issues.html.erb -K 25 -svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/3945/trunk/app/views/auto_completes/issues.html.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/auto_completes/.svn/entries --- a/app/views/auto_completes/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/auto_completes/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/auto_completes +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/auto_completes http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.511773Z +2011-07-14T09:24:09.000000Z d325b0677890591680b96985e16a0139 2010-08-17T15:03:58.074505Z 3945 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/boards/.svn/all-wcprops --- a/app/views/boards/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 41 -/svn/!svn/ver/4047/trunk/app/views/boards -END -show.rhtml -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/3426/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 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/boards/.svn/entries --- a/app/views/boards/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/boards/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/boards +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/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-09-23T14:37:44.515775Z -74a37f0fbb3bb635f2c0389a2624988e -2010-02-14T11:52:12.027647Z -3426 +2011-07-14T09:24:09.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-09-23T14:37:44.515775Z +2011-07-14T09:24:09.000000Z 0416740cf4bf599b0da68e597c0cd44c 2007-05-13T17:09:56.765659Z 529 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.515775Z +2011-07-14T09:24:09.000000Z 00f3643ebd3d5af2322b92c885a6eec6 2007-05-13T17:09:56.765659Z 529 @@ -134,7 +134,7 @@ -2010-09-24T12:48:28.319823Z +2011-07-14T09:24:09.000000Z 5c323ebf8fea05f556896ed49186773b 2010-08-27T14:05:54.014502Z 4047 @@ -168,7 +168,7 @@ -2010-09-23T14:37:44.515775Z +2011-07-14T09:24:09.000000Z b951b4d73988508c5a42fdb7b7df695c 2007-05-13T17:09:56.765659Z 529 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/boards/.svn/text-base/show.rhtml.svn-base --- a/app/views/boards/.svn/text-base/show.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/boards/.svn/text-base/show.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/boards/show.rhtml --- a/app/views/boards/show.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/boards/show.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -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 %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/calendars/.svn/all-wcprops --- a/app/views/calendars/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 44 -/svn/!svn/ver/4238/trunk/app/views/calendars -END -show.html.erb -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/4238/trunk/app/views/calendars/show.html.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/calendars/.svn/entries --- a/app/views/calendars/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/calendars/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/calendars +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/calendars http://redmine.rubyforge.org/svn -2010-10-07T15:26:53.500793Z -4238 -winterheart +2011-04-01T14:34:44.070899Z +5276 +jplang @@ -32,11 +32,11 @@ -2010-11-19T13:04:49.472856Z -d47ece5d0e0ff017f3f1b5ce4b776ba0 -2010-10-07T15:26:53.500793Z -4238 -winterheart +2011-07-14T09:24:21.000000Z +ab4018273a0ea22e0fb58209d1f88be7 +2011-04-01T14:34:44.070899Z +5276 +jplang has-props @@ -58,5 +58,5 @@ -1946 +1686 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/calendars/.svn/text-base/show.html.erb.svn-base --- a/app/views/calendars/.svn/text-base/show.html.erb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/calendars/.svn/text-base/show.html.erb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -

    <%= l(:label_calendar) %>

    +

    <%= @query.new_record? ? l(:label_calendar) : h(@query.name) %>

    -<% form_tag(calendar_path, :method => :put, :id => 'query_form') do %> - <%= hidden_field_tag('project_id', @project.to_param) if @project%> -
    +<% form_tag({:controller => 'calendars', :action => 'show', :project_id => @project}, :method => :get, :id => 'query_form') do %> +<%= hidden_field_tag 'set_filter', '1' %> +
    "> <%= l(:label_filter_plural) %> -
    +
    "> <%= render :partial => 'queries/filters', :locals => {:query => @query} %>

    - <%= link_to_previous_month(@year, @month, :project => @project) %> | <%= link_to_next_month(@year, @month, :project => @project) %> + <%= link_to_previous_month(@year, @month) %> | <%= link_to_next_month(@year, @month) %>

    @@ -19,17 +19,8 @@ <%= label_tag('year', l(:label_year)) %> <%= select_year(@year, :prefix => "year", :discard_type => true) %> -<%= link_to_remote l(:button_apply), - { :url => { :set_filter => (@query.new_record? ? 1 : nil) }, - :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) }, - :method => :put, - :update => "content", - }, :class => 'icon icon-reload' if @query.new_record? %> +<%= link_to_function l(:button_apply), '$("query_form").submit()', :class => 'icon icon-checked' %> +<%= link_to l(:button_clear), { :project_id => @project, :set_filter => 1 }, :class => 'icon icon-reload' %>

    <% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/calendars/show.html.erb --- a/app/views/calendars/show.html.erb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/calendars/show.html.erb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -

    <%= l(:label_calendar) %>

    +

    <%= @query.new_record? ? l(:label_calendar) : h(@query.name) %>

    -<% form_tag(calendar_path, :method => :put, :id => 'query_form') do %> - <%= hidden_field_tag('project_id', @project.to_param) if @project%> -
    +<% form_tag({:controller => 'calendars', :action => 'show', :project_id => @project}, :method => :get, :id => 'query_form') do %> +<%= hidden_field_tag 'set_filter', '1' %> +
    "> <%= l(:label_filter_plural) %> -
    +
    "> <%= render :partial => 'queries/filters', :locals => {:query => @query} %>

    - <%= link_to_previous_month(@year, @month, :project => @project) %> | <%= link_to_next_month(@year, @month, :project => @project) %> + <%= link_to_previous_month(@year, @month) %> | <%= link_to_next_month(@year, @month) %>

    @@ -19,17 +19,8 @@ <%= label_tag('year', l(:label_year)) %> <%= select_year(@year, :prefix => "year", :discard_type => true) %> -<%= link_to_remote l(:button_apply), - { :url => { :set_filter => (@query.new_record? ? 1 : nil) }, - :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) }, - :method => :put, - :update => "content", - }, :class => 'icon icon-reload' if @query.new_record? %> +<%= link_to_function l(:button_apply), '$("query_form").submit()', :class => 'icon icon-checked' %> +<%= link_to l(:button_clear), { :project_id => @project, :set_filter => 1 }, :class => 'icon icon-reload' %>

    <% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/common/.svn/all-wcprops --- a/app/views/common/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/common/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,47 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 41 -/svn/!svn/ver/4286/trunk/app/views/common +V 55 +/svn/!svn/ver/5878/branches/1.2-stable/app/views/common END -_file.rhtml -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/3585/trunk/app/views/common/_file.rhtml -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 -V 56 -/svn/!svn/ver/1699/trunk/app/views/common/_preview.rhtml -END -_diff.rhtml -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/3585/trunk/app/views/common/_diff.rhtml -END -_calendar.rhtml -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/3790/trunk/app/views/common/_calendar.rhtml -END -_tabs.rhtml -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/3174/trunk/app/views/common/_tabs.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/common/.svn/entries --- a/app/views/common/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/common/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/common +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/common http://redmine.rubyforge.org/svn -2010-10-23T11:07:04.019894Z -4286 -jplang +2011-05-21T04:26:15.661225Z +5872 +tmaruyama @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.523788Z +2011-07-14T09:24:09.000000Z f95c4268a6ac374ab617da665e57a3ad 2010-03-14T13:22:50.317701Z 3585 @@ -60,13 +60,47 @@ 369 +error.html.erb +file + + + + +2011-07-14T09:24:21.000000Z +df19ed70179aa9f6d4ffc2403ac593bc +2011-05-21T04:26:15.661225Z +5872 +tmaruyama +has-props + + + + + + + + + + + + + + + + + + + + +150 + feed.atom.rxml file -2010-09-23T14:37:44.523788Z +2011-07-14T09:24:09.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-07-14T09:24:09.000000Z d03b1c3719bd49af7d930d210a8e8328 2008-07-26T12:54:54.604420Z 1699 @@ -168,10 +168,10 @@ -2010-09-23T14:37:44.523788Z -a03541085a4ee595977cbf760d20bf19 -2010-03-14T13:22:50.317701Z -3585 +2011-07-14T09:24:21.000000Z +358b5f24bf743ee83c21cf15289b0a60 +2011-03-11T20:23:29.177962Z +5094 jplang has-props @@ -194,7 +194,7 @@ -2506 +1541 _calendar.rhtml file @@ -202,7 +202,7 @@ -2010-09-23T14:37:44.523788Z +2011-07-14T09:24:09.000000Z 18b2d631fabd5720aa07d369da11d0de 2010-06-19T22:52:15.523619Z 3790 @@ -236,7 +236,7 @@ -2010-09-23T14:37:44.523788Z +2011-07-14T09:24:09.000000Z 6e7716818f87ed1ad9839c6e9a92ed1b 2009-12-14T20:13:29.438642Z 3174 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/common/.svn/text-base/_diff.rhtml.svn-base --- a/app/views/common/.svn/text-base/_diff.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/common/.svn/text-base/_diff.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,66 +1,56 @@ <% diff = Redmine::UnifiedDiff.new(diff, :type => diff_type, :max_lines => Setting.diff_max_lines_displayed.to_i) -%> + <% diff.each do |table_file| -%>
    -<% if diff_type == 'sbs' -%> +<% if diff.diff_type == 'sbs' -%> - + -<% prev_line_left, prev_line_right = nil, nil -%> -<% table_file.keys.sort.each do |key| -%> -<% if prev_line_left && prev_line_right && (table_file[key].nb_line_left != prev_line_left+1) && (table_file[key].nb_line_right != prev_line_right+1) -%> +<% table_file.each_line do |spacing, line| -%> +<% if spacing -%> - + + <% end -%> - - + - - + -<% prev_line_left, prev_line_right = table_file[key].nb_line_left.to_i, table_file[key].nb_line_right.to_i -%> <% end -%>
    <%= table_file.file_name %>
    <%=to_utf8 table_file.file_name %>
    ............
    <%= table_file[key].nb_line_left %> -
    <%=to_utf8 table_file[key].line_left %>
    +
    <%= line.nb_line_left %> +
    <%=to_utf8 line.html_line_left %>
    <%= table_file[key].nb_line_right %> -
    <%=to_utf8 table_file[key].line_right %>
    +
    <%= line.nb_line_right %> +
    <%=to_utf8 line.html_line_right %>
    <% else -%> - +
    - + -<% prev_line_left, prev_line_right = nil, nil -%> -<% table_file.keys.sort.each do |key, line| %> -<% if prev_line_left && prev_line_right && (table_file[key].nb_line_left != prev_line_left+1) && (table_file[key].nb_line_right != prev_line_right+1) -%> +<% table_file.each_line do |spacing, line| %> +<% if spacing -%> - + <% end -%> - - - <% if table_file[key].line_left.empty? -%> - + + - <% else -%> - - <% end -%> -<% prev_line_left = table_file[key].nb_line_left.to_i if table_file[key].nb_line_left.to_i > 0 -%> -<% prev_line_right = table_file[key].nb_line_right.to_i if table_file[key].nb_line_right.to_i > 0 -%> <% end -%>
    <%= table_file.file_name %>
    <%=to_utf8 table_file.file_name %>
    ............
    <%= table_file[key].nb_line_left %><%= table_file[key].nb_line_right %> -
    <%=to_utf8 table_file[key].line_right %>
    +
    <%= line.nb_line_left %><%= line.nb_line_right %> +
    <%=to_utf8 line.html_line %>
    -
    <%=to_utf8 table_file[key].line_left %>
    -
    <% end -%> -
    <% end -%> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/common/.svn/text-base/error.html.erb.svn-base --- a/app/views/common/.svn/text-base/error.html.erb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/common/.svn/text-base/error.html.erb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,6 +1,6 @@ -

    <%=h @status %>

    - -

    <%=h @message %>

    -

    Back

    - -<% html_title @status %> +

    <%=h @status %>

    + +

    <%=h @message %>

    +

    Back

    + +<% html_title @status %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/common/_diff.rhtml --- a/app/views/common/_diff.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/common/_diff.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -1,66 +1,56 @@ <% diff = Redmine::UnifiedDiff.new(diff, :type => diff_type, :max_lines => Setting.diff_max_lines_displayed.to_i) -%> + <% diff.each do |table_file| -%>
    -<% if diff_type == 'sbs' -%> +<% if diff.diff_type == 'sbs' -%> - + -<% prev_line_left, prev_line_right = nil, nil -%> -<% table_file.keys.sort.each do |key| -%> -<% if prev_line_left && prev_line_right && (table_file[key].nb_line_left != prev_line_left+1) && (table_file[key].nb_line_right != prev_line_right+1) -%> +<% table_file.each_line do |spacing, line| -%> +<% if spacing -%> - + + <% end -%> - - + - - + -<% prev_line_left, prev_line_right = table_file[key].nb_line_left.to_i, table_file[key].nb_line_right.to_i -%> <% end -%>
    <%= table_file.file_name %>
    <%=to_utf8 table_file.file_name %>
    ............
    <%= table_file[key].nb_line_left %> -
    <%=to_utf8 table_file[key].line_left %>
    +
    <%= line.nb_line_left %> +
    <%=to_utf8 line.html_line_left %>
    <%= table_file[key].nb_line_right %> -
    <%=to_utf8 table_file[key].line_right %>
    +
    <%= line.nb_line_right %> +
    <%=to_utf8 line.html_line_right %>
    <% else -%> - +
    - + -<% prev_line_left, prev_line_right = nil, nil -%> -<% table_file.keys.sort.each do |key, line| %> -<% if prev_line_left && prev_line_right && (table_file[key].nb_line_left != prev_line_left+1) && (table_file[key].nb_line_right != prev_line_right+1) -%> +<% table_file.each_line do |spacing, line| %> +<% if spacing -%> - + <% end -%> - - - <% if table_file[key].line_left.empty? -%> - + + - <% else -%> - - <% end -%> -<% prev_line_left = table_file[key].nb_line_left.to_i if table_file[key].nb_line_left.to_i > 0 -%> -<% prev_line_right = table_file[key].nb_line_right.to_i if table_file[key].nb_line_right.to_i > 0 -%> <% end -%>
    <%= table_file.file_name %>
    <%=to_utf8 table_file.file_name %>
    ............
    <%= table_file[key].nb_line_left %><%= table_file[key].nb_line_right %> -
    <%=to_utf8 table_file[key].line_right %>
    +
    <%= line.nb_line_left %><%= line.nb_line_right %> +
    <%=to_utf8 line.html_line %>
    -
    <%=to_utf8 table_file[key].line_left %>
    -
    <% end -%> -
    <% end -%> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/common/error.html.erb --- a/app/views/common/error.html.erb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/common/error.html.erb Mon Jul 25 14:23:37 2011 +0100 @@ -1,6 +1,6 @@ -

    <%=h @status %>

    - -

    <%=h @message %>

    -

    Back

    - -<% html_title @status %> +

    <%=h @status %>

    + +

    <%=h @message %>

    +

    Back

    + +<% html_title @status %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/context_menus/.svn/all-wcprops --- a/app/views/context_menus/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 48 -/svn/!svn/ver/4409/trunk/app/views/context_menus -END -issues.html.erb -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/4409/trunk/app/views/context_menus/issues.html.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/context_menus/.svn/entries --- a/app/views/context_menus/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/context_menus/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/context_menus +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/context_menus http://redmine.rubyforge.org/svn -2010-11-16T19:49:08.085592Z -4409 +2011-04-17T15:17:18.418900Z +5495 jplang @@ -26,16 +26,50 @@ e93f8b46-1217-0410-a6f0-8f06a7374b81 +time_entries.html.erb +file + + + + +2011-06-06T13:18:33.000000Z +d021ca3ed499dc32afd907dfd0529b38 +2011-04-04T11:54:47.184431Z +5316 +tmaruyama + + + + + + + + + + + + + + + + + + + + + +1879 + issues.html.erb file -2010-11-19T13:04:47.016806Z -1a873e0d09f011b6b274e955460d35a1 -2010-11-16T19:49:08.085592Z -4409 +2011-07-14T09:24:21.000000Z +71478da35c13199e1b5b3f0a2a33168f +2011-04-17T15:17:18.418900Z +5495 jplang has-props @@ -58,5 +92,5 @@ -6698 +6706 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/context_menus/.svn/text-base/issues.html.erb.svn-base --- a/app/views/context_menus/.svn/text-base/issues.html.erb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/context_menus/.svn/text-base/issues.html.erb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -115,7 +115,7 @@
  • <%= context_menu_link l(:button_move), new_issue_move_path(:ids => @issues.collect(&:id)), :class => 'icon-move', :disabled => !@can[:move] %>
  • <%= context_menu_link l(:button_delete), {:controller => 'issues', :action => 'destroy', :ids => @issues.collect(&:id), :back_url => @back}, - :method => :post, :confirm => l(:text_issues_destroy_confirmation), :class => 'icon-del', :disabled => !@can[:delete] %>
  • + :method => :post, :confirm => issues_destroy_confirmation_message(@issues), :class => 'icon-del', :disabled => !@can[:delete] %> <%= call_hook(:view_issues_context_menu_end, {:issues => @issues, :can => @can, :back => @back }) %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/context_menus/issues.html.erb --- a/app/views/context_menus/issues.html.erb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/context_menus/issues.html.erb Mon Jul 25 14:23:37 2011 +0100 @@ -115,7 +115,7 @@
  • <%= context_menu_link l(:button_move), new_issue_move_path(:ids => @issues.collect(&:id)), :class => 'icon-move', :disabled => !@can[:move] %>
  • <%= context_menu_link l(:button_delete), {:controller => 'issues', :action => 'destroy', :ids => @issues.collect(&:id), :back_url => @back}, - :method => :post, :confirm => l(:text_issues_destroy_confirmation), :class => 'icon-del', :disabled => !@can[:delete] %>
  • + :method => :post, :confirm => issues_destroy_confirmation_message(@issues), :class => 'icon-del', :disabled => !@can[:delete] %> <%= call_hook(:view_issues_context_menu_end, {:issues => @issues, :can => @can, :back => @back }) %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/context_menus/time_entries.html.erb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/context_menus/time_entries.html.erb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,33 @@ +
      + <% if !@time_entry.nil? -%> +
    • <%= context_menu_link l(:button_edit), {:controller => 'timelog', :action => 'edit', :id => @time_entry}, + :class => 'icon-edit', :disabled => !@can[:edit] %>
    • + <% else %> +
    • <%= context_menu_link l(:button_edit), {:controller => 'timelog', :action => 'bulk_edit', :ids => @time_entries.collect(&:id)}, + :class => 'icon-edit', :disabled => !@can[:edit] %>
    • + <% end %> + + <%= call_hook(:view_time_entries_context_menu_start, {:time_entries => @time_entries, :can => @can, :back => @back }) %> + + <% if @activities.present? -%> +
    • + <%= l(:field_activity) %> +
        + <% @activities.each do |u| -%> +
      • <%= context_menu_link u.name, {:controller => 'timelog', :action => 'bulk_edit', :ids => @time_entries.collect(&:id), :time_entry => {'activity_id' => u}, :back_url => @back}, :method => :post, + :selected => (@time_entry && u == @time_entry.activity), :disabled => !@can[:update] %>
      • + <% end -%> +
      • <%= context_menu_link l(:label_nobody), {:controller => 'timelog', :action => 'bulk_edit', :ids => @time_entries.collect(&:id), :time_entry => {'activity_id' => 'none'}, :back_url => @back}, :method => :post, + :selected => (@time_entry && @time_entry.activity.nil?), :disabled => !@can[:update] %>
      • +
      +
    • + <% end %> + + <%= call_hook(:view_time_entries_context_menu_end, {:time_entries => @time_entries, :can => @can, :back => @back }) %> + +
    • + <%= context_menu_link l(:button_delete), + {:controller => 'timelog', :action => 'destroy', :ids => @time_entries.collect(&:id), :back_url => @back}, + :method => :delete, :confirm => l(:text_time_entries_destroy_confirmation), :class => 'icon-del', :disabled => !@can[:delete] %> +
    • +
    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/custom_fields/.svn/all-wcprops --- a/app/views/custom_fields/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/custom_fields/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,35 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 48 -/svn/!svn/ver/4382/trunk/app/views/custom_fields +V 62 +/svn/!svn/ver/5878/branches/1.2-stable/app/views/custom_fields END -_form.rhtml -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/4382/trunk/app/views/custom_fields/_form.rhtml -END -edit.rhtml -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/3144/trunk/app/views/custom_fields/edit.rhtml -END -_index.rhtml -K 25 -svn:wc:ra_dav:version-url -V 61 -/svn/!svn/ver/3672/trunk/app/views/custom_fields/_index.rhtml -END -index.rhtml -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/2871/trunk/app/views/custom_fields/index.rhtml -END -new.rhtml -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/3144/trunk/app/views/custom_fields/new.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/custom_fields/.svn/entries --- a/app/views/custom_fields/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/custom_fields/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/custom_fields +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/custom_fields http://redmine.rubyforge.org/svn -2010-11-07T14:15:01.891476Z -4382 +2011-04-01T13:44:58.700463Z +5272 jplang @@ -32,10 +32,10 @@ -2010-11-19T13:04:48.192856Z -7c1accc3dd22bd872e2e9b6a7f02a5c2 -2010-11-07T14:15:01.891476Z -4382 +2011-07-14T09:24:21.000000Z +a4379295fd24c6f633dc6f53e755c63a +2011-04-01T13:44:58.700463Z +5272 jplang has-props @@ -58,7 +58,7 @@ -3960 +4190 edit.rhtml file @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.527783Z +2011-07-14T09:24:09.000000Z 0c149f63c965988c70ecf48bde3222b3 2009-12-09T10:49:58.529326Z 3144 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.527783Z +2011-07-14T09:24:09.000000Z 3372a4aeafa9f940744f07c4ce8ca434 2010-04-16T15:33:49.924704Z 3672 @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.527783Z +2011-07-14T09:24:09.000000Z 6441c559d374310cabfc9649eb5b3617 2009-09-12T09:13:13.676884Z 2871 @@ -168,7 +168,7 @@ -2010-09-23T14:37:44.527783Z +2011-07-14T09:24:09.000000Z 7658107f6af4536cedfc075202ad3f7c 2009-12-09T10:49:58.529326Z 3144 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/custom_fields/.svn/text-base/_form.rhtml.svn-base --- a/app/views/custom_fields/.svn/text-base/_form.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/custom_fields/.svn/text-base/_form.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -18,33 +18,41 @@ Element.hide(p_length.parentNode); Element.hide(p_regexp.parentNode); if (p_searchable) Element.show(p_searchable.parentNode); - Element.show(p_values); + Element.show(p_values.parentNode); break; case "bool": p_default.setAttribute('type','checkbox'); Element.hide(p_length.parentNode); Element.hide(p_regexp.parentNode); if (p_searchable) Element.hide(p_searchable.parentNode); - Element.hide(p_values); + Element.hide(p_values.parentNode); break; case "date": Element.hide(p_length.parentNode); Element.hide(p_regexp.parentNode); if (p_searchable) Element.hide(p_searchable.parentNode); - Element.hide(p_values); + Element.hide(p_values.parentNode); break; case "float": case "int": Element.show(p_length.parentNode); Element.show(p_regexp.parentNode); if (p_searchable) Element.hide(p_searchable.parentNode); - Element.hide(p_values); + Element.hide(p_values.parentNode); break; + case "user": + case "version": + Element.hide(p_length.parentNode); + Element.hide(p_regexp.parentNode); + if (p_searchable) Element.hide(p_searchable.parentNode); + Element.hide(p_values.parentNode); + Element.hide(p_default.parentNode); + break; default: Element.show(p_length.parentNode); Element.show(p_regexp.parentNode); if (p_searchable) Element.show(p_searchable.parentNode); - Element.hide(p_values); + Element.hide(p_values.parentNode); break; } } @@ -54,16 +62,16 @@

    <%= f.text_field :name, :required => true %>

    -

    <%= f.select :field_format, custom_field_formats_for_select, {}, :onchange => "toggle_custom_field_format();", +

    <%= f.select :field_format, custom_field_formats_for_select(@custom_field), {}, :onchange => "toggle_custom_field_format();", :disabled => !@custom_field.new_record? %>

    <%= f.text_field :min_length, :size => 5, :no_label => true %> - <%= f.text_field :max_length, :size => 5, :no_label => true %>
    (<%=l(:text_min_max_length_info)%>)

    <%= f.text_field :regexp, :size => 50 %>
    (<%=l(:text_regexp_info)%>)

    -

    <%= f.text_area :possible_values, :value => @custom_field.possible_values.to_a.join("\n"), - :cols => 20, - :rows => 15 %> -
    <%= l(:text_custom_field_possible_values_info) %>

    +

    + <%= f.text_area :possible_values, :value => @custom_field.possible_values.to_a.join("\n"), :rows => 15 %> +
    <%= l(:text_custom_field_possible_values_info) %> +

    <%= @custom_field.field_format == 'bool' ? f.check_box(:default_value) : f.text_field(:default_value) %>

    <%= call_hook(:view_custom_fields_form_upper_box, :custom_field => @custom_field, :form => f) %>
    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/custom_fields/_form.rhtml --- a/app/views/custom_fields/_form.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/custom_fields/_form.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -18,33 +18,41 @@ Element.hide(p_length.parentNode); Element.hide(p_regexp.parentNode); if (p_searchable) Element.show(p_searchable.parentNode); - Element.show(p_values); + Element.show(p_values.parentNode); break; case "bool": p_default.setAttribute('type','checkbox'); Element.hide(p_length.parentNode); Element.hide(p_regexp.parentNode); if (p_searchable) Element.hide(p_searchable.parentNode); - Element.hide(p_values); + Element.hide(p_values.parentNode); break; case "date": Element.hide(p_length.parentNode); Element.hide(p_regexp.parentNode); if (p_searchable) Element.hide(p_searchable.parentNode); - Element.hide(p_values); + Element.hide(p_values.parentNode); break; case "float": case "int": Element.show(p_length.parentNode); Element.show(p_regexp.parentNode); if (p_searchable) Element.hide(p_searchable.parentNode); - Element.hide(p_values); + Element.hide(p_values.parentNode); break; + case "user": + case "version": + Element.hide(p_length.parentNode); + Element.hide(p_regexp.parentNode); + if (p_searchable) Element.hide(p_searchable.parentNode); + Element.hide(p_values.parentNode); + Element.hide(p_default.parentNode); + break; default: Element.show(p_length.parentNode); Element.show(p_regexp.parentNode); if (p_searchable) Element.show(p_searchable.parentNode); - Element.hide(p_values); + Element.hide(p_values.parentNode); break; } } @@ -54,16 +62,16 @@

    <%= f.text_field :name, :required => true %>

    -

    <%= f.select :field_format, custom_field_formats_for_select, {}, :onchange => "toggle_custom_field_format();", +

    <%= f.select :field_format, custom_field_formats_for_select(@custom_field), {}, :onchange => "toggle_custom_field_format();", :disabled => !@custom_field.new_record? %>

    <%= f.text_field :min_length, :size => 5, :no_label => true %> - <%= f.text_field :max_length, :size => 5, :no_label => true %>
    (<%=l(:text_min_max_length_info)%>)

    <%= f.text_field :regexp, :size => 50 %>
    (<%=l(:text_regexp_info)%>)

    -

    <%= f.text_area :possible_values, :value => @custom_field.possible_values.to_a.join("\n"), - :cols => 20, - :rows => 15 %> -
    <%= l(:text_custom_field_possible_values_info) %>

    +

    + <%= f.text_area :possible_values, :value => @custom_field.possible_values.to_a.join("\n"), :rows => 15 %> +
    <%= l(:text_custom_field_possible_values_info) %> +

    <%= @custom_field.field_format == 'bool' ? f.check_box(:default_value) : f.text_field(:default_value) %>

    <%= call_hook(:view_custom_fields_form_upper_box, :custom_field => @custom_field, :form => f) %>
    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/documents/.svn/all-wcprops --- a/app/views/documents/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 44 -/svn/!svn/ver/3603/trunk/app/views/documents -END -_document.rhtml -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/3602/trunk/app/views/documents/_document.rhtml -END -show.rhtml -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/3603/trunk/app/views/documents/show.rhtml -END -_form.rhtml -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/2777/trunk/app/views/documents/_form.rhtml -END -edit.rhtml -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/333/trunk/app/views/documents/edit.rhtml -END -index.rhtml -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/2295/trunk/app/views/documents/index.rhtml -END -new.rhtml -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/1180/trunk/app/views/documents/new.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/documents/.svn/entries --- a/app/views/documents/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/documents/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/documents +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/documents http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.531783Z +2011-07-14T09:24:09.000000Z 755690362ea0b5f92a82326872d3b0ea 2010-03-18T20:02:17.358992Z 3602 @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.535729Z +2011-07-14T09:24:09.000000Z a7c10b428fb4d74827a6ffdcc3651a25 2010-03-18T20:06:16.936785Z 3603 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.535729Z +2011-07-14T09:24:09.000000Z 9d05f76602471c3dc339d8c54d2f4abc 2009-05-30T23:30:36.923541Z 2777 @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.535729Z +2011-07-14T09:24:09.000000Z 41a0e984e939e8fad03f2be67b33a4fc 2007-03-12T17:59:02.654744Z 333 @@ -168,7 +168,7 @@ -2010-09-23T14:37:44.535729Z +2011-07-14T09:24:09.000000Z cf8b8406d31262625c1f2ab2b66020b2 2009-01-22T16:34:54.303755Z 2295 @@ -202,7 +202,7 @@ -2010-09-23T14:37:44.535729Z +2011-07-14T09:24:09.000000Z 60e54f2c42af4454d69bfc812bbf55ca 2008-02-29T19:46:58.834023Z 1180 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/enumerations/.svn/all-wcprops --- a/app/views/enumerations/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 47 -/svn/!svn/ver/3734/trunk/app/views/enumerations -END -list.rhtml -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/3734/trunk/app/views/enumerations/list.rhtml -END -_form.rhtml -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/2946/trunk/app/views/enumerations/_form.rhtml -END -edit.rhtml -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/2810/trunk/app/views/enumerations/edit.rhtml -END -destroy.rhtml -K 25 -svn:wc:ra_dav:version-url -V 61 -/svn/!svn/ver/1558/trunk/app/views/enumerations/destroy.rhtml -END -new.rhtml -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/2810/trunk/app/views/enumerations/new.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/enumerations/.svn/entries --- a/app/views/enumerations/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/enumerations/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/enumerations +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/enumerations http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.539728Z +2011-07-14T09:24:09.000000Z b4f45f24d2fb9546e609fd3299912be6 2010-05-09T11:19:15.980195Z 3734 @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.539728Z +2011-07-14T09:24:09.000000Z 0a47386b406e4f425fe541d12c780467 2009-10-21T22:34:28.905707Z 2946 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.539728Z +2011-07-14T09:24:09.000000Z 668687299206262ccf34ac3a44f57c33 2009-07-05T12:22:02.133266Z 2810 @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.539728Z +2011-07-14T09:24:09.000000Z b9c8a97c172197a30cbb6c08000a9fa7 2008-06-17T19:10:54.015252Z 1558 @@ -168,7 +168,7 @@ -2010-09-23T14:37:44.539728Z +2011-07-14T09:24:09.000000Z e6eaade1aac54267080f56f5a09d3fd1 2009-07-05T12:22:02.133266Z 2810 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/files/.svn/all-wcprops --- a/app/views/files/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 40 -/svn/!svn/ver/4268/trunk/app/views/files -END -index.html.erb -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/4268/trunk/app/views/files/index.html.erb -END -new.html.erb -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/4085/trunk/app/views/files/new.html.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/files/.svn/entries --- a/app/views/files/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/files/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/files +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/files http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-11-19T13:04:49.392852Z +2011-07-14T09:24:09.000000Z 05986f09d13424caeb68601c7c9ff16b 2010-10-22T14:45:02.987126Z 4268 @@ -66,7 +66,7 @@ -2010-09-24T12:48:27.722352Z +2011-07-14T09:24:09.000000Z 7cd15d28fd27afa1f10b921c8b35cd7a 2010-09-14T16:24:07.840869Z 4085 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/gantts/.svn/all-wcprops --- a/app/views/gantts/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/gantts/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,11 +1,11 @@ K 25 svn:wc:ra_dav:version-url V 41 -/svn/!svn/ver/4283/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/4283/trunk/app/views/gantts/show.html.erb +/svn/!svn/ver/4913/trunk/app/views/gantts/show.html.erb END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/gantts/.svn/entries --- a/app/views/gantts/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/gantts/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/gantts +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/gantts http://redmine.rubyforge.org/svn -2010-10-23T09:08:55.877887Z -4283 +2011-04-03T14:01:32.419875Z +5301 jplang @@ -32,10 +32,10 @@ -2010-11-19T13:04:49.480864Z -e0ed1c5fd05cd8c8f3f930c443564ebc -2010-10-23T09:08:55.877887Z -4283 +2011-07-14T09:24:21.000000Z +cd7362f337d3c416c33f6033220b22d5 +2011-04-03T14:01:32.419875Z +5301 jplang has-props @@ -58,5 +58,5 @@ -6213 +5863 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/gantts/.svn/text-base/show.html.erb.svn-base --- a/app/views/gantts/.svn/text-base/show.html.erb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/gantts/.svn/text-base/show.html.erb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,11 +1,11 @@ <% @gantt.view = self %> -

    <%= l(:label_gantt) %>

    +

    <%= @query.new_record? ? l(:label_gantt) : h(@query.name) %>

    -<% 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%> -
    +<% form_tag({:controller => 'gantts', :action => 'show', :project_id => @project, :month => params[:month], :year => params[:year], :months => params[:months]}, :method => :get, :id => 'query_form') do %> +<%= hidden_field_tag 'set_filter', '1' %> +
    "> <%= l(:label_filter_plural) %> -
    +
    "> <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
    @@ -22,17 +22,8 @@ <%= select_year(@gantt.year_from, :prefix => "year", :discard_type => true) %> <%= hidden_field_tag 'zoom', @gantt.zoom %> -<%= link_to_remote l(:button_apply), - { :url => { :set_filter => (@query.new_record? ? 1 : nil) }, - :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) }, - :method => :put, - :update => "content", - }, :class => 'icon icon-reload' if @query.new_record? %> +<%= link_to_function l(:button_apply), '$("query_form").submit()', :class => 'icon icon-checked' %> +<%= link_to l(:button_clear), { :project_id => @project, :set_filter => 1 }, :class => 'icon icon-reload' %>

    <% end %> @@ -59,10 +50,19 @@ # Width of the entire chart g_width = (@gantt.date_to - @gantt.date_from + 1)*zoom -# Collect the number of issues on Versions + +@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 + + %> + +<% if @gantt.truncated %> +

    <%= l(:notice_gantt_chart_truncated, :max => @gantt.max_rows) %>

    +<% end %> + @@ -151,9 +152,7 @@ end end %> -<% top = headers_height + 10 %> - -<%= @gantt.lines(:top => top, :zoom => zoom, :g_width => g_width ) %> +<%= @gantt.lines %> <% # @@ -170,14 +169,14 @@
    @@ -70,9 +70,10 @@
    -<% top = headers_height + 8 %> -<%= @gantt.subjects(:headers_height => headers_height, :top => top, :g_width => g_width) %> +
    +<%= @gantt.subjects %> +
    - - + +
    <%= link_to_remote ('« ' + l(:label_previous)), {:url => @gantt.params_previous, :method => :get, :update => 'content', :complete => 'window.scrollTo(0,0)'}, {:href => url_for(@gantt.params_previous)} %><%= link_to_remote (l(:label_next) + ' »'), {:url => @gantt.params_next, :method => :get, :update => 'content', :complete => 'window.scrollTo(0,0)'}, {:href => url_for(@gantt.params_next)} %><%= link_to_content_update('« ' + l(:label_previous), params.merge(@gantt.params_previous)) %><%= link_to_content_update(l(:label_next) + ' »', params.merge(@gantt.params_next)) %>
    <% other_formats_links do |f| %> - <%= f.link_to 'PDF', :url => @gantt.params %> - <%= f.link_to('PNG', :url => @gantt.params) if @gantt.respond_to?('to_image') %> + <%= f.link_to 'PDF', :url => params.merge(@gantt.params) %> + <%= f.link_to('PNG', :url => params.merge(@gantt.params)) if @gantt.respond_to?('to_image') %> <% end %> <% end # query.valid? %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/gantts/show.html.erb --- a/app/views/gantts/show.html.erb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/gantts/show.html.erb Mon Jul 25 14:23:37 2011 +0100 @@ -1,11 +1,11 @@ <% @gantt.view = self %> -

    <%= l(:label_gantt) %>

    +

    <%= @query.new_record? ? l(:label_gantt) : h(@query.name) %>

    -<% 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%> -
    +<% form_tag({:controller => 'gantts', :action => 'show', :project_id => @project, :month => params[:month], :year => params[:year], :months => params[:months]}, :method => :get, :id => 'query_form') do %> +<%= hidden_field_tag 'set_filter', '1' %> +
    "> <%= l(:label_filter_plural) %> -
    +
    "> <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
    @@ -22,17 +22,8 @@ <%= select_year(@gantt.year_from, :prefix => "year", :discard_type => true) %> <%= hidden_field_tag 'zoom', @gantt.zoom %> -<%= link_to_remote l(:button_apply), - { :url => { :set_filter => (@query.new_record? ? 1 : nil) }, - :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) }, - :method => :put, - :update => "content", - }, :class => 'icon icon-reload' if @query.new_record? %> +<%= link_to_function l(:button_apply), '$("query_form").submit()', :class => 'icon icon-checked' %> +<%= link_to l(:button_clear), { :project_id => @project, :set_filter => 1 }, :class => 'icon icon-reload' %>

    <% end %> @@ -59,10 +50,19 @@ # Width of the entire chart g_width = (@gantt.date_to - @gantt.date_from + 1)*zoom -# Collect the number of issues on Versions + +@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 + + %> + +<% if @gantt.truncated %> +

    <%= l(:notice_gantt_chart_truncated, :max => @gantt.max_rows) %>

    +<% end %> + @@ -151,9 +152,7 @@ end end %> -<% top = headers_height + 10 %> - -<%= @gantt.lines(:top => top, :zoom => zoom, :g_width => g_width ) %> +<%= @gantt.lines %> <% # @@ -170,14 +169,14 @@
    @@ -70,9 +70,10 @@
    -<% top = headers_height + 8 %> -<%= @gantt.subjects(:headers_height => headers_height, :top => top, :g_width => g_width) %> +
    +<%= @gantt.subjects %> +
    - - + +
    <%= link_to_remote ('« ' + l(:label_previous)), {:url => @gantt.params_previous, :method => :get, :update => 'content', :complete => 'window.scrollTo(0,0)'}, {:href => url_for(@gantt.params_previous)} %><%= link_to_remote (l(:label_next) + ' »'), {:url => @gantt.params_next, :method => :get, :update => 'content', :complete => 'window.scrollTo(0,0)'}, {:href => url_for(@gantt.params_next)} %><%= link_to_content_update('« ' + l(:label_previous), params.merge(@gantt.params_previous)) %><%= link_to_content_update(l(:label_next) + ' »', params.merge(@gantt.params_next)) %>
    <% other_formats_links do |f| %> - <%= f.link_to 'PDF', :url => @gantt.params %> - <%= f.link_to('PNG', :url => @gantt.params) if @gantt.respond_to?('to_image') %> + <%= f.link_to 'PDF', :url => params.merge(@gantt.params) %> + <%= f.link_to('PNG', :url => params.merge(@gantt.params)) if @gantt.respond_to?('to_image') %> <% end %> <% end # query.valid? %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/groups/.svn/all-wcprops --- a/app/views/groups/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/groups/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,59 +1,5 @@ -K 25 -svn:wc:ra_dav:version-url -V 41 -/svn/!svn/ver/4312/trunk/app/views/groups -END -autocomplete_for_user.html.erb -K 25 -svn:wc:ra_dav:version-url -V 72 -/svn/!svn/ver/2869/trunk/app/views/groups/autocomplete_for_user.html.erb -END -edit.html.erb K 25 svn:wc:ra_dav:version-url V 55 -/svn/!svn/ver/2871/trunk/app/views/groups/edit.html.erb +/svn/!svn/ver/5878/branches/1.2-stable/app/views/groups END -index.html.erb -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/2869/trunk/app/views/groups/index.html.erb -END -new.html.erb -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/3375/trunk/app/views/groups/new.html.erb -END -_general.html.erb -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/2879/trunk/app/views/groups/_general.html.erb -END -_memberships.html.erb -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/3734/trunk/app/views/groups/_memberships.html.erb -END -_users.html.erb -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/4312/trunk/app/views/groups/_users.html.erb -END -show.html.erb -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/2869/trunk/app/views/groups/show.html.erb -END -_form.html.erb -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/2869/trunk/app/views/groups/_form.html.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/groups/.svn/entries --- a/app/views/groups/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/groups/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/groups +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/groups http://redmine.rubyforge.org/svn -2010-10-30T16:47:33.260585Z -4312 -jbbarth +2011-04-01T16:47:30.350690Z +5284 +jplang @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.547775Z +2011-07-14T09:24:09.000000Z 8798190a9ed51cd47a32f7fa3b14962b 2009-09-11T21:11:20.141433Z 2864 @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.547775Z +2011-07-14T09:24:09.000000Z 77b68adb1216f00c034d0afa77a50bff 2009-09-12T09:13:13.676884Z 2871 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.547775Z +2011-07-14T09:24:09.000000Z 61731ddfe926e25ea2108a99a7dc594d 2009-07-05T11:38:40.659710Z 2807 @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.547775Z +2011-07-14T09:24:09.000000Z f122118621575d0b74331d392b4aba4b 2010-02-06T13:26:29.318273Z 3375 @@ -168,7 +168,7 @@ -2010-09-23T14:37:44.547775Z +2011-07-14T09:24:09.000000Z 5fc442e9118fe012a7d4049daa4d68b4 2009-09-12T16:12:42.876344Z 2879 @@ -202,7 +202,7 @@ -2010-09-23T14:37:44.547775Z +2011-07-14T09:24:09.000000Z 5f484ae9be041e266944cc2710caa394 2010-05-09T11:19:15.980195Z 3734 @@ -236,11 +236,11 @@ -2010-11-19T13:04:49.444940Z -7738dc0db4c4ad48e82613829c1e991a -2010-10-30T16:47:33.260585Z -4312 -jbbarth +2011-07-14T09:24:21.000000Z +9578abaa4df41ed89c0663dcbd1ed17c +2011-04-01T16:47:30.350690Z +5284 +jplang has-props @@ -262,7 +262,7 @@ -1625 +1624 show.html.erb file @@ -270,7 +270,7 @@ -2010-09-23T14:37:44.547775Z +2011-07-14T09:24:09.000000Z ee1e9b07710ccd0b0dee7791dddc93bb 2009-07-05T13:54:34.821434Z 2812 @@ -304,7 +304,7 @@ -2010-09-23T14:37:44.547775Z +2011-07-14T09:24:09.000000Z 09eeec211f50994f28b31bcff9be43ef 2009-09-05T11:19:00.617770Z 2858 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/groups/.svn/text-base/_users.html.erb.svn-base --- a/app/views/groups/.svn/text-base/_users.html.erb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/groups/.svn/text-base/_users.html.erb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -24,7 +24,7 @@
    -<% users = User.active.find(:all, :limit => 100) - @group.users %> +<% users = User.active.not_in_group(@group).all(:limit => 100) %> <% if users.any? %> <% remote_form_for(:group, @group, :url => {:controller => 'groups', :action => 'add_users', :id => @group}, :method => :post) do |f| %>
    <%=l(:label_user_new)%> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/groups/_users.html.erb --- a/app/views/groups/_users.html.erb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/groups/_users.html.erb Mon Jul 25 14:23:37 2011 +0100 @@ -24,7 +24,7 @@
    -<% users = User.active.find(:all, :limit => 100) - @group.users %> +<% users = User.active.not_in_group(@group).all(:limit => 100) %> <% if users.any? %> <% remote_form_for(:group, @group, :url => {:controller => 'groups', :action => 'add_users', :id => @group}, :method => :post) do |f| %>
    <%=l(:label_user_new)%> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issue_categories/.svn/all-wcprops --- a/app/views/issue_categories/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/4385/trunk/app/views/issue_categories -END -new.html.erb -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/3549/trunk/app/views/issue_categories/new.html.erb -END -_form.rhtml -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/4385/trunk/app/views/issue_categories/_form.rhtml -END -edit.rhtml -K 25 -svn:wc:ra_dav:version-url -V 61 -/svn/!svn/ver/725/trunk/app/views/issue_categories/edit.rhtml -END -destroy.rhtml -K 25 -svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/1182/trunk/app/views/issue_categories/destroy.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issue_categories/.svn/entries --- a/app/views/issue_categories/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issue_categories/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/issue_categories +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/issue_categories http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.551784Z +2011-07-14T09:24:09.000000Z 61ef938e10897a71008d145439614aa8 2010-03-06T18:43:00.594668Z 3549 @@ -66,7 +66,7 @@ -2010-11-19T13:04:49.476971Z +2011-07-14T09:24:09.000000Z e0d28729320423a7b8fcb6309b58de9a 2010-11-07T14:56:12.614499Z 4385 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.551784Z +2011-07-14T09:24:09.000000Z fc3f04670edce3c08e645d254198a89c 2007-09-14T11:34:08.234701Z 725 @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.551784Z +2011-07-14T09:24:09.000000Z f7b34c60cf2f117d3c53be7b0840fe28 2008-02-29T22:54:07.325361Z 1182 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issue_moves/.svn/all-wcprops --- a/app/views/issue_moves/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issue_moves/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,11 +1,11 @@ K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4292/trunk/app/views/issue_moves +/svn/!svn/ver/4583/trunk/app/views/issue_moves END new.rhtml K 25 svn:wc:ra_dav:version-url V 56 -/svn/!svn/ver/4292/trunk/app/views/issue_moves/new.rhtml +/svn/!svn/ver/4583/trunk/app/views/issue_moves/new.rhtml END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issue_moves/.svn/entries --- a/app/views/issue_moves/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issue_moves/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/issue_moves +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/issue_moves http://redmine.rubyforge.org/svn -2010-10-25T18:44:46.868009Z -4292 -edavis10 +2011-04-12T19:22:44.432354Z +5443 +jplang @@ -32,11 +32,11 @@ -2010-11-19T13:04:48.788846Z -1ad6c5f00ec9a5a7509125da416b0b07 -2010-10-25T18:44:46.868009Z -4292 -edavis10 +2011-07-14T09:24:21.000000Z +1adceabf61b6f698270cbf4b97c42a83 +2011-04-12T19:22:44.432354Z +5443 +jplang has-props @@ -58,5 +58,5 @@ -2701 +2946 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issue_moves/.svn/text-base/new.rhtml.svn-base --- a/app/views/issue_moves/.svn/text-base/new.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issue_moves/.svn/text-base/new.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -10,6 +10,10 @@ <%= @issues.collect {|i| hidden_field_tag('ids[]', i.id)}.join %>
    +
    +<%= l(:label_change_properties) %> + +

    <%= select_tag "new_project_id", project_tree_options_for_select(@allowed_projects, :selected => @target_project), @@ -22,13 +26,6 @@ <%= select_tag "new_tracker_id", "" + options_from_collection_for_select(@trackers, "id", "name") %>

    - - <%= select_tag('assigned_to_id', content_tag('option', l(:label_no_change_option), :value => '') + - content_tag('option', l(:label_nobody), :value => 'none') + - options_from_collection_for_select(@target_project.assignable_users, :id, :name)) %> -

    - -

    <%= select_tag('status_id', "" + options_from_collection_for_select(@available_statuses, :id, :name)) %>

    @@ -39,6 +36,15 @@

    + + <%= select_tag('assigned_to_id', content_tag('option', l(:label_no_change_option), :value => '') + + content_tag('option', l(:label_nobody), :value => 'none') + + options_from_collection_for_select(@target_project.assignable_users, :id, :name)) %> +

    +
    + +
    +

    <%= text_field_tag 'start_date', '', :size => 10 %><%= calendar_for('start_date') %>

    @@ -47,6 +53,9 @@ <%= text_field_tag 'due_date', '', :size => 10 %><%= calendar_for('due_date') %>

    +
    + +
    <%= l(:field_notes) %> <%= text_area_tag 'notes', @notes, :cols => 60, :rows => 10, :class => 'wiki-edit' %> @@ -65,3 +74,6 @@ <%= submit_tag l(:button_move_and_follow), :name => 'follow' %> <% end %> <% end %> +<% content_for :header_tags do %> + <%= robot_exclusion_tag %> +<% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issue_moves/new.rhtml --- a/app/views/issue_moves/new.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issue_moves/new.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -10,6 +10,10 @@ <%= @issues.collect {|i| hidden_field_tag('ids[]', i.id)}.join %>
    +
    +<%= l(:label_change_properties) %> + +

    <%= select_tag "new_project_id", project_tree_options_for_select(@allowed_projects, :selected => @target_project), @@ -22,13 +26,6 @@ <%= select_tag "new_tracker_id", "" + options_from_collection_for_select(@trackers, "id", "name") %>

    - - <%= select_tag('assigned_to_id', content_tag('option', l(:label_no_change_option), :value => '') + - content_tag('option', l(:label_nobody), :value => 'none') + - options_from_collection_for_select(@target_project.assignable_users, :id, :name)) %> -

    - -

    <%= select_tag('status_id', "" + options_from_collection_for_select(@available_statuses, :id, :name)) %>

    @@ -39,6 +36,15 @@

    + + <%= select_tag('assigned_to_id', content_tag('option', l(:label_no_change_option), :value => '') + + content_tag('option', l(:label_nobody), :value => 'none') + + options_from_collection_for_select(@target_project.assignable_users, :id, :name)) %> +

    +
    + +
    +

    <%= text_field_tag 'start_date', '', :size => 10 %><%= calendar_for('start_date') %>

    @@ -47,6 +53,9 @@ <%= text_field_tag 'due_date', '', :size => 10 %><%= calendar_for('due_date') %>

    +
    + +
    <%= l(:field_notes) %> <%= text_area_tag 'notes', @notes, :cols => 60, :rows => 10, :class => 'wiki-edit' %> @@ -65,3 +74,6 @@ <%= submit_tag l(:button_move_and_follow), :name => 'follow' %> <% end %> <% end %> +<% content_for :header_tags do %> + <%= robot_exclusion_tag %> +<% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issue_relations/.svn/all-wcprops --- a/app/views/issue_relations/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issue_relations/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,11 +1,11 @@ K 25 svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/747/trunk/app/views/issue_relations +V 50 +/svn/!svn/ver/4502/trunk/app/views/issue_relations END _form.rhtml K 25 svn:wc:ra_dav:version-url -V 61 -/svn/!svn/ver/747/trunk/app/views/issue_relations/_form.rhtml +V 62 +/svn/!svn/ver/4502/trunk/app/views/issue_relations/_form.rhtml END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issue_relations/.svn/entries --- a/app/views/issue_relations/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issue_relations/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/issue_relations +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/issue_relations http://redmine.rubyforge.org/svn -2007-09-22T13:17:49.935719Z -747 +2010-12-12T16:04:28.950669Z +4502 jplang @@ -32,10 +32,10 @@ -2010-09-23T14:37:44.555783Z -36d83be727a082a187650a3604005824 -2007-09-22T13:17:49.935719Z -747 +2011-07-14T09:24:09.000000Z +7024ae266ddb4d218d7c24c3b17fa790 +2010-12-12T16:04:28.950669Z +4502 jplang has-props @@ -58,5 +58,5 @@ -538 +724 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issue_relations/.svn/text-base/_form.rhtml.svn-base --- a/app/views/issue_relations/.svn/text-base/_form.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issue_relations/.svn/text-base/_form.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,7 +1,9 @@ <%= error_messages_for 'relation' %>

    <%= f.select :relation_type, collection_for_relation_type_select, {}, :onchange => "setPredecessorFieldsVisibility();" %> -<%= l(:label_issue) %> #<%= f.text_field :issue_to_id, :size => 6 %> +<%= l(:label_issue) %> #<%= f.text_field :issue_to_id, :size => 10 %> +

    +<%= javascript_tag "observeRelatedIssueField('#{auto_complete_issues_path(:id => @issue, :project_id => @project) }')" %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issue_relations/_form.rhtml --- a/app/views/issue_relations/_form.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issue_relations/_form.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -1,7 +1,9 @@ <%= error_messages_for 'relation' %>

    <%= f.select :relation_type, collection_for_relation_type_select, {}, :onchange => "setPredecessorFieldsVisibility();" %> -<%= l(:label_issue) %> #<%= f.text_field :issue_to_id, :size => 6 %> +<%= l(:label_issue) %> #<%= f.text_field :issue_to_id, :size => 10 %> +

    +<%= javascript_tag "observeRelatedIssueField('#{auto_complete_issues_path(:id => @issue, :project_id => @project) }')" %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issue_statuses/.svn/all-wcprops --- a/app/views/issue_statuses/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/3600/trunk/app/views/issue_statuses -END -index.html.erb -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/3600/trunk/app/views/issue_statuses/index.html.erb -END -_form.rhtml -K 25 -svn:wc:ra_dav:version-url -V 61 -/svn/!svn/ver/3157/trunk/app/views/issue_statuses/_form.rhtml -END -edit.rhtml -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/2810/trunk/app/views/issue_statuses/edit.rhtml -END -new.rhtml -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/2810/trunk/app/views/issue_statuses/new.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issue_statuses/.svn/entries --- a/app/views/issue_statuses/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issue_statuses/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/issue_statuses +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/issue_statuses http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.559788Z +2011-07-14T09:24:09.000000Z 2d8b318bb1dbbe6dbb478716d52e65e9 2010-03-17T20:46:22.413470Z 3600 @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.559788Z +2011-07-14T09:24:09.000000Z e4ea04eeab7c1f7265858a9dd09f1b7b 2009-12-12T10:33:12.138303Z 3157 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.559788Z +2011-07-14T09:24:09.000000Z 21f8b2f134a83413d09ae7e4d004c642 2009-07-05T12:22:02.133266Z 2810 @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.559788Z +2011-07-14T09:24:09.000000Z af751ca552f43d9954a0cb1bbdb6e362 2009-07-05T12:22:02.133266Z 2810 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/.svn/all-wcprops --- a/app/views/issues/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,125 +1,5 @@ -K 25 -svn:wc:ra_dav:version-url -V 41 -/svn/!svn/ver/4311/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 -END -_history.rhtml -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/4062/trunk/app/views/issues/_history.rhtml -END -_action_menu.rhtml -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/4258/trunk/app/views/issues/_action_menu.rhtml -END -bulk_edit.rhtml -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/4242/trunk/app/views/issues/bulk_edit.rhtml -END -_form.rhtml -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/4311/trunk/app/views/issues/_form.rhtml -END -_form_update.rhtml -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/3151/trunk/app/views/issues/_form_update.rhtml -END -index.xml.builder -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/3671/trunk/app/views/issues/index.xml.builder -END -index.rhtml -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/4093/trunk/app/views/issues/index.rhtml -END -_sidebar.rhtml -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/4012/trunk/app/views/issues/_sidebar.rhtml -END -_list.rhtml -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/4056/trunk/app/views/issues/_list.rhtml -END -show.xml.builder -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/3729/trunk/app/views/issues/show.xml.builder -END -show.rhtml -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/4264/trunk/app/views/issues/show.rhtml -END -_form_custom_fields.rhtml -K 25 -svn:wc:ra_dav:version-url -V 67 -/svn/!svn/ver/2827/trunk/app/views/issues/_form_custom_fields.rhtml -END -_list_simple.rhtml -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/3924/trunk/app/views/issues/_list_simple.rhtml -END -_changesets.rhtml -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/3898/trunk/app/views/issues/_changesets.rhtml -END -_edit.rhtml -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/3946/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 -destroy.rhtml K 25 svn:wc:ra_dav:version-url V 55 -/svn/!svn/ver/2685/trunk/app/views/issues/destroy.rhtml +/svn/!svn/ver/5878/branches/1.2-stable/app/views/issues END -new.rhtml -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/4311/trunk/app/views/issues/new.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/.svn/entries --- a/app/views/issues/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/issues +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/issues http://redmine.rubyforge.org/svn -2010-10-30T16:15:31.867344Z -4311 -jbbarth +2011-04-17T15:17:18.418900Z +5495 +jplang @@ -32,11 +32,11 @@ -2010-09-24T12:48:29.596042Z -4659150afe6ae87105eaa29894e4d488 -2010-09-06T00:48:44.764418Z -4065 -edavis10 +2011-07-14T09:24:21.000000Z +c18fc1bae24038d3386be81993a37678 +2011-04-12T19:37:56.793879Z +5444 +jplang has-props @@ -58,7 +58,7 @@ -1816 +2023 _action_menu.rhtml file @@ -66,11 +66,11 @@ -2010-11-19T13:04:50.824922Z -74c6e939ebb113c49a367fff0f463f63 -2010-10-15T23:11:05.712143Z -4258 -edavis10 +2011-07-14T09:24:21.000000Z +c7a3bc51851c2b924a4af2ac51c6a22d +2011-04-17T15:17:18.418900Z +5495 +jplang @@ -92,7 +92,7 @@ -1285 +1154 _history.rhtml file @@ -100,11 +100,11 @@ -2010-09-24T12:48:29.596042Z -8d719ade30044f529f104cda9dcdd6f4 -2010-09-05T22:57:20.669640Z -4062 -edavis10 +2011-07-14T09:24:21.000000Z +0c7fe4dc90630a9b92d43aad7ad1db70 +2011-03-28T20:04:48.692581Z +5240 +jplang has-props @@ -126,7 +126,7 @@ -859 +1019 _form.rhtml file @@ -134,11 +134,11 @@ -2010-11-19T13:04:50.824922Z -7c3d2a41291eabbd1c7e28139be69e49 -2010-10-30T16:15:31.867344Z -4311 -jbbarth +2011-07-14T09:24:21.000000Z +7e86b1795a1640748d794c3439ddab1d +2011-04-15T13:23:13.506236Z +5466 +jplang has-props @@ -160,7 +160,7 @@ -2033 +1915 bulk_edit.rhtml file @@ -168,11 +168,11 @@ -2010-11-19T13:04:50.824922Z -b60c0aee0477249fc72d3206e30a8a07 -2010-10-08T03:09:51.863032Z -4242 -jbbarth +2011-07-14T09:24:21.000000Z +5a6cefefd1c00a9d9c0f4ee125cbe147 +2011-04-07T16:34:58.239484Z +5354 +jplang has-props @@ -194,7 +194,7 @@ -3438 +3826 _form_update.rhtml file @@ -202,7 +202,7 @@ -2010-09-23T14:37:44.571741Z +2011-07-14T09:24:09.000000Z 00a1336147a304d10f556a97f7105a83 2009-12-11T18:48:34.197724Z 3151 @@ -230,16 +230,16 @@ 649 -index.xml.builder +index.rhtml file -2010-09-23T14:37:44.575742Z -ed6c218138334e3950cb971252374472 -2010-04-13T17:51:06.988056Z -3671 +2011-07-14T09:24:21.000000Z +dda747decb5c11cd589cd5592a2d5bfa +2011-04-01T14:34:44.070899Z +5276 jplang has-props @@ -262,41 +262,7 @@ -1559 - -index.rhtml -file - - - - -2010-09-24T12:48:29.596042Z -5a8516dceeaac8769ab1780f8e9cccd9 -2010-09-16T21:33:49.399868Z -4093 -jbbarth -has-props - - - - - - - - - - - - - - - - - - - - -4097 +3557 _sidebar.rhtml file @@ -304,11 +270,11 @@ -2010-09-23T14:37:44.571741Z -c2e4e73b27a58d99224ccc2d7f35dc84 -2010-08-22T18:30:26.413363Z -4012 -edavis10 +2011-07-14T09:24:09.000000Z +b9c2ef98cde787dfe8b1b0b4df497613 +2011-02-21T13:34:33.010064Z +4908 +jplang has-props @@ -330,7 +296,7 @@ -1135 +901 _list.rhtml file @@ -338,44 +304,10 @@ -2010-09-24T12:48:29.596042Z -b5bd20e1b16f321b87b14ec6d0b7a9e7 -2010-09-03T19:59:49.465806Z -4056 -jbbarth -has-props - - - - - - - - - - - - - - - - - - - - -1772 - -show.xml.builder -file - - - - -2010-09-23T14:37:44.575742Z -1a197244651b647927c95d8bcbb2b46d -2010-05-01T14:07:36.553776Z -3729 +2011-07-14T09:24:21.000000Z +da2cbff6bc215672172e60589b16c9dd +2011-04-05T22:18:49.170029Z +5332 jplang has-props @@ -398,7 +330,41 @@ -2726 +1918 + +index.api.rsb +file + + + + +2011-07-14T09:24:09.000000Z +db6f5533a330ebdcd1dd5e4c47098024 +2010-12-11T13:13:49.013705Z +4489 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +1467 show.rhtml file @@ -406,10 +372,10 @@ -2010-11-19T13:04:50.824922Z -1f2adc49d35b7299cebfc9aff8152908 -2010-10-19T19:26:07.436051Z -4264 +2011-07-14T09:24:21.000000Z +16879c3e81700c198a7bfac049e25f20 +2011-04-12T19:53:14.178577Z +5447 jplang has-props @@ -432,7 +398,7 @@ -5399 +5420 _form_custom_fields.rhtml file @@ -440,7 +406,7 @@ -2010-09-23T14:37:44.571741Z +2011-07-14T09:24:09.000000Z 5cac68d4655699c1a4ce40ef17da7b0a 2009-07-29T19:04:27.717761Z 2827 @@ -474,11 +440,11 @@ -2010-09-23T14:37:44.571741Z -4c03735a361a24cc60a70975502bace7 -2010-07-29T15:48:53.812065Z -3898 -winterheart +2011-07-14T09:24:21.000000Z +161df5bf4aad48f815ece5d61f73b5bf +2011-04-03T12:33:27.904025Z +5300 +jplang has-props @@ -500,7 +466,7 @@ -509 +457 _list_simple.rhtml file @@ -508,7 +474,7 @@ -2010-09-23T14:37:44.571741Z +2011-07-14T09:24:09.000000Z 334ec8cd87b661a181185092c242c41d 2010-08-08T07:07:20.961363Z 3924 @@ -542,7 +508,7 @@ -2010-09-23T14:37:44.571741Z +2011-07-14T09:24:09.000000Z ebae2e20ea4028620967382b877b5860 2010-08-18T15:01:35.032314Z 3946 @@ -570,50 +536,50 @@ 2768 +edit.rhtml +file + + + + +2011-07-14T09:24:21.000000Z +5b30673e11cba7d16c5d3b9d58ac17c7 +2011-04-12T19:22:44.432354Z +5443 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +165 + _attributes.rhtml file -2010-09-24T12:48:29.599802Z -e2c801f0755567e34186cdbbc510d29d -2010-09-16T18:27:33.887969Z -4090 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -2461 - -edit.rhtml -file - - - - -2010-09-23T14:37:44.575742Z -4b6048de503364b0ef668df08cceb602 -2008-02-09T16:11:18.249226Z -1129 +2011-07-14T09:24:21.000000Z +95ca7e4a068d06c8efedc1c0cc4718d2 +2011-04-11T18:01:25.736617Z +5418 jplang has-props @@ -636,7 +602,41 @@ -90 +2791 + +show.api.rsb +file + + + + +2011-07-14T09:24:09.000000Z +cdb3db6cd78da1f46578c9da61923c4e +2011-01-22T13:28:20.816262Z +4741 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +2808 destroy.rhtml file @@ -644,7 +644,7 @@ -2010-09-23T14:37:44.571741Z +2011-07-14T09:24:09.000000Z b429d0e7dd6b3ef7bc1a28bdf0aeaf34 2009-04-24T17:18:36.117696Z 2685 @@ -678,11 +678,11 @@ -2010-11-19T13:04:50.824922Z -9889d4cce0dfd6d224e85fc1f489c623 -2010-10-30T16:15:31.867344Z -4311 -jbbarth +2011-07-14T09:24:21.000000Z +952a57c3e6f5fc66fde1304569b7eb5d +2011-04-12T19:22:44.432354Z +5443 +jplang has-props @@ -704,5 +704,5 @@ -1154 +1185 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/.svn/prop-base/index.api.rsb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/issues/.svn/prop-base/index.api.rsb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/.svn/prop-base/index.xml.builder.svn-base --- a/app/views/issues/.svn/prop-base/index.xml.builder.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/.svn/prop-base/show.api.rsb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/issues/.svn/prop-base/show.api.rsb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/.svn/prop-base/show.xml.builder.svn-base --- a/app/views/issues/.svn/prop-base/show.xml.builder.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/.svn/text-base/_action_menu.rhtml.svn-base --- a/app/views/issues/.svn/text-base/_action_menu.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/.svn/text-base/_action_menu.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,10 +1,9 @@
    <%= link_to_if_authorized(l(:button_update), {:controller => 'issues', :action => 'edit', :id => @issue }, :onclick => 'showAndScrollTo("update", "notes"); return false;', :class => 'icon icon-edit', :accesskey => accesskey(:edit)) %> <%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'new', :issue_id => @issue}, :class => 'icon icon-time-add' %> -<% replace_watcher ||= 'watcher' %> -<%= watcher_tag(@issue, User.current, {:id => replace_watcher, :replace => ['watcher','watcher2']}) %> +<%= watcher_tag(@issue, User.current) %> <%= link_to_if_authorized l(:button_duplicate), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue }, :class => 'icon icon-duplicate' %> <%= link_to_if_authorized l(:button_copy), {:controller => 'issue_moves', :action => 'new', :id => @issue, :copy_options => {:copy => 't'}}, :class => 'icon icon-copy' %> <%= link_to_if_authorized l(:button_move), {:controller => 'issue_moves', :action => 'new', :id => @issue}, :class => 'icon icon-move' %> -<%= link_to_if_authorized l(:button_delete), {:controller => 'issues', :action => 'destroy', :id => @issue}, :confirm => (@issue.leaf? ? l(:text_are_you_sure) : l(:text_are_you_sure_with_children)), :method => :post, :class => 'icon icon-del' %> +<%= link_to_if_authorized l(:button_delete), {:controller => 'issues', :action => 'destroy', :id => @issue}, :confirm => issues_destroy_confirmation_message(@issue), :method => :post, :class => 'icon icon-del' %>
    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/.svn/text-base/_attributes.rhtml.svn-base --- a/app/views/issues/.svn/text-base/_attributes.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/.svn/text-base/_attributes.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -31,6 +31,11 @@
    +<% if User.current.allowed_to?(:manage_subtasks, @project) %> +

    <%= f.text_field :parent_issue_id, :size => 10 %>

    +
    +<%= javascript_tag "observeParentIssueField('#{auto_complete_issues_path(:id => @issue, :project_id => @project) }')" %> +<% end %>

    <%= f.text_field :start_date, :size => 10, :disabled => !@issue.leaf? %><%= calendar_for('issue_start_date') if @issue.leaf? %>

    <%= f.text_field :due_date, :size => 10, :disabled => !@issue.leaf? %><%= calendar_for('issue_due_date') if @issue.leaf? %>

    <%= f.text_field :estimated_hours, :size => 3, :disabled => !@issue.leaf? %> <%= l(:field_hours) %>

    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/.svn/text-base/_changesets.rhtml.svn-base --- a/app/views/issues/.svn/text-base/_changesets.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/.svn/text-base/_changesets.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,9 +1,9 @@ <% changesets.each do |changeset| %>
    -

    <%= link_to("#{l(:label_revision)} #{changeset.revision}", - :controller => 'repositories', :action => 'revision', :id => changeset.project, :rev => changeset.revision) %>
    +

    <%= link_to_revision(changeset, changeset.project, + :text => "#{l(:label_revision)} #{changeset.format_identifier}") %>
    <%= authoring(changeset.committed_on, changeset.author) %>

    -
    +
    <%= textilizable(changeset, :comments) %>
    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/.svn/text-base/_form.rhtml.svn-base --- a/app/views/issues/.svn/text-base/_form.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/.svn/text-base/_form.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,19 +1,17 @@ <%= call_hook(:view_issues_form_details_top, { :issue => @issue, :form => f }) %>
    > +<% if @issue.safe_attribute_names.include?('is_private') %> +

    + +

    +<% end %>

    <%= f.select :tracker_id, @project.trackers.collect {|t| [t.name, t.id]}, :required => true %>

    <%= observe_field :issue_tracker_id, :url => { :action => :new, :project_id => @project, :id => @issue }, :update => :attributes, :with => "Form.serialize('issue-form')" %>

    <%= f.text_field :subject, :size => 80, :required => true %>

    - -<% if User.current.allowed_to?(:manage_subtasks, @project) %> -

    <%= f.text_field :parent_issue_id, :size => 10 %>

    -
    -<%= javascript_tag "observeParentIssueField('#{auto_complete_issues_path(:id => @issue, :project_id => @project) }')" %> -<% end %> -

    <%= f.text_area :description, :cols => 60, :rows => (@issue.description.blank? ? 10 : [[10, @issue.description.length / 50].max, 100].min), diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/.svn/text-base/_history.rhtml.svn-base --- a/app/views/issues/.svn/text-base/_history.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/.svn/text-base/_history.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -17,3 +17,5 @@

    <%= call_hook(:view_issues_history_journal_bottom, { :journal => journal }) %> <% end %> + +<% heads_for_wiki_formatter if User.current.allowed_to?(:edit_issue_notes, issue.project) || User.current.allowed_to?(:edit_own_issue_notes, issue.project) %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/.svn/text-base/_list.rhtml.svn-base --- a/app/views/issues/.svn/text-base/_list.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/.svn/text-base/_list.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -20,6 +20,7 @@   <%= group.blank? ? 'None' : column_content(@query.group_by_column, issue) %> (<%= @issue_count_by_group[group] %>) + <%= link_to_function("#{l(:button_collapse_all)}/#{l(:button_expand_all)}", "toggleAllRowGroups(this)", :class => 'toggle-all') %> <% previous_group = group %> @@ -27,7 +28,7 @@ "> <%= check_box_tag("ids[]", issue.id, false, :id => nil) %> <%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %> - <% query.columns.each do |column| %><%= content_tag 'td', column_content(column, issue), :class => column.name %><% end %> + <% query.columns.each do |column| %><%= content_tag 'td', column_content(column, issue), :class => column.css_classes %><% end %> <% end -%> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/.svn/text-base/_relations.rhtml.svn-base --- a/app/views/issues/.svn/text-base/_relations.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/.svn/text-base/_relations.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,28 +1,31 @@
    -<% if authorize_for('issue_relations', 'new') %> +<% if User.current.allowed_to?(:manage_issue_relations, @project) %> <%= toggle_link l(:button_add), 'new-relation-form', {:focus => 'relation_issue_to_id'} %> <% end %>

    <%=l(:label_related_issues)%>

    -<% if @issue.relations.any? %> - -<% @issue.relations.select {|r| r.other_issue(@issue).visible? }.each do |relation| %> - - <% previous_group = group %> @@ -27,7 +28,7 @@ "> - <% query.columns.each do |column| %><%= content_tag 'td', column_content(column, issue), :class => column.name %><% end %> + <% query.columns.each do |column| %><%= content_tag 'td', column_content(column, issue), :class => column.css_classes %><% end %> <% end -%> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/_relations.rhtml --- a/app/views/issues/_relations.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/_relations.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -1,28 +1,31 @@
    -<% if authorize_for('issue_relations', 'new') %> +<% if User.current.allowed_to?(:manage_issue_relations, @project) %> <%= toggle_link l(:button_add), 'new-relation-form', {:focus => 'relation_issue_to_id'} %> <% end %>

    <%=l(:label_related_issues)%>

    -<% if @issue.relations.any? %> -
    <%= l(relation.label_for(@issue)) %> <%= "(#{l('datetime.distance_in_words.x_days', :count => relation.delay)})" if relation.delay && relation.delay != 0 %> +<% if @relations.present? %> +
    + +<% @relations.each do |relation| %> + + + - - - - + + + <% end %>
    <%= check_box_tag("ids[]", relation.other_issue(@issue).id, false, :id => nil) %><%= 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? %> <%= link_to_issue(relation.other_issue(@issue), :truncate => 60) %> <%= relation.other_issue(@issue).status.name %><%= format_date(relation.other_issue(@issue).start_date) %><%= format_date(relation.other_issue(@issue).due_date) %><%= link_to_remote(image_tag('delete.png'), { :url => {:controller => 'issue_relations', :action => 'destroy', :issue_id => @issue, :id => relation}, +<%= relation.other_issue(@issue).status.name %><%= format_date(relation.other_issue(@issue).start_date) %><%= format_date(relation.other_issue(@issue).due_date) %><%= link_to_remote(image_tag('link_break.png'), { :url => {:controller => 'issue_relations', :action => 'destroy', :issue_id => @issue, :id => relation}, :method => :post }, :title => l(:label_relation_delete)) if authorize_for('issue_relations', 'destroy') %>
    +
    <% end %> <% remote_form_for(:relation, @relation, diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/.svn/text-base/_sidebar.rhtml.svn-base --- a/app/views/issues/.svn/text-base/_sidebar.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/.svn/text-base/_sidebar.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -13,11 +13,5 @@ <% end %> <%= call_hook(:view_issues_sidebar_planning_bottom) %> -<% unless sidebar_queries.empty? -%> -

    <%= l(:label_query_plural) %>

    - -<% sidebar_queries.each do |query| -%> -<%= link_to(h(query.name), :controller => 'issues', :action => 'index', :project_id => @project, :query_id => query) %>
    -<% end -%> +<%= render_sidebar_queries %> <%= call_hook(:view_issues_sidebar_queries_bottom) %> -<% end -%> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/.svn/text-base/bulk_edit.rhtml.svn-base --- a/app/views/issues/.svn/text-base/bulk_edit.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/.svn/text-base/bulk_edit.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -43,18 +43,26 @@ <%= select_tag('issue[fixed_version_id]', content_tag('option', l(:label_no_change_option), :value => '') + content_tag('option', l(:label_none), :value => 'none') + - version_options_for_select(@project.shared_versions.open)) %> + version_options_for_select(@project.shared_versions.open.sort)) %>

    <% end %> <% @custom_fields.each do |custom_field| %> -

    <%= custom_field_tag_for_bulk_edit('issue', custom_field) %>

    +

    <%= custom_field_tag_for_bulk_edit('issue', custom_field, @projects) %>

    <% end %> <%= call_hook(:view_issues_bulk_edit_details_bottom, { :issues => @issues }) %>
    +<% if @project && User.current.allowed_to?(:manage_subtasks, @project) %> +

    + + <%= text_field_tag 'issue[parent_issue_id]', '', :size => 10 %> +

    +
    +<%= javascript_tag "observeParentIssueField('#{auto_complete_issues_path(:project_id => @project) }')" %> +<% end %>

    <%= text_field_tag 'issue[start_date]', '', :size => 10 %><%= calendar_for('issue_start_date') %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/.svn/text-base/edit.rhtml.svn-base --- a/app/views/issues/.svn/text-base/edit.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/.svn/text-base/edit.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,3 +1,6 @@

    <%=h "#{@issue.tracker.name} ##{@issue.id}" %>

    <%= render :partial => 'edit' %> +<% content_for :header_tags do %> + <%= robot_exclusion_tag %> +<% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/.svn/text-base/index.api.rsb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/issues/.svn/text-base/index.api.rsb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,28 @@ +api.array :issues, api_meta(:total_count => @issue_count, :offset => @offset, :limit => @limit) do + @issues.each do |issue| + api.issue do + api.id issue.id + api.project(:id => issue.project_id, :name => issue.project.name) unless issue.project.nil? + api.tracker(:id => issue.tracker_id, :name => issue.tracker.name) unless issue.tracker.nil? + api.status(:id => issue.status_id, :name => issue.status.name) unless issue.status.nil? + api.priority(:id => issue.priority_id, :name => issue.priority.name) unless issue.priority.nil? + api.author(:id => issue.author_id, :name => issue.author.name) unless issue.author.nil? + api.assigned_to(:id => issue.assigned_to_id, :name => issue.assigned_to.name) unless issue.assigned_to.nil? + api.category(:id => issue.category_id, :name => issue.category.name) unless issue.category.nil? + api.fixed_version(:id => issue.fixed_version_id, :name => issue.fixed_version.name) unless issue.fixed_version.nil? + api.parent(:id => issue.parent_id) unless issue.parent.nil? + + api.subject issue.subject + api.description issue.description + api.start_date issue.start_date + api.due_date issue.due_date + api.done_ratio issue.done_ratio + api.estimated_hours issue.estimated_hours + + render_api_custom_values issue.custom_field_values, api + + api.created_on issue.created_on + api.updated_on issue.updated_on + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/.svn/text-base/index.rhtml.svn-base --- a/app/views/issues/.svn/text-base/index.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/.svn/text-base/index.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -8,8 +8,8 @@

    <%= @query.new_record? ? l(:label_issue_plural) : h(@query.name) %>

    <% html_title(@query.new_record? ? l(:label_issue_plural) : @query.name) %> -<% form_tag({ :controller => 'queries', :action => 'new' }, :id => 'query_form') do %> - <%= hidden_field_tag('project_id', @project.to_param) if @project %> +<% form_tag({ :controller => 'issues', :action => 'index', :project_id => @project }, :method => :get, :id => 'query_form') do %> + <%= hidden_field_tag 'set_filter', '1' %>
    "> <%= l(:label_filter_plural) %> @@ -35,22 +35,10 @@

    - <%= link_to_remote l(:button_apply), - { :url => { :set_filter => 1 }, - :before => 'selectAllOptions("selected_columns");', - :update => "content", - :complete => "apply_filters_observer()", - :with => "Form.serialize('query_form')" - }, :class => 'icon icon-checked' %> - - <%= link_to_remote l(:button_clear), - { :url => { :set_filter => 1, :project_id => @project }, - :method => :get, - :update => "content", - }, :class => 'icon icon-reload' %> - + <%= link_to_function l(:button_apply), 'submit_query_form("query_form")', :class => 'icon icon-checked' %> + <%= link_to l(:button_clear), { :set_filter => 1, :project_id => @project }, :class => 'icon icon-reload' %> <% if @query.new_record? && User.current.allowed_to?(:save_queries, @project, :global => true) %> - <%= link_to l(:button_save), {}, :onclick => "selectAllOptions('selected_columns'); $('query_form').submit(); return false;", :class => 'icon icon-save' %> + <%= link_to_function l(:button_save), "$('query_form').action='#{ url_for :controller => 'queries', :action => 'new', :project_id => @project }'; submit_query_form('query_form')", :class => 'icon icon-save' %> <% end %>

    <% end %> @@ -65,9 +53,9 @@ <% end %> <% other_formats_links do |f| %> - <%= f.link_to 'Atom', :url => { :project_id => @project, :query_id => (@query.new_record? ? nil : @query), :key => User.current.rss_key } %> - <%= f.link_to 'CSV', :url => { :project_id => @project } %> - <%= f.link_to 'PDF', :url => { :project_id => @project } %> + <%= f.link_to 'Atom', :url => params.merge(:key => User.current.rss_key) %> + <%= f.link_to 'CSV', :url => params %> + <%= f.link_to 'PDF', :url => params %> <% end %> <% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/.svn/text-base/index.xml.builder.svn-base --- a/app/views/issues/.svn/text-base/index.xml.builder.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -xml.instruct! -xml.issues :type => 'array' do - @issues.each do |issue| - xml.issue do - xml.id issue.id - xml.project(:id => issue.project_id, :name => issue.project.name) unless issue.project.nil? - xml.tracker(:id => issue.tracker_id, :name => issue.tracker.name) unless issue.tracker.nil? - xml.status(:id => issue.status_id, :name => issue.status.name) unless issue.status.nil? - xml.priority(:id => issue.priority_id, :name => issue.priority.name) unless issue.priority.nil? - xml.author(:id => issue.author_id, :name => issue.author.name) unless issue.author.nil? - xml.assigned_to(:id => issue.assigned_to_id, :name => issue.assigned_to.name) unless issue.assigned_to.nil? - xml.category(:id => issue.category_id, :name => issue.category.name) unless issue.category.nil? - xml.fixed_version(:id => issue.fixed_version_id, :name => issue.fixed_version.name) unless issue.fixed_version.nil? - xml.parent(:id => issue.parent_id) unless issue.parent.nil? - - xml.subject issue.subject - xml.description issue.description - xml.start_date issue.start_date - xml.due_date issue.due_date - xml.done_ratio issue.done_ratio - xml.estimated_hours issue.estimated_hours - - xml.custom_fields do - issue.custom_field_values.each do |custom_value| - xml.custom_field custom_value.value, :id => custom_value.custom_field_id, :name => custom_value.custom_field.name - end - end - - xml.created_on issue.created_on - xml.updated_on issue.updated_on - end - end -end diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/.svn/text-base/new.rhtml.svn-base --- a/app/views/issues/.svn/text-base/new.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/.svn/text-base/new.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -23,4 +23,5 @@ <% content_for :header_tags do %> <%= stylesheet_link_tag 'scm' %> + <%= robot_exclusion_tag %> <% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/.svn/text-base/show.api.rsb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/issues/.svn/text-base/show.api.rsb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,61 @@ +api.issue do + api.id @issue.id + api.project(:id => @issue.project_id, :name => @issue.project.name) unless @issue.project.nil? + api.tracker(:id => @issue.tracker_id, :name => @issue.tracker.name) unless @issue.tracker.nil? + api.status(:id => @issue.status_id, :name => @issue.status.name) unless @issue.status.nil? + api.priority(:id => @issue.priority_id, :name => @issue.priority.name) unless @issue.priority.nil? + api.author(:id => @issue.author_id, :name => @issue.author.name) unless @issue.author.nil? + api.assigned_to(:id => @issue.assigned_to_id, :name => @issue.assigned_to.name) unless @issue.assigned_to.nil? + api.category(:id => @issue.category_id, :name => @issue.category.name) unless @issue.category.nil? + api.fixed_version(:id => @issue.fixed_version_id, :name => @issue.fixed_version.name) unless @issue.fixed_version.nil? + api.parent(:id => @issue.parent_id) unless @issue.parent.nil? + + api.subject @issue.subject + api.description @issue.description + api.start_date @issue.start_date + api.due_date @issue.due_date + api.done_ratio @issue.done_ratio + api.estimated_hours @issue.estimated_hours + api.spent_hours(@issue.spent_hours) if User.current.allowed_to?(:view_time_entries, @project) + + render_api_custom_values @issue.custom_field_values, api + + api.created_on @issue.created_on + api.updated_on @issue.updated_on + + render_api_issue_children(@issue, api) if include_in_api_response?('children') + + api.array :relations do + @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') && @relations.present? + + api.array :changesets do + @issue.changesets.each do |changeset| + api.changeset :revision => changeset.revision do + api.user(:id => changeset.user_id, :name => changeset.user.name) unless changeset.user.nil? + api.comments changeset.comments + api.committed_on changeset.committed_on + end + end + end if include_in_api_response?('changesets') && User.current.allowed_to?(:view_changesets, @project) + + api.array :journals do + @issue.journals.each do |journal| + api.journal :id => journal.id do + api.user(:id => journal.user_id, :name => journal.user.name) unless journal.user.nil? + api.notes journal.notes + api.created_on journal.created_on + api.array :details do + journal.details.each do |detail| + api.detail :property => detail.property, :name => detail.prop_key do + api.old_value detail.old_value + api.new_value detail.value + end + end + end + end + end + end if include_in_api_response?('journals') +end diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/.svn/text-base/show.rhtml.svn-base --- a/app/views/issues/.svn/text-base/show.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/.svn/text-base/show.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,6 +1,6 @@ <%= render :partial => 'action_menu' %> -

    <%= @issue.tracker.name %> #<%= @issue.id %>

    +

    <%= issue_heading(@issue) %>

    <%= avatar(@issue.author, :size => "50") %> @@ -47,14 +47,16 @@ <% if @issue.description? || @issue.attachments.any? -%>
    -
    -<%= link_to_remote_if_authorized(l(:button_quote), { :url => {:action => 'reply', :id => @issue} }, :class => 'icon icon-comment') if @issue.description? %> -
    - -
    -<%= textilizable @issue, :description, :attachments => @issue.attachments %> -
    - +<% if @issue.description? %> +
    + <%= link_to_remote_if_authorized(l(:button_quote), { :url => {:controller => 'journals', :action => 'new', :id => @issue} }, :class => 'icon icon-comment') %> +
    + +

    <%=l(:field_description)%>

    +
    + <%= textilizable @issue, :description, :attachments => @issue.attachments %> +
    +<% end %> <%= link_to_attachments @issue %> <% end -%> @@ -71,7 +73,7 @@
    <% end %> -<% if authorize_for('issue_relations', 'new') || @issue.relations.present? %> +<% if @relations.present? || User.current.allowed_to?(:manage_issue_relations, @project) %>
    <%= render :partial => 'relations' %> @@ -96,7 +98,7 @@
    -<%= render :partial => 'action_menu', :locals => {:replace_watcher => 'watcher2' } %> +<%= render :partial => 'action_menu' %>
    <% if authorize_for('issues', 'edit') %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/.svn/text-base/show.xml.builder.svn-base --- a/app/views/issues/.svn/text-base/show.xml.builder.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,62 +0,0 @@ -xml.instruct! -xml.issue do - xml.id @issue.id - xml.project(:id => @issue.project_id, :name => @issue.project.name) unless @issue.project.nil? - xml.tracker(:id => @issue.tracker_id, :name => @issue.tracker.name) unless @issue.tracker.nil? - xml.status(:id => @issue.status_id, :name => @issue.status.name) unless @issue.status.nil? - xml.priority(:id => @issue.priority_id, :name => @issue.priority.name) unless @issue.priority.nil? - xml.author(:id => @issue.author_id, :name => @issue.author.name) unless @issue.author.nil? - xml.assigned_to(:id => @issue.assigned_to_id, :name => @issue.assigned_to.name) unless @issue.assigned_to.nil? - xml.category(:id => @issue.category_id, :name => @issue.category.name) unless @issue.category.nil? - xml.fixed_version(:id => @issue.fixed_version_id, :name => @issue.fixed_version.name) unless @issue.fixed_version.nil? - xml.parent(:id => @issue.parent_id) unless @issue.parent.nil? - - xml.subject @issue.subject - xml.description @issue.description - xml.start_date @issue.start_date - xml.due_date @issue.due_date - xml.done_ratio @issue.done_ratio - xml.estimated_hours @issue.estimated_hours - if User.current.allowed_to?(:view_time_entries, @project) - xml.spent_hours @issue.spent_hours - end - - xml.custom_fields do - @issue.custom_field_values.each do |custom_value| - xml.custom_field custom_value.value, :id => custom_value.custom_field_id, :name => custom_value.custom_field.name - end - end unless @issue.custom_field_values.empty? - - xml.created_on @issue.created_on - xml.updated_on @issue.updated_on - - xml.relations do - @issue.relations.select {|r| r.other_issue(@issue).visible? }.each do |relation| - xml.relation(:id => relation.id, :issue_id => relation.other_issue(@issue).id, :relation_type => relation.relation_type_for(@issue), :delay => relation.delay) - end - end - - xml.changesets do - @issue.changesets.each do |changeset| - xml.changeset :revision => changeset.revision do - xml.user(:id => changeset.user_id, :name => changeset.user.name) unless changeset.user.nil? - xml.comments changeset.comments - xml.committed_on changeset.committed_on - end - end - end if User.current.allowed_to?(:view_changesets, @project) && @issue.changesets.any? - - xml.journals do - @issue.journals.each do |journal| - xml.journal :id => journal.id do - xml.user(:id => journal.user_id, :name => journal.user.name) unless journal.user.nil? - xml.notes journal.notes - xml.details do - journal.details.each do |detail| - xml.detail :property => detail.property, :name => detail.prop_key, :old => detail.old_value, :new => detail.value - end - end - end - end - end unless @issue.journals.empty? -end diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/_action_menu.rhtml --- a/app/views/issues/_action_menu.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/_action_menu.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -1,10 +1,9 @@
    <%= link_to_if_authorized(l(:button_update), {:controller => 'issues', :action => 'edit', :id => @issue }, :onclick => 'showAndScrollTo("update", "notes"); return false;', :class => 'icon icon-edit', :accesskey => accesskey(:edit)) %> <%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'new', :issue_id => @issue}, :class => 'icon icon-time-add' %> -<% replace_watcher ||= 'watcher' %> -<%= watcher_tag(@issue, User.current, {:id => replace_watcher, :replace => ['watcher','watcher2']}) %> +<%= watcher_tag(@issue, User.current) %> <%= link_to_if_authorized l(:button_duplicate), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue }, :class => 'icon icon-duplicate' %> <%= link_to_if_authorized l(:button_copy), {:controller => 'issue_moves', :action => 'new', :id => @issue, :copy_options => {:copy => 't'}}, :class => 'icon icon-copy' %> <%= link_to_if_authorized l(:button_move), {:controller => 'issue_moves', :action => 'new', :id => @issue}, :class => 'icon icon-move' %> -<%= link_to_if_authorized l(:button_delete), {:controller => 'issues', :action => 'destroy', :id => @issue}, :confirm => (@issue.leaf? ? l(:text_are_you_sure) : l(:text_are_you_sure_with_children)), :method => :post, :class => 'icon icon-del' %> +<%= link_to_if_authorized l(:button_delete), {:controller => 'issues', :action => 'destroy', :id => @issue}, :confirm => issues_destroy_confirmation_message(@issue), :method => :post, :class => 'icon icon-del' %>
    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/_attributes.rhtml --- a/app/views/issues/_attributes.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/_attributes.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -31,6 +31,11 @@
    +<% if User.current.allowed_to?(:manage_subtasks, @project) %> +

    <%= f.text_field :parent_issue_id, :size => 10 %>

    +
    +<%= javascript_tag "observeParentIssueField('#{auto_complete_issues_path(:id => @issue, :project_id => @project) }')" %> +<% end %>

    <%= f.text_field :start_date, :size => 10, :disabled => !@issue.leaf? %><%= calendar_for('issue_start_date') if @issue.leaf? %>

    <%= f.text_field :due_date, :size => 10, :disabled => !@issue.leaf? %><%= calendar_for('issue_due_date') if @issue.leaf? %>

    <%= f.text_field :estimated_hours, :size => 3, :disabled => !@issue.leaf? %> <%= l(:field_hours) %>

    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/_changesets.rhtml --- a/app/views/issues/_changesets.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/_changesets.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -1,9 +1,9 @@ <% changesets.each do |changeset| %>
    -

    <%= link_to("#{l(:label_revision)} #{changeset.revision}", - :controller => 'repositories', :action => 'revision', :id => changeset.project, :rev => changeset.revision) %>
    +

    <%= link_to_revision(changeset, changeset.project, + :text => "#{l(:label_revision)} #{changeset.format_identifier}") %>
    <%= authoring(changeset.committed_on, changeset.author) %>

    -
    +
    <%= textilizable(changeset, :comments) %>
    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/_form.rhtml --- a/app/views/issues/_form.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/_form.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -1,21 +1,17 @@ <%= call_hook(:view_issues_form_details_top, { :issue => @issue, :form => f }) %>
    > +<% if @issue.safe_attribute_names.include?('is_private') %> +

    + +

    +<% end %>

    <%= f.select :tracker_id, @project.trackers.collect {|t| [t.name, t.id]}, :required => true %>

    <%= observe_field :issue_tracker_id, :url => { :action => :new, :project_id => @project, :id => @issue }, :update => :attributes, :with => "Form.serialize('issue-form')" %>

    <%= f.text_field :subject, :size => 80, :required => true %>

    - -<% if User.current.allowed_to?(:manage_subtasks, @project) %> -

    <%= f.text_field :parent_issue_id, :size => 10, :autocomplete => :on %> -
    - <%=l(:text_issue_parent_issue_info)%> -

    -
    - <%= javascript_tag "observeParentIssueField('#{auto_complete_issues_path(:id => @issue, :project_id => @project) }')" %> -<% end %>

    <%= f.text_area :description, :cols => 60, diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/_history.rhtml --- a/app/views/issues/_history.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/_history.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -17,3 +17,5 @@

    <%= call_hook(:view_issues_history_journal_bottom, { :journal => journal }) %> <% end %> + +<% heads_for_wiki_formatter if User.current.allowed_to?(:edit_issue_notes, issue.project) || User.current.allowed_to?(:edit_own_issue_notes, issue.project) %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/_list.rhtml --- a/app/views/issues/_list.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/_list.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -20,6 +20,7 @@
      <%= group.blank? ? 'None' : column_content(@query.group_by_column, issue) %> (<%= @issue_count_by_group[group] %>) + <%= link_to_function("#{l(:button_collapse_all)}/#{l(:button_expand_all)}", "toggleAllRowGroups(this)", :class => 'toggle-all') %>
    <%= check_box_tag("ids[]", issue.id, false, :id => nil) %> <%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %>
    -<% @issue.relations.select {|r| r.other_issue(@issue).visible? }.each do |relation| %> - - - diff -r f7c525dc7585 -r 0b6c82dead28 app/views/queries/.svn/text-base/_filters.rhtml.svn-base --- a/app/views/queries/.svn/text-base/_filters.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/queries/.svn/text-base/_filters.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -21,10 +21,14 @@ if (check_box.checked) { Element.show("operators_" + field); + Form.Element.enable("operators_" + field); + Form.Element.enable("values_" + field); toggle_operator(field); } else { Element.hide("operators_" + field); Element.hide("div_values_" + field); + Form.Element.disable("operators_" + field); + Form.Element.disable("values_" + field); } } @@ -54,13 +58,15 @@ } } +function submit_query_form(id) { + selectAllOptions("selected_columns"); + $(id).submit(); +} + function apply_filters_observer() { $$("#query_form input[type=text]").invoke("observe", "keypress", function(e){ if(e.keyCode == Event.KEY_RETURN) { - <%= remote_function(:url => { :set_filter => 1}, - :update => "content", - :with => "Form.serialize('query_form')", - :complete => "e.stop(); apply_filters_observer()") %> + submit_query_form("query_form"); } }); } @@ -77,26 +83,26 @@ options = filter[1] %> id="tr_<%= field %>" class="filter">
    <%= l(relation.label_for(@issue)) %> <%= "(#{l('datetime.distance_in_words.x_days', :count => relation.delay)})" if relation.delay && relation.delay != 0 %> +<% if @relations.present? %> +
    + +<% @relations.each do |relation| %> + + + - - - - + + + <% end %>
    <%= check_box_tag("ids[]", relation.other_issue(@issue).id, false, :id => nil) %><%= 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? %> <%= link_to_issue(relation.other_issue(@issue), :truncate => 60) %> <%= relation.other_issue(@issue).status.name %><%= format_date(relation.other_issue(@issue).start_date) %><%= format_date(relation.other_issue(@issue).due_date) %><%= link_to_remote(image_tag('delete.png'), { :url => {:controller => 'issue_relations', :action => 'destroy', :issue_id => @issue, :id => relation}, +<%= relation.other_issue(@issue).status.name %><%= format_date(relation.other_issue(@issue).start_date) %><%= format_date(relation.other_issue(@issue).due_date) %><%= link_to_remote(image_tag('link_break.png'), { :url => {:controller => 'issue_relations', :action => 'destroy', :issue_id => @issue, :id => relation}, :method => :post }, :title => l(:label_relation_delete)) if authorize_for('issue_relations', 'destroy') %>
    +
    <% end %> <% remote_form_for(:relation, @relation, diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/_sidebar.rhtml --- a/app/views/issues/_sidebar.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/_sidebar.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -13,11 +13,5 @@ <% end %> <%= call_hook(:view_issues_sidebar_planning_bottom) %> -<% unless sidebar_queries.empty? -%> -

    <%= l(:label_query_plural) %>

    - -<% sidebar_queries.each do |query| -%> -<%= link_to(h(query.name), :controller => 'issues', :action => 'index', :project_id => @project, :query_id => query) %>
    -<% end -%> +<%= render_sidebar_queries %> <%= call_hook(:view_issues_sidebar_queries_bottom) %> -<% end -%> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/bulk_edit.rhtml --- a/app/views/issues/bulk_edit.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/bulk_edit.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -43,18 +43,26 @@ <%= select_tag('issue[fixed_version_id]', content_tag('option', l(:label_no_change_option), :value => '') + content_tag('option', l(:label_none), :value => 'none') + - version_options_for_select(@project.shared_versions.open)) %> + version_options_for_select(@project.shared_versions.open.sort)) %>

    <% end %> <% @custom_fields.each do |custom_field| %> -

    <%= custom_field_tag_for_bulk_edit('issue', custom_field) %>

    +

    <%= custom_field_tag_for_bulk_edit('issue', custom_field, @projects) %>

    <% end %> <%= call_hook(:view_issues_bulk_edit_details_bottom, { :issues => @issues }) %>
    +<% if @project && User.current.allowed_to?(:manage_subtasks, @project) %> +

    + + <%= text_field_tag 'issue[parent_issue_id]', '', :size => 10 %> +

    +
    +<%= javascript_tag "observeParentIssueField('#{auto_complete_issues_path(:project_id => @project) }')" %> +<% end %>

    <%= text_field_tag 'issue[start_date]', '', :size => 10 %><%= calendar_for('issue_start_date') %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/edit.rhtml --- a/app/views/issues/edit.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/edit.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -1,3 +1,6 @@

    <%=h "#{@issue.tracker.name} ##{@issue.id}" %>

    <%= render :partial => 'edit' %> +<% content_for :header_tags do %> + <%= robot_exclusion_tag %> +<% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/index.api.rsb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/issues/index.api.rsb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,28 @@ +api.array :issues, api_meta(:total_count => @issue_count, :offset => @offset, :limit => @limit) do + @issues.each do |issue| + api.issue do + api.id issue.id + api.project(:id => issue.project_id, :name => issue.project.name) unless issue.project.nil? + api.tracker(:id => issue.tracker_id, :name => issue.tracker.name) unless issue.tracker.nil? + api.status(:id => issue.status_id, :name => issue.status.name) unless issue.status.nil? + api.priority(:id => issue.priority_id, :name => issue.priority.name) unless issue.priority.nil? + api.author(:id => issue.author_id, :name => issue.author.name) unless issue.author.nil? + api.assigned_to(:id => issue.assigned_to_id, :name => issue.assigned_to.name) unless issue.assigned_to.nil? + api.category(:id => issue.category_id, :name => issue.category.name) unless issue.category.nil? + api.fixed_version(:id => issue.fixed_version_id, :name => issue.fixed_version.name) unless issue.fixed_version.nil? + api.parent(:id => issue.parent_id) unless issue.parent.nil? + + api.subject issue.subject + api.description issue.description + api.start_date issue.start_date + api.due_date issue.due_date + api.done_ratio issue.done_ratio + api.estimated_hours issue.estimated_hours + + render_api_custom_values issue.custom_field_values, api + + api.created_on issue.created_on + api.updated_on issue.updated_on + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/index.rhtml --- a/app/views/issues/index.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/index.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -8,8 +8,8 @@

    <%= @query.new_record? ? l(:label_issue_plural) : h(@query.name) %>

    <% html_title(@query.new_record? ? l(:label_issue_plural) : @query.name) %> -<% form_tag({ :controller => 'queries', :action => 'new' }, :id => 'query_form') do %> - <%= hidden_field_tag('project_id', @project.to_param) if @project %> +<% form_tag({ :controller => 'issues', :action => 'index', :project_id => @project }, :method => :get, :id => 'query_form') do %> + <%= hidden_field_tag 'set_filter', '1' %>
    "> <%= l(:label_filter_plural) %> @@ -35,22 +35,10 @@

    - <%= link_to_remote l(:button_apply), - { :url => { :set_filter => 1 }, - :before => 'selectAllOptions("selected_columns");', - :update => "content", - :complete => "apply_filters_observer()", - :with => "Form.serialize('query_form')" - }, :class => 'icon icon-checked' %> - - <%= link_to_remote l(:button_clear), - { :url => { :set_filter => 1, :project_id => @project }, - :method => :get, - :update => "content", - }, :class => 'icon icon-reload' %> - + <%= link_to_function l(:button_apply), 'submit_query_form("query_form")', :class => 'icon icon-checked' %> + <%= link_to l(:button_clear), { :set_filter => 1, :project_id => @project }, :class => 'icon icon-reload' %> <% if @query.new_record? && User.current.allowed_to?(:save_queries, @project, :global => true) %> - <%= link_to l(:button_save), {}, :onclick => "selectAllOptions('selected_columns'); $('query_form').submit(); return false;", :class => 'icon icon-save' %> + <%= link_to_function l(:button_save), "$('query_form').action='#{ url_for :controller => 'queries', :action => 'new', :project_id => @project }'; submit_query_form('query_form')", :class => 'icon icon-save' %> <% end %>

    <% end %> @@ -65,9 +53,9 @@ <% end %> <% other_formats_links do |f| %> - <%= f.link_to 'Atom', :url => { :project_id => @project, :query_id => (@query.new_record? ? nil : @query), :key => User.current.rss_key } %> - <%= f.link_to 'CSV', :url => { :project_id => @project } %> - <%= f.link_to 'PDF', :url => { :project_id => @project } %> + <%= f.link_to 'Atom', :url => params.merge(:key => User.current.rss_key) %> + <%= f.link_to 'CSV', :url => params %> + <%= f.link_to 'PDF', :url => params %> <% end %> <% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/index.xml.builder --- a/app/views/issues/index.xml.builder Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -xml.instruct! -xml.issues :type => 'array' do - @issues.each do |issue| - xml.issue do - xml.id issue.id - xml.project(:id => issue.project_id, :name => issue.project.name) unless issue.project.nil? - xml.tracker(:id => issue.tracker_id, :name => issue.tracker.name) unless issue.tracker.nil? - xml.status(:id => issue.status_id, :name => issue.status.name) unless issue.status.nil? - xml.priority(:id => issue.priority_id, :name => issue.priority.name) unless issue.priority.nil? - xml.author(:id => issue.author_id, :name => issue.author.name) unless issue.author.nil? - xml.assigned_to(:id => issue.assigned_to_id, :name => issue.assigned_to.name) unless issue.assigned_to.nil? - xml.category(:id => issue.category_id, :name => issue.category.name) unless issue.category.nil? - xml.fixed_version(:id => issue.fixed_version_id, :name => issue.fixed_version.name) unless issue.fixed_version.nil? - xml.parent(:id => issue.parent_id) unless issue.parent.nil? - - xml.subject issue.subject - xml.description issue.description - xml.start_date issue.start_date - xml.due_date issue.due_date - xml.done_ratio issue.done_ratio - xml.estimated_hours issue.estimated_hours - - xml.custom_fields do - issue.custom_field_values.each do |custom_value| - xml.custom_field custom_value.value, :id => custom_value.custom_field_id, :name => custom_value.custom_field.name - end - end - - xml.created_on issue.created_on - xml.updated_on issue.updated_on - end - end -end diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/new.rhtml --- a/app/views/issues/new.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/new.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -23,4 +23,5 @@ <% content_for :header_tags do %> <%= stylesheet_link_tag 'scm' %> + <%= robot_exclusion_tag %> <% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/show.api.rsb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/issues/show.api.rsb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,61 @@ +api.issue do + api.id @issue.id + api.project(:id => @issue.project_id, :name => @issue.project.name) unless @issue.project.nil? + api.tracker(:id => @issue.tracker_id, :name => @issue.tracker.name) unless @issue.tracker.nil? + api.status(:id => @issue.status_id, :name => @issue.status.name) unless @issue.status.nil? + api.priority(:id => @issue.priority_id, :name => @issue.priority.name) unless @issue.priority.nil? + api.author(:id => @issue.author_id, :name => @issue.author.name) unless @issue.author.nil? + api.assigned_to(:id => @issue.assigned_to_id, :name => @issue.assigned_to.name) unless @issue.assigned_to.nil? + api.category(:id => @issue.category_id, :name => @issue.category.name) unless @issue.category.nil? + api.fixed_version(:id => @issue.fixed_version_id, :name => @issue.fixed_version.name) unless @issue.fixed_version.nil? + api.parent(:id => @issue.parent_id) unless @issue.parent.nil? + + api.subject @issue.subject + api.description @issue.description + api.start_date @issue.start_date + api.due_date @issue.due_date + api.done_ratio @issue.done_ratio + api.estimated_hours @issue.estimated_hours + api.spent_hours(@issue.spent_hours) if User.current.allowed_to?(:view_time_entries, @project) + + render_api_custom_values @issue.custom_field_values, api + + api.created_on @issue.created_on + api.updated_on @issue.updated_on + + render_api_issue_children(@issue, api) if include_in_api_response?('children') + + api.array :relations do + @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') && @relations.present? + + api.array :changesets do + @issue.changesets.each do |changeset| + api.changeset :revision => changeset.revision do + api.user(:id => changeset.user_id, :name => changeset.user.name) unless changeset.user.nil? + api.comments changeset.comments + api.committed_on changeset.committed_on + end + end + end if include_in_api_response?('changesets') && User.current.allowed_to?(:view_changesets, @project) + + api.array :journals do + @issue.journals.each do |journal| + api.journal :id => journal.id do + api.user(:id => journal.user_id, :name => journal.user.name) unless journal.user.nil? + api.notes journal.notes + api.created_on journal.created_on + api.array :details do + journal.details.each do |detail| + api.detail :property => detail.property, :name => detail.prop_key do + api.old_value detail.old_value + api.new_value detail.value + end + end + end + end + end + end if include_in_api_response?('journals') +end diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/show.rhtml --- a/app/views/issues/show.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/issues/show.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -1,6 +1,6 @@ <%= render :partial => 'action_menu' %> -

    <%= @issue.tracker.name %> #<%= @issue.id %>

    +

    <%= issue_heading(@issue) %>

    <%= avatar(@issue.author, :size => "50") %> @@ -47,14 +47,16 @@ <% if @issue.description? || @issue.attachments.any? -%>
    -
    -<%= link_to_remote_if_authorized(l(:button_quote), { :url => {:action => 'reply', :id => @issue} }, :class => 'icon icon-comment') if @issue.description? %> -
    - -
    -<%= textilizable @issue, :description, :attachments => @issue.attachments %> -
    - +<% if @issue.description? %> +
    + <%= link_to_remote_if_authorized(l(:button_quote), { :url => {:controller => 'journals', :action => 'new', :id => @issue} }, :class => 'icon icon-comment') %> +
    + +

    <%=l(:field_description)%>

    +
    + <%= textilizable @issue, :description, :attachments => @issue.attachments %> +
    +<% end %> <%= link_to_attachments @issue %> <% end -%> @@ -71,7 +73,7 @@
    <% end %> -<% if authorize_for('issue_relations', 'new') || @issue.relations.present? %> +<% if @relations.present? || User.current.allowed_to?(:manage_issue_relations, @project) %>
    <%= render :partial => 'relations' %> @@ -96,7 +98,7 @@
    -<%= render :partial => 'action_menu', :locals => {:replace_watcher => 'watcher2' } %> +<%= render :partial => 'action_menu' %>
    <% if authorize_for('issues', 'edit') %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/issues/show.xml.builder --- a/app/views/issues/show.xml.builder Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,62 +0,0 @@ -xml.instruct! -xml.issue do - xml.id @issue.id - xml.project(:id => @issue.project_id, :name => @issue.project.name) unless @issue.project.nil? - xml.tracker(:id => @issue.tracker_id, :name => @issue.tracker.name) unless @issue.tracker.nil? - xml.status(:id => @issue.status_id, :name => @issue.status.name) unless @issue.status.nil? - xml.priority(:id => @issue.priority_id, :name => @issue.priority.name) unless @issue.priority.nil? - xml.author(:id => @issue.author_id, :name => @issue.author.name) unless @issue.author.nil? - xml.assigned_to(:id => @issue.assigned_to_id, :name => @issue.assigned_to.name) unless @issue.assigned_to.nil? - xml.category(:id => @issue.category_id, :name => @issue.category.name) unless @issue.category.nil? - xml.fixed_version(:id => @issue.fixed_version_id, :name => @issue.fixed_version.name) unless @issue.fixed_version.nil? - xml.parent(:id => @issue.parent_id) unless @issue.parent.nil? - - xml.subject @issue.subject - xml.description @issue.description - xml.start_date @issue.start_date - xml.due_date @issue.due_date - xml.done_ratio @issue.done_ratio - xml.estimated_hours @issue.estimated_hours - if User.current.allowed_to?(:view_time_entries, @project) - xml.spent_hours @issue.spent_hours - end - - xml.custom_fields do - @issue.custom_field_values.each do |custom_value| - xml.custom_field custom_value.value, :id => custom_value.custom_field_id, :name => custom_value.custom_field.name - end - end unless @issue.custom_field_values.empty? - - xml.created_on @issue.created_on - xml.updated_on @issue.updated_on - - xml.relations do - @issue.relations.select {|r| r.other_issue(@issue).visible? }.each do |relation| - xml.relation(:id => relation.id, :issue_id => relation.other_issue(@issue).id, :relation_type => relation.relation_type_for(@issue), :delay => relation.delay) - end - end - - xml.changesets do - @issue.changesets.each do |changeset| - xml.changeset :revision => changeset.revision do - xml.user(:id => changeset.user_id, :name => changeset.user.name) unless changeset.user.nil? - xml.comments changeset.comments - xml.committed_on changeset.committed_on - end - end - end if User.current.allowed_to?(:view_changesets, @project) && @issue.changesets.any? - - xml.journals do - @issue.journals.each do |journal| - xml.journal :id => journal.id do - xml.user(:id => journal.user_id, :name => journal.user.name) unless journal.user.nil? - xml.notes journal.notes - xml.details do - journal.details.each do |detail| - xml.detail :property => detail.property, :name => detail.prop_key, :old => detail.old_value, :new => detail.value - end - end - end - end - end unless @issue.journals.empty? -end diff -r f7c525dc7585 -r 0b6c82dead28 app/views/journals/.svn/all-wcprops --- a/app/views/journals/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/journals/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,29 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 43 -/svn/!svn/ver/4034/trunk/app/views/journals +V 57 +/svn/!svn/ver/5878/branches/1.2-stable/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 -index.rxml -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/4034/trunk/app/views/journals/index.rxml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/journals/.svn/entries --- a/app/views/journals/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/journals/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/journals +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/journals http://redmine.rubyforge.org/svn -2010-08-23T15:04:36.844654Z -4034 -edavis10 +2011-03-28T21:45:30.892324Z +5246 +jplang @@ -32,10 +32,10 @@ -2010-09-23T14:37:44.579750Z -fb8a5b1bfdbadbbaaa17ce7fc1dfcf3c -2009-10-11T10:36:11.599175Z -2924 +2011-07-14T09:24:21.000000Z +6f96a31cd9e465b7b9324190b604aac1 +2011-03-28T21:45:30.892324Z +5246 jplang has-props @@ -58,7 +58,7 @@ -656 +1304 update.rjs file @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.579750Z +2011-07-14T09:24:09.000000Z 269ec86216a5d0340e02940f1b190d51 2010-03-17T04:13:05.342620Z 3596 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.579750Z +2011-07-14T09:24:09.000000Z ce552c52f7c423630412d0593cc1ee61 2008-02-02T10:50:31.694950Z 1105 @@ -128,13 +128,47 @@ 140 +diff.html.erb +file + + + + +2011-07-14T09:24:09.000000Z +073352211ae7cecb9e1ff5ea1ce17150 +2011-02-27T13:34:41.060565Z +4954 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +408 + index.rxml file -2010-09-23T14:37:44.579750Z +2011-07-14T09:24:09.000000Z ef7f777c9318cee52e909377c4f96e8b 2010-08-23T15:04:36.844654Z 4034 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/journals/.svn/prop-base/diff.html.erb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/journals/.svn/prop-base/diff.html.erb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/journals/.svn/text-base/_notes_form.rhtml.svn-base --- a/app/views/journals/.svn/text-base/_notes_form.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/journals/.svn/text-base/_notes_form.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,21 @@ <% form_remote_tag(:url => {}, :html => { :id => "journal-#{@journal.id}-form" }) do %> - <%= text_area_tag :notes, @journal.notes, :class => 'wiki-edit', - :rows => (@journal.notes.blank? ? 10 : [[10, @journal.notes.length / 50].max, 100].min) %> + <%= text_area_tag :notes, @journal.notes, + :id => "journal_#{@journal.id}_notes", + :class => 'wiki-edit', + :rows => (@journal.notes.blank? ? 10 : [[10, @journal.notes.length / 50].max, 100].min) %> <%= call_hook(:view_journals_notes_form_after_notes, { :journal => @journal}) %>

    <%= submit_tag l(:button_save) %> + <%= link_to_remote l(:label_preview), + { :url => preview_issue_path(:project_id => @project, :id => @journal.issue), + :method => 'post', + :update => "journal_#{@journal.id}_preview", + :with => "Form.serialize('journal-#{@journal.id}-form')", + :complete => "Element.scrollTo('journal_#{@journal.id}_preview')" + }, :accesskey => accesskey(:preview) %> + | <%= link_to l(:button_cancel), '#', :onclick => "Element.remove('journal-#{@journal.id}-form'); " + "Element.show('journal-#{@journal.id}-notes'); return false;" %>

    + +
    <% end %> +<%= wikitoolbar_for "journal_#{@journal.id}_notes" %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/journals/.svn/text-base/diff.html.erb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/journals/.svn/text-base/diff.html.erb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,10 @@ +

    <%=h @issue.tracker %> #<%= @issue.id %>

    +

    <%= authoring @journal.created_on, @journal.user, :label => :label_updated_time_by %>

    + +
    +<%= simple_format_without_paragraph @diff.to_html %> +
    + +

    <%= link_to l(:button_back), issue_path(@issue), :onclick => 'history.back(); return false;' %>

    + +<% html_title "#{@issue.tracker.name} ##{@issue.id}: #{@issue.subject}" %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/journals/_notes_form.rhtml --- a/app/views/journals/_notes_form.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/journals/_notes_form.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,21 @@ <% form_remote_tag(:url => {}, :html => { :id => "journal-#{@journal.id}-form" }) do %> - <%= text_area_tag :notes, @journal.notes, :class => 'wiki-edit', - :rows => (@journal.notes.blank? ? 10 : [[10, @journal.notes.length / 50].max, 100].min) %> + <%= text_area_tag :notes, @journal.notes, + :id => "journal_#{@journal.id}_notes", + :class => 'wiki-edit', + :rows => (@journal.notes.blank? ? 10 : [[10, @journal.notes.length / 50].max, 100].min) %> <%= call_hook(:view_journals_notes_form_after_notes, { :journal => @journal}) %>

    <%= submit_tag l(:button_save) %> + <%= link_to_remote l(:label_preview), + { :url => preview_issue_path(:project_id => @project, :id => @journal.issue), + :method => 'post', + :update => "journal_#{@journal.id}_preview", + :with => "Form.serialize('journal-#{@journal.id}-form')", + :complete => "Element.scrollTo('journal_#{@journal.id}_preview')" + }, :accesskey => accesskey(:preview) %> + | <%= link_to l(:button_cancel), '#', :onclick => "Element.remove('journal-#{@journal.id}-form'); " + "Element.show('journal-#{@journal.id}-notes'); return false;" %>

    + +
    <% end %> +<%= wikitoolbar_for "journal_#{@journal.id}_notes" %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/journals/diff.html.erb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/journals/diff.html.erb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,10 @@ +

    <%=h @issue.tracker %> #<%= @issue.id %>

    +

    <%= authoring @journal.created_on, @journal.user, :label => :label_updated_time_by %>

    + +
    +<%= simple_format_without_paragraph @diff.to_html %> +
    + +

    <%= link_to l(:button_back), issue_path(@issue), :onclick => 'history.back(); return false;' %>

    + +<% html_title "#{@issue.tracker.name} ##{@issue.id}: #{@issue.subject}" %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/layouts/.svn/all-wcprops --- a/app/views/layouts/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/layouts/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,29 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 42 -/svn/!svn/ver/4362/trunk/app/views/layouts +V 56 +/svn/!svn/ver/5878/branches/1.2-stable/app/views/layouts END -base.rhtml -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/4005/trunk/app/views/layouts/base.rhtml -END -mailer.text.plain.erb -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/4362/trunk/app/views/layouts/mailer.text.plain.erb -END -mailer.text.html.erb -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/4362/trunk/app/views/layouts/mailer.text.html.erb -END -admin.rhtml -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/3176/trunk/app/views/layouts/admin.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/layouts/.svn/entries --- a/app/views/layouts/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/layouts/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/layouts +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/layouts http://redmine.rubyforge.org/svn -2010-11-02T19:00:36.834304Z -4362 -edavis10 +2011-03-28T19:59:35.933790Z +5239 +jplang @@ -32,11 +32,11 @@ -2010-09-24T11:56:52.936024Z -2e429e8cf551d964a7e1a528ca56242d -2010-08-19T16:57:44.231882Z -4005 -winterheart +2011-07-14T09:24:21.000000Z +b4bb84ecaf9a28dd92d63bc219ca26e0 +2011-03-28T19:59:35.933790Z +5239 +jplang has-props @@ -58,7 +58,7 @@ -2902 +3029 mailer.text.plain.erb file @@ -66,7 +66,7 @@ -2010-11-19T13:04:48.184855Z +2011-07-14T09:24:09.000000Z 490231bbc42932a0f9e1735a94d06260 2010-11-02T19:00:36.834304Z 4362 @@ -100,7 +100,7 @@ -2010-11-19T13:04:48.184855Z +2011-07-14T09:24:09.000000Z 5073a425d4e7896c725996f9cf35f74b 2010-11-02T19:00:36.834304Z 4362 @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.583752Z +2011-07-14T09:24:09.000000Z cc6ca08e56314fb510561e8eeb4ede46 2009-12-17T18:21:02.630202Z 3176 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/layouts/.svn/text-base/base.rhtml.svn-base --- a/app/views/layouts/.svn/text-base/base.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/layouts/.svn/text-base/base.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -5,12 +5,13 @@ <%=h html_title %> +<%= csrf_meta_tag %> <%= favicon %> <%= stylesheet_link_tag 'application', :media => 'all' %> <%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %> -<%= javascript_include_tag :defaults %> -<%= heads_for_wiki_formatter %> - <%= yield :header_tags -%> - +
    @@ -28,10 +29,11 @@ <%= render_menu :account_menu -%>
    <%= content_tag('div', "#{l(:label_logged_as)} #{link_to_user(User.current, :format => :username)}", :id => 'loggedas') if User.current.logged? %> - <%= render_menu :top_menu -%> + <%= render_menu :top_menu if User.current.logged? || !Setting.login_required? -%>
    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/layouts/base.rhtml --- a/app/views/layouts/base.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/layouts/base.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -5,12 +5,14 @@ <%=h html_title %> +<%= csrf_meta_tag %> <%= favicon %> <%= stylesheet_link_tag 'application', :media => 'all' %> +<%= stylesheet_platform_font_tag %> <%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %> -<%= javascript_include_tag :defaults %> -<%= heads_for_wiki_formatter %> - <%= yield :header_tags -%> - +
    @@ -28,11 +30,11 @@ <%= render_menu :account_menu -%>
    <%= content_tag('div', "#{l(:label_logged_as)} #{link_to_user(User.current, :format => :username)}", :id => 'loggedas') if User.current.logged? %> - <%= render_menu :top_menu -%> + <%= render_menu :top_menu if User.current.logged? || !Setting.login_required? -%>
    <%= tag('div', {:id => 'header', :class => (display_main_menu?(@project) ? 'header-project' : 'header-general')}, true) %> - + <% if User.current.logged? || !Setting.login_required? %>
    + <% end %> <% unless page_header_title[1].empty? %>

    <%= page_header_title[1] %>

    <% end %> -

    style="margin-top: 0px; " <% end %> - ><%= page_header_title[0] %>

    + ><% if display_main_menu?(@project) %> + <%= link_to_project(@project) %> + <% else %> + <%= page_header_title[0] %> + <% end %> + <% if display_main_menu?(@project) %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/ldap_auth_sources/.svn/all-wcprops --- a/app/views/ldap_auth_sources/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/3744/trunk/app/views/ldap_auth_sources -END -_form.rhtml -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/3744/trunk/app/views/ldap_auth_sources/_form.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/ldap_auth_sources/.svn/entries --- a/app/views/ldap_auth_sources/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/ldap_auth_sources/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/ldap_auth_sources +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/ldap_auth_sources http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.583752Z +2011-07-14T09:24:09.000000Z 7eaca2b2857c3c1ef6fa72633333d56f 2010-05-23T03:16:31.304135Z 3744 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/mailer/.svn/all-wcprops --- a/app/views/mailer/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/mailer/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,197 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 41 -/svn/!svn/ver/4296/trunk/app/views/mailer +V 55 +/svn/!svn/ver/5878/branches/1.2-stable/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 64 -/svn/!svn/ver/877/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/3452/trunk/app/views/mailer/_issue_text_html.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.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 -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 -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 -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 -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 -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 -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 -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.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 -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 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/mailer/.svn/entries --- a/app/views/mailer/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/mailer/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/mailer +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/mailer http://redmine.rubyforge.org/svn -2010-10-27T16:27:06.240747Z -4296 -edavis10 +2011-03-04T14:32:58.878627Z +5003 +jplang @@ -32,7 +32,7 @@ -2010-11-19T13:04:49.420968Z +2011-07-14T09:24:09.000000Z 1729c597befa0c9411266eb9d1c5b577 2010-10-27T16:27:06.240747Z 4296 @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.599741Z +2011-07-14T09:24:09.000000Z e54fccdf5cf9e146cddf2adc5797d76f 2009-02-20T17:04:47.905923Z 2484 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.607738Z +2011-07-14T09:24:09.000000Z 55d268cfc5ec4c2375739d401a00e9ca 2007-11-04T10:43:39.403792Z 877 @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.603754Z +2011-07-14T09:24:09.000000Z 157b6123ac6990f3cb83d1a24c441599 2007-11-18T17:46:55.863051Z 915 @@ -168,7 +168,7 @@ -2010-09-23T14:37:44.603754Z +2011-07-14T09:24:09.000000Z 99836d2f584d6975add91d6f4885dfa3 2010-02-18T19:13:38.135448Z 3452 @@ -202,7 +202,7 @@ -2010-09-23T14:37:44.603754Z +2011-07-14T09:24:09.000000Z 0fcec4c9195f18d0d58724feb863a27e 2007-11-04T10:43:39.403792Z 877 @@ -236,7 +236,7 @@ -2010-09-23T14:37:44.603754Z +2011-07-14T09:24:09.000000Z 501bcdc81562733bce55a29655f6fd89 2009-02-21T11:04:50.579477Z 2493 @@ -270,7 +270,7 @@ -2010-09-23T14:37:44.603754Z +2011-07-14T09:24:09.000000Z 746db1ca981aa5fc37569de58a3be57b 2010-02-18T19:13:38.135448Z 3452 @@ -304,7 +304,7 @@ -2010-09-23T14:37:44.603754Z +2011-07-14T09:24:09.000000Z 55b994ef0e81fdc6d78f280c8716f230 2010-02-18T19:13:38.135448Z 3452 @@ -338,7 +338,7 @@ -2010-09-23T14:37:44.603754Z +2011-07-14T09:24:09.000000Z 76b612bb95df0f232af66dcfa75908a9 2010-02-18T19:13:38.135448Z 3452 @@ -372,7 +372,7 @@ -2010-09-23T14:37:44.607738Z +2011-07-14T09:24:09.000000Z 6a0fb1622f40125ab40706fa05705436 2009-02-21T11:04:50.579477Z 2493 @@ -406,7 +406,7 @@ -2010-09-23T14:37:44.607738Z +2011-07-14T09:24:09.000000Z 6efcff34ccd9ec0ebd5c501a38bd9e61 2009-07-05T14:14:44.411724Z 2814 @@ -440,7 +440,7 @@ -2010-11-19T13:04:49.420968Z +2011-07-14T09:24:09.000000Z 37e05984b98664e4b97c26b51196f9ab 2010-10-27T16:27:06.240747Z 4296 @@ -474,7 +474,7 @@ -2010-09-23T14:37:44.607738Z +2011-07-14T09:24:09.000000Z 62a282059a34f2aaa4d56b609e94e27c 2007-11-04T10:43:39.403792Z 877 @@ -502,13 +502,81 @@ 63 +news_comment_added.text.plain.rhtml +file + + + + +2011-06-06T13:18:33.000000Z +a9f9a05cb394b4eb25b73d5fc647b8cd +2011-03-04T14:32:58.878627Z +5003 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +117 + +news_comment_added.text.html.rhtml +file + + + + +2011-06-06T13:18:33.000000Z +543373e794d16e801a07187a952fb177 +2011-03-04T14:32:58.878627Z +5003 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +178 + test.text.html.rhtml file -2010-09-23T14:37:44.607738Z +2011-07-14T09:24:09.000000Z b95faada3d8a7eac9ddd90de85d377eb 2007-11-04T10:43:39.403792Z 877 @@ -542,7 +610,7 @@ -2010-09-23T14:37:44.599741Z +2011-07-14T09:24:09.000000Z b6dee3a7f5ce5253d3d66ea2d0aed032 2009-02-20T17:04:47.905923Z 2484 @@ -576,7 +644,7 @@ -2010-09-23T14:37:44.607738Z +2011-07-14T09:24:09.000000Z 382940abff8d469305e2b82eaac09875 2007-11-04T10:43:39.403792Z 877 @@ -610,10 +678,10 @@ -2010-09-23T14:37:44.599741Z -1f73b58bdc0fd4474073437ce2e219bd -2007-11-04T10:43:39.403792Z -877 +2011-07-14T09:24:09.000000Z +76a51edc640a60b59fca8e679d0161b6 +2011-02-20T14:27:34.168395Z +4892 jplang has-props @@ -636,7 +704,7 @@ -492 +498 _issue_text_html.rhtml file @@ -644,10 +712,10 @@ -2010-09-23T14:37:44.599741Z -871cf6abc13d895f9de91ef4ac36c2bd -2010-02-18T19:13:38.135448Z -3452 +2011-07-14T09:24:09.000000Z +68467469e0b5a8d3dc67dba7ba7e42b0 +2011-02-20T14:27:34.168395Z +4892 jplang has-props @@ -670,7 +738,7 @@ -629 +635 attachments_added.text.html.rhtml file @@ -678,7 +746,7 @@ -2010-09-23T14:37:44.603754Z +2011-07-14T09:24:09.000000Z db9ef17343824d59b7a19db7036ee2f1 2010-02-18T19:13:38.135448Z 3452 @@ -712,7 +780,7 @@ -2010-09-23T14:37:44.607738Z +2011-07-14T09:24:09.000000Z 0cbce1fe1b288482af3095ce9bc555ed 2007-11-04T10:43:39.403792Z 877 @@ -746,7 +814,7 @@ -2010-09-23T14:37:44.607738Z +2011-07-14T09:24:09.000000Z 7dffb9cfc22aef3b03d0d771179f26d6 2010-02-18T19:13:38.135448Z 3452 @@ -780,7 +848,7 @@ -2010-09-23T14:37:44.603754Z +2011-07-14T09:24:09.000000Z d4eae87a9e17f49caeb6913659b9c42d 2007-11-04T10:43:39.403792Z 877 @@ -814,7 +882,7 @@ -2010-09-23T14:37:44.603754Z +2011-07-14T09:24:09.000000Z 52a0f774acd5b7aeeb3768de943af901 2009-02-21T11:04:50.579477Z 2493 @@ -848,7 +916,7 @@ -2010-09-23T14:37:44.603754Z +2011-07-14T09:24:09.000000Z 06d5fbff057e28328f2be88419207f80 2010-02-18T19:13:38.135448Z 3452 @@ -882,7 +950,7 @@ -2010-09-23T14:37:44.603754Z +2011-07-14T09:24:09.000000Z 2b46c7d28f33cec521374ccae2fd8451 2007-11-04T10:43:39.403792Z 877 @@ -916,7 +984,7 @@ -2010-09-23T14:37:44.603754Z +2011-07-14T09:24:09.000000Z e7e91d7f18dd1547cfebafdf4822a18f 2010-02-18T19:13:38.135448Z 3452 @@ -950,7 +1018,7 @@ -2010-09-23T14:37:44.603754Z +2011-07-14T09:24:09.000000Z 9b7ab36ebc57f0c02756d2b076e67b19 2007-11-26T18:47:49.588558Z 932 @@ -978,13 +1046,47 @@ 68 +wiki_content_updated.text.plain.rhtml +file + + + + +2011-07-14T09:24:09.000000Z +0cb005c22ad144fdbe29238b0080f28b +2010-10-27T16:27:06.240747Z +4296 +edavis10 +has-props + + + + + + + + + + + + + + + + + + + + +288 + lost_password.text.plain.rhtml file -2010-09-23T14:37:44.603754Z +2011-07-14T09:24:09.000000Z 44018a44ceaecb5c9be3fed66e759064 2008-07-21T19:13:46.546624Z 1683 @@ -1012,47 +1114,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-07-14T09:24:09.000000Z a53d9ea13c19cbce1edc375a01b5753d 2010-02-18T19:13:38.135448Z 3452 @@ -1086,7 +1154,7 @@ -2010-11-19T13:04:49.420968Z +2011-07-14T09:24:09.000000Z f35cf0d09dd393a255db2d428a3d30f0 2010-10-27T16:27:06.240747Z 4296 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/mailer/.svn/text-base/_issue_text_html.rhtml.svn-base --- a/app/views/mailer/.svn/text-base/_issue_text_html.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/mailer/.svn/text-base/_issue_text_html.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -7,7 +7,7 @@
  • <%=l(:field_assigned_to)%>: <%=h issue.assigned_to %>
  • <%=l(:field_category)%>: <%=h issue.category %>
  • <%=l(:field_fixed_version)%>: <%=h issue.fixed_version %>
  • -<% issue.custom_values.each do |c| %> +<% issue.custom_field_values.each do |c| %>
  • <%=h c.custom_field.name %>: <%=h show_value(c) %>
  • <% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/mailer/.svn/text-base/_issue_text_plain.rhtml.svn-base --- a/app/views/mailer/.svn/text-base/_issue_text_plain.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/mailer/.svn/text-base/_issue_text_plain.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/mailer/_issue_text_html.rhtml --- a/app/views/mailer/_issue_text_html.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/mailer/_issue_text_html.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -7,7 +7,7 @@
  • <%=l(:field_assigned_to)%>: <%=h issue.assigned_to %>
  • <%=l(:field_category)%>: <%=h issue.category %>
  • <%=l(:field_fixed_version)%>: <%=h issue.fixed_version %>
  • -<% issue.custom_values.each do |c| %> +<% issue.custom_field_values.each do |c| %>
  • <%=h c.custom_field.name %>: <%=h show_value(c) %>
  • <% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/mailer/_issue_text_plain.rhtml --- a/app/views/mailer/_issue_text_plain.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/mailer/_issue_text_plain.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -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 %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/mailer/news_comment_added.text.html.rhtml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/mailer/news_comment_added.text.html.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +

    <%= link_to(h(@news.title), @news_url) %>

    + +

    <%= l(:text_user_wrote, :value => h(@comment.author)) %>

    + +<%= textilizable @comment, :comments, :only_path => false %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/mailer/news_comment_added.text.plain.rhtml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/mailer/news_comment_added.text.plain.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,6 @@ +<%= @news.title %> +<%= @news_url %> + +<%= l(:text_user_wrote, :value => @comment.author) %> + +<%= @comment.comments %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/members/.svn/all-wcprops --- a/app/views/members/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 42 -/svn/!svn/ver/2869/trunk/app/views/members -END -autocomplete_for_member.rhtml -K 25 -svn:wc:ra_dav:version-url -V 72 -/svn/!svn/ver/2869/trunk/app/views/members/autocomplete_for_member.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/members/.svn/entries --- a/app/views/members/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/members/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/members +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/members http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.611740Z +2011-07-14T09:24:09.000000Z 9e105ea0b16e73250d47d57f07d71cff 2009-09-12T08:36:46.650954Z 2869 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/members/_editlist.rhtml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/members/_editlist.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,77 @@ +<%= error_messages_for 'member' %> + +<% roles = Role.find_all_givable + members = @project.member_principals.find(:all, :include => [:roles, :principal]).sort %> + +<% if members.any? %> + + + + + + + + <% members.each do |member| %> + <% next if member.new_record? %> + + + + + +<% end; reset_cycle %> + +
    <%= l(:label_user) %><%= l(:label_role_plural) %>
    <%= link_to_user member.principal %> + <%=h member.roles.sort.collect(&:to_s).join(', ') %> + <% remote_form_for(:member, member, :url => {:controller => 'members', :action => 'edit', :id => member}, + :method => :post, :html => { :id => "member-#{member.id}-roles-form", :class => 'hol' }) do |f| %> +

    <% roles.each do |role| %> +
    + <% end %>

    + <%= hidden_field_tag 'member[role_ids][]', '' %> +

    <%= submit_tag l(:button_change), :class => "small" %> + <%= link_to_function l(:button_cancel), "$('member-#{member.id}-roles').show(); $('member-#{member.id}-roles-form').hide(); return false;" %>

    + <% end %> +
    + <%= link_to_function l(:button_edit), "$('member-#{member.id}-roles').hide(); $('member-#{member.id}-roles-form').show(); return false;", :class => 'icon icon-edit' %> + <%= link_to_remote(l(:button_delete), { :url => {:controller => 'members', :action => 'destroy', :id => member}, + :method => :post, + :confirm => (!User.current.admin? && member.include?(User.current) ? l(:text_own_membership_delete_confirmation) : nil) + }, :title => l(:button_delete), + :class => 'icon icon-del') if member.deletable? %> +
    +<% else %> +

    <%= l(:label_no_data) %>

    +<% end %> + +<% content_for :sidebar do %> +<% principals = Principal.active.find(:all, :limit => 100, :order => 'type, login, lastname ASC') - @project.principals %> + +<% if roles.any? && principals.any? %> + <% remote_form_for(:member, @member, :url => {:controller => 'members', :action => 'new', :id => @project}, :method => :post, + :loading => '$(\'member-add-submit\').disable();', + :complete => 'if($(\'member-add-submit\')) $(\'member-add-submit\').enable();') do |f| %> +

    <%=l(:label_member_new)%>

    + +

    <%= label_tag "principal_search", l(:label_principal_search) %><%= text_field_tag 'principal_search', nil %>

    + <%= observe_field(:principal_search, + :frequency => 0.5, + :update => :principals, + :url => { :controller => 'members', :action => 'autocomplete_for_member', :id => @project }, + :with => 'q') + %> + +
    + <% if params[:q] && params[:q].length > 1 %> + <%= principals_check_box_tags 'member[user_ids][]', @principals %> + <% end %> +
    + +

    <%= l(:label_set_role_plural) %>:

    + <% roles.each do |role| %> +
    <%=l( 'label_' + role.name.downcase + "_description").to_sym %>
    + <% end %> + +

    <%= submit_tag l(:button_add), :id => 'member-add-submit' %>

    + <% end %> +<% end %> +<% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/members/_list.rhtml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/members/_list.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,26 @@ + +<% roles = Role.find_all_givable + members = @project.member_principals.find(:all, :include => [:roles, :principal]).sort %> + +<% if members.any? %> + +
    +
    +<% members.each do |member| %> +
    +<%= avatar(member.user, :size => "24") %> +<%= link_to_user member.principal %> + +
    +<%=h member.roles.sort.collect(&:to_s).join(', ') %> +
    +<% end %> +
    +<% else %> +

    <%= l(:label_no_data) %>

    +<% end %> +
    + +<% content_for :sidebar do %> +<% end %> + diff -r f7c525dc7585 -r 0b6c82dead28 app/views/members/index.rhtml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/members/index.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,13 @@ + +

    <%=l(:label_member_plural)%>

    + +<% editable = authorize_for('members', 'edit') %> + +
    +<% if editable %> +<%= render :partial => 'editlist' %> +<% else %> +<%= render :partial => 'list' %> +<% end %> +
    + diff -r f7c525dc7585 -r 0b6c82dead28 app/views/messages/.svn/all-wcprops --- a/app/views/messages/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 43 -/svn/!svn/ver/3877/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/1205/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 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/messages/.svn/entries --- a/app/views/messages/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/messages/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/messages +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/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-09-23T14:37:44.615740Z +2011-07-14T09:24:09.000000Z c68f1ef8a922f2a408e0349d80db4376 2010-07-25T10:02:12.905073Z 3877 @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.611740Z +2011-07-14T09:24:09.000000Z 4fecf6ec48e549e01ada68dc8d623f38 2010-01-25T17:26:02.255593Z 3339 @@ -100,10 +100,10 @@ -2010-09-23T14:37:44.611740Z -72a4fb6eecd42aceb751370901633f24 -2008-03-07T17:49:44.664945Z -1205 +2011-07-14T09:24:09.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-09-23T14:37:44.611740Z +2011-07-14T09:24:09.000000Z 3512563f842c2e951d7738870f2d4065 2008-03-07T17:49:44.664945Z 1205 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/messages/.svn/text-base/edit.rhtml.svn-base --- a/app/views/messages/.svn/text-base/edit.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/messages/.svn/text-base/edit.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -12,3 +12,7 @@ }, :accesskey => accesskey(:preview) %> <% end %>
    + +<% content_for :header_tags do %> + <%= stylesheet_link_tag 'scm' %> +<% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/messages/edit.rhtml --- a/app/views/messages/edit.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/messages/edit.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -12,3 +12,7 @@ }, :accesskey => accesskey(:preview) %> <% end %>
    + +<% content_for :header_tags do %> + <%= stylesheet_link_tag 'scm' %> +<% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/my/.svn/all-wcprops --- a/app/views/my/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/my/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,41 +1,5 @@ -K 25 -svn:wc:ra_dav:version-url -V 37 -/svn/!svn/ver/4380/trunk/app/views/my -END -account.rhtml K 25 svn:wc:ra_dav:version-url V 51 -/svn/!svn/ver/4223/trunk/app/views/my/account.rhtml +/svn/!svn/ver/5878/branches/1.2-stable/app/views/my END -page.rhtml -K 25 -svn:wc:ra_dav:version-url -V 48 -/svn/!svn/ver/3542/trunk/app/views/my/page.rhtml -END -password.rhtml -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/2678/trunk/app/views/my/password.rhtml -END -_sidebar.rhtml -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/3775/trunk/app/views/my/_sidebar.rhtml -END -_block.rhtml -K 25 -svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/2528/trunk/app/views/my/_block.rhtml -END -page_layout.rhtml -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/4380/trunk/app/views/my/page_layout.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/my/.svn/entries --- a/app/views/my/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/my/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/my +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/my http://redmine.rubyforge.org/svn -2010-11-07T12:36:19.797484Z -4380 -jplang +2011-05-12T00:26:58.029913Z +5748 +tmaruyama @@ -32,7 +32,7 @@ -2010-11-19T13:04:47.012855Z +2011-07-14T09:24:09.000000Z 746c4ac2d5bc111d91747aa0b0c54a5a 2010-09-28T22:13:06.534232Z 4223 @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.623783Z +2011-07-14T09:24:09.000000Z afa83dffe27e19383284d8177f1f4687 2010-03-04T19:02:57.949679Z 3542 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.623783Z +2011-07-14T09:24:09.000000Z a43c901172c8b1750d24612b24f2db22 2009-04-21T13:43:57.529967Z 2678 @@ -137,11 +137,11 @@ -2010-09-23T14:37:44.619750Z -91a0469f13d98fd2504ca036e16660f1 -2010-06-19T16:50:13.340830Z -3775 -edavis10 +2011-07-14T09:24:21.000000Z +e4b4b1b0fe5e86d3a3da3d4161fc5427 +2011-05-12T00:26:58.029913Z +5748 +tmaruyama has-props @@ -163,7 +163,7 @@ -1092 +1125 _block.rhtml file @@ -171,7 +171,7 @@ -2010-09-23T14:37:44.619750Z +2011-07-14T09:24:09.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-07-14T09:24:09.000000Z +852c99d50bf883063cd77b7042c145d4 +2011-01-15T14:04:11.836008Z +4722 jplang has-props @@ -231,5 +231,5 @@ -4274 +4275 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/my/.svn/text-base/_sidebar.rhtml.svn-base --- a/app/views/my/.svn/text-base/_sidebar.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/my/.svn/text-base/_sidebar.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,6 +1,6 @@

    <%=l(:label_my_account)%>

    -

    <%=l(:field_login)%>: <%= @user.login %>
    +

    <%=l(:field_login)%>: <%= link_to_user(@user, :format => :username) %>
    <%=l(:field_created_on)%>: <%= format_time(@user.created_on) %>

    @@ -19,7 +19,7 @@

    <%= l(:label_api_access_key) %>

    <%= link_to_function(l(:button_show), "$('api-access-key').toggle();")%> -
    <%= @user.api_key %>
    +
    <%= h(@user.api_key) %>
    <%= javascript_tag("$('api-access-key').hide();") %>

    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/my/.svn/text-base/page_layout.rhtml.svn-base --- a/app/views/my/.svn/text-base/page_layout.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/my/.svn/text-base/page_layout.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -36,7 +36,7 @@

    <% form_tag({:action => "add_block"}, :id => "block-form") do %> -<%= label_tag('block-select', l(:label_my_page_block)) %> +<%= label_tag('block-select', l(:label_my_page_block)) %>: <%= select_tag 'block', "" + options_for_select(@block_options), :id => "block-select" %> <%= link_to_remote l(:button_add), {:url => { :action => "add_block" }, diff -r f7c525dc7585 -r 0b6c82dead28 app/views/my/_sidebar.rhtml --- a/app/views/my/_sidebar.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/my/_sidebar.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -1,6 +1,6 @@

    <%=l(:label_my_account)%>

    -

    <%=l(:field_login)%>: <%= @user.login %>
    +

    <%=l(:field_login)%>: <%= link_to_user(@user, :format => :username) %>
    <%=l(:field_created_on)%>: <%= format_time(@user.created_on) %>

    @@ -19,7 +19,7 @@

    <%= l(:label_api_access_key) %>

    <%= link_to_function(l(:button_show), "$('api-access-key').toggle();")%> -
    <%= @user.api_key %>
    +
    <%= h(@user.api_key) %>
    <%= javascript_tag("$('api-access-key').hide();") %>

    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/my/blocks/.svn/all-wcprops --- a/app/views/my/blocks/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 44 -/svn/!svn/ver/4259/trunk/app/views/my/blocks -END -_issueswatched.rhtml -K 25 -svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/3557/trunk/app/views/my/blocks/_issueswatched.rhtml -END -_news.rhtml -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/449/trunk/app/views/my/blocks/_news.rhtml -END -_issuesreportedbyme.rhtml -K 25 -svn:wc:ra_dav:version-url -V 70 -/svn/!svn/ver/2598/trunk/app/views/my/blocks/_issuesreportedbyme.rhtml -END -_issuesassignedtome.rhtml -K 25 -svn:wc:ra_dav:version-url -V 70 -/svn/!svn/ver/2777/trunk/app/views/my/blocks/_issuesassignedtome.rhtml -END -_timelog.rhtml -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/4259/trunk/app/views/my/blocks/_timelog.rhtml -END -_documents.rhtml -K 25 -svn:wc:ra_dav:version-url -V 61 -/svn/!svn/ver/1766/trunk/app/views/my/blocks/_documents.rhtml -END -_calendar.rhtml -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/3351/trunk/app/views/my/blocks/_calendar.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/my/blocks/.svn/entries --- a/app/views/my/blocks/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/my/blocks/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/my/blocks +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/my/blocks http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.623783Z +2011-07-14T09:24:09.000000Z 0b880299704151a6acd66b5632f60426 2010-03-10T05:10:43.201527Z 3557 @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.623783Z +2011-07-14T09:24:09.000000Z 6aa71a8cc8a018c4c564915c10355709 2007-04-20T09:53:44.242780Z 449 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.623783Z +2011-07-14T09:24:09.000000Z 55339408a7e093de86505f92845ed977 2009-03-17T17:34:49.297132Z 2598 @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.623783Z +2011-07-14T09:24:09.000000Z bf22b792b1b79c60dc866718c074f370 2009-05-30T23:30:36.923541Z 2777 @@ -168,7 +168,7 @@ -2010-11-19T13:04:47.008792Z +2011-07-14T09:24:09.000000Z 2ba11e15a7f15f88fe061979d921b59d 2010-10-15T23:37:01.382819Z 4259 @@ -202,7 +202,7 @@ -2010-09-23T14:37:44.623783Z +2011-07-14T09:24:09.000000Z a21d8649f0daec69caabb118e9b6375c 2008-08-26T11:08:45.487893Z 1766 @@ -236,7 +236,7 @@ -2010-09-23T14:37:44.623783Z +2011-07-14T09:24:09.000000Z 3894ab9b2f76b3622a362843be2162be 2010-01-30T11:23:17.508662Z 3351 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/my/blocks/_activitymyprojects.rhtml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/my/blocks/_activitymyprojects.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,4 @@ + +<%= render :partial => 'activities/recent', :locals => { :user => User.current } %> + + diff -r f7c525dc7585 -r 0b6c82dead28 app/views/my/blocks/_tipoftheday.rhtml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/my/blocks/_tipoftheday.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,4 @@ +

    <%=l(:label_tipoftheday)%>

    +
    +
    <%= textilizable Setting.tipoftheday_text %>
    +
    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/my/page_layout.rhtml --- a/app/views/my/page_layout.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/my/page_layout.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -36,7 +36,7 @@
    <% form_tag({:action => "add_block"}, :id => "block-form") do %> -<%= label_tag('block-select', l(:label_my_page_block)) %> +<%= label_tag('block-select', l(:label_my_page_block)) %>: <%= select_tag 'block', "" + options_for_select(@block_options), :id => "block-select" %> <%= link_to_remote l(:button_add), {:url => { :action => "add_block" }, diff -r f7c525dc7585 -r 0b6c82dead28 app/views/news/.svn/all-wcprops --- a/app/views/news/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/news/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,41 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 39 -/svn/!svn/ver/4267/trunk/app/views/news +V 53 +/svn/!svn/ver/5878/branches/1.2-stable/app/views/news END -_news.rhtml -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/4214/trunk/app/views/news/_news.rhtml -END -show.rhtml -K 25 -svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/4214/trunk/app/views/news/show.rhtml -END -_form.rhtml -K 25 -svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/750/trunk/app/views/news/_form.rhtml -END -edit.rhtml -K 25 -svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/4214/trunk/app/views/news/edit.rhtml -END -index.rhtml -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/4267/trunk/app/views/news/index.rhtml -END -new.rhtml -K 25 -svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/4214/trunk/app/views/news/new.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/news/.svn/entries --- a/app/views/news/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/news/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/news +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/news http://redmine.rubyforge.org/svn -2010-10-22T14:42:38.351679Z -4267 +2011-03-04T14:32:58.878627Z +5003 jplang @@ -32,7 +32,7 @@ -2010-11-19T13:04:49.428894Z +2011-07-14T09:24:09.000000Z 2501c1cef884fd4a56abb3a4e736825f 2010-09-27T16:51:12.033537Z 4214 @@ -60,17 +60,51 @@ 384 +index.api.rsb +file + + + + +2011-07-14T09:24:09.000000Z +194919e4bc598629f690752af5340b5b +2010-12-12T17:00:52.100205Z +4505 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +506 + show.rhtml file -2010-11-19T13:04:49.428894Z -c21730c749ee8533fadff9abbea6ffd8 -2010-09-27T16:51:12.033537Z -4214 -edavis10 +2011-07-14T09:24:21.000000Z +788183c16154d2b5436073e67273070f +2011-03-04T14:32:58.878627Z +5003 +jplang has-props @@ -92,7 +126,7 @@ -2897 +2960 _form.rhtml file @@ -100,7 +134,7 @@ -2010-09-23T14:37:44.627781Z +2011-07-14T09:24:09.000000Z e06c154a981d18d975bcba8eb682df30 2007-09-22T17:52:43.686392Z 750 @@ -134,7 +168,7 @@ -2010-11-19T13:04:49.432892Z +2011-07-14T09:24:09.000000Z dd2c968c6b42916bff9b9e5de055e007 2010-09-27T16:51:12.033537Z 4214 @@ -168,7 +202,7 @@ -2010-11-19T13:04:49.432892Z +2011-07-14T09:24:09.000000Z 764ec3719917039d0cac3d375ec819c4 2010-10-22T14:42:38.351679Z 4267 @@ -202,7 +236,7 @@ -2010-11-19T13:04:49.432892Z +2011-07-14T09:24:09.000000Z 1e7f24dd1dc6a117b245a76174e4c8ae 2010-09-27T16:51:12.033537Z 4214 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/news/.svn/prop-base/index.api.rsb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/news/.svn/prop-base/index.api.rsb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/news/.svn/text-base/index.api.rsb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/news/.svn/text-base/index.api.rsb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,14 @@ +api.array :news, api_meta(:total_count => @news_count, :offset => @offset, :limit => @limit) do + @newss.each do |news| + api.news do + api.id news.id + api.project(:id => news.project_id, :name => news.project.name) unless news.project.nil? + api.author(:id => news.author_id, :name => news.author.name) unless news.author.nil? + + api.title news.title + api.summary news.summary + api.description news.description + api.created_on news.created_on + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 app/views/news/.svn/text-base/show.rhtml.svn-base --- a/app/views/news/.svn/text-base/show.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/news/.svn/text-base/show.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,10 +1,15 @@
    -<%= link_to_if_authorized l(:button_edit), - edit_news_path(@news), - :class => 'icon icon-edit', - :accesskey => accesskey(:edit), - :onclick => 'Element.show("edit-news"); return false;' %> -<%= link_to_if_authorized l(:button_delete), news_path(@news), :confirm => l(:text_are_you_sure), :method => :delete, :class => 'icon icon-del' %> +<%= watcher_tag(@news, User.current) %> +<%= link_to(l(:button_edit), + edit_news_path(@news), + :class => 'icon icon-edit', + :accesskey => accesskey(:edit), + :onclick => 'Element.show("edit-news"); return false;') if User.current.allowed_to?(:manage_news, @project) %> +<%= link_to(l(:button_delete), + news_path(@news), + :confirm => l(:text_are_you_sure), + :method => :delete, + :class => 'icon icon-del') if User.current.allowed_to?(:manage_news, @project) %>

    <%= avatar(@news.author, :size => "24") %><%=h @news.title %>

    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/news/_news.rhtml --- a/app/views/news/_news.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/news/_news.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -1,6 +1,13 @@ -

    <%= link_to_project(news.project) + ': ' unless @project %> -<%= link_to h(news.title), news_path(news) %> -<%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %> -
    +

    +
    +<%= format_time(news.created_on) %> +<% project ||= @project %> +<% if !project %> +<%= link_to_project(news.project) %> +<% end %> +<%= link_to h(news.title), news_path(news) %> +<%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %> +
    <% unless news.summary.blank? %><%=h news.summary %>
    <% end %> -<%= authoring news.created_on, news.author %>

    +
    +
    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/news/index.api.rsb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/news/index.api.rsb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,14 @@ +api.array :news, api_meta(:total_count => @news_count, :offset => @offset, :limit => @limit) do + @newss.each do |news| + api.news do + api.id news.id + api.project(:id => news.project_id, :name => news.project.name) unless news.project.nil? + api.author(:id => news.author_id, :name => news.author.name) unless news.author.nil? + + api.title news.title + api.summary news.summary + api.description news.description + api.created_on news.created_on + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 app/views/news/show.rhtml --- a/app/views/news/show.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/news/show.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -1,10 +1,15 @@
    -<%= link_to_if_authorized l(:button_edit), - edit_news_path(@news), - :class => 'icon icon-edit', - :accesskey => accesskey(:edit), - :onclick => 'Element.show("edit-news"); return false;' %> -<%= link_to_if_authorized l(:button_delete), news_path(@news), :confirm => l(:text_are_you_sure), :method => :delete, :class => 'icon icon-del' %> +<%= watcher_tag(@news, User.current) %> +<%= link_to(l(:button_edit), + edit_news_path(@news), + :class => 'icon icon-edit', + :accesskey => accesskey(:edit), + :onclick => 'Element.show("edit-news"); return false;') if User.current.allowed_to?(:manage_news, @project) %> +<%= link_to(l(:button_delete), + news_path(@news), + :confirm => l(:text_are_you_sure), + :method => :delete, + :class => 'icon icon-del') if User.current.allowed_to?(:manage_news, @project) %>

    <%= avatar(@news.author, :size => "24") %><%=h @news.title %>

    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/previews/.svn/all-wcprops --- a/app/views/previews/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 43 -/svn/!svn/ver/3946/trunk/app/views/previews -END -issue.html.erb -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/3946/trunk/app/views/previews/issue.html.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/previews/.svn/entries --- a/app/views/previews/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/previews/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/previews +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/previews http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.631740Z +2011-07-14T09:24:09.000000Z 359c6608ef716c8b3b62fd96c241a680 2010-08-18T15:01:35.032314Z 3946 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/projects/.svn/all-wcprops --- a/app/views/projects/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/projects/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,77 +1,17 @@ -K 25 -svn:wc:ra_dav:version-url -V 43 -/svn/!svn/ver/4402/trunk/app/views/projects -END -copy.rhtml -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/3608/trunk/app/views/projects/copy.rhtml -END -new.html.erb -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/4069/trunk/app/views/projects/new.html.erb -END -show.xml.builder -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/4382/trunk/app/views/projects/show.xml.builder -END -settings.rhtml -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/2871/trunk/app/views/projects/settings.rhtml -END -show.rhtml -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/4382/trunk/app/views/projects/show.rhtml -END -_form.rhtml -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/4402/trunk/app/views/projects/_form.rhtml -END -_edit.rhtml -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/4071/trunk/app/views/projects/_edit.rhtml -END -list_members.rhtml -K 25 -svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/2990/trunk/app/views/projects/list_members.rhtml -END -index.xml.builder -K 25 -svn:wc:ra_dav:version-url -V 61 -/svn/!svn/ver/4382/trunk/app/views/projects/index.xml.builder -END -_members_box.html.erb -K 25 -svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/4009/trunk/app/views/projects/_members_box.html.erb -END -index.rhtml -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/4069/trunk/app/views/projects/index.rhtml -END -destroy.rhtml K 25 svn:wc:ra_dav:version-url V 57 -/svn/!svn/ver/4071/trunk/app/views/projects/destroy.rhtml +/svn/!svn/ver/6205/branches/1.2-stable/app/views/projects END +index.api.rsb +K 25 +svn:wc:ra_dav:version-url +V 71 +/svn/!svn/ver/6205/branches/1.2-stable/app/views/projects/index.api.rsb +END +show.api.rsb +K 25 +svn:wc:ra_dav:version-url +V 70 +/svn/!svn/ver/6205/branches/1.2-stable/app/views/projects/show.api.rsb +END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/projects/.svn/entries --- a/app/views/projects/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/projects/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/projects +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/projects http://redmine.rubyforge.org/svn -2010-11-14T12:33:14.198318Z -4402 +2011-07-09T11:42:12.586037Z +6205 jplang @@ -32,10 +32,10 @@ -2010-09-23T14:37:44.643780Z -26653788620aef89a25b8ad819144e03 -2010-03-21T11:17:29.163519Z -3608 +2011-07-14T09:24:21.000000Z +0131341fbe8ad004ae5bc77375cdfee7 +2011-04-05T13:26:32.676058Z +5330 jplang has-props @@ -58,7 +58,7 @@ -1919 +1582 settings dir @@ -69,44 +69,10 @@ -2010-09-24T12:48:28.956343Z -6d0e913f69c037dd846dd198fec2dbe8 -2010-09-07T15:00:27.481481Z -4069 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -627 - -show.xml.builder -file - - - - -2010-11-19T13:04:49.468916Z -2c71cdd8d404107942ca25fbd76f7099 -2010-11-07T14:15:01.891476Z -4382 +2011-07-14T09:24:09.000000Z +89a2baf21090ed983ffe265fa0929b29 +2011-01-06T21:02:19.982329Z +4648 jplang has-props @@ -129,7 +95,41 @@ -687 +289 + +index.api.rsb +file + + + + +2011-07-14T09:28:10.000000Z +81935bde0a2cef3ac234bd524542bbfe +2011-07-09T11:42:12.586037Z +6205 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +607 settings.rhtml file @@ -137,7 +137,7 @@ -2010-09-23T14:37:44.643780Z +2011-07-14T09:24:09.000000Z 66d45b68c4615d2b502b2c6d06cf0951 2009-09-12T09:13:13.676884Z 2871 @@ -171,10 +171,10 @@ -2010-11-19T13:04:49.468916Z -bbcdfa64f2a80d809b80b00c26fd0c8c -2010-11-07T14:15:01.891476Z -4382 +2011-07-14T09:24:21.000000Z +32752b6b82cb4f60ebabf9114f8c861d +2011-03-16T17:29:30.884439Z +5149 jplang has-props @@ -197,7 +197,7 @@ -3499 +3450 _form.rhtml file @@ -205,10 +205,10 @@ -2010-11-19T13:04:49.468916Z -a7153b3d30bc50efcce516bb73b04f3b -2010-11-14T12:33:14.198318Z -4402 +2011-07-14T09:24:09.000000Z +b0519f745853f4f4e673c2e30389dc40 +2011-01-06T21:02:19.982329Z +4648 jplang has-props @@ -231,7 +231,7 @@ -1944 +2630 _edit.rhtml file @@ -239,7 +239,7 @@ -2010-09-24T12:48:28.959844Z +2011-07-14T09:24:09.000000Z e3a6cb86da5f31cae6c8fc0a4e6bad35 2010-09-09T18:57:21.507694Z 4071 @@ -273,7 +273,7 @@ -2010-09-23T14:37:44.643780Z +2011-07-14T09:24:09.000000Z 0f2ffbd9b87d4ecc80f5c8bcac0cc9e9 2009-10-29T18:44:16.555741Z 2990 @@ -301,47 +301,13 @@ 391 -index.xml.builder -file - - - - -2010-11-19T13:04:49.472856Z -0a17e1dac1d3e2ac43c08f0039802b8c -2010-11-07T14:15:01.891476Z -4382 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -729 - _members_box.html.erb file -2010-09-23T14:37:44.639741Z +2011-07-14T09:24:09.000000Z f880a7facfac62099e5b3fc4ebe862b3 2010-08-19T22:24:37.242219Z 4009 @@ -375,7 +341,7 @@ -2010-09-24T12:48:28.959844Z +2011-07-14T09:24:09.000000Z cb60b85b211b8c78058e4ccc5cdefc82 2010-09-07T15:00:27.481481Z 4069 @@ -403,13 +369,47 @@ 1155 +show.api.rsb +file + + + + +2011-07-14T09:28:10.000000Z +9a755194059dcd5ae4d62289f3e00f52 +2011-07-09T11:42:12.586037Z +6205 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +643 + destroy.rhtml file -2010-09-24T12:48:28.959844Z +2011-07-14T09:24:09.000000Z 308fa6064dd3e4d6d85be448402ba7b2 2010-09-09T18:57:21.507694Z 4071 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/projects/.svn/prop-base/index.api.rsb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/projects/.svn/prop-base/index.api.rsb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/projects/.svn/prop-base/index.xml.builder.svn-base --- a/app/views/projects/.svn/prop-base/index.xml.builder.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/projects/.svn/prop-base/show.api.rsb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/projects/.svn/prop-base/show.api.rsb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/projects/.svn/prop-base/show.xml.builder.svn-base --- a/app/views/projects/.svn/prop-base/show.xml.builder.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/projects/.svn/text-base/_form.rhtml.svn-base --- a/app/views/projects/.svn/text-base/_form.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/projects/.svn/text-base/_form.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -23,8 +23,22 @@ <%= call_hook(:view_projects_form, :project => @project, :form => f) %>
    +<% if @project.new_record? %> +
    <%= l(:label_module_plural) %> +<% Redmine::AccessControl.available_project_modules.each do |m| %> + +<% end %> +<%= hidden_field_tag 'project[enabled_module_names][]', '' %> +<%= javascript_tag 'observeProjectModules()' %> +
    +<% end %> + +<% if @project.new_record? || @project.module_enabled?('issue_tracking') %> <% unless @trackers.empty? %> -
    <%=l(:label_tracker_plural)%> +
    <%=l(:label_tracker_plural)%> <% @trackers.each do |tracker| %>
    <% content_for :sidebar do %> - <% if @total_hours && User.current.allowed_to?(:view_time_entries, @project) %> + <% if @total_hours.present? %>

    <%= l(:label_spent_time) %>

    <%= l_hours(@total_hours) %>

    <%= link_to(l(:label_details), {:controller => 'timelog', :action => 'index', :project_id => @project}) %> | diff -r f7c525dc7585 -r 0b6c82dead28 app/views/projects/.svn/text-base/show.xml.builder.svn-base --- a/app/views/projects/.svn/text-base/show.xml.builder.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -xml.instruct! -xml.project do - xml.id @project.id - xml.name @project.name - xml.identifier @project.identifier - xml.description @project.description - xml.homepage @project.homepage - - xml.custom_fields do - @project.visible_custom_field_values.each do |custom_value| - xml.custom_field custom_value.value, :id => custom_value.custom_field_id, :name => custom_value.custom_field.name - end - end unless @project.custom_field_values.empty? - - xml.created_on @project.created_on - xml.updated_on @project.updated_on - - xml.trackers do - @project.trackers.each do |tracker| - xml.tracker(:id => tracker.id, :name => tracker.name) - end - end -end diff -r f7c525dc7585 -r 0b6c82dead28 app/views/projects/_form.rhtml --- a/app/views/projects/_form.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/projects/_form.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -33,8 +33,22 @@ <%= call_hook(:view_projects_form, :project => @project, :form => f) %>

    +<% if @project.new_record? %> +
    <%= l(:label_module_plural) %> +<% Redmine::AccessControl.available_project_modules.each do |m| %> + +<% end %> +<%= hidden_field_tag 'project[enabled_module_names][]', '' %> +<%= javascript_tag 'observeProjectModules()' %> +
    +<% end %> + +<% if @project.new_record? || @project.module_enabled?('issue_tracking') %> <% unless @trackers.empty? %> -
    <%=l(:label_tracker_plural)%> +
    <%=l(:label_tracker_plural)%> <% @trackers.each do |tracker| %>
    +<% if @project.has_welcome_page %> +<% page = @project.wiki.find_page("Overview") %> +<% end %> + +<% if page %> + +<% if @project.module_enabled? :wiki %> +<% if User.current.allowed_to?(:edit_wiki_pages, @project) %> +
    +<%= link_to(l(:button_welcome_page_edit_this), {:controller => 'wiki', :action => 'edit', :project_id => @project, :id => Wiki.titleize("Overview")}, :class => 'icon icon-edit') %> +
    +<% end %> +<% end %> + +
    +
      +<% unless @project.homepage.blank? %>
    • <%=l(:field_homepage)%>: <%= auto_link(h(@project.homepage)) %>
    • <% end %> +<% if @subprojects.any? %> +
    • <%=l(:label_subproject_plural)%>: + <%= @subprojects.collect{|p| link_to(h(p), :action => 'show', :id => p)}.join(", ") %>
    • +<% end %> +
    +
    + +<%= render(:partial => "wiki/content", :locals => {:content => page.content_for_version()}) %> + +<% else %> +

    <%=l(:label_overview)%>

    @@ -23,7 +51,8 @@ <% end %> - <% if User.current.allowed_to?(:view_issues, @project) %> + <% if User.current.allowed_to?(:view_issues, @project) and @open_issues_by_tracker.values.any? %> +

    <%=l(:label_issue_tracking)%>

      @@ -46,7 +75,9 @@ <% end %>

    + <% end %> + <%= call_hook(:view_projects_show_left, :project => @project) %>
    @@ -60,11 +91,14 @@

    <%= link_to l(:label_news_view_all), :controller => 'news', :action => 'index', :project_id => @project %>

    <% end %> + + <%= render :partial => 'activities/recent' %> + <%= call_hook(:view_projects_show_right, :project => @project) %>
    <% content_for :sidebar do %> - <% if @total_hours && User.current.allowed_to?(:view_time_entries, @project) %> + <% if @total_hours.present? %>

    <%= l(:label_spent_time) %>

    <%= l_hours(@total_hours) %>

    <%= link_to(l(:label_details), {:controller => 'timelog', :action => 'index', :project_id => @project}) %> | @@ -73,6 +107,8 @@ <%= call_hook(:view_projects_show_sidebar_bottom, :project => @project) %> <% end %> +<% end %> + <% content_for :header_tags do %> <%= auto_discovery_link_tag(:atom, {:controller => 'activities', :action => 'index', :id => @project, :format => 'atom', :key => User.current.rss_key}) %> <% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/projects/show.xml.builder --- a/app/views/projects/show.xml.builder Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -xml.instruct! -xml.project do - xml.id @project.id - xml.name @project.name - xml.identifier @project.identifier - xml.description @project.description - xml.homepage @project.homepage - - xml.custom_fields do - @project.visible_custom_field_values.each do |custom_value| - xml.custom_field custom_value.value, :id => custom_value.custom_field_id, :name => custom_value.custom_field.name - end - end unless @project.custom_field_values.empty? - - xml.created_on @project.created_on - xml.updated_on @project.updated_on - - xml.trackers do - @project.trackers.each do |tracker| - xml.tracker(:id => tracker.id, :name => tracker.name) - end - end -end diff -r f7c525dc7585 -r 0b6c82dead28 app/views/queries/.svn/all-wcprops --- a/app/views/queries/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/queries/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,41 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 42 -/svn/!svn/ver/4387/trunk/app/views/queries +V 56 +/svn/!svn/ver/5878/branches/1.2-stable/app/views/queries END -_columns.rhtml -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/3106/trunk/app/views/queries/_columns.rhtml -END -_form.rhtml -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/3105/trunk/app/views/queries/_form.rhtml -END -edit.rhtml -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/784/trunk/app/views/queries/edit.rhtml -END -_filters.rhtml -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/4387/trunk/app/views/queries/_filters.rhtml -END -index.rhtml -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/887/trunk/app/views/queries/index.rhtml -END -new.rhtml -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/2895/trunk/app/views/queries/new.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/queries/.svn/entries --- a/app/views/queries/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/queries/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/queries +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/queries http://redmine.rubyforge.org/svn -2010-11-07T15:38:51.908839Z -4387 +2011-04-03T14:31:32.940784Z +5304 jplang @@ -32,10 +32,10 @@ -2010-09-23T14:37:44.655737Z -409f5db0d48427b0a9077eb0804d13f9 -2009-11-28T11:59:45.246623Z -3106 +2011-07-14T09:24:21.000000Z +b7275c2d279af7900a9b83a4a7e93611 +2011-04-03T14:31:32.940784Z +5304 jplang has-props @@ -58,7 +58,7 @@ -1235 +1217 _form.rhtml file @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.655737Z +2011-07-14T09:24:09.000000Z 9d6312b02ab4243f7f899de6e37e260b 2009-11-28T11:34:12.256986Z 3105 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.655737Z +2011-07-14T09:24:09.000000Z b2d901380f08af968240e5dc82b90fc4 2007-10-01T11:39:34.113865Z 784 @@ -134,10 +134,10 @@ -2010-11-19T13:04:50.836916Z -e57491c4634e00f0ef53c44959c58d46 -2010-11-07T15:38:51.908839Z -4387 +2011-07-14T09:24:21.000000Z +9b66a1f09df990f9bbc5bb79427d7a7b +2011-04-01T15:00:23.035426Z +5279 jplang has-props @@ -160,7 +160,7 @@ -4495 +4537 index.rhtml file @@ -168,7 +168,7 @@ -2010-09-23T14:37:44.655737Z +2011-07-14T09:24:09.000000Z 214378e8574ddebfc274513b423f51a2 2007-11-05T18:38:42.932265Z 887 @@ -202,7 +202,7 @@ -2010-09-23T14:37:44.655737Z +2011-07-14T09:24:09.000000Z d42e88aaf70a65db3b609d51857fb711 2009-09-20T14:06:57.257282Z 2895 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/queries/.svn/text-base/_columns.rhtml.svn-base --- a/app/views/queries/.svn/text-base/_columns.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/queries/.svn/text-base/_columns.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -10,7 +10,7 @@

    <%= select_tag 'query[column_names][]', + <%= select_tag 'c[]', options_for_select(query.columns.collect {|column| [column.caption, column.name]}), :id => 'selected_columns', :multiple => true, :size => 10, :style => "width:150px" %>
    - <%= check_box_tag 'fields[]', field, query.has_filter?(field), :onclick => "toggle_filter('#{field}');", :id => "cb_#{field}" %> + <%= check_box_tag 'f[]', field, query.has_filter?(field), :onclick => "toggle_filter('#{field}');", :id => "cb_#{field}" %> - <%= select_tag "operators[#{field}]", options_for_select(operators_for_select(options[:type]), query.operator_for(field)), :id => "operators_#{field}", :onchange => "toggle_operator('#{field}');", :class => "select-small", :style => "vertical-align: top;" %> + <%= select_tag "op[#{field}]", options_for_select(operators_for_select(options[:type]), query.operator_for(field)), :id => "operators_#{field}", :onchange => "toggle_operator('#{field}');", :class => "select-small", :style => "vertical-align: top;" %> @@ -114,4 +120,4 @@
    -<%= hidden_field_tag 'fields[]', '' %> +<%= hidden_field_tag 'f[]', '' %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/queries/_columns.rhtml --- a/app/views/queries/_columns.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/queries/_columns.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -10,7 +10,7 @@ - <%= select_tag 'query[column_names][]', + <%= select_tag 'c[]', options_for_select(query.columns.collect {|column| [column.caption, column.name]}), :id => 'selected_columns', :multiple => true, :size => 10, :style => "width:150px" %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/queries/_filters.rhtml --- a/app/views/queries/_filters.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/queries/_filters.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -21,10 +21,14 @@ if (check_box.checked) { Element.show("operators_" + field); + Form.Element.enable("operators_" + field); + Form.Element.enable("values_" + field); toggle_operator(field); } else { Element.hide("operators_" + field); Element.hide("div_values_" + field); + Form.Element.disable("operators_" + field); + Form.Element.disable("values_" + field); } } @@ -54,13 +58,15 @@ } } +function submit_query_form(id) { + selectAllOptions("selected_columns"); + $(id).submit(); +} + function apply_filters_observer() { $$("#query_form input[type=text]").invoke("observe", "keypress", function(e){ if(e.keyCode == Event.KEY_RETURN) { - <%= remote_function(:url => { :set_filter => 1}, - :update => "content", - :with => "Form.serialize('query_form')", - :complete => "e.stop(); apply_filters_observer()") %> + submit_query_form("query_form"); } }); } @@ -77,26 +83,26 @@ options = filter[1] %> id="tr_<%= field %>" class="filter"> - <%= check_box_tag 'fields[]', field, query.has_filter?(field), :onclick => "toggle_filter('#{field}');", :id => "cb_#{field}" %> + <%= check_box_tag 'f[]', field, query.has_filter?(field), :onclick => "toggle_filter('#{field}');", :id => "cb_#{field}" %> - <%= select_tag "operators[#{field}]", options_for_select(operators_for_select(options[:type]), query.operator_for(field)), :id => "operators_#{field}", :onchange => "toggle_operator('#{field}');", :class => "select-small", :style => "vertical-align: top;" %> + <%= select_tag "op[#{field}]", options_for_select(operators_for_select(options[:type]), query.operator_for(field)), :id => "operators_#{field}", :onchange => "toggle_operator('#{field}');", :class => "select-small", :style => "vertical-align: top;" %> @@ -114,4 +120,4 @@ -<%= hidden_field_tag 'fields[]', '' %> +<%= hidden_field_tag 'f[]', '' %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/reports/.svn/all-wcprops --- a/app/views/reports/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 42 -/svn/!svn/ver/3797/trunk/app/views/reports -END -issue_report.rhtml -K 25 -svn:wc:ra_dav:version-url -V 61 -/svn/!svn/ver/3797/trunk/app/views/reports/issue_report.rhtml -END -_details.rhtml -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/3283/trunk/app/views/reports/_details.rhtml -END -_simple.rhtml -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/3283/trunk/app/views/reports/_simple.rhtml -END -issue_report_details.rhtml -K 25 -svn:wc:ra_dav:version-url -V 68 -/svn/!svn/ver/333/trunk/app/views/reports/issue_report_details.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/reports/.svn/entries --- a/app/views/reports/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/reports/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/reports +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/reports http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.659737Z +2011-07-14T09:24:09.000000Z d150c943c49d910431268e3b5b148f5d 2010-06-20T03:37:42.430179Z 3797 @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.659737Z +2011-07-14T09:24:09.000000Z faf9d3d189ffa44154f1272c333808b5 2010-01-07T21:12:16.849243Z 3283 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.659737Z +2011-07-14T09:24:09.000000Z b0028f798f34512aa7c5f8c014ad73f7 2010-01-07T21:12:16.849243Z 3283 @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.659737Z +2011-07-14T09:24:09.000000Z 58b8758e6fc3da959cb412ae64e9237f 2007-03-12T17:59:02.654744Z 333 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/repositories/.svn/all-wcprops --- a/app/views/repositories/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/repositories/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,95 +1,5 @@ -K 25 -svn:wc:ra_dav:version-url -V 47 -/svn/!svn/ver/4100/trunk/app/views/repositories -END -stats.rhtml -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/2895/trunk/app/views/repositories/stats.rhtml -END -revision.rhtml -K 25 -svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/3216/trunk/app/views/repositories/revision.rhtml -END -_navigation.rhtml -K 25 -svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/3086/trunk/app/views/repositories/_navigation.rhtml -END -entry.rhtml -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/2840/trunk/app/views/repositories/entry.rhtml -END -_dir_list_content.rhtml -K 25 -svn:wc:ra_dav:version-url -V 71 -/svn/!svn/ver/3309/trunk/app/views/repositories/_dir_list_content.rhtml -END -diff.rhtml -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/4100/trunk/app/views/repositories/diff.rhtml -END -changes.rhtml K 25 svn:wc:ra_dav:version-url V 61 -/svn/!svn/ver/2840/trunk/app/views/repositories/changes.rhtml +/svn/!svn/ver/5878/branches/1.2-stable/app/views/repositories END -_dir_list.rhtml -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/1032/trunk/app/views/repositories/_dir_list.rhtml -END -annotate.rhtml -K 25 -svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/3585/trunk/app/views/repositories/annotate.rhtml -END -show.rhtml -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/2849/trunk/app/views/repositories/show.rhtml -END -_revisions.rhtml -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/3216/trunk/app/views/repositories/_revisions.rhtml -END -revisions.rhtml -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/2840/trunk/app/views/repositories/revisions.rhtml -END -committers.rhtml -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/2137/trunk/app/views/repositories/committers.rhtml -END -_link_to_functions.rhtml -K 25 -svn:wc:ra_dav:version-url -V 72 -/svn/!svn/ver/2849/trunk/app/views/repositories/_link_to_functions.rhtml -END -_breadcrumbs.rhtml -K 25 -svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/3613/trunk/app/views/repositories/_breadcrumbs.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/repositories/.svn/entries --- a/app/views/repositories/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/repositories/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/repositories +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/repositories http://redmine.rubyforge.org/svn -2010-09-18T16:50:08.696338Z -4100 -jbbarth +2011-05-21T00:59:40.399050Z +5860 +tmaruyama @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.671737Z +2011-07-14T09:24:09.000000Z 59dbb643c447518053d9cdb1a86cb5ef 2009-11-24T17:55:45.336708Z 3086 @@ -66,11 +66,11 @@ -2010-09-24T11:56:52.963971Z -bd525284ca2c21084be84d21823b552a -2009-12-22T23:23:54.920563Z -3216 -edavis10 +2011-07-14T09:24:21.000000Z +384e66ab55cf66e21cf0e6281db6745f +2011-05-21T00:58:47.244046Z +5859 +tmaruyama has-props @@ -92,7 +92,7 @@ -1953 +2090 stats.rhtml file @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.671737Z +2011-07-14T09:24:09.000000Z bafc924316c90c31dc1cd9a6daf124ef 2009-09-20T14:06:57.257282Z 2895 @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.671737Z +2011-07-14T09:24:09.000000Z 012e1437dd062433556a6281439b3900 2009-08-15T22:41:40.505056Z 2840 @@ -168,11 +168,11 @@ -2010-09-24T11:56:52.940032Z -6aa753bae9bc68aad5b77b2114b10a32 -2010-01-13T17:27:37.119848Z -3309 -edavis10 +2011-07-14T09:24:21.000000Z +52062d28fe7f8fce9ba10335926fe6c2 +2011-05-13T03:55:21.375053Z +5775 +tmaruyama has-props @@ -194,7 +194,7 @@ -1724 +2029 _dir_list.rhtml file @@ -202,11 +202,11 @@ -2010-09-23T14:37:44.667779Z -8c004b6e433ac1a6ca64c97a35512f28 -2008-01-02T22:41:53.166620Z -1032 -jplang +2011-07-14T09:24:21.000000Z +13d094fdb12d094bcd8db82898f94612 +2011-05-13T03:55:21.375053Z +5775 +tmaruyama has-props @@ -228,7 +228,7 @@ -350 +411 changes.rhtml file @@ -236,7 +236,7 @@ -2010-09-23T14:37:44.671737Z +2011-07-14T09:24:09.000000Z cde7a86a5ec0cf9915b0540c9acbb820 2009-08-15T22:41:40.505056Z 2840 @@ -270,11 +270,11 @@ -2010-09-24T12:48:28.351870Z -c13f0d8b3dc374fad7b308711950dc4d -2010-09-18T16:50:08.696338Z -4100 -jbbarth +2011-07-14T09:24:09.000000Z +76c0335206cfde112a6416937072848b +2011-01-11T16:04:07.541291Z +4698 +tmaruyama has-props @@ -296,7 +296,7 @@ -991 +944 annotate.rhtml file @@ -304,11 +304,11 @@ -2010-09-24T11:56:52.959974Z -0c8eb649e97f4f9335fb916ac76146f3 -2010-03-14T13:22:50.317701Z -3585 -jplang +2011-07-14T09:24:09.000000Z +d3aaac2a6c4b7c77b844324970afff64 +2011-01-02T09:45:05.291687Z +4613 +tmaruyama has-props @@ -330,7 +330,7 @@ -1420 +1333 _revisions.rhtml file @@ -338,11 +338,11 @@ -2010-09-24T11:56:52.952009Z -e7a6bdebdc02cae051102093180af71e -2009-12-22T23:23:54.920563Z -3216 -edavis10 +2011-07-14T09:24:09.000000Z +61a2e63b2e36b7d622d95745cc864583 +2011-01-02T09:45:05.291687Z +4613 +tmaruyama has-props @@ -364,7 +364,7 @@ -1346 +1341 show.rhtml file @@ -372,11 +372,11 @@ -2010-09-23T14:37:44.671737Z -5608dc13675382cd62688058ca0b77d1 -2009-09-01T12:13:17.386587Z -2849 -jplang +2011-07-14T09:24:21.000000Z +d63ae531baf19516526772ad42c128a2 +2011-03-26T02:40:13.309063Z +5223 +tmaruyama has-props @@ -398,7 +398,7 @@ -1461 +2061 revisions.rhtml file @@ -406,11 +406,11 @@ -2010-09-23T14:37:44.671737Z -f2efac3274e0c46cf32037372907a644 -2009-08-15T22:41:40.505056Z -2840 -edavis10 +2011-07-14T09:24:21.000000Z +ebdeb45983545fd5691d8667b156ccfd +2011-05-21T00:59:40.399050Z +5860 +tmaruyama has-props @@ -432,7 +432,7 @@ -810 +960 _link_to_functions.rhtml file @@ -440,7 +440,7 @@ -2010-09-23T14:37:44.667779Z +2011-07-14T09:24:09.000000Z a86ac8a045315f57fa32acb29c08f19f 2009-09-01T12:13:17.386587Z 2849 @@ -474,7 +474,7 @@ -2010-09-23T14:37:44.671737Z +2011-07-14T09:24:09.000000Z 2db96b0dcaab42c8e67b7fc590618fd3 2008-12-15T18:02:25.843227Z 2137 @@ -508,11 +508,11 @@ -2010-09-23T14:37:44.667779Z -17818458dc60da031d02ae162930c320 -2010-03-27T12:46:45.030950Z -3613 -jplang +2011-07-14T09:24:21.000000Z +70983d0940293e9e5b731b0d182d76ab +2011-03-16T00:51:14.442890Z +5147 +tmaruyama has-props @@ -534,5 +534,5 @@ -666 +912 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/repositories/.svn/text-base/_breadcrumbs.rhtml.svn-base --- a/app/views/repositories/.svn/text-base/_breadcrumbs.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/repositories/.svn/text-base/_breadcrumbs.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -10,12 +10,19 @@ link_path << '/' unless link_path.empty? link_path << "#{dir}" %> - / <%= link_to h(dir), :action => 'show', :id => @project, :path => to_path_param(link_path), :rev => @rev %> + / <%= link_to h(dir), :action => 'show', :id => @project, + :path => to_path_param(link_path), :rev => @rev %> <% end %> <% if filename %> - / <%= link_to h(filename), :action => 'changes', :id => @project, :path => to_path_param("#{link_path}/#{filename}"), :rev => @rev %> + / <%= link_to h(filename), + :action => 'changes', :id => @project, + :path => to_path_param("#{link_path}/#{filename}"), :rev => @rev %> <% end %> - -<%= "@ #{h revision}" if revision %> +<% + # @rev is revsion or Git and Mercurial branch or tag. + # For Mercurial *tip*, @rev and @changeset are nil. + rev_text = @changeset.nil? ? @rev : format_revision(@changeset) +%> +<%= "@ #{h rev_text}" unless rev_text.blank? %> <% html_title(with_leading_slash(path)) -%> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/repositories/.svn/text-base/_dir_list.rhtml.svn-base --- a/app/views/repositories/.svn/text-base/_dir_list.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/repositories/.svn/text-base/_dir_list.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -3,10 +3,12 @@ <%= l(:field_name) %> <%= l(:field_filesize) %> -<%= l(:label_revision) %> -<%= l(:label_age) %> -<%= l(:field_author) %> -<%= l(:field_comments) %> +<% if @repository.report_last_commit %> +<%= l(:label_revision) %> +<%= l(:label_age) %> +<%= l(:field_author) %> +<%= l(:field_comments) %> +<% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/repositories/.svn/text-base/_dir_list_content.rhtml.svn-base --- a/app/views/repositories/.svn/text-base/_dir_list_content.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/repositories/.svn/text-base/_dir_list_content.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,25 +1,30 @@ <% @entries.each do |entry| %> <% tr_id = Digest::MD5.hexdigest(entry.path) depth = params[:depth].to_i %> +<% ent_path = Redmine::CodesetUtil.replace_invalid_utf8(entry.path) %> +<% ent_name = Redmine::CodesetUtil.replace_invalid_utf8(entry.name) %> - +";> <% if entry.is_dir? %> - "scmEntryClick('#{tr_id}')"%>">  <% 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)}")%> <%= (entry.size ? number_to_human_size(entry.size) : "?") unless entry.is_dir? %> -<% changeset = @project.repository.changesets.find_by_revision(entry.lastrev.identifier) if entry.lastrev && entry.lastrev.identifier %> -<%= link_to_revision(changeset.revision, @project) if changeset %> +<% changeset = @project.repository.find_changeset_by_name(entry.lastrev.identifier) if entry.lastrev && entry.lastrev.identifier %> +<% if @repository.report_last_commit %> +<%= link_to_revision(changeset, @project) if changeset %> <%= distance_of_time_in_words(entry.lastrev.time, Time.now) if entry.lastrev && entry.lastrev.time %> -<%= changeset.nil? ? h(entry.lastrev.author.to_s.split('<').first) : changeset.author if entry.lastrev %> +<%= changeset.nil? ? h(Redmine::CodesetUtil.replace_invalid_utf8(entry.lastrev.author.to_s.split('<').first)) : changeset.author if entry.lastrev %> <%=h truncate(changeset.comments, :length => 50) unless changeset.nil? %> +<% end %> <% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/repositories/.svn/text-base/_revisions.rhtml.svn-base --- a/app/views/repositories/.svn/text-base/_revisions.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/repositories/.svn/text-base/_revisions.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -13,9 +13,9 @@ <% line_num = 1 %> <% revisions.each do |changeset| %> -<%= link_to_revision(changeset.revision, project) %> -<%= radio_button_tag('rev', changeset.revision, (line_num==1), :id => "cb-#{line_num}", :onclick => "$('cbto-#{line_num+1}').checked=true;") if show_diff && (line_num < revisions.size) %> -<%= radio_button_tag('rev_to', changeset.revision, (line_num==2), :id => "cbto-#{line_num}", :onclick => "if ($('cb-#{line_num}').checked==true) {$('cb-#{line_num-1}').checked=true;}") if show_diff && (line_num > 1) %> +<%= link_to_revision(changeset, project) %> +<%= radio_button_tag('rev', changeset.identifier, (line_num==1), :id => "cb-#{line_num}", :onclick => "$('cbto-#{line_num+1}').checked=true;") if show_diff && (line_num < revisions.size) %> +<%= radio_button_tag('rev_to', changeset.identifier, (line_num==2), :id => "cbto-#{line_num}", :onclick => "if ($('cb-#{line_num}').checked==true) {$('cb-#{line_num-1}').checked=true;}") if show_diff && (line_num > 1) %> <%= format_time(changeset.committed_on) %> <%=h changeset.author %> <%= textilizable(truncate_at_line_break(changeset.comments)) %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/repositories/.svn/text-base/annotate.rhtml.svn-base --- a/app/views/repositories/.svn/text-base/annotate.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/repositories/.svn/text-base/annotate.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -19,7 +19,7 @@ <%= line_num %> - <%= (revision.identifier ? link_to(format_revision(revision.identifier), :action => 'revision', :id => @project, :rev => revision.identifier) : format_revision(revision.revision)) if revision %> + <%= (revision.identifier ? link_to_revision(revision, @project) : format_revision(revision)) if revision %> <%= h(revision.author.to_s.split('<').first) if revision %>
    <%= line %>
    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/repositories/.svn/text-base/diff.rhtml.svn-base --- a/app/views/repositories/.svn/text-base/diff.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/repositories/.svn/text-base/diff.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,4 +1,4 @@ -

    <%= l(:label_revision) %> <%= format_revision(@rev_to) + ':' if @rev_to %><%= format_revision(@rev) %> <%=h @path %>

    +

    <%= l(:label_revision) %> <%= @diff_format_revisions %> <%=h @path %>

    <% form_tag({:path => to_path_param(@path)}, :method => 'get') do %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/repositories/.svn/text-base/revision.rhtml.svn-base --- a/app/views/repositories/.svn/text-base/revision.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/repositories/.svn/text-base/revision.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,25 +1,29 @@
    « <% unless @changeset.previous.nil? -%> - <%= link_to_revision(@changeset.previous.revision, @project, :text => l(:label_previous)) %> + <%= link_to_revision(@changeset.previous, @project, :text => l(:label_previous)) %> <% else -%> <%= l(:label_previous) %> <% end -%> | <% unless @changeset.next.nil? -%> - <%= link_to_revision(@changeset.next.revision, @project, :text => l(:label_next)) %> + <%= link_to_revision(@changeset.next, @project, :text => l(:label_next)) %> <% else -%> <%= l(:label_next) %> <% end -%> »  - <% form_tag({:controller => 'repositories', :action => 'revision', :id => @project, :rev => nil}, :method => :get) do %> - <%= text_field_tag 'rev', @rev[0,8], :size => 8 %> + <% form_tag({:controller => 'repositories', + :action => 'revision', + :id => @project, + :rev => nil}, + :method => :get) do %> + <%= text_field_tag 'rev', @rev, :size => 8 %> <%= submit_tag 'OK', :name => nil %> <% end %>
    -

    <%= l(:label_revision) %> <%= format_revision(@changeset.revision) %>

    +

    <%= l(:label_revision) %> <%= format_revision(@changeset) %>

    <% if @changeset.scmid %>ID: <%= @changeset.scmid %>
    <% end %> <%= authoring(@changeset.committed_on, @changeset.author) %>

    @@ -38,14 +42,18 @@ <% if User.current.allowed_to?(:browse_repository, @project) %>

    <%= l(:label_attachment_plural) %>

      -
    • <%= l(:label_added) %>
    • +
    • <%= l(:label_added) %>
    • <%= l(:label_modified) %>
    • -
    • <%= l(:label_copied) %>
    • -
    • <%= l(:label_renamed) %>
    • -
    • <%= l(:label_deleted) %>
    • +
    • <%= l(:label_copied) %>
    • +
    • <%= l(:label_renamed) %>
    • +
    • <%= l(:label_deleted) %>
    -

    <%= link_to(l(:label_view_diff), :action => 'diff', :id => @project, :path => "", :rev => @changeset.revision) if @changeset.changes.any? %>

    +

    <%= link_to(l(:label_view_diff), + :action => 'diff', + :id => @project, + :path => "", + :rev => @changeset.identifier) if @changeset.changes.any? %>

    <%= render_changeset_changes %> @@ -56,4 +64,4 @@ <%= stylesheet_link_tag "scm" %> <% end %> -<% html_title("#{l(:label_revision)} #{@changeset.revision}") -%> +<% html_title("#{l(:label_revision)} #{format_revision(@changeset)}") -%> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/repositories/.svn/text-base/revisions.rhtml.svn-base --- a/app/views/repositories/.svn/text-base/revisions.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/repositories/.svn/text-base/revisions.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,19 +1,26 @@
    <% form_tag({:action => 'revision', :id => @project}) do %> -<%= l(:label_revision) %>: <%= text_field_tag 'rev', @rev, :size => 8 %> -<%= submit_tag 'OK' %> +<%= l(:label_revision) %>: <%= text_field_tag 'rev', @rev, :size => 8 %> +<%= submit_tag 'OK' %> <% end %>

    <%= l(:label_revision_plural) %>

    -<%= render :partial => 'revisions', :locals => {:project => @project, :path => '', :revisions => @changesets, :entry => nil }%> +<%= render :partial => 'revisions', + :locals => {:project => @project, + :path => '', + :revisions => @changesets, + :entry => nil } %>

    <%= pagination_links_full @changeset_pages,@changeset_count %>

    <% content_for :header_tags do %> -<%= stylesheet_link_tag "scm" %> -<%= auto_discovery_link_tag(:atom, params.merge({:format => 'atom', :page => nil, :key => User.current.rss_key})) %> +<%= stylesheet_link_tag "scm" %> +<%= auto_discovery_link_tag( + :atom, + params.merge( + {:format => 'atom', :page => nil, :key => User.current.rss_key})) %> <% end %> <% other_formats_links do |f| %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/repositories/.svn/text-base/show.rhtml.svn-base --- a/app/views/repositories/.svn/text-base/show.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/repositories/.svn/text-base/show.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -12,23 +12,49 @@ <%= render_properties(@properties) %> -<% if @changesets && !@changesets.empty? && authorize_for('repositories', 'revisions') %> +<% if authorize_for('repositories', 'revisions') %> +<% if @changesets && !@changesets.empty? %>

    <%= l(:label_latest_revision_plural) %>

    -<%= render :partial => 'revisions', :locals => {:project => @project, :path => @path, :revisions => @changesets, :entry => nil }%> +<%= render :partial => 'revisions', + :locals => {:project => @project, :path => @path, + :revisions => @changesets, :entry => nil }%> +<% end %> +

    +<% + has_branches = (!@repository.branches.nil? && @repository.branches.length > 0) + sep = '' + %> +<% if @repository.supports_all_revisions? && @path.blank? %> +<%= link_to l(:label_view_all_revisions), :action => 'revisions', :id => @project %> +<% sep = '|' %> +<% end %> +<% + if @repository.supports_directory_revisions? && + ( has_branches || !@path.blank? || !@rev.blank? ) + %> +<%= sep %> +<%= + link_to l(:label_view_revisions), + :action => 'changes', + :path => to_path_param(@path), + :id => @project, + :rev => @rev + %> +<% end %> +

    -<% if @path.blank? %> -

    <%= link_to l(:label_view_all_revisions), :action => 'revisions', :id => @project %>

    -<% else %> -

    <%= link_to l(:label_view_revisions), :action => 'changes', :path => to_path_param(@path), :id => @project %>

    -<% end %> +<% if true # @path.blank? %> +<% content_for :header_tags do %> + <%= auto_discovery_link_tag( + :atom, params.merge( + {:format => 'atom', :action => 'revisions', + :id => @project, :page => nil, :key => User.current.rss_key})) %> +<% end %> -<% content_for :header_tags do %> - <%= auto_discovery_link_tag(:atom, params.merge({:format => 'atom', :action => 'revisions', :id => @project, :page => nil, :key => User.current.rss_key})) %> -<% end %> - -<% other_formats_links do |f| %> - <%= f.link_to 'Atom', :url => {:action => 'revisions', :id => @project, :key => User.current.rss_key} %> -<% end %> +<% other_formats_links do |f| %> + <%= f.link_to 'Atom', :url => {:action => 'revisions', :id => @project, :key => User.current.rss_key} %> +<% end %> +<% end %> <% end %> <% content_for :header_tags do %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/repositories/_breadcrumbs.rhtml --- a/app/views/repositories/_breadcrumbs.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/repositories/_breadcrumbs.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -10,12 +10,19 @@ link_path << '/' unless link_path.empty? link_path << "#{dir}" %> - / <%= link_to h(dir), :action => 'show', :id => @project, :path => to_path_param(link_path), :rev => @rev %> + / <%= link_to h(dir), :action => 'show', :id => @project, + :path => to_path_param(link_path), :rev => @rev %> <% end %> <% if filename %> - / <%= link_to h(filename), :action => 'changes', :id => @project, :path => to_path_param("#{link_path}/#{filename}"), :rev => @rev %> + / <%= link_to h(filename), + :action => 'changes', :id => @project, + :path => to_path_param("#{link_path}/#{filename}"), :rev => @rev %> <% end %> - -<%= "@ #{h revision}" if revision %> +<% + # @rev is revsion or Git and Mercurial branch or tag. + # For Mercurial *tip*, @rev and @changeset are nil. + rev_text = @changeset.nil? ? @rev : format_revision(@changeset) +%> +<%= "@ #{h rev_text}" unless rev_text.blank? %> <% html_title(with_leading_slash(path)) -%> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/repositories/_dir_list.rhtml --- a/app/views/repositories/_dir_list.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/repositories/_dir_list.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -3,10 +3,12 @@ <%= l(:field_name) %> <%= l(:field_filesize) %> -<%= l(:label_revision) %> -<%= l(:label_age) %> -<%= l(:field_author) %> -<%= l(:field_comments) %> +<% if @repository.report_last_commit %> +<%= l(:label_revision) %> +<%= l(:label_age) %> +<%= l(:field_author) %> +<%= l(:field_comments) %> +<% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/repositories/_dir_list_content.rhtml --- a/app/views/repositories/_dir_list_content.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/repositories/_dir_list_content.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -1,25 +1,30 @@ <% @entries.each do |entry| %> <% tr_id = Digest::MD5.hexdigest(entry.path) depth = params[:depth].to_i %> +<% ent_path = Redmine::CodesetUtil.replace_invalid_utf8(entry.path) %> +<% ent_name = Redmine::CodesetUtil.replace_invalid_utf8(entry.name) %> - +";> <% if entry.is_dir? %> - "scmEntryClick('#{tr_id}')"%>">  <% 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)}")%> <%= (entry.size ? number_to_human_size(entry.size) : "?") unless entry.is_dir? %> -<% 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 %> +<% if @repository.report_last_commit %> <%= link_to_revision(changeset, @project) if changeset %> <%= distance_of_time_in_words(entry.lastrev.time, Time.now) if entry.lastrev && entry.lastrev.time %> -<%= changeset.nil? ? h(entry.lastrev.author.to_s.split('<').first) : changeset.author if entry.lastrev %> +<%= changeset.nil? ? h(Redmine::CodesetUtil.replace_invalid_utf8(entry.lastrev.author.to_s.split('<').first)) : changeset.author if entry.lastrev %> <%=h truncate(changeset.comments, :length => 50) unless changeset.nil? %> +<% end %> <% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/repositories/diff.rhtml --- a/app/views/repositories/diff.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/repositories/diff.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -1,4 +1,4 @@ -

    <%= l(:label_revision) %> <%= format_revision(@rev_to) + ':' if @rev_to %><%= format_revision(@rev) %> <%=h @path %>

    +

    <%= l(:label_revision) %> <%= @diff_format_revisions %> <%=h @path %>

    <% form_tag({:path => to_path_param(@path)}, :method => 'get') do %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/repositories/revision.rhtml --- a/app/views/repositories/revision.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/repositories/revision.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -13,7 +13,11 @@ <% end -%> »  - <% form_tag({:controller => 'repositories', :action => 'revision', :id => @project, :rev => nil}, :method => :get) do %> + <% form_tag({:controller => 'repositories', + :action => 'revision', + :id => @project, + :rev => nil}, + :method => :get) do %> <%= text_field_tag 'rev', @rev, :size => 8 %> <%= submit_tag 'OK', :name => nil %> <% end %> @@ -38,14 +42,18 @@ <% if User.current.allowed_to?(:browse_repository, @project) %>

    <%= l(:label_attachment_plural) %>

      -
    • <%= l(:label_added) %>
    • +
    • <%= l(:label_added) %>
    • <%= l(:label_modified) %>
    • -
    • <%= l(:label_copied) %>
    • -
    • <%= l(:label_renamed) %>
    • -
    • <%= l(:label_deleted) %>
    • +
    • <%= l(:label_copied) %>
    • +
    • <%= l(:label_renamed) %>
    • +
    • <%= l(:label_deleted) %>
    -

    <%= link_to(l(:label_view_diff), :action => 'diff', :id => @project, :path => "", :rev => @changeset.identifier) if @changeset.changes.any? %>

    +

    <%= link_to(l(:label_view_diff), + :action => 'diff', + :id => @project, + :path => "", + :rev => @changeset.identifier) if @changeset.changes.any? %>

    <%= render_changeset_changes %> @@ -56,4 +64,4 @@ <%= stylesheet_link_tag "scm" %> <% end %> -<% html_title("#{l(:label_revision)} #{@changeset.revision}") -%> +<% html_title("#{l(:label_revision)} #{format_revision(@changeset)}") -%> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/repositories/revisions.rhtml --- a/app/views/repositories/revisions.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/repositories/revisions.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -1,19 +1,26 @@
    <% form_tag({:action => 'revision', :id => @project}) do %> -<%= l(:label_revision) %>: <%= text_field_tag 'rev', @rev, :size => 8 %> -<%= submit_tag 'OK' %> +<%= l(:label_revision) %>: <%= text_field_tag 'rev', @rev, :size => 8 %> +<%= submit_tag 'OK' %> <% end %>

    <%= l(:label_revision_plural) %>

    -<%= render :partial => 'revisions', :locals => {:project => @project, :path => '', :revisions => @changesets, :entry => nil }%> +<%= render :partial => 'revisions', + :locals => {:project => @project, + :path => '', + :revisions => @changesets, + :entry => nil } %>

    <%= pagination_links_full @changeset_pages,@changeset_count %>

    <% content_for :header_tags do %> -<%= stylesheet_link_tag "scm" %> -<%= auto_discovery_link_tag(:atom, params.merge({:format => 'atom', :page => nil, :key => User.current.rss_key})) %> +<%= stylesheet_link_tag "scm" %> +<%= auto_discovery_link_tag( + :atom, + params.merge( + {:format => 'atom', :page => nil, :key => User.current.rss_key})) %> <% end %> <% other_formats_links do |f| %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/repositories/show.rhtml --- a/app/views/repositories/show.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/repositories/show.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -12,23 +12,49 @@ <%= render_properties(@properties) %> -<% if @changesets && !@changesets.empty? && authorize_for('repositories', 'revisions') %> +<% if authorize_for('repositories', 'revisions') %> +<% if @changesets && !@changesets.empty? %>

    <%= l(:label_latest_revision_plural) %>

    -<%= render :partial => 'revisions', :locals => {:project => @project, :path => @path, :revisions => @changesets, :entry => nil }%> +<%= render :partial => 'revisions', + :locals => {:project => @project, :path => @path, + :revisions => @changesets, :entry => nil }%> +<% end %> +

    +<% + has_branches = (!@repository.branches.nil? && @repository.branches.length > 0) + sep = '' + %> +<% if @repository.supports_all_revisions? && @path.blank? %> +<%= link_to l(:label_view_all_revisions), :action => 'revisions', :id => @project %> +<% sep = '|' %> +<% end %> +<% + if @repository.supports_directory_revisions? && + ( has_branches || !@path.blank? || !@rev.blank? ) + %> +<%= sep %> +<%= + link_to l(:label_view_revisions), + :action => 'changes', + :path => to_path_param(@path), + :id => @project, + :rev => @rev + %> +<% end %> +

    -<% if @path.blank? %> -

    <%= link_to l(:label_view_all_revisions), :action => 'revisions', :id => @project %>

    -<% else %> -

    <%= link_to l(:label_view_revisions), :action => 'changes', :path => to_path_param(@path), :id => @project %>

    -<% end %> +<% if true # @path.blank? %> +<% content_for :header_tags do %> + <%= auto_discovery_link_tag( + :atom, params.merge( + {:format => 'atom', :action => 'revisions', + :id => @project, :page => nil, :key => User.current.rss_key})) %> +<% end %> -<% content_for :header_tags do %> - <%= auto_discovery_link_tag(:atom, params.merge({:format => 'atom', :action => 'revisions', :id => @project, :page => nil, :key => User.current.rss_key})) %> -<% end %> - -<% other_formats_links do |f| %> - <%= f.link_to 'Atom', :url => {:action => 'revisions', :id => @project, :key => User.current.rss_key} %> -<% end %> +<% other_formats_links do |f| %> + <%= f.link_to 'Atom', :url => {:action => 'revisions', :id => @project, :key => User.current.rss_key} %> +<% end %> +<% end %> <% end %> <% content_for :header_tags do %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/roles/.svn/all-wcprops --- a/app/views/roles/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/roles/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,35 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 40 -/svn/!svn/ver/3435/trunk/app/views/roles +V 54 +/svn/!svn/ver/5878/branches/1.2-stable/app/views/roles END -report.rhtml -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/2810/trunk/app/views/roles/report.rhtml -END -index.html.erb -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/3435/trunk/app/views/roles/index.html.erb -END -_form.rhtml -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/1943/trunk/app/views/roles/_form.rhtml -END -edit.rhtml -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/2979/trunk/app/views/roles/edit.rhtml -END -new.rhtml -K 25 -svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/2810/trunk/app/views/roles/new.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/roles/.svn/entries --- a/app/views/roles/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/roles/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/roles +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/roles http://redmine.rubyforge.org/svn -2010-02-15T16:41:16.346582Z -3435 -edavis10 +2011-04-11T17:53:15.908614Z +5416 +jplang @@ -32,10 +32,10 @@ -2010-09-23T14:37:44.675736Z -cbcd3851055c3f5a5aa20d005b086872 -2009-07-05T12:22:02.133266Z -2810 +2011-07-14T09:24:21.000000Z +5061d0ed44fcb0730e65e3e104e0c5d5 +2011-03-13T13:32:44.829514Z +5107 jplang has-props @@ -58,7 +58,7 @@ -2165 +2183 index.html.erb file @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.675736Z +2011-07-14T09:24:09.000000Z 82f5657ab6c01b56b039af0cf2312ade 2010-02-15T16:41:16.346582Z 3435 @@ -100,10 +100,10 @@ -2010-09-23T14:37:44.675736Z -652c40985320a23285c8e27439418f22 -2008-10-24T15:24:35.832581Z -1943 +2011-07-14T09:24:21.000000Z +4ae0d0cb6123333383cf662b299e6f18 +2011-04-11T17:53:15.908614Z +5416 jplang has-props @@ -126,7 +126,7 @@ -1159 +1269 edit.rhtml file @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.675736Z +2011-07-14T09:24:09.000000Z 4bcaa15de1de193dd1f98128b71a420b 2009-10-25T13:28:36.522470Z 2979 @@ -168,7 +168,7 @@ -2010-09-23T14:37:44.675736Z +2011-07-14T09:24:09.000000Z 0ff8206c0e77e6356f9d16ccaeff13e2 2009-07-05T12:22:02.133266Z 2810 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/roles/.svn/text-base/_form.rhtml.svn-base --- a/app/views/roles/.svn/text-base/_form.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/roles/.svn/text-base/_form.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,16 @@ <%= error_messages_for 'role' %> +
    <% unless @role.builtin? %> -

    <%= f.text_field :name, :required => true %>

    <%= f.check_box :assignable %>

    +<% end %> +

    <%= f.select :issues_visibility, Role::ISSUES_VISIBILITY_OPTIONS.collect {|v| [l(v.last), v.first]} %>

    <% if @role.new_record? && @roles.any? %>

    <%= select_tag(:copy_workflow_from, content_tag("option") + options_from_collection_for_select(@roles, :id, :name)) %>

    <% end %>
    -<% end %>

    <%= l(:label_permissions) %>

    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/roles/.svn/text-base/report.rhtml.svn-base --- a/app/views/roles/.svn/text-base/report.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/roles/.svn/text-base/report.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -2,6 +2,7 @@ <% form_tag({:action => 'report'}, :id => 'permissions_form') do %> <%= hidden_field_tag 'permissions[0]', '', :id => nil %> +
    @@ -21,7 +22,7 @@ <% unless mod.blank? %> @@ -45,6 +46,7 @@ <% end %>
    -   +   <%= l_or_humanize(mod, :prefix => 'project_module_') %>
    +

    <%= check_all_links 'permissions_form' %>

    <%= submit_tag l(:button_save) %>

    <% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/roles/_form.rhtml --- a/app/views/roles/_form.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/roles/_form.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,16 @@ <%= error_messages_for 'role' %> +
    <% unless @role.builtin? %> -

    <%= f.text_field :name, :required => true %>

    <%= f.check_box :assignable %>

    +<% end %> +

    <%= f.select :issues_visibility, Role::ISSUES_VISIBILITY_OPTIONS.collect {|v| [l(v.last), v.first]} %>

    <% if @role.new_record? && @roles.any? %>

    <%= select_tag(:copy_workflow_from, content_tag("option") + options_from_collection_for_select(@roles, :id, :name)) %>

    <% end %>
    -<% end %>

    <%= l(:label_permissions) %>

    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/roles/report.rhtml --- a/app/views/roles/report.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/roles/report.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -2,6 +2,7 @@ <% form_tag({:action => 'report'}, :id => 'permissions_form') do %> <%= hidden_field_tag 'permissions[0]', '', :id => nil %> +
    @@ -21,7 +22,7 @@ <% unless mod.blank? %> @@ -45,6 +46,7 @@ <% end %>
    -   +   <%= l_or_humanize(mod, :prefix => 'project_module_') %>
    +

    <%= check_all_links 'permissions_form' %>

    <%= submit_tag l(:button_save) %>

    <% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/search/.svn/all-wcprops --- a/app/views/search/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 41 -/svn/!svn/ver/2895/trunk/app/views/search -END -index.rhtml -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/2895/trunk/app/views/search/index.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/search/.svn/entries --- a/app/views/search/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/search/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/search +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/search http://redmine.rubyforge.org/svn -2009-09-20T14:06:57.257282Z -2895 +2011-07-09T11:26:35.866966Z +6202 jplang @@ -32,10 +32,10 @@ -2010-09-23T14:37:44.679779Z -0235b1dd9d5f01dbaaab2b59dc006f2e -2009-09-20T14:06:57.257282Z -2895 +2011-07-14T09:28:10.000000Z +3d8630a951328e0ee434261a62daaf5f +2011-07-09T11:26:35.866966Z +6202 jplang has-props @@ -58,5 +58,5 @@ -2237 +1969 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/search/.svn/text-base/index.rhtml.svn-base --- a/app/views/search/.svn/text-base/index.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/search/.svn/text-base/index.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -5,7 +5,9 @@

    <%= text_field_tag 'q', @question, :size => 60, :id => 'search-input' %> <%= javascript_tag "Field.focus('search-input')" %> <%= project_select_tag %> +<%= hidden_field_tag 'all_words', '', :id => nil %> +<%= hidden_field_tag 'titles_only', '', :id => nil %>

    @@ -35,16 +37,12 @@

    <% if @pagination_previous_date %> -<%= link_to_remote ('« ' + l(:label_previous)), - {:update => :content, - :url => params.merge(:previous => 1, :offset => @pagination_previous_date.strftime("%Y%m%d%H%M%S")) - }, :href => url_for(params.merge(:previous => 1, :offset => @pagination_previous_date.strftime("%Y%m%d%H%M%S"))) %>  +<%= link_to_content_update('« ' + l(:label_previous), + params.merge(:previous => 1, :offset => @pagination_previous_date.strftime("%Y%m%d%H%M%S"))) %>  <% end %> <% if @pagination_next_date %> -<%= link_to_remote (l(:label_next) + ' »'), - {:update => :content, - :url => params.merge(:previous => nil, :offset => @pagination_next_date.strftime("%Y%m%d%H%M%S")) - }, :href => url_for(params.merge(:previous => nil, :offset => @pagination_next_date.strftime("%Y%m%d%H%M%S"))) %> +<%= link_to_content_update(l(:label_next) + ' »', + params.merge(:previous => nil, :offset => @pagination_next_date.strftime("%Y%m%d%H%M%S"))) %> <% end %>

    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/search/index.rhtml --- a/app/views/search/index.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/search/index.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -5,7 +5,9 @@

    <%= text_field_tag 'q', @question, :size => 60, :id => 'search-input' %> <%= javascript_tag "Field.focus('search-input')" %> <%= project_select_tag %> +<%= hidden_field_tag 'all_words', '', :id => nil %> +<%= hidden_field_tag 'titles_only', '', :id => nil %>

    @@ -18,12 +20,22 @@ <% end %>

    +<% if @project_matches and !@project_matches.empty? and (@project_matches.count < 6) and !@pagination_previous_date %> +

    <%= l(:label_matching_project_plural) %> (<%= @project_matches.count %>)

    +
    + <% @project_matches.each do |e| %> +
    <%= content_tag('span', h(e.project), :class => 'project') unless @project == e.project %> <%= link_to highlight_tokens(truncate(e.event_title, :length => 255), @tokens), e.event_url %>
    +
    <%= e.short_description %> + <% end %> +
    +<% end %> + <% if @results %> + +

    <%= l(:label_result_plural) %> (<%= @results_by_type.values.sum %>)

    <%= render_results_by_type(@results_by_type) unless @scope.size == 1 %>
    - -

    <%= l(:label_result_plural) %> (<%= @results_by_type.values.sum %>)

    <% @results.each do |e| %>
    <%= content_tag('span', h(e.project), :class => 'project') unless @project == e.project %> <%= link_to highlight_tokens(truncate(e.event_title, :length => 255), @tokens), e.event_url %>
    @@ -35,16 +47,12 @@

    <% if @pagination_previous_date %> -<%= link_to_remote ('« ' + l(:label_previous)), - {:update => :content, - :url => params.merge(:previous => 1, :offset => @pagination_previous_date.strftime("%Y%m%d%H%M%S")) - }, :href => url_for(params.merge(:previous => 1, :offset => @pagination_previous_date.strftime("%Y%m%d%H%M%S"))) %>  +<%= link_to_content_update('« ' + l(:label_previous), + params.merge(:previous => 1, :offset => @pagination_previous_date.strftime("%Y%m%d%H%M%S"))) %>  <% end %> <% if @pagination_next_date %> -<%= link_to_remote (l(:label_next) + ' »'), - {:update => :content, - :url => params.merge(:previous => nil, :offset => @pagination_next_date.strftime("%Y%m%d%H%M%S")) - }, :href => url_for(params.merge(:previous => nil, :offset => @pagination_next_date.strftime("%Y%m%d%H%M%S"))) %> +<%= link_to_content_update(l(:label_next) + ' »', + params.merge(:previous => nil, :offset => @pagination_next_date.strftime("%Y%m%d%H%M%S"))) %> <% end %>

    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/settings/.svn/all-wcprops --- a/app/views/settings/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/settings/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,65 +1,5 @@ -K 25 -svn:wc:ra_dav:version-url -V 43 -/svn/!svn/ver/4362/trunk/app/views/settings -END -_issues.rhtml K 25 svn:wc:ra_dav:version-url V 57 -/svn/!svn/ver/3198/trunk/app/views/settings/_issues.rhtml +/svn/!svn/ver/5961/branches/1.2-stable/app/views/settings END -_general.rhtml -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/3372/trunk/app/views/settings/_general.rhtml -END -_authentication.rhtml -K 25 -svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/4306/trunk/app/views/settings/_authentication.rhtml -END -_mail_handler.rhtml -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/3226/trunk/app/views/settings/_mail_handler.rhtml -END -plugin.rhtml -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/837/trunk/app/views/settings/plugin.rhtml -END -_display.rhtml -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/3198/trunk/app/views/settings/_display.rhtml -END -edit.rhtml -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/2871/trunk/app/views/settings/edit.rhtml -END -_repositories.rhtml -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/3440/trunk/app/views/settings/_repositories.rhtml -END -_notifications.rhtml -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/4362/trunk/app/views/settings/_notifications.rhtml -END -_projects.rhtml -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/3198/trunk/app/views/settings/_projects.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/settings/.svn/entries --- a/app/views/settings/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/settings/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/settings +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/settings http://redmine.rubyforge.org/svn -2010-11-02T19:00:36.834304Z -4362 -edavis10 +2011-05-29T12:06:05.086159Z +5961 +jplang @@ -32,10 +32,10 @@ -2010-09-23T14:37:44.683778Z -cafaf758de88dd8df50aeb849e398b77 -2009-12-19T20:07:09.039389Z -3198 +2011-07-14T09:24:09.000000Z +dad877e4db2f583979314edcb017bb1b +2010-12-15T21:18:06.237327Z +4513 jplang has-props @@ -58,7 +58,7 @@ -722 +787 _general.rhtml file @@ -66,11 +66,11 @@ -2010-09-23T14:37:44.683778Z -c0378ca172ae32638c076f39dd11e980 -2010-02-06T10:40:21.867545Z -3372 -jplang +2011-07-14T09:24:09.000000Z +7307d5f65399ab2f28eac1162a330678 +2010-11-25T20:27:44.648840Z +4426 +winterheart has-props @@ -92,7 +92,7 @@ -1354 +1446 _authentication.rhtml file @@ -100,7 +100,7 @@ -2010-11-19T13:04:48.200851Z +2011-07-14T09:24:09.000000Z 8005b162966a27cd4e7c30022320b47e 2010-10-29T22:28:24.886659Z 4306 @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.683778Z +2011-07-14T09:24:09.000000Z 1da887b84f272fe4cde6fafaf198529a 2009-12-23T18:35:19.208194Z 3226 @@ -168,7 +168,7 @@ -2010-09-23T14:37:44.687777Z +2011-07-14T09:24:09.000000Z 1836fa87f24f7f62eafaed8d1886ca67 2007-10-13T14:11:06.987513Z 837 @@ -202,10 +202,10 @@ -2010-09-23T14:37:44.683778Z -af00d651b626c36ca365bd748f55ec40 -2009-12-19T20:07:09.039389Z -3198 +2011-07-14T09:24:21.000000Z +73c09bb702e614c89ef409043dc16705 +2011-03-27T15:43:26.269165Z +5228 jplang has-props @@ -228,7 +228,7 @@ -1041 +1103 edit.rhtml file @@ -236,7 +236,7 @@ -2010-09-23T14:37:44.687777Z +2011-07-14T09:24:09.000000Z a629426fc7edef8be6c4545bce9a5abd 2009-09-12T09:13:13.676884Z 2871 @@ -270,11 +270,11 @@ -2010-09-23T14:37:44.687777Z -25dd64f95ba856913a30a41296c7de0a -2010-02-16T22:41:59.625572Z -3440 -edavis10 +2011-07-14T09:24:21.000000Z +0bda809a3ce939512e85eb5c5a58162d +2011-05-29T12:06:05.086159Z +5961 +jplang has-props @@ -296,7 +296,7 @@ -1837 +3964 _notifications.rhtml file @@ -304,11 +304,11 @@ -2010-11-19T13:04:48.200851Z -3d9920b9875183abe7932cdfd335d36a -2010-11-02T19:00:36.834304Z -4362 -edavis10 +2011-07-14T09:24:09.000000Z +9f784c1426ed466df89a56d5ae835efe +2011-01-16T15:36:42.998302Z +4730 +jplang has-props @@ -338,7 +338,7 @@ -2010-09-23T14:37:44.687777Z +2011-07-14T09:24:09.000000Z de489dd7dc60d569a855c1f33d941552 2009-12-19T20:07:09.039389Z 3198 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/settings/.svn/text-base/_display.rhtml.svn-base --- a/app/views/settings/.svn/text-base/_display.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/settings/.svn/text-base/_display.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -5,7 +5,7 @@

    <%= setting_select :default_language, lang_options_for_select(false) %>

    -

    <%= setting_select :start_of_week, [[day_name(1),'1'], [day_name(7),'7']], :blank => :label_language_based %>

    +

    <%= setting_select :start_of_week, [[day_name(1),'1'], [day_name(6),'6'], [day_name(7),'7']], :blank => :label_language_based %>

    <%= setting_select :date_format, Setting::DATE_FORMATS.collect {|f| [Date.today.strftime(f), f]}, :blank => :label_language_based %>

    @@ -15,7 +15,7 @@

    <%= setting_check_box :gravatar_enabled %>

    -

    <%= setting_select :gravatar_default, [["Wavatars", 'wavatar'], ["Identicons", 'identicon'], ["Monster ids", 'monsterid']], :blank => :label_none %>

    +

    <%= setting_select :gravatar_default, [["Wavatars", 'wavatar'], ["Identicons", 'identicon'], ["Monster ids", 'monsterid'], ["Retro", 'retro'], ["Mystery man", 'mm']], :blank => :label_none %>

    <%= submit_tag l(:button_save) %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/settings/.svn/text-base/_general.rhtml.svn-base --- a/app/views/settings/.svn/text-base/_general.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/settings/.svn/text-base/_general.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -6,7 +6,7 @@

    <%= setting_text_area :welcome_text, :cols => 60, :rows => 5, :class => 'wiki-edit' %>

    <%= wikitoolbar_for 'settings_welcome_text' %> -

    <%= setting_text_field :attachment_max_size, :size => 6 %> KB

    +

    <%= setting_text_field :attachment_max_size, :size => 6 %> <%= l(:"number.human.storage_units.units.kb") %>

    <%= setting_text_field :per_page_options, :size => 20 %>
    <%= l(:text_comma_separated) %>

    @@ -26,7 +26,7 @@

    <%= setting_text_field :feeds_limit, :size => 6 %>

    -

    <%= setting_text_field :file_max_size_displayed, :size => 6 %> KB

    +

    <%= setting_text_field :file_max_size_displayed, :size => 6 %> <%= l(:"number.human.storage_units.units.kb") %>

    <%= setting_text_field :diff_max_lines_displayed, :size => 6 %>

    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/settings/.svn/text-base/_issues.rhtml.svn-base --- a/app/views/settings/.svn/text-base/_issues.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/settings/.svn/text-base/_issues.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -8,6 +8,8 @@

    <%= setting_select :issue_done_ratio, Issue::DONE_RATIO_OPTIONS.collect {|i| [l("setting_issue_done_ratio_#{i}"), i]} %>

    <%= setting_text_field :issues_export_limit, :size => 6 %>

    + +

    <%= setting_text_field :gantt_items_limit, :size => 6 %>

    <%= l(:setting_issue_list_default_columns) %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/settings/.svn/text-base/_notifications.rhtml.svn-base --- a/app/views/settings/.svn/text-base/_notifications.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/settings/.svn/text-base/_notifications.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -8,7 +8,7 @@

    <%= setting_check_box :plain_text_mail %>

    -

    <%= setting_select(:default_notification_option, User::MAIL_NOTIFICATION_OPTIONS.collect {|o| [l(o.last), o.first.to_s]}) %>

    +

    <%= setting_select(:default_notification_option, User.valid_notification_options.collect {|o| [l(o.last), o.first.to_s]}) %>

    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/settings/.svn/text-base/_repositories.rhtml.svn-base --- a/app/views/settings/.svn/text-base/_repositories.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/settings/.svn/text-base/_repositories.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,36 +1,95 @@ <% form_tag({:action => 'edit', :tab => 'repositories'}) do %> +
    +<%= l(:setting_enabled_scm) %> + + + + + + + <% Redmine::Scm::Base.all.collect do |choice| %> + <% scm_class = "Repository::#{choice}".constantize %> + <% text, value = (choice.is_a?(Array) ? choice : [choice, choice]) %> + <% setting = :enabled_scm %> + + + + + + <% end %> +
    <%= l(:text_scm_command) %><%= l(:text_scm_command_version) %>
    + <%= + check_box_tag( + "settings[#{setting}][]", + value, + Setting.send(setting).include?(value)) + %> + <%= text.to_s %> + + <%= + image_tag( + (scm_class.scm_available ? 'true.png' : 'exclamation.png'), + :style => "vertical-align:bottom;" + ) + %> + <%= scm_class.scm_command %> + + <%= scm_class.scm_version_string %> +
    +

    +<%= l(:text_scm_config) %> +

    +
    +

    <%= setting_check_box :autofetch_changesets %>

    -

    <%= setting_check_box :sys_api_enabled, - :onclick => "if (this.checked) { Form.Element.enable('settings_sys_api_key'); } else { Form.Element.disable('settings_sys_api_key'); }" %>

    +

    <%= setting_check_box :sys_api_enabled, + :onclick => + "if (this.checked) { Form.Element.enable('settings_sys_api_key'); } else { Form.Element.disable('settings_sys_api_key'); }" %>

    -

    <%= setting_text_field :sys_api_key, :size => 30, - :id => 'settings_sys_api_key', - :disabled => !Setting.sys_api_enabled?, - :label => :setting_mail_handler_api_key %> - <%= link_to_function l(:label_generate_key), "if ($('settings_sys_api_key').disabled == false) { $('settings_sys_api_key').value = randomKey(20) }" %> +

    <%= setting_text_field :sys_api_key, + :size => 30, + :id => 'settings_sys_api_key', + :disabled => !Setting.sys_api_enabled?, + :label => :setting_mail_handler_api_key %> + <%= link_to_function l(:label_generate_key), + "if ($('settings_sys_api_key').disabled == false) { $('settings_sys_api_key').value = randomKey(20) }" %>

    -

    <%= setting_multiselect(:enabled_scm, Redmine::Scm::Base.all) %>

    -

    <%= setting_text_field :repositories_encodings, :size => 60 %>
    <%= l(:text_comma_separated) %>

    -

    <%= setting_select :commit_logs_encoding, Setting::ENCODINGS %>

    -

    <%= setting_text_field :repository_log_display_limit, :size => 6 %>

    -
    <%= l(:text_issues_ref_in_commit_messages) %> +
    +<%= l(:text_issues_ref_in_commit_messages) %>

    <%= setting_text_field :commit_ref_keywords, :size => 30 %>
    <%= l(:text_comma_separated) %>

    <%= setting_text_field :commit_fix_keywords, :size => 30 %> - <%= l(:label_applied_status) %>: <%= setting_select :commit_fix_status_id, [["", 0]] + IssueStatus.find(:all).collect{|status| [status.name, status.id.to_s]}, :label => false %> - <%= l(:field_done_ratio) %>: <%= setting_select :commit_fix_done_ratio, (0..10).to_a.collect {|r| ["#{r*10} %", "#{r*10}"] }, :blank => :label_no_change_option, :label => false %> + <%= l(:label_applied_status) %>: <%= setting_select :commit_fix_status_id, + [["", 0]] + + IssueStatus.find(:all).collect{ + |status| [status.name, status.id.to_s] + }, + :label => false %> + <%= l(:field_done_ratio) %>: <%= setting_select :commit_fix_done_ratio, + (0..10).to_a.collect {|r| ["#{r*10} %", "#{r*10}"] }, + :blank => :label_no_change_option, + :label => false %>
    <%= l(:text_comma_separated) %>

    + +

    <%= setting_check_box :commit_logtime_enabled, + :onclick => + "if (this.checked) { Form.Element.enable('settings_commit_logtime_activity_id'); } else { Form.Element.disable('settings_commit_logtime_activity_id'); }"%>

    + +

    <%= setting_select :commit_logtime_activity_id, + [[l(:label_default), 0]] + + TimeEntryActivity.shared.all.collect{|activity| [activity.name, activity.id.to_s]}, + :disabled => !Setting.commit_logtime_enabled?%>

    <%= submit_tag l(:button_save) %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/settings/_display.rhtml --- a/app/views/settings/_display.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/settings/_display.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -5,7 +5,7 @@

    <%= setting_select :default_language, lang_options_for_select(false) %>

    -

    <%= setting_select :start_of_week, [[day_name(1),'1'], [day_name(7),'7']], :blank => :label_language_based %>

    +

    <%= setting_select :start_of_week, [[day_name(1),'1'], [day_name(6),'6'], [day_name(7),'7']], :blank => :label_language_based %>

    <%= setting_select :date_format, Setting::DATE_FORMATS.collect {|f| [Date.today.strftime(f), f]}, :blank => :label_language_based %>

    @@ -15,7 +15,7 @@

    <%= setting_check_box :gravatar_enabled %>

    -

    <%= setting_select :gravatar_default, [["Wavatars", 'wavatar'], ["Identicons", 'identicon'], ["Monster ids", 'monsterid']], :blank => :label_none %>

    +

    <%= setting_select :gravatar_default, [["Wavatars", 'wavatar'], ["Identicons", 'identicon'], ["Monster ids", 'monsterid'], ["Retro", 'retro'], ["Mystery man", 'mm']], :blank => :label_none %>

    <%= submit_tag l(:button_save) %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/settings/_general.rhtml --- a/app/views/settings/_general.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/settings/_general.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -9,10 +9,10 @@

    <%= setting_text_area :welcome_text, :cols => 60, :rows => 5, :class => 'wiki-edit' %>

    <%= wikitoolbar_for 'settings_welcome_text' %> -

    <%= setting_text_area :tipoftheday_text, :cols => 60, :rows => 5, :class => 'wiki-edit' %>

    +

    <%= setting_text_field :attachment_max_size, :size => 6 %> <%= l(:"number.human.storage_units.units.kb") %>

    <%= wikitoolbar_for 'settings_tipoftheday_text' %> -

    <%= setting_text_field :attachment_max_size, :size => 6 %> KB

    +

    <%= setting_text_field :attachment_max_size, :size => 6 %> <%= l(:"number.human.storage_units.units.kb") %>

    <%= setting_text_field :per_page_options, :size => 20 %>
    <%= l(:text_comma_separated) %>

    @@ -32,7 +32,7 @@

    <%= setting_text_field :feeds_limit, :size => 6 %>

    -

    <%= setting_text_field :file_max_size_displayed, :size => 6 %> KB

    +

    <%= setting_text_field :file_max_size_displayed, :size => 6 %> <%= l(:"number.human.storage_units.units.kb") %>

    <%= setting_text_field :diff_max_lines_displayed, :size => 6 %>

    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/settings/_issues.rhtml --- a/app/views/settings/_issues.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/settings/_issues.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -8,6 +8,8 @@

    <%= setting_select :issue_done_ratio, Issue::DONE_RATIO_OPTIONS.collect {|i| [l("setting_issue_done_ratio_#{i}"), i]} %>

    <%= setting_text_field :issues_export_limit, :size => 6 %>

    + +

    <%= setting_text_field :gantt_items_limit, :size => 6 %>

    <%= l(:setting_issue_list_default_columns) %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/settings/_notifications.rhtml --- a/app/views/settings/_notifications.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/settings/_notifications.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -8,7 +8,7 @@

    <%= setting_check_box :plain_text_mail %>

    -

    <%= setting_select(:default_notification_option, User::MAIL_NOTIFICATION_OPTIONS.collect {|o| [l(o.last), o.first.to_s]}) %>

    +

    <%= setting_select(:default_notification_option, User.valid_notification_options.collect {|o| [l(o.last), o.first.to_s]}) %>

    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/settings/_repositories.rhtml --- a/app/views/settings/_repositories.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/settings/_repositories.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -1,36 +1,95 @@ <% form_tag({:action => 'edit', :tab => 'repositories'}) do %> +
    +<%= l(:setting_enabled_scm) %> + + + + + + + <% Redmine::Scm::Base.all.collect do |choice| %> + <% scm_class = "Repository::#{choice}".constantize %> + <% text, value = (choice.is_a?(Array) ? choice : [choice, choice]) %> + <% setting = :enabled_scm %> + + + + + + <% end %> +
    <%= l(:text_scm_command) %><%= l(:text_scm_command_version) %>
    + <%= + check_box_tag( + "settings[#{setting}][]", + value, + Setting.send(setting).include?(value)) + %> + <%= text.to_s %> + + <%= + image_tag( + (scm_class.scm_available ? 'true.png' : 'exclamation.png'), + :style => "vertical-align:bottom;" + ) + %> + <%= scm_class.scm_command %> + + <%= scm_class.scm_version_string %> +
    +

    +<%= l(:text_scm_config) %> +

    +
    +

    <%= setting_check_box :autofetch_changesets %>

    -

    <%= setting_check_box :sys_api_enabled, - :onclick => "if (this.checked) { Form.Element.enable('settings_sys_api_key'); } else { Form.Element.disable('settings_sys_api_key'); }" %>

    +

    <%= setting_check_box :sys_api_enabled, + :onclick => + "if (this.checked) { Form.Element.enable('settings_sys_api_key'); } else { Form.Element.disable('settings_sys_api_key'); }" %>

    -

    <%= setting_text_field :sys_api_key, :size => 30, - :id => 'settings_sys_api_key', - :disabled => !Setting.sys_api_enabled?, - :label => :setting_mail_handler_api_key %> - <%= link_to_function l(:label_generate_key), "if ($('settings_sys_api_key').disabled == false) { $('settings_sys_api_key').value = randomKey(20) }" %> +

    <%= setting_text_field :sys_api_key, + :size => 30, + :id => 'settings_sys_api_key', + :disabled => !Setting.sys_api_enabled?, + :label => :setting_mail_handler_api_key %> + <%= link_to_function l(:label_generate_key), + "if ($('settings_sys_api_key').disabled == false) { $('settings_sys_api_key').value = randomKey(20) }" %>

    -

    <%= setting_multiselect(:enabled_scm, Redmine::Scm::Base.all) %>

    -

    <%= setting_text_field :repositories_encodings, :size => 60 %>
    <%= l(:text_comma_separated) %>

    -

    <%= setting_select :commit_logs_encoding, Setting::ENCODINGS %>

    -

    <%= setting_text_field :repository_log_display_limit, :size => 6 %>

    -
    <%= l(:text_issues_ref_in_commit_messages) %> +
    +<%= l(:text_issues_ref_in_commit_messages) %>

    <%= setting_text_field :commit_ref_keywords, :size => 30 %>
    <%= l(:text_comma_separated) %>

    <%= setting_text_field :commit_fix_keywords, :size => 30 %> - <%= l(:label_applied_status) %>: <%= setting_select :commit_fix_status_id, [["", 0]] + IssueStatus.find(:all).collect{|status| [status.name, status.id.to_s]}, :label => false %> - <%= l(:field_done_ratio) %>: <%= setting_select :commit_fix_done_ratio, (0..10).to_a.collect {|r| ["#{r*10} %", "#{r*10}"] }, :blank => :label_no_change_option, :label => false %> + <%= l(:label_applied_status) %>: <%= setting_select :commit_fix_status_id, + [["", 0]] + + IssueStatus.find(:all).collect{ + |status| [status.name, status.id.to_s] + }, + :label => false %> + <%= l(:field_done_ratio) %>: <%= setting_select :commit_fix_done_ratio, + (0..10).to_a.collect {|r| ["#{r*10} %", "#{r*10}"] }, + :blank => :label_no_change_option, + :label => false %>
    <%= l(:text_comma_separated) %>

    + +

    <%= setting_check_box :commit_logtime_enabled, + :onclick => + "if (this.checked) { Form.Element.enable('settings_commit_logtime_activity_id'); } else { Form.Element.disable('settings_commit_logtime_activity_id'); }"%>

    + +

    <%= setting_select :commit_logtime_activity_id, + [[l(:label_default), 0]] + + TimeEntryActivity.shared.all.collect{|activity| [activity.name, activity.id.to_s]}, + :disabled => !Setting.commit_logtime_enabled?%>

    <%= submit_tag l(:button_save) %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/time_entry_reports/.svn/all-wcprops --- a/app/views/time_entry_reports/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/time_entry_reports/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,17 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/4239/trunk/app/views/time_entry_reports +V 67 +/svn/!svn/ver/5878/branches/1.2-stable/app/views/time_entry_reports END -report.rhtml -K 25 -svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/4239/trunk/app/views/time_entry_reports/report.rhtml -END -_report_criteria.rhtml -K 25 -svn:wc:ra_dav:version-url -V 76 -/svn/!svn/ver/4232/trunk/app/views/time_entry_reports/_report_criteria.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/time_entry_reports/.svn/entries --- a/app/views/time_entry_reports/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/time_entry_reports/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/time_entry_reports +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/time_entry_reports http://redmine.rubyforge.org/svn -2010-10-07T15:51:09.349542Z -4239 -edavis10 +2011-04-03T12:02:10.155680Z +5298 +jplang @@ -32,11 +32,11 @@ -2010-11-19T13:04:48.181514Z -d896f5cf56b2a3cd64887f239e584fdc -2010-10-07T15:51:09.349542Z -4239 -edavis10 +2011-07-14T09:24:21.000000Z +372b261e8c1bb4a74da7c6ea149de24f +2011-04-03T12:02:10.155680Z +5298 +jplang has-props @@ -58,7 +58,7 @@ -3569 +3218 _report_criteria.rhtml file @@ -66,7 +66,7 @@ -2010-11-19T13:04:48.181514Z +2011-07-14T09:24:09.000000Z 5fa73daf0a67b2a39fd10320bcd7ab45 2010-10-05T16:07:17.015270Z 4232 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/time_entry_reports/.svn/text-base/report.rhtml.svn-base --- a/app/views/time_entry_reports/.svn/text-base/report.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/time_entry_reports/.svn/text-base/report.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -6,13 +6,10 @@

    <%= l(:label_spent_time) %>

    -<% form_remote_tag(:url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content') do %> +<% form_tag({:controller => 'time_entry_reports', :action => 'report', :project_id => @project, :issue_id => @issue}, :method => :get, :id => 'query_form') do %> <% @criterias.each do |criteria| %> <%= hidden_field_tag 'criterias[]', criteria, :id => nil %> <% end %> - <%# TODO: get rid of the project_id field, that should already be in the URL %> - <%= hidden_field_tag('project_id', params[:project_id]) if @project %> - <%= hidden_field_tag('issue_id', params[:issue_id]) if @issue %> <%= render :partial => 'timelog/date_range' %>

    <%= l(:label_details) %>: <%= select_tag 'columns', options_for_select([[l(:label_year), 'year'], @@ -22,14 +19,11 @@ :onchange => "this.form.onsubmit();" %> <%= l(:button_add) %>: <%= select_tag('criterias[]', options_for_select([[]] + (@available_criterias.keys - @criterias).collect{|k| [l_or_humanize(@available_criterias[k][:label]), k]}), - :onchange => "this.form.onsubmit();", + :onchange => "this.form.submit();", :style => 'width: 200px', :id => nil, :disabled => (@criterias.length >= 3)) %> - <%= link_to_remote l(:button_clear), {:url => {:project_id => @project, :period_type => params[:period_type], :period => params[:period], :from => @from, :to => @to, :columns => @columns}, - :method => :get, - :update => 'content' - }, :class => 'icon icon-reload' %>

    + <%= link_to l(:button_clear), {:project_id => @project, :issue_id => @issue, :period_type => params[:period_type], :period => params[:period], :from => @from, :to => @to, :columns => @columns}, :class => 'icon icon-reload' %>

    <% end %> <% unless @criterias.empty? %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/time_entry_reports/report.rhtml --- a/app/views/time_entry_reports/report.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/time_entry_reports/report.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -6,13 +6,10 @@

    <%= l(:label_spent_time) %>

    -<% form_remote_tag(:url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content') do %> +<% form_tag({:controller => 'time_entry_reports', :action => 'report', :project_id => @project, :issue_id => @issue}, :method => :get, :id => 'query_form') do %> <% @criterias.each do |criteria| %> <%= hidden_field_tag 'criterias[]', criteria, :id => nil %> <% end %> - <%# TODO: get rid of the project_id field, that should already be in the URL %> - <%= hidden_field_tag('project_id', params[:project_id]) if @project %> - <%= hidden_field_tag('issue_id', params[:issue_id]) if @issue %> <%= render :partial => 'timelog/date_range' %>

    <%= l(:label_details) %>: <%= select_tag 'columns', options_for_select([[l(:label_year), 'year'], @@ -22,14 +19,11 @@ :onchange => "this.form.onsubmit();" %> <%= l(:button_add) %>: <%= select_tag('criterias[]', options_for_select([[]] + (@available_criterias.keys - @criterias).collect{|k| [l_or_humanize(@available_criterias[k][:label]), k]}), - :onchange => "this.form.onsubmit();", + :onchange => "this.form.submit();", :style => 'width: 200px', :id => nil, :disabled => (@criterias.length >= 3)) %> - <%= link_to_remote l(:button_clear), {:url => {:project_id => @project, :period_type => params[:period_type], :period => params[:period], :from => @from, :to => @to, :columns => @columns}, - :method => :get, - :update => 'content' - }, :class => 'icon icon-reload' %>

    + <%= link_to l(:button_clear), {:project_id => @project, :issue_id => @issue, :period_type => params[:period_type], :period => params[:period], :from => @from, :to => @to, :columns => @columns}, :class => 'icon icon-reload' %>

    <% end %> <% unless @criterias.empty? %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/timelog/.svn/all-wcprops --- a/app/views/timelog/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/timelog/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,29 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 42 -/svn/!svn/ver/4250/trunk/app/views/timelog +V 56 +/svn/!svn/ver/5946/branches/1.2-stable/app/views/timelog END -_list.rhtml -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/4250/trunk/app/views/timelog/_list.rhtml -END -index.html.erb -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/4239/trunk/app/views/timelog/index.html.erb -END -edit.rhtml -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/4248/trunk/app/views/timelog/edit.rhtml -END -_date_range.rhtml -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/4235/trunk/app/views/timelog/_date_range.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/timelog/.svn/entries --- a/app/views/timelog/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/timelog/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/timelog +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/timelog http://redmine.rubyforge.org/svn -2010-10-12T15:55:21.984670Z -4250 -edavis10 +2011-05-29T07:24:15.223638Z +5946 +jplang @@ -32,11 +32,11 @@ -2010-11-19T13:04:48.784870Z -128d8975cacb0db79fc14a461544db09 -2010-10-12T15:55:21.984670Z -4250 -edavis10 +2011-07-14T09:24:21.000000Z +e88efaa6af38a128fb3f8cde3571a718 +2011-04-04T11:53:55.783646Z +5314 +tmaruyama has-props @@ -58,7 +58,7 @@ -1733 +2239 index.html.erb file @@ -66,11 +66,11 @@ -2010-11-19T13:04:48.784870Z -404d6b75c96def01a9a6bf86a6f58697 -2010-10-07T15:51:09.349542Z -4239 -edavis10 +2011-07-14T09:24:21.000000Z +775865919ae8ffd5a06f3de08441d55b +2011-04-03T11:55:24.787027Z +5297 +jplang has-props @@ -92,7 +92,75 @@ -1421 +1207 + +index.api.rsb +file + + + + +2011-07-14T09:24:21.000000Z +cd9d66ae656d5138a5c3631ce0d7f5aa +2011-05-29T07:24:15.223638Z +5946 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +805 + +bulk_edit.rhtml +file + + + + +2011-06-06T13:18:33.000000Z +056802a752512ee4f3472a6a3755b65d +2011-04-07T16:34:58.239484Z +5354 +jplang + + + + + + + + + + + + + + + + + + + + + +1724 edit.rhtml file @@ -100,7 +168,7 @@ -2010-11-19T13:04:48.784870Z +2011-07-14T09:24:09.000000Z 3bb82a2517a120b7a44add17f3369082 2010-10-11T15:31:42.953914Z 4248 @@ -134,11 +202,11 @@ -2010-11-19T13:04:48.784870Z -43628f95cde9503c20744c3b9fe9dfcd -2010-10-06T18:23:45.014848Z -4235 -edavis10 +2011-07-14T09:24:21.000000Z +52538b1db45085cc19d89c18f8699478 +2011-04-03T12:02:56.333119Z +5299 +jplang has-props @@ -160,5 +228,39 @@ -1736 +2027 +show.api.rsb +file + + + + +2011-07-14T09:24:09.000000Z +5838cace900e781466a5826ba75b9f44 +2010-12-04T17:43:39.823144Z +4466 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +627 + diff -r f7c525dc7585 -r 0b6c82dead28 app/views/timelog/.svn/prop-base/index.api.rsb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/timelog/.svn/prop-base/index.api.rsb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/timelog/.svn/prop-base/show.api.rsb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/timelog/.svn/prop-base/show.api.rsb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/timelog/.svn/text-base/_date_range.rhtml.svn-base --- a/app/views/timelog/.svn/text-base/_date_range.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/timelog/.svn/text-base/_date_range.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -2,27 +2,24 @@ <%= l(:label_date_range) %>

    -<%= radio_button_tag 'period_type', '1', !@free_period %> +<%= radio_button_tag 'period_type', '1', !@free_period, :onclick => 'Form.Element.disable("from");Form.Element.disable("to");Form.Element.enable("period");' %> <%= select_tag 'period', options_for_period_select(params[:period]), - :onchange => 'this.form.onsubmit();', - :onfocus => '$("period_type_1").checked = true;' %> + :onchange => 'this.form.submit();', + :onfocus => '$("period_type_1").checked = true;', + :disabled => @free_period %>

    -<%= radio_button_tag 'period_type', '2', @free_period %> +<%= radio_button_tag 'period_type', '2', @free_period, :onclick => 'Form.Element.enable("from");Form.Element.enable("to");Form.Element.disable("period");' %> -<%= l(:label_date_from_to, :start => (text_field_tag('from', @from, :size => 10) + calendar_for('from')), - :end => (text_field_tag('to', @to, :size => 10) + calendar_for('to'))) %> +<%= l(:label_date_from_to, :start => (text_field_tag('from', @from, :size => 10, :disabled => !@free_period) + calendar_for('from')), + :end => (text_field_tag('to', @to, :size => 10, :disabled => !@free_period) + calendar_for('to'))) %>

    - <%= link_to_remote l(:button_apply), - { :url => { }, - :update => "content", - :with => "Form.serialize('query_form')", - :method => :get - }, :class => 'icon icon-checked' %> + <%= link_to_function l(:button_apply), '$("query_form").submit()', :class => 'icon icon-checked' %> + <%= link_to l(:button_clear), {:controller => controller_name, :action => action_name, :project_id => @project, :issue_id => @issue}, :class => 'icon icon-reload' %>

    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/timelog/.svn/text-base/_list.rhtml.svn-base --- a/app/views/timelog/.svn/text-base/_list.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/timelog/.svn/text-base/_list.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,6 +1,14 @@ +<% form_tag({}) do -%> +<%= hidden_field_tag 'back_url', url_for(params) %> + <%= sort_header_tag('spent_on', :caption => l(:label_date), :default_order => 'desc') %> <%= sort_header_tag('user', :caption => l(:label_member)) %> <%= sort_header_tag('activity', :caption => l(:label_activity)) %> @@ -13,7 +21,8 @@ <% entries.each do |entry| -%> -"> + hascontextmenu"> + @@ -39,3 +48,6 @@ <% end -%>
    + <%= link_to image_tag('toggle_check.png'), + {}, + :onclick => 'toggleIssuesSelection(Element.up(this, "form")); return false;', + :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}" %> +
    <%= check_box_tag("ids[]", entry.id, false, :id => nil) %> <%= format_date(entry.spent_on) %> <%=h entry.user %> <%=h entry.activity %>
    +<% end -%> + +<%= context_menu time_entries_context_menu_path %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/timelog/.svn/text-base/index.api.rsb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/timelog/.svn/text-base/index.api.rsb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,16 @@ +api.array :time_entries, api_meta(:total_count => @entry_count, :offset => @offset, :limit => @limit) do + @entries.each do |time_entry| + api.time_entry do + api.id time_entry.id + api.project(:id => time_entry.project_id, :name => time_entry.project.name) unless time_entry.project.nil? + api.issue(:id => time_entry.issue_id) unless time_entry.issue.nil? + api.user(:id => time_entry.user_id, :name => time_entry.user.name) unless time_entry.user.nil? + api.activity(:id => time_entry.activity_id, :name => time_entry.activity.name) unless time_entry.activity.nil? + api.hours time_entry.hours + api.comments time_entry.comments + api.spent_on time_entry.spent_on + api.created_on time_entry.created_on + api.updated_on time_entry.updated_on + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 app/views/timelog/.svn/text-base/index.html.erb.svn-base --- a/app/views/timelog/.svn/text-base/index.html.erb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/timelog/.svn/text-base/index.html.erb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -6,11 +6,7 @@

    <%= l(:label_spent_time) %>

    -<% form_remote_tag( :url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content' ) do %> -<%# TOOD: remove the project_id and issue_id hidden fields, that information is -already in the URI %> -<%= hidden_field_tag('project_id', params[:project_id]) if @project %> -<%= hidden_field_tag 'issue_id', params[:issue_id] if @issue %> +<% form_tag({:controller => 'timelog', :action => 'index', :project_id => @project, :issue_id => @issue}, :method => :get, :id => 'query_form') do %> <%= render :partial => 'date_range' %> <% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/timelog/.svn/text-base/show.api.rsb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/timelog/.svn/text-base/show.api.rsb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,12 @@ +api.time_entry do + api.id @time_entry.id + api.project(:id => @time_entry.project_id, :name => @time_entry.project.name) unless @time_entry.project.nil? + api.issue(:id => @time_entry.issue_id) unless @time_entry.issue.nil? + api.user(:id => @time_entry.user_id, :name => @time_entry.user.name) unless @time_entry.user.nil? + api.activity(:id => @time_entry.activity_id, :name => @time_entry.activity.name) unless @time_entry.activity.nil? + api.hours @time_entry.hours + api.comments @time_entry.comments + api.spent_on @time_entry.spent_on + api.created_on @time_entry.created_on + api.updated_on @time_entry.updated_on +end diff -r f7c525dc7585 -r 0b6c82dead28 app/views/timelog/_date_range.rhtml --- a/app/views/timelog/_date_range.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/timelog/_date_range.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -2,27 +2,24 @@ <%= l(:label_date_range) %>

    -<%= radio_button_tag 'period_type', '1', !@free_period %> +<%= radio_button_tag 'period_type', '1', !@free_period, :onclick => 'Form.Element.disable("from");Form.Element.disable("to");Form.Element.enable("period");' %> <%= select_tag 'period', options_for_period_select(params[:period]), - :onchange => 'this.form.onsubmit();', - :onfocus => '$("period_type_1").checked = true;' %> + :onchange => 'this.form.submit();', + :onfocus => '$("period_type_1").checked = true;', + :disabled => @free_period %>

    -<%= radio_button_tag 'period_type', '2', @free_period %> +<%= radio_button_tag 'period_type', '2', @free_period, :onclick => 'Form.Element.enable("from");Form.Element.enable("to");Form.Element.disable("period");' %> -<%= l(:label_date_from_to, :start => (text_field_tag('from', @from, :size => 10) + calendar_for('from')), - :end => (text_field_tag('to', @to, :size => 10) + calendar_for('to'))) %> +<%= l(:label_date_from_to, :start => (text_field_tag('from', @from, :size => 10, :disabled => !@free_period) + calendar_for('from')), + :end => (text_field_tag('to', @to, :size => 10, :disabled => !@free_period) + calendar_for('to'))) %>

    - <%= link_to_remote l(:button_apply), - { :url => { }, - :update => "content", - :with => "Form.serialize('query_form')", - :method => :get - }, :class => 'icon icon-checked' %> + <%= link_to_function l(:button_apply), '$("query_form").submit()', :class => 'icon icon-checked' %> + <%= link_to l(:button_clear), {:controller => controller_name, :action => action_name, :project_id => @project, :issue_id => @issue}, :class => 'icon icon-reload' %>

    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/timelog/_list.rhtml --- a/app/views/timelog/_list.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/timelog/_list.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -1,6 +1,14 @@ +<% form_tag({}) do -%> +<%= hidden_field_tag 'back_url', url_for(params) %> + <%= sort_header_tag('spent_on', :caption => l(:label_date), :default_order => 'desc') %> <%= sort_header_tag('user', :caption => l(:label_member)) %> <%= sort_header_tag('activity', :caption => l(:label_activity)) %> @@ -13,7 +21,8 @@ <% entries.each do |entry| -%> -"> + hascontextmenu"> + @@ -39,3 +48,6 @@ <% end -%>
    + <%= link_to image_tag('toggle_check.png'), + {}, + :onclick => 'toggleIssuesSelection(Element.up(this, "form")); return false;', + :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}" %> +
    <%= check_box_tag("ids[]", entry.id, false, :id => nil) %> <%= format_date(entry.spent_on) %> <%=h entry.user %> <%=h entry.activity %>
    +<% end -%> + +<%= context_menu time_entries_context_menu_path %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/timelog/bulk_edit.rhtml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/timelog/bulk_edit.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,49 @@ +

    <%= l(:label_bulk_edit_selected_time_entries) %>

    + +
      <%= @time_entries.collect {|i| content_tag('li', link_to(h("#{i.spent_on.strftime("%Y-%m-%d")} -- #{i.project}: #{l(:label_f_hour_plural, :value => i.hours)}"), { :action => 'edit', :id => i }))} %>
    + +<% form_tag(:action => 'bulk_update') do %> +<%= @time_entries.collect {|i| hidden_field_tag('ids[]', i.id)}.join %> +
    +
    + <%= l(:label_change_properties) %> +
    +

    + + <%= text_field :time_entry, :issue_id, :size => 6 %> +

    + +

    + + <%= text_field :time_entry, :spent_on, :size => 10 %><%= calendar_for('time_entry_spent_on') %> +

    + +

    + + <%= text_field :time_entry, :hours, :size => 6 %> +

    + + <% if @available_activities.any? %> +

    + + <%= select_tag('time_entry[activity_id]', "" + options_from_collection_for_select(@available_activities, :id, :name)) %> +

    + <% end %> + +

    + + <%= text_field(:time_entry, :comments, :size => 100) %> +

    + + <% @custom_fields.each do |custom_field| %> +

    <%= custom_field_tag_for_bulk_edit('time_entry', custom_field, @projects) %>

    + <% end %> + + <%= call_hook(:view_time_entries_bulk_edit_details_bottom, { :time_entries => @time_entries }) %> +
    + +
    +
    + +

    <%= submit_tag l(:button_submit) %>

    +<% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/timelog/index.api.rsb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/timelog/index.api.rsb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,16 @@ +api.array :time_entries, api_meta(:total_count => @entry_count, :offset => @offset, :limit => @limit) do + @entries.each do |time_entry| + api.time_entry do + api.id time_entry.id + api.project(:id => time_entry.project_id, :name => time_entry.project.name) unless time_entry.project.nil? + api.issue(:id => time_entry.issue_id) unless time_entry.issue.nil? + api.user(:id => time_entry.user_id, :name => time_entry.user.name) unless time_entry.user.nil? + api.activity(:id => time_entry.activity_id, :name => time_entry.activity.name) unless time_entry.activity.nil? + api.hours time_entry.hours + api.comments time_entry.comments + api.spent_on time_entry.spent_on + api.created_on time_entry.created_on + api.updated_on time_entry.updated_on + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 app/views/timelog/index.html.erb --- a/app/views/timelog/index.html.erb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/timelog/index.html.erb Mon Jul 25 14:23:37 2011 +0100 @@ -6,11 +6,7 @@

    <%= l(:label_spent_time) %>

    -<% form_remote_tag( :url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content' ) do %> -<%# TOOD: remove the project_id and issue_id hidden fields, that information is -already in the URI %> -<%= hidden_field_tag('project_id', params[:project_id]) if @project %> -<%= hidden_field_tag 'issue_id', params[:issue_id] if @issue %> +<% form_tag({:controller => 'timelog', :action => 'index', :project_id => @project, :issue_id => @issue}, :method => :get, :id => 'query_form') do %> <%= render :partial => 'date_range' %> <% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/timelog/show.api.rsb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/timelog/show.api.rsb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,12 @@ +api.time_entry do + api.id @time_entry.id + api.project(:id => @time_entry.project_id, :name => @time_entry.project.name) unless @time_entry.project.nil? + api.issue(:id => @time_entry.issue_id) unless @time_entry.issue.nil? + api.user(:id => @time_entry.user_id, :name => @time_entry.user.name) unless @time_entry.user.nil? + api.activity(:id => @time_entry.activity_id, :name => @time_entry.activity.name) unless @time_entry.activity.nil? + api.hours @time_entry.hours + api.comments @time_entry.comments + api.spent_on @time_entry.spent_on + api.created_on @time_entry.created_on + api.updated_on @time_entry.updated_on +end diff -r f7c525dc7585 -r 0b6c82dead28 app/views/trackers/.svn/all-wcprops --- a/app/views/trackers/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 43 -/svn/!svn/ver/3437/trunk/app/views/trackers -END -index.html.erb -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/3437/trunk/app/views/trackers/index.html.erb -END -_form.rhtml -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/3162/trunk/app/views/trackers/_form.rhtml -END -edit.rhtml -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/3146/trunk/app/views/trackers/edit.rhtml -END -new.rhtml -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/3146/trunk/app/views/trackers/new.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/trackers/.svn/entries --- a/app/views/trackers/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/trackers/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/trackers +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/trackers http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.695779Z +2011-07-14T09:24:09.000000Z 952031a6216d1b67897c30936b8c656c 2010-02-15T16:41:27.289923Z 3437 @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.695779Z +2011-07-14T09:24:09.000000Z 0b8a4f0aead4d21c20c9cc8dd29141e5 2009-12-12T15:23:22.060140Z 3162 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.695779Z +2011-07-14T09:24:09.000000Z ac4b0e11130741048a5f7c7405bff3de 2009-12-09T11:03:55.646494Z 3146 @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.695779Z +2011-07-14T09:24:09.000000Z cf313c286d40c5c44da29ad261b01421 2009-12-09T11:03:55.646494Z 3146 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/users/.svn/all-wcprops --- a/app/views/users/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/users/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,65 +1,5 @@ -K 25 -svn:wc:ra_dav:version-url -V 40 -/svn/!svn/ver/4382/trunk/app/views/users -END -_general.rhtml -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/4249/trunk/app/views/users/_general.rhtml -END -_memberships.rhtml -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/3924/trunk/app/views/users/_memberships.rhtml -END -_groups.rhtml K 25 svn:wc:ra_dav:version-url V 54 -/svn/!svn/ver/4230/trunk/app/views/users/_groups.rhtml +/svn/!svn/ver/5878/branches/1.2-stable/app/views/users END -new.html.erb -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/4229/trunk/app/views/users/new.html.erb -END -_mail_notifications.html.erb -K 25 -svn:wc:ra_dav:version-url -V 69 -/svn/!svn/ver/4223/trunk/app/views/users/_mail_notifications.html.erb -END -show.rhtml -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/4382/trunk/app/views/users/show.rhtml -END -_form.rhtml -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/4223/trunk/app/views/users/_form.rhtml -END -edit.rhtml -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/4231/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 -V 52 -/svn/!svn/ver/4231/trunk/app/views/users/index.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/users/.svn/entries --- a/app/views/users/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/users/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/users +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/users http://redmine.rubyforge.org/svn -2010-11-07T14:15:01.891476Z -4382 +2011-03-20T11:49:29.794817Z +5172 jplang @@ -32,7 +32,7 @@ -2010-11-19T13:04:49.388892Z +2011-07-14T09:24:09.000000Z 27e27971f72ee72e276157b29606a4f8 2010-10-11T20:34:33.692909Z 4249 @@ -66,10 +66,10 @@ -2010-09-23T14:37:44.699769Z -f5982959a0afd1bb9e499afe303de33d -2010-08-08T07:07:20.961363Z -3924 +2011-07-14T09:24:09.000000Z +82d8afa73a30d32a1df6dbf0a6ec9ccc +2010-12-12T21:21:57.860671Z +4508 jbbarth has-props @@ -92,7 +92,7 @@ -2948 +2950 _groups.rhtml file @@ -100,7 +100,7 @@ -2010-11-19T13:04:49.388892Z +2011-07-14T09:24:09.000000Z f19cc195f524459954b4b4be5bfdcff5 2010-09-30T18:22:46.611444Z 4230 @@ -134,7 +134,7 @@ -2010-11-19T13:04:49.388892Z +2011-07-14T09:24:09.000000Z 488647d93840c1ffa5834cc45817c1c3 2010-09-29T16:00:45.891709Z 4229 @@ -168,11 +168,11 @@ -2010-11-19T13:04:49.388892Z -9617ce493c6f68e4a861de49a13fc0b1 -2010-09-28T22:13:06.534232Z -4223 -edavis10 +2011-07-14T09:24:09.000000Z +e6086313266e733c482de5431e85f7a1 +2010-12-12T14:25:23.262992Z +4497 +jplang @@ -194,7 +194,41 @@ -872 +836 + +index.api.rsb +file + + + + +2011-07-14T09:24:09.000000Z +2232eeac9e0dea5001f5c7dbd9156a79 +2010-12-11T13:13:49.013705Z +4489 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +468 show.rhtml file @@ -202,7 +236,7 @@ -2010-11-19T13:04:49.388892Z +2011-07-14T09:24:09.000000Z 1914aa4c363a1dab0cdba1e49ccc13ff 2010-11-07T14:15:01.891476Z 4382 @@ -236,11 +270,11 @@ -2010-11-19T13:04:49.388892Z -ac91549a6b11efcad3478c0c17248508 -2010-09-28T22:13:06.534232Z -4223 -edavis10 +2011-07-14T09:24:21.000000Z +b072a682fc838af70db88ade37e24f81 +2011-03-20T11:49:29.794817Z +5172 +jplang has-props @@ -262,7 +296,41 @@ -1820 +1824 + +_preferences.html.erb +file + + + + +2011-07-14T09:24:09.000000Z +819ceb2599cdb65121387da777ec7454 +2011-02-21T09:53:29.844413Z +4900 +jplang + + + + + + + + + + + + + + + + + + + + + +502 edit.rhtml file @@ -270,11 +338,11 @@ -2010-11-19T13:04:49.392852Z -25485f87d56ef17bf204588edb4a0bed -2010-10-04T15:36:16.880272Z -4231 -edavis10 +2011-07-14T09:24:09.000000Z +334693af38532eb4e5c8801223e2c718 +2011-01-16T15:23:11.666065Z +4729 +jplang has-props @@ -296,41 +364,7 @@ -375 - -_preferences.html.erb -file - - - - -2010-11-19T13:04:49.392852Z -ebc1d625f2d6809ea491e7303f758e7a -2010-09-28T22:13:06.534232Z -4223 -edavis10 - - - - - - - - - - - - - - - - - - - - - -441 +523 index.rhtml file @@ -338,11 +372,11 @@ -2010-11-19T13:04:49.392852Z -ef23d8be0fbbefff33820156bb8f422a -2010-10-04T15:36:16.880272Z -4231 -edavis10 +2011-07-14T09:24:21.000000Z +18ca651de1074f94a94da9b8385ce0e6 +2011-03-16T18:23:51.946930Z +5151 +jplang has-props @@ -364,5 +398,39 @@ -2152 +2653 +show.api.rsb +file + + + + +2011-07-14T09:24:09.000000Z +5af24df58230f005be3a6814c6f53e33 +2010-12-11T10:19:11.273304Z +4486 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +811 + diff -r f7c525dc7585 -r 0b6c82dead28 app/views/users/.svn/prop-base/index.api.rsb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/users/.svn/prop-base/index.api.rsb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/users/.svn/prop-base/show.api.rsb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/users/.svn/prop-base/show.api.rsb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/users/.svn/text-base/_form.rhtml.svn-base --- a/app/views/users/.svn/text-base/_form.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/users/.svn/text-base/_form.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,6 +1,9 @@ <%= error_messages_for 'user' %> +
    +
    +

    <%=l(:label_information_plural)%>

    <%= f.text_field :login, :required => true, :size => 25 %>

    <%= f.text_field :firstname, :required => true %>

    @@ -19,27 +22,30 @@ <%= call_hook(:view_users_form, :user => @user, :form => f) %>
    +

    <%=l(:label_authentication)%>

    -

    <%=l(:label_authentication)%>

    <% unless @auth_sources.empty? %>

    <%= f.select :auth_source_id, ([[l(:label_internal), ""]] + @auth_sources.collect { |a| [a.name, a.id] }), {}, :onchange => "if (this.value=='') {Element.show('password_fields');} else {Element.hide('password_fields');}" %>

    <% end %>
    -

    -<%= password_field_tag 'password', nil, :size => 25 %>
    +

    <%= f.password_field :password, :required => true, :size => 25 %>
    <%= l(:text_caracters_minimum, :count => Setting.password_min_length) %>

    -

    -<%= password_field_tag 'password_confirmation', nil, :size => 25 %>

    +

    <%= f.password_field :password_confirmation, :required => true, :size => 25 %>

    +
    +
    +

    <%=l(:field_mail_notification)%>

    -

    <%=l(:field_mail_notification)%>

    <%= render :partial => 'users/mail_notifications' %>
    +

    <%=l(:label_preferences)%>

    -

    <%=l(:label_preferences)%>

    <%= render :partial => 'users/preferences' %>
    +
    +
    +
    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/users/.svn/text-base/_mail_notifications.html.erb.svn-base --- a/app/views/users/.svn/text-base/_mail_notifications.html.erb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/users/.svn/text-base/_mail_notifications.html.erb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@

    -<%= select_tag 'notification_option', options_for_select(@notification_options.collect {|o| [l(o.last), o.first]}, @notification_option.to_sym), - :onchange => 'if ($("notification_option").value == "selected") {Element.show("notified-projects")} else {Element.hide("notified-projects")}' %> +<%= select_tag 'user[mail_notification]', options_for_select(user_mail_notification_options(@user), @user.mail_notification), + :onchange => 'if (this.value == "selected") {Element.show("notified-projects")} else {Element.hide("notified-projects")}' %>

    -<% content_tag 'div', :id => 'notified-projects', :style => (@notification_option == 'selected' ? '' : 'display:none;') do %> +<% content_tag 'div', :id => 'notified-projects', :style => (@user.mail_notification == 'selected' ? '' : 'display:none;') do %>

    <% @user.projects.each do |project| %>
    <% end %>

    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/users/.svn/text-base/_memberships.rhtml.svn-base --- a/app/views/users/.svn/text-base/_memberships.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/users/.svn/text-base/_memberships.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -38,8 +38,8 @@ <%= call_hook(:view_users_memberships_table_row, :user => @user, :membership => membership, :roles => roles, :projects => projects )%> + <% end; reset_cycle %> -<% end; reset_cycle %> <% else %>

    <%= l(:label_no_data) %>

    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/users/.svn/text-base/_preferences.html.erb.svn-base --- a/app/views/users/.svn/text-base/_preferences.html.erb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/users/.svn/text-base/_preferences.html.erb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -2,5 +2,6 @@

    <%= pref_fields.check_box :hide_mail %>

    <%= pref_fields.select :time_zone, ActiveSupport::TimeZone.all.collect {|z| [ z.to_s, z.name ]}, :include_blank => true %>

    <%= pref_fields.select :comments_sorting, [[l(:label_chronological_order), 'asc'], [l(:label_reverse_chronological_order), 'desc']] %>

    +

    <%= pref_fields.check_box :warn_on_leaving_unsaved %>

    <% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/users/.svn/text-base/edit.rhtml.svn-base --- a/app/views/users/.svn/text-base/edit.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/users/.svn/text-base/edit.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,6 +1,7 @@
    <%= link_to l(:label_profile), user_path(@user), :class => 'icon icon-user' %> <%= change_status_link(@user) %> +<%= link_to(l(:button_delete), @user, :confirm => l(:text_are_you_sure), :method => :delete, :class => 'icon icon-del') if User.current != @user %>

    <%= link_to l(:label_user_plural), :controller => 'users', :action => 'index' %> » <%=h @user.login %>

    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/users/.svn/text-base/index.api.rsb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/users/.svn/text-base/index.api.rsb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,15 @@ +api.array :users, api_meta(:total_count => @user_count, :offset => @offset, :limit => @limit) do + @users.each do |user| + api.user do + api.id user.id + api.login user.login + api.firstname user.firstname + api.lastname user.lastname + api.mail user.mail + api.created_on user.created_on + api.last_login_on user.last_login_on + + render_api_custom_values user.visible_custom_field_values, api + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 app/views/users/.svn/text-base/index.rhtml.svn-base --- a/app/views/users/.svn/text-base/index.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/users/.svn/text-base/index.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -8,9 +8,16 @@
    <%= l(:label_filter_plural) %> <%= select_tag 'status', users_status_options_for_select(@status), :class => "small", :onchange => "this.form.submit(); return false;" %> + +<% if @groups.present? %> + +<%= select_tag 'group_id', '' + options_from_collection_for_select(@groups, :id, :name, params[:group_id].to_i), :onchange => "this.form.submit(); return false;" %> +<% end %> + <%= text_field_tag 'name', params[:name], :size => 30 %> <%= submit_tag l(:button_apply), :class => "small", :name => nil %> +<%= link_to l(:button_clear), users_path, :class => 'icon icon-reload' %>
    <% end %>   @@ -37,7 +44,10 @@ <%= checked_image user.admin? %> <%= format_time(user.created_on) %> <%= format_time(user.last_login_on) unless user.last_login_on.nil? %> - <%= change_status_link(user) %> + + <%= change_status_link(user) %> + <%= link_to(l(:button_delete), user, :confirm => l(:text_are_you_sure), :method => :delete, :class => 'icon icon-del') unless User.current == user %> + <% end -%> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/users/.svn/text-base/show.api.rsb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/users/.svn/text-base/show.api.rsb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,24 @@ +api.user do + api.id @user.id + api.login @user.login if User.current.admin? + api.firstname @user.firstname + api.lastname @user.lastname + api.mail @user.mail if User.current.admin? || !@user.pref.hide_mail + api.created_on @user.created_on + api.last_login_on @user.last_login_on + + render_api_custom_values @user.visible_custom_field_values, api + + api.array :memberships do + @memberships.each do |membership| + api.membership do + api.project :id => membership.project.id, :name => membership.project.name + api.array :roles do + membership.roles.each do |role| + api.role :id => role.id, :name => role.name + end + end + end if membership.project + end + end if include_in_api_response?('memberships') && @memberships +end diff -r f7c525dc7585 -r 0b6c82dead28 app/views/users/_form.rhtml --- a/app/views/users/_form.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/users/_form.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -3,7 +3,10 @@ <%= error_messages_for 'user' %> +
    +
    +

    <%=l(:label_information_plural)%>

    <%= f.text_field :login, :required => true, :size => 25 %>

    <%= f.text_field :firstname, :required => true %>

    @@ -49,27 +52,30 @@ +

    <%=l(:label_authentication)%>

    -

    <%=l(:label_authentication)%>

    <% unless @auth_sources.empty? %>

    <%= f.select :auth_source_id, ([[l(:label_internal), ""]] + @auth_sources.collect { |a| [a.name, a.id] }), {}, :onchange => "if (this.value=='') {Element.show('password_fields');} else {Element.hide('password_fields');}" %>

    <% end %>
    -

    -<%= password_field_tag 'password', nil, :size => 25 %>
    +

    <%= f.password_field :password, :required => true, :size => 25 %>
    <%= l(:text_caracters_minimum, :count => Setting.password_min_length) %>

    -

    -<%= password_field_tag 'password_confirmation', nil, :size => 25 %>

    +

    <%= f.password_field :password_confirmation, :required => true, :size => 25 %>

    +
    +
    +

    <%=l(:field_mail_notification)%>

    -

    <%=l(:field_mail_notification)%>

    <%= render :partial => 'users/mail_notifications' %>
    +

    <%=l(:label_preferences)%>

    -

    <%=l(:label_preferences)%>

    <%= render :partial => 'users/preferences' %>
    +
    +
    +
    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/users/_mail_notifications.html.erb --- a/app/views/users/_mail_notifications.html.erb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/users/_mail_notifications.html.erb Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@

    -<%= select_tag 'notification_option', options_for_select(@notification_options.collect {|o| [l(o.last), o.first]}, @notification_option.to_sym), - :onchange => 'if ($("notification_option").value == "selected") {Element.show("notified-projects")} else {Element.hide("notified-projects")}' %> +<%= select_tag 'user[mail_notification]', options_for_select(user_mail_notification_options(@user), @user.mail_notification), + :onchange => 'if (this.value == "selected") {Element.show("notified-projects")} else {Element.hide("notified-projects")}' %>

    -<% content_tag 'div', :id => 'notified-projects', :style => (@notification_option == 'selected' ? '' : 'display:none;') do %> +<% content_tag 'div', :id => 'notified-projects', :style => (@user.mail_notification == 'selected' ? '' : 'display:none;') do %>

    <% @user.projects.each do |project| %>
    <% end %>

    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/users/_memberships.rhtml --- a/app/views/users/_memberships.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/users/_memberships.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -38,8 +38,8 @@ <%= call_hook(:view_users_memberships_table_row, :user => @user, :membership => membership, :roles => roles, :projects => projects )%> + <% end; reset_cycle %> -<% end; reset_cycle %> <% else %>

    <%= l(:label_no_data) %>

    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/users/_preferences.html.erb --- a/app/views/users/_preferences.html.erb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/users/_preferences.html.erb Mon Jul 25 14:23:37 2011 +0100 @@ -2,5 +2,6 @@

    <%= pref_fields.check_box :hide_mail %>

    <%= pref_fields.select :time_zone, ActiveSupport::TimeZone.all.collect {|z| [ z.to_s, z.name ]}, :include_blank => true %>

    <%= pref_fields.select :comments_sorting, [[l(:label_chronological_order), 'asc'], [l(:label_reverse_chronological_order), 'desc']] %>

    +

    <%= pref_fields.check_box :warn_on_leaving_unsaved %>

    <% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/users/edit.rhtml --- a/app/views/users/edit.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/users/edit.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -1,6 +1,7 @@
    <%= link_to l(:label_profile), user_path(@user), :class => 'icon icon-user' %> <%= change_status_link(@user) %> +<%= link_to(l(:button_delete), @user, :confirm => l(:text_are_you_sure), :method => :delete, :class => 'icon icon-del') if User.current != @user %>

    <%= link_to l(:label_user_plural), :controller => 'users', :action => 'index' %> » <%=h @user.login %>

    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/users/index.api.rsb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/users/index.api.rsb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,15 @@ +api.array :users, api_meta(:total_count => @user_count, :offset => @offset, :limit => @limit) do + @users.each do |user| + api.user do + api.id user.id + api.login user.login + api.firstname user.firstname + api.lastname user.lastname + api.mail user.mail + api.created_on user.created_on + api.last_login_on user.last_login_on + + render_api_custom_values user.visible_custom_field_values, api + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 app/views/users/index.rhtml --- a/app/views/users/index.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/users/index.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -8,9 +8,16 @@
    <%= l(:label_filter_plural) %> <%= select_tag 'status', users_status_options_for_select(@status), :class => "small", :onchange => "this.form.submit(); return false;" %> + +<% if @groups.present? %> + +<%= select_tag 'group_id', '' + options_from_collection_for_select(@groups, :id, :name, params[:group_id].to_i), :onchange => "this.form.submit(); return false;" %> +<% end %> + <%= text_field_tag 'name', params[:name], :size => 30 %> <%= submit_tag l(:button_apply), :class => "small", :name => nil %> +<%= link_to l(:button_clear), users_path, :class => 'icon icon-reload' %>
    <% end %>   @@ -37,7 +44,10 @@ <%= checked_image user.admin? %> <%= format_time(user.created_on) %> <%= format_time(user.last_login_on) unless user.last_login_on.nil? %> - <%= change_status_link(user) %> + + <%= change_status_link(user) %> + <%= link_to(l(:button_delete), user, :confirm => l(:text_are_you_sure), :method => :delete, :class => 'icon icon-del') unless User.current == user %> + <% end -%> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/users/show.api.rsb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/users/show.api.rsb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,24 @@ +api.user do + api.id @user.id + api.login @user.login if User.current.admin? + api.firstname @user.firstname + api.lastname @user.lastname + api.mail @user.mail if User.current.admin? || !@user.pref.hide_mail + api.created_on @user.created_on + api.last_login_on @user.last_login_on + + render_api_custom_values @user.visible_custom_field_values, api + + api.array :memberships do + @memberships.each do |membership| + api.membership do + api.project :id => membership.project.id, :name => membership.project.name + api.array :roles do + membership.roles.each do |role| + api.role :id => role.id, :name => role.name + end + end + end if membership.project + end + end if include_in_api_response?('memberships') && @memberships +end diff -r f7c525dc7585 -r 0b6c82dead28 app/views/versions/.svn/all-wcprops --- a/app/views/versions/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/versions/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,47 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 43 -/svn/!svn/ver/4307/trunk/app/views/versions +V 57 +/svn/!svn/ver/5878/branches/1.2-stable/app/views/versions END -index.html.erb -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/4082/trunk/app/views/versions/index.html.erb -END -new.html.erb -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/4097/trunk/app/views/versions/new.html.erb -END -show.rhtml -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/4307/trunk/app/views/versions/show.rhtml -END -_form.rhtml -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/3123/trunk/app/views/versions/_form.rhtml -END -_issue_counts.rhtml -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/4098/trunk/app/views/versions/_issue_counts.rhtml -END -_overview.rhtml -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/3064/trunk/app/views/versions/_overview.rhtml -END -edit.rhtml -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/4097/trunk/app/views/versions/edit.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/versions/.svn/entries --- a/app/views/versions/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/versions/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/versions +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/versions http://redmine.rubyforge.org/svn -2010-10-29T22:40:02.439890Z -4307 -jbbarth +2011-04-29T12:18:00.028904Z +5600 +jplang @@ -32,7 +32,7 @@ -2010-09-24T12:48:28.303878Z +2011-07-14T09:24:09.000000Z a50c2acc01c8d25be8e2c8cd082a2272 2010-09-11T14:00:23.147923Z 4082 @@ -66,7 +66,7 @@ -2010-09-24T12:48:28.303878Z +2011-07-14T09:24:09.000000Z d53190d87d1c24abce0fc949f816a706 2010-09-17T15:55:08.377083Z 4097 @@ -100,11 +100,11 @@ -2010-11-19T13:04:49.396842Z -ae897448ea943e1856633a3683c17a79 -2010-10-29T22:40:02.439890Z -4307 -jbbarth +2011-07-14T09:24:21.000000Z +8bc9f038d11ff8852a4188b5aaf95621 +2011-04-29T12:18:00.028904Z +5600 +jplang has-props @@ -126,7 +126,7 @@ -1993 +2228 _form.rhtml file @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.707788Z +2011-07-14T09:24:09.000000Z acf01b501fb1e345fd7abf572233ead9 2009-12-06T10:28:20.099964Z 3123 @@ -168,11 +168,11 @@ -2010-09-24T12:48:28.303878Z -b5364f2d6f4cb92d1f747cd3dda5098f -2010-09-17T16:11:43.740142Z -4098 -edavis10 +2011-07-14T09:24:21.000000Z +c7f3d61502256cfc878dce17dba3360c +2011-03-21T20:08:16.105748Z +5187 +jplang has-props @@ -194,7 +194,7 @@ -1350 +1382 _overview.rhtml file @@ -202,7 +202,7 @@ -2010-09-23T14:37:44.707788Z +2011-07-14T09:24:09.000000Z 6e68f24a6d6571388df3018bc915d37a 2009-11-15T15:22:55.021661Z 3064 @@ -236,7 +236,7 @@ -2010-09-24T12:48:28.303878Z +2011-07-14T09:24:09.000000Z 85ddc3502659176221220bebef002d6c 2010-09-17T15:55:08.377083Z 4097 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/versions/.svn/text-base/_issue_counts.rhtml.svn-base --- a/app/views/versions/.svn/text-base/_issue_counts.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/versions/.svn/text-base/_issue_counts.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -19,8 +19,8 @@ :action => 'index', :project_id => version.project, :set_filter => 1, - :fixed_version_id => version, - "#{criteria}_id" => count[:group]} %> + :status_id => '*', + :fixed_version_id => version}.merge("#{criteria}_id".to_sym => count[:group]) %> <%= progress_bar((count[:closed].to_f / count[:total])*100, diff -r f7c525dc7585 -r 0b6c82dead28 app/views/versions/.svn/text-base/show.rhtml.svn-base --- a/app/views/versions/.svn/text-base/show.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/versions/.svn/text-base/show.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -6,6 +6,10 @@

    <%= h(@version.name) %>

    +
    +<%= render :partial => 'versions/overview', :locals => {:version => @version} %> +<%= render(:partial => "wiki/content", :locals => {:content => @version.wiki_page.content}) if @version.wiki_page %> +
    <% if @version.estimated_hours > 0 || User.current.allowed_to?(:view_time_entries, @project) %>
    <%= l(:label_time_tracking) %> @@ -29,18 +33,19 @@
    -
    -<%= render :partial => 'versions/overview', :locals => {:version => @version} %> -<%= render(:partial => "wiki/content", :locals => {:content => @version.wiki_page.content}) if @version.wiki_page %> - <% if @issues.present? %> - +<% form_tag({}) do -%> + + + <%- @issues.each do |issue| -%> + + + + + <% end %> + +<% end %> +<%= context_menu issues_context_menu_path %> <% end %>
    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/versions/_issue_counts.rhtml --- a/app/views/versions/_issue_counts.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/versions/_issue_counts.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -19,8 +19,8 @@ :action => 'index', :project_id => version.project, :set_filter => 1, - :fixed_version_id => version, - "#{criteria}_id" => count[:group]} %> + :status_id => '*', + :fixed_version_id => version}.merge("#{criteria}_id".to_sym => count[:group]) %> <%= progress_bar((count[:closed].to_f / count[:total])*100, diff -r f7c525dc7585 -r 0b6c82dead28 app/views/versions/show.rhtml --- a/app/views/versions/show.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/versions/show.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -6,6 +6,10 @@

    <%= h(@version.name) %>

    +
    +<%= render :partial => 'versions/overview', :locals => {:version => @version} %> +<%= render(:partial => "wiki/content", :locals => {:content => @version.wiki_page.content}) if @version.wiki_page %> +
    <% if @version.estimated_hours > 0 || User.current.allowed_to?(:view_time_entries, @project) %>
    <%= l(:label_time_tracking) %> @@ -29,18 +33,19 @@
    -
    -<%= render :partial => 'versions/overview', :locals => {:version => @version} %> -<%= render(:partial => "wiki/content", :locals => {:content => @version.wiki_page.content}) if @version.wiki_page %> - <% if @issues.present? %> - +<% form_tag({}) do -%> + + + <%- @issues.each do |issue| -%> + + + + + <% end %> + +<% end %> +<%= context_menu issues_context_menu_path %> <% end %>
    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/watchers/.svn/all-wcprops --- a/app/views/watchers/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 43 -/svn/!svn/ver/3579/trunk/app/views/watchers -END -_watchers.rhtml -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/3579/trunk/app/views/watchers/_watchers.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/watchers/.svn/entries --- a/app/views/watchers/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/watchers/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/watchers +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/watchers http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.707788Z +2011-07-14T09:24:09.000000Z 7ece4fb161c765ac7e63c30883733d99 2010-03-13T17:45:41.194736Z 3579 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/welcome/.svn/all-wcprops --- a/app/views/welcome/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 42 -/svn/!svn/ver/4047/trunk/app/views/welcome -END -index.rhtml -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/4047/trunk/app/views/welcome/index.rhtml -END -robots.rhtml -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/2319/trunk/app/views/welcome/robots.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/welcome/.svn/entries --- a/app/views/welcome/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/welcome/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/welcome +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/welcome http://redmine.rubyforge.org/svn -2010-08-27T14:05:54.014502Z -4047 -edavis10 +2011-07-03T15:37:01.485163Z +6173 +jplang @@ -32,11 +32,11 @@ -2010-09-24T12:48:26.303754Z -df32441c6802182ffb9a205c97ec8f3b -2010-08-27T14:05:54.014502Z -4047 -edavis10 +2011-07-14T09:28:10.000000Z +97f2ee5d26328148eaf3afb2cb8bc101 +2011-07-03T15:37:01.485163Z +6173 +jplang has-props @@ -58,7 +58,7 @@ -1419 +1452 robots.rhtml file @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.711779Z +2011-07-14T09:24:09.000000Z dbe04ed0b787a5470a99a1f286c0685e 2009-01-27T17:27:50.299725Z 2319 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/welcome/.svn/text-base/index.rhtml.svn-base --- a/app/views/welcome/.svn/text-base/index.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/welcome/.svn/text-base/index.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -32,6 +32,7 @@
    <% content_for :header_tags do %> +<%= stylesheet_link_tag 'scm' %> <%= auto_discovery_link_tag(:atom, {:controller => 'news', :action => 'index', :key => User.current.rss_key, :format => 'atom'}, :title => "#{Setting.app_title}: #{l(:label_news_latest)}") %> <%= auto_discovery_link_tag(:atom, {:controller => 'activities', :action => 'index', :key => User.current.rss_key, :format => 'atom'}, diff -r f7c525dc7585 -r 0b6c82dead28 app/views/welcome/index.rhtml --- a/app/views/welcome/index.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/welcome/index.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -9,43 +9,40 @@
    <%= textilizable Setting.welcome_text %> - <% if @news.any? %> -
    -

    <%=l(:label_news_latest)%>

    - <%= render :partial => 'news/news', :collection => @news %> - <%= link_to l(:label_news_view_all), :controller => 'news' %> -
    - <% end %> <%= call_hook(:view_welcome_index_left, :projects => @projects) %>
    - <% if not @tipsoftheday.empty? %> -
    -

    <%=l(:label_tipoftheday)%>

    - <%= textilizable @tipsoftheday %> -
    + <% if @site_news.any? %> +
    +

    <%=l(:label_news_site_latest)%>

    + <%= render :partial => 'news/news', :locals => { :project => @site_project }, :collection => @site_news %> + + <%= link_to l(:label_news_more), { :controller => 'projects', :action => @site_project.identifier, :id => 'news' } %> +
    <% end %> - <% if @projects.any? %>

    <%=l(:label_project_latest)%>

      <% for project in @projects %> <% @project = project %> -
    • - <%= link_to_project project %> (<%= format_time(project.created_on) %>) - <%= textilizable project.short_description, :project => project %> +
    • + <%= link_to_project project %> + <%= format_time(project.created_on)%> + <%= render_project_short_description project %>
    • <% end %> <% @project = nil %>
    + <%= link_to l(:label_projects_more), :controller => 'projects' %>
    <% end %> <%= call_hook(:view_welcome_index_right, :projects => @projects) %>
    <% content_for :header_tags do %> +<%= stylesheet_link_tag 'scm' %> <%= auto_discovery_link_tag(:atom, {:controller => 'news', :action => 'index', :key => User.current.rss_key, :format => 'atom'}, :title => "#{Setting.app_title}: #{l(:label_news_latest)}") %> <%= auto_discovery_link_tag(:atom, {:controller => 'activities', :action => 'index', :key => User.current.rss_key, :format => 'atom'}, diff -r f7c525dc7585 -r 0b6c82dead28 app/views/wiki/.svn/all-wcprops --- a/app/views/wiki/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/wiki/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,83 +1,5 @@ -K 25 -svn:wc:ra_dav:version-url -V 39 -/svn/!svn/ver/4375/trunk/app/views/wiki -END -export_multiple.rhtml -K 25 -svn:wc:ra_dav:version-url -V 61 -/svn/!svn/ver/3026/trunk/app/views/wiki/export_multiple.rhtml -END -index.html.erb -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/4290/trunk/app/views/wiki/index.html.erb -END -show.rhtml -K 25 -svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/4303/trunk/app/views/wiki/show.rhtml -END -export.rhtml -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/3026/trunk/app/views/wiki/export.rhtml -END -history.rhtml K 25 svn:wc:ra_dav:version-url V 53 -/svn/!svn/ver/4303/trunk/app/views/wiki/history.rhtml +/svn/!svn/ver/5878/branches/1.2-stable/app/views/wiki END -edit.rhtml -K 25 -svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/4303/trunk/app/views/wiki/edit.rhtml -END -rename.rhtml -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/4375/trunk/app/views/wiki/rename.rhtml -END -_sidebar.rhtml -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/4296/trunk/app/views/wiki/_sidebar.rhtml -END -diff.rhtml -K 25 -svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/4296/trunk/app/views/wiki/diff.rhtml -END -_content.rhtml -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/897/trunk/app/views/wiki/_content.rhtml -END -annotate.rhtml -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/4296/trunk/app/views/wiki/annotate.rhtml -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 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/wiki/.svn/entries --- a/app/views/wiki/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/wiki/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/wiki +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/wiki http://redmine.rubyforge.org/svn -2010-11-06T14:30:32.528294Z -4375 +2011-04-12T19:22:44.432354Z +5443 jplang @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.719778Z +2011-07-14T09:24:09.000000Z 071f00658656d063a029ff9efcfda553 2009-11-11T11:10:03.406528Z 3026 @@ -66,11 +66,11 @@ -2010-11-19T13:04:50.809800Z -d47125b655bae6af3af29514ca23ec15 -2010-10-25T16:16:46.309025Z -4290 -edavis10 +2011-07-14T09:24:21.000000Z +5acf1f1f7e7549bce688ef4c07bb3485 +2011-03-21T18:10:04.628386Z +5186 +jplang has-props @@ -92,7 +92,7 @@ -894 +921 show.rhtml file @@ -100,7 +100,7 @@ -2010-11-19T13:04:50.809800Z +2011-07-14T09:24:09.000000Z 1ebc19864533a067dc46a3bc6f3e9b22 2010-10-28T21:25:38.778234Z 4303 @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.719778Z +2011-07-14T09:24:09.000000Z 2ec7fba790578844437bd62bf95a9856 2009-11-11T11:10:03.406528Z 3026 @@ -168,11 +168,11 @@ -2010-11-19T13:04:50.812967Z -d489789686b9d26149c0583f775ba238 -2010-10-28T21:25:38.778234Z -4303 -edavis10 +2011-07-14T09:24:09.000000Z +032cfe657db049a60473a31d2d0391a2 +2011-01-22T13:21:24.424880Z +4740 +jplang has-props @@ -194,7 +194,7 @@ -1582 +1594 edit.rhtml file @@ -202,11 +202,11 @@ -2010-11-19T13:04:50.812967Z -cc9828c34998619dbd4b4925bf511be8 -2010-10-28T21:25:38.778234Z -4303 -edavis10 +2011-07-14T09:24:21.000000Z +caa64ac229cf303f19f5e0380bb3f7e7 +2011-04-12T19:22:44.432354Z +5443 +jplang has-props @@ -228,7 +228,7 @@ -1282 +1311 rename.rhtml file @@ -236,7 +236,7 @@ -2010-11-19T13:04:50.812967Z +2011-07-14T09:24:09.000000Z b45d32467f7beb06dbe055ecf7fdb247 2010-11-06T14:30:32.528294Z 4375 @@ -270,7 +270,7 @@ -2010-11-19T13:04:50.812967Z +2011-07-14T09:24:09.000000Z 619db9d2a58a28c4b5c4baeaee88cc41 2010-10-27T16:27:06.240747Z 4296 @@ -304,11 +304,11 @@ -2010-11-19T13:04:50.812967Z -0379bb47f37911b04eb8391f397ac4ec -2010-10-27T16:27:06.240747Z -4296 -edavis10 +2011-07-14T09:24:09.000000Z +954230b09809d40bbd6f6514fb1fcc59 +2011-02-27T12:50:47.369941Z +4953 +jplang has-props @@ -330,7 +330,7 @@ -819 +931 _content.rhtml file @@ -338,7 +338,7 @@ -2010-09-23T14:37:44.719778Z +2011-07-14T09:24:09.000000Z 8705c97ebf1405603afbbd8614ee9d2b 2007-11-12T14:36:33.182682Z 897 @@ -372,7 +372,7 @@ -2010-11-19T13:04:50.812967Z +2011-07-14T09:24:09.000000Z 36a354ea1a705ec4843972e520ce2bd6 2010-10-27T16:27:06.240747Z 4296 @@ -400,13 +400,47 @@ 1212 +date_index.html.erb +file + + + + +2011-07-14T09:24:21.000000Z +101923ebcb5dcf22fb0fe6083ed0f033 +2011-03-21T18:10:04.628386Z +5186 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +1119 + destroy.rhtml file -2010-11-19T13:04:50.812967Z +2011-07-14T09:24:09.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 - diff -r f7c525dc7585 -r 0b6c82dead28 app/views/wiki/.svn/text-base/date_index.html.erb.svn-base --- a/app/views/wiki/.svn/text-base/date_index.html.erb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/wiki/.svn/text-base/date_index.html.erb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -23,11 +23,11 @@ <% unless @pages.empty? %> <% other_formats_links do |f| %> - <%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %> + <%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %> <%= f.link_to('HTML', :url => {:action => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %> <% end %> <% end %> <% content_for :header_tags do %> -<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %> +<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %> <% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/wiki/.svn/text-base/diff.rhtml.svn-base --- a/app/views/wiki/.svn/text-base/diff.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/wiki/.svn/text-base/diff.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -5,13 +5,13 @@

    <%= @page.pretty_title %>

    -<%= l(:label_version) %> <%= link_to @diff.content_from.version, :action => 'show', :id => @page.title, :version => @diff.content_from.version %> +<%= l(:label_version) %> <%= link_to @diff.content_from.version, :action => 'show', :id => @page.title, :project_id => @page.project, :version => @diff.content_from.version %> (<%= @diff.content_from.author ? @diff.content_from.author.name : "anonyme" %>, <%= format_time(@diff.content_from.updated_on) %>) → -<%= l(:label_version) %> <%= link_to @diff.content_to.version, :action => 'show', :id => @page.title, :version => @diff.content_to.version %>/<%= @page.content.version %> +<%= l(:label_version) %> <%= link_to @diff.content_to.version, :action => 'show', :id => @page.title, :project_id => @page.project, :version => @diff.content_to.version %>/<%= @page.content.version %> (<%= @diff.content_to.author ? @diff.content_to.author.name : "anonyme" %>, <%= format_time(@diff.content_to.updated_on) %>)

    -
    - -<%= html_diff(@diff) %> +
    +<%= simple_format_without_paragraph @diff.to_html %> +
    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/wiki/.svn/text-base/edit.rhtml.svn-base --- a/app/views/wiki/.svn/text-base/edit.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/wiki/.svn/text-base/edit.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -23,6 +23,7 @@ <% content_for :header_tags do %> <%= stylesheet_link_tag 'scm' %> + <%= robot_exclusion_tag %> <% end %> <% html_title @page.pretty_title %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/wiki/.svn/text-base/history.rhtml.svn-base --- a/app/views/wiki/.svn/text-base/history.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/wiki/.svn/text-base/history.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -3,8 +3,7 @@

    <%= l(:label_history) %>

    <% form_tag({:action => "diff"}, :method => :get) do %> - <%= hidden_field_tag('project_id', h(@project.to_param)) %> - +
    @@ -18,14 +17,14 @@ <% show_diff = @versions.size > 1 %> <% line_num = 1 %> <% @versions.each do |ver| %> -"> +"> - - - - + + + + <% line_num += 1 %> <% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/wiki/.svn/text-base/index.html.erb.svn-base --- a/app/views/wiki/.svn/text-base/index.html.erb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/wiki/.svn/text-base/index.html.erb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -8,7 +8,7 @@

    <%= l(:label_no_data) %>

    <% end %> -<%= render_page_hierarchy(@pages_by_parent_id) %> +<%= render_page_hierarchy(@pages_by_parent_id, nil, :timestamp => true) %> <% content_for :sidebar do %> <%= render :partial => 'sidebar' %> @@ -16,11 +16,11 @@ <% unless @pages.empty? %> <% other_formats_links do |f| %> - <%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %> + <%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %> <%= f.link_to('HTML', :url => {:action => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %> <% end %> <% end %> <% content_for :header_tags do %> -<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %> +<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %> <% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/wiki/date_index.html.erb --- a/app/views/wiki/date_index.html.erb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/wiki/date_index.html.erb Mon Jul 25 14:23:37 2011 +0100 @@ -23,11 +23,11 @@ <% unless @pages.empty? %> <% other_formats_links do |f| %> - <%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %> + <%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %> <%= f.link_to('HTML', :url => {:action => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %> <% end %> <% end %> <% content_for :header_tags do %> -<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %> +<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %> <% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/wiki/diff.rhtml --- a/app/views/wiki/diff.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/wiki/diff.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -5,13 +5,13 @@

    <%= @page.pretty_title %>

    -<%= l(:label_version) %> <%= link_to @diff.content_from.version, :action => 'show', :id => @page.title, :version => @diff.content_from.version %> +<%= l(:label_version) %> <%= link_to @diff.content_from.version, :action => 'show', :id => @page.title, :project_id => @page.project, :version => @diff.content_from.version %> (<%= @diff.content_from.author ? @diff.content_from.author.name : "anonyme" %>, <%= format_time(@diff.content_from.updated_on) %>) → -<%= l(:label_version) %> <%= link_to @diff.content_to.version, :action => 'show', :id => @page.title, :version => @diff.content_to.version %>/<%= @page.content.version %> +<%= l(:label_version) %> <%= link_to @diff.content_to.version, :action => 'show', :id => @page.title, :project_id => @page.project, :version => @diff.content_to.version %>/<%= @page.content.version %> (<%= @diff.content_to.author ? @diff.content_to.author.name : "anonyme" %>, <%= format_time(@diff.content_to.updated_on) %>)

    -
    - -<%= html_diff(@diff) %> +
    +<%= simple_format_without_paragraph @diff.to_html %> +
    diff -r f7c525dc7585 -r 0b6c82dead28 app/views/wiki/edit.rhtml --- a/app/views/wiki/edit.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/wiki/edit.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -23,6 +23,7 @@ <% content_for :header_tags do %> <%= stylesheet_link_tag 'scm' %> + <%= robot_exclusion_tag %> <% end %> <% html_title @page.pretty_title %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/wiki/history.rhtml --- a/app/views/wiki/history.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/wiki/history.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -3,8 +3,7 @@

    <%= l(:label_history) %>

    <% form_tag({:action => "diff"}, :method => :get) do %> - <%= hidden_field_tag('project_id', h(@project.to_param)) %> -
    #
    <%= link_to ver.version, :action => 'show', :id => @page.title, :project_id => @page.project, :version => ver.version %> <%= radio_button_tag('version', ver.version, (line_num==1), :id => "cb-#{line_num}", :onclick => "$('cbto-#{line_num+1}').checked=true;") if show_diff && (line_num < @versions.size) %> <%= radio_button_tag('version_from', ver.version, (line_num==2), :id => "cbto-#{line_num}") if show_diff && (line_num > 1) %><%= format_time(ver.updated_on) %><%= link_to_user ver.author %><%=h ver.comments %><%= link_to l(:button_annotate), :action => 'annotate', :id => @page.title, :version => ver.version %><%= format_time(ver.updated_on) %><%= link_to_user ver.author %><%=h ver.comments %><%= link_to l(:button_annotate), :action => 'annotate', :id => @page.title, :version => ver.version %>
    +
    @@ -18,14 +17,14 @@ <% show_diff = @versions.size > 1 %> <% line_num = 1 %> <% @versions.each do |ver| %> -"> +"> - - - - + + + + <% line_num += 1 %> <% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/wiki/index.html.erb --- a/app/views/wiki/index.html.erb Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/wiki/index.html.erb Mon Jul 25 14:23:37 2011 +0100 @@ -8,7 +8,7 @@

    <%= l(:label_no_data) %>

    <% end %> -<%= render_page_hierarchy(@pages_by_parent_id) %> +<%= render_page_hierarchy(@pages_by_parent_id, nil, :timestamp => true) %> <% content_for :sidebar do %> <%= render :partial => 'sidebar' %> @@ -16,11 +16,11 @@ <% unless @pages.empty? %> <% other_formats_links do |f| %> - <%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %> + <%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %> <%= f.link_to('HTML', :url => {:action => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %> <% end %> <% end %> <% content_for :header_tags do %> -<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %> +<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %> <% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/wikis/.svn/all-wcprops --- a/app/views/wikis/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 39 -/svn/!svn/ver/725/trunk/app/views/wikis -END -destroy.rhtml -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/725/trunk/app/views/wikis/destroy.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/wikis/.svn/entries --- a/app/views/wikis/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/wikis/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/wikis +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/wikis http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.723734Z +2011-07-14T09:24:09.000000Z 6edeee3130b12027d4d8dbfeca809abb 2007-09-14T11:34:08.234701Z 725 diff -r f7c525dc7585 -r 0b6c82dead28 app/views/workflows/.svn/all-wcprops --- a/app/views/workflows/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/workflows/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,29 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 44 -/svn/!svn/ver/3694/trunk/app/views/workflows +V 58 +/svn/!svn/ver/5878/branches/1.2-stable/app/views/workflows END -copy.rhtml -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/3154/trunk/app/views/workflows/copy.rhtml -END -_action_menu.rhtml -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/3154/trunk/app/views/workflows/_action_menu.rhtml -END -edit.rhtml -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/3694/trunk/app/views/workflows/edit.rhtml -END -index.rhtml -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/3154/trunk/app/views/workflows/index.rhtml -END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/workflows/.svn/entries --- a/app/views/workflows/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/workflows/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/app/views/workflows +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/app/views/workflows http://redmine.rubyforge.org/svn -2010-04-27T17:54:27.767853Z -3694 +2011-03-30T16:56:52.761894Z +5264 jplang @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.727733Z +2011-07-14T09:24:09.000000Z d7c2b6481788394f541fe6af5dadd598 2009-12-12T10:06:07.860865Z 3154 @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.727733Z +2011-07-14T09:24:09.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-07-14T09:24:21.000000Z +3d867dc08990e317641df2e09eb711b8 +2011-03-30T16:56:52.761894Z +5264 jplang has-props @@ -126,7 +126,7 @@ -2474 +2179 index.rhtml file @@ -134,10 +134,10 @@ -2010-09-23T14:37:44.727733Z -6c10e101a2f8ac7a61b6355d3ec7e959 -2009-12-12T10:06:07.860865Z -3154 +2011-07-14T09:24:09.000000Z +0943677a780ac0d9c0ba1a7000148f13 +2011-02-20T13:13:10.623157Z +4890 jplang has-props @@ -160,5 +160,39 @@ -819 +851 +_form.html.erb +file + + + + +2011-07-14T09:24:09.000000Z +a2442c53d709a008d9026746d5f3cfd3 +2011-02-20T15:38:07.840581Z +4895 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +1673 + diff -r f7c525dc7585 -r 0b6c82dead28 app/views/workflows/.svn/prop-base/_form.html.erb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/workflows/.svn/prop-base/_form.html.erb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 app/views/workflows/.svn/text-base/_form.html.erb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/workflows/.svn/text-base/_form.html.erb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,40 @@ +
    #
    <%= link_to ver.version, :action => 'show', :id => @page.title, :project_id => @page.project, :version => ver.version %> <%= radio_button_tag('version', ver.version, (line_num==1), :id => "cb-#{line_num}", :onclick => "$('cbto-#{line_num+1}').checked=true;") if show_diff && (line_num < @versions.size) %> <%= radio_button_tag('version_from', ver.version, (line_num==2), :id => "cbto-#{line_num}") if show_diff && (line_num > 1) %><%= format_time(ver.updated_on) %><%= link_to_user ver.author %><%=h ver.comments %><%= link_to l(:button_annotate), :action => 'annotate', :id => @page.title, :version => ver.version %><%= format_time(ver.updated_on) %><%= link_to_user ver.author %><%=h ver.comments %><%= link_to l(:button_annotate), :action => 'annotate', :id => @page.title, :version => ver.version %>
    + + + + + + + + <% for new_status in @statuses %> + + <% end %> + + + + <% for old_status in @statuses %> + "> + + <% for new_status in @statuses -%> + + <% end -%> + + <% end %> + +
    + <%= 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)%> + <%=l(:label_new_statuses_allowed)%>
    + <%= 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 %> +
    + <%= 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 %> + + <%= 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}" %> +
    \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 app/views/workflows/.svn/text-base/edit.rhtml.svn-base --- a/app/views/workflows/.svn/text-base/edit.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/workflows/.svn/text-base/edit.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -20,54 +20,31 @@

    <% 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 %> -
    - - - - - - - - - <% for new_status in @statuses %> - - <% end %> - - - - <% for old_status in @statuses %> - "> - - <% new_status_ids_allowed = old_status.find_new_statuses_allowed_to([@role], @tracker).collect(&:id) -%> - <% for new_status in @statuses -%> - - <% end -%> - - <% end %> - -
    <%=l(:label_current_status)%><%=l(:label_new_statuses_allowed)%>
    - <%= 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 %> -
    - <%= 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 %> - - <%= 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}" %> -
    -
    -

    <%= check_all_links 'workflow_form' %>

    - -<%= 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 %> +
    + <%= render :partial => 'form', :locals => {:name => 'always', :workflows => @workflows['always']} %> + +
    + <%= l(:label_additional_workflow_transitions_for_author) %> +
    + <%= render :partial => 'form', :locals => {:name => 'author', :workflows => @workflows['author']} %> +
    +
    + <%= javascript_tag "hideFieldset($('author_workflows'))" unless @workflows['author'].present? %> + +
    + <%= l(:label_additional_workflow_transitions_for_assignee) %> +
    + <%= render :partial => 'form', :locals => {:name => 'assignee', :workflows => @workflows['assignee']} %> +
    +
    + <%= javascript_tag "hideFieldset($('assignee_workflows'))" unless @workflows['assignee'].present? %> +
    + <%= submit_tag l(:button_save) %> + <% end %> <% end %> <% html_title(l(:label_workflow)) -%> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/workflows/.svn/text-base/index.rhtml.svn-base --- a/app/views/workflows/.svn/text-base/index.rhtml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/workflows/.svn/text-base/index.rhtml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -5,6 +5,7 @@ <% if @workflow_counts.empty? %>

    <%= l(:label_no_data) %>

    <% else %> +
    @@ -23,11 +24,12 @@ <% roles.each do |role, count| -%> <% end -%> <% end -%>
    <%= h tracker %> - <%= 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)) %>
    +
    <% end %> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/workflows/_form.html.erb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/workflows/_form.html.erb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,40 @@ + + + + + + + + + <% for new_status in @statuses %> + + <% end %> + + + + <% for old_status in @statuses %> + "> + + <% for new_status in @statuses -%> + + <% end -%> + + <% end %> + +
    + <%= 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)%> + <%=l(:label_new_statuses_allowed)%>
    + <%= 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 %> +
    + <%= 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 %> + + <%= 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}" %> +
    \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 app/views/workflows/edit.rhtml --- a/app/views/workflows/edit.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/workflows/edit.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -20,54 +20,31 @@

    <% 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 %> -
    - - - - - - - - - <% for new_status in @statuses %> - - <% end %> - - - - <% for old_status in @statuses %> - "> - - <% new_status_ids_allowed = old_status.find_new_statuses_allowed_to([@role], @tracker).collect(&:id) -%> - <% for new_status in @statuses -%> - - <% end -%> - - <% end %> - -
    <%=l(:label_current_status)%><%=l(:label_new_statuses_allowed)%>
    - <%= 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 %> -
    - <%= 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 %> - - <%= 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}" %> -
    -
    -

    <%= check_all_links 'workflow_form' %>

    - -<%= 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 %> +
    + <%= render :partial => 'form', :locals => {:name => 'always', :workflows => @workflows['always']} %> + +
    + <%= l(:label_additional_workflow_transitions_for_author) %> +
    + <%= render :partial => 'form', :locals => {:name => 'author', :workflows => @workflows['author']} %> +
    +
    + <%= javascript_tag "hideFieldset($('author_workflows'))" unless @workflows['author'].present? %> + +
    + <%= l(:label_additional_workflow_transitions_for_assignee) %> +
    + <%= render :partial => 'form', :locals => {:name => 'assignee', :workflows => @workflows['assignee']} %> +
    +
    + <%= javascript_tag "hideFieldset($('assignee_workflows'))" unless @workflows['assignee'].present? %> +
    + <%= submit_tag l(:button_save) %> + <% end %> <% end %> <% html_title(l(:label_workflow)) -%> diff -r f7c525dc7585 -r 0b6c82dead28 app/views/workflows/index.rhtml --- a/app/views/workflows/index.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/app/views/workflows/index.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -5,6 +5,7 @@ <% if @workflow_counts.empty? %>

    <%= l(:label_no_data) %>

    <% else %> +
    @@ -23,11 +24,12 @@ <% roles.each do |role, count| -%> <% end -%> <% end -%>
    <%= h tracker %> - <%= 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)) %>
    +
    <% end %> diff -r f7c525dc7585 -r 0b6c82dead28 config/.svn/all-wcprops --- a/config/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/config/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,47 +1,17 @@ K 25 svn:wc:ra_dav:version-url -V 31 -/svn/!svn/ver/4405/trunk/config -END -settings.yml -K 25 -svn:wc:ra_dav:version-url -V 44 -/svn/!svn/ver/4362/trunk/config/settings.yml -END -email.yml.example -K 25 -svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/3448/trunk/config/email.yml.example +V 45 +/svn/!svn/ver/6161/branches/1.2-stable/config END routes.rb K 25 svn:wc:ra_dav:version-url -V 41 -/svn/!svn/ver/4372/trunk/config/routes.rb -END -boot.rb -K 25 -svn:wc:ra_dav:version-url -V 39 -/svn/!svn/ver/2887/trunk/config/boot.rb +V 55 +/svn/!svn/ver/5878/branches/1.2-stable/config/routes.rb END environment.rb K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/3372/trunk/config/environment.rb +V 60 +/svn/!svn/ver/5878/branches/1.2-stable/config/environment.rb END -additional_environment.rb.example -K 25 -svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/3018/trunk/config/additional_environment.rb.example -END -database.yml.example -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/3564/trunk/config/database.yml.example -END diff -r f7c525dc7585 -r 0b6c82dead28 config/.svn/dir-prop-base --- a/config/.svn/dir-prop-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/.svn/dir-prop-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,7 +1,8 @@ K 10 svn:ignore -V 23 +V 41 database.yml email.yml +configuration.yml END diff -r f7c525dc7585 -r 0b6c82dead28 config/.svn/entries --- a/config/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/config/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/config +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/config http://redmine.rubyforge.org/svn -2010-11-14T15:14:19.280754Z -4405 +2011-07-02T17:43:08.003284Z +6161 jplang has-props @@ -32,11 +32,11 @@ -2010-11-19T13:04:51.216928Z -974e583c59b4497382d2aa08f2b2ff01 -2010-11-02T19:00:36.834304Z -4362 -edavis10 +2011-07-14T09:24:09.000000Z +0f6fe2db3317d8b40af42a6d534da87e +2010-12-15T21:18:06.237327Z +4513 +jplang has-props @@ -58,19 +58,19 @@ -4106 +4246 -email.yml.example +configuration.yml.example file -2010-09-23T14:37:44.731779Z -a1c44811380e661aff4e67b6b366f2db -2010-02-18T05:20:52.515080Z -3448 -edavis10 +2011-07-14T09:24:09.000000Z +69243d1b5b9b111da631c7034d51ba71 +2011-02-26T13:09:25.657748Z +4950 +jplang has-props @@ -92,7 +92,7 @@ -2120 +4886 locales dir @@ -103,11 +103,11 @@ -2010-11-19T13:04:51.216928Z -3817ace6dd9dfb2fda37c5a67605b5e0 -2010-11-06T13:22:23.662480Z -4372 -jplang +2011-07-14T09:24:22.000000Z +f1eebe0f75a51707ede6d40175e2f15c +2011-04-04T11:53:29.801553Z +5313 +tmaruyama has-props @@ -129,7 +129,7 @@ -14427 +15093 boot.rb file @@ -137,11 +137,11 @@ -2010-09-23T14:37:44.731779Z -cfce6ac16974777a93c14be034b2fdec -2009-09-13T17:14:35.707881Z -2887 -edavis10 +2011-07-14T09:24:09.000000Z +2969e2a7b5ab1b2a014b5f0c94bac872 +2010-12-17T08:34:29.830642Z +4516 +jplang has-props @@ -163,7 +163,7 @@ -2795 +3203 initializers dir @@ -174,10 +174,10 @@ -2010-09-23T14:37:44.731779Z -197d8958c94ce40f08a4b8f1d2c49f6e -2010-02-06T10:40:21.867545Z -3372 +2011-07-14T09:24:21.000000Z +e67b4e0a2d4ca847d47fa960eeb2a55d +2011-03-04T14:32:58.878627Z +5003 jplang has-props @@ -200,7 +200,7 @@ -2494 +2572 environments dir @@ -211,7 +211,7 @@ -2010-09-23T14:37:44.731779Z +2011-07-14T09:24:09.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-07-14T09:24:09.000000Z +f33e1e1bf73ba5d10ef3a6f170da3088 +2011-01-23T10:25:48.265995Z +4753 jplang has-props @@ -271,5 +271,5 @@ -750 +755 diff -r f7c525dc7585 -r 0b6c82dead28 config/.svn/prop-base/configuration.yml.example.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/config/.svn/prop-base/configuration.yml.example.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 config/.svn/prop-base/email.yml.example.svn-base --- a/config/.svn/prop-base/email.yml.example.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 config/.svn/text-base/boot.rb.svn-base --- a/config/.svn/text-base/boot.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/.svn/text-base/boot.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -106,5 +106,17 @@ end end +# TODO: Workaround for #7013 to be removed for 1.2.0 +# Loads i18n 0.4.2 before Rails loads any more recent gem +# 0.5.0 is not compatible with the old interpolation syntax +# Plugins will have to migrate to the new syntax for 1.2.0 +require 'rubygems' +begin + gem 'i18n', '0.4.2' +rescue Gem::LoadError => load_error + $stderr.puts %(Missing the i18n 0.4.2 gem. Please `gem install -v=0.4.2 i18n`) + exit 1 +end + # All that for this: Rails.boot! diff -r f7c525dc7585 -r 0b6c82dead28 config/.svn/text-base/configuration.yml.example.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/config/.svn/text-base/configuration.yml.example.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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: diff -r f7c525dc7585 -r 0b6c82dead28 config/.svn/text-base/database.yml.example.svn-base --- a/config/.svn/text-base/database.yml.example.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/.svn/text-base/database.yml.example.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -36,4 +36,4 @@ test_sqlite3: adapter: sqlite3 - database: db/test.db + database: db/test.sqlite3 diff -r f7c525dc7585 -r 0b6c82dead28 config/.svn/text-base/email.yml.example.svn-base --- a/config/.svn/text-base/email.yml.example.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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" diff -r f7c525dc7585 -r 0b6c82dead28 config/.svn/text-base/environment.rb.svn-base --- a/config/.svn/text-base/environment.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/.svn/text-base/environment.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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) @@ -36,7 +36,7 @@ # Activate observers that should always be running # config.active_record.observers = :cacher, :garbage_collector - config.active_record.observers = :message_observer, :issue_observer, :journal_observer, :news_observer, :document_observer, :wiki_content_observer + config.active_record.observers = :message_observer, :issue_observer, :journal_observer, :news_observer, :document_observer, :wiki_content_observer, :comment_observer # Make Active Record use UTC-base instead of local time # config.active_record.default_timezone = :utc @@ -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). diff -r f7c525dc7585 -r 0b6c82dead28 config/.svn/text-base/routes.rb.svn-base --- a/config/.svn/text-base/routes.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/.svn/text-base/routes.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -14,13 +14,21 @@ map.connect 'roles/workflow/:id/:role_id/:tracker_id', :controller => 'roles', :action => 'workflow' map.connect 'help/:ctrl/:page', :controller => 'help' - map.connect 'projects/:project_id/time_entries/report', :controller => 'time_entry_reports', :action => 'report' map.with_options :controller => 'time_entry_reports', :action => 'report',:conditions => {:method => :get} do |time_report| + time_report.connect 'projects/:project_id/issues/:issue_id/time_entries/report' + time_report.connect 'projects/:project_id/issues/:issue_id/time_entries/report.:format' + time_report.connect 'projects/:project_id/time_entries/report' + time_report.connect 'projects/:project_id/time_entries/report.:format' time_report.connect 'time_entries/report' time_report.connect 'time_entries/report.:format' - time_report.connect 'projects/:project_id/time_entries/report.:format' end + map.bulk_edit_time_entry 'time_entries/bulk_edit', + :controller => 'timelog', :action => 'bulk_edit', :conditions => { :method => :get } + map.bulk_update_time_entry 'time_entries/bulk_edit', + :controller => 'timelog', :action => 'bulk_update', :conditions => { :method => :post } + map.time_entries_context_menu '/time_entries/context_menu', + :controller => 'context_menus', :action => 'time_entries' # TODO: wasteful since this is also nested under issues, projects, and projects/issues map.resources :time_entries, :controller => 'timelog' @@ -80,10 +88,16 @@ map.quoted_issue '/issues/:id/quoted', :controller => 'journals', :action => 'new', :id => /\d+/, :conditions => { :method => :post } map.connect '/issues/:id/destroy', :controller => 'issues', :action => 'destroy', :conditions => { :method => :post } # legacy - map.resource :gantt, :path_prefix => '/issues', :controller => 'gantts', :only => [:show, :update] - map.resource :gantt, :path_prefix => '/projects/:project_id/issues', :controller => 'gantts', :only => [:show, :update] - map.resource :calendar, :path_prefix => '/issues', :controller => 'calendars', :only => [:show, :update] - map.resource :calendar, :path_prefix => '/projects/:project_id/issues', :controller => 'calendars', :only => [:show, :update] + map.with_options :controller => 'gantts', :action => 'show' do |gantts_routes| + gantts_routes.connect '/projects/:project_id/issues/gantt' + gantts_routes.connect '/projects/:project_id/issues/gantt.:format' + gantts_routes.connect '/issues/gantt.:format' + end + + map.with_options :controller => 'calendars', :action => 'show' do |calendars_routes| + calendars_routes.connect '/projects/:project_id/issues/calendar' + calendars_routes.connect '/issues/calendar' + end map.with_options :controller => 'reports', :conditions => {:method => :get} do |reports| reports.connect 'projects/:id/issues/report', :action => 'issue_report' @@ -122,8 +136,7 @@ map.resources :users, :member => { :edit_membership => :post, :destroy_membership => :post - }, - :except => [:destroy] + } # For nice "roadmap" in the url for the index action map.connect 'projects/:project_id/roadmap', :controller => 'versions', :action => 'index' @@ -216,6 +229,7 @@ map.resources :groups #left old routes at the bottom for backwards compat + map.connect 'projects/:project_id/queries/:action', :controller => 'queries' map.connect 'projects/:project_id/issues/:action', :controller => 'issues' map.connect 'projects/:project_id/documents/:action', :controller => 'documents' map.connect 'projects/:project_id/boards/:action/:id', :controller => 'boards' diff -r f7c525dc7585 -r 0b6c82dead28 config/.svn/text-base/settings.yml.svn-base --- a/config/.svn/text-base/settings.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/.svn/text-base/settings.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -66,6 +66,9 @@ feeds_limit: format: int default: 15 +gantt_items_limit: + format: int + default: 500 # Maximum size of files that can be displayed # inline through the file viewer (in KB) file_max_size_displayed: @@ -98,6 +101,11 @@ default: 0 commit_fix_done_ratio: default: 100 +commit_logtime_enabled: + default: 0 +commit_logtime_activity_id: + format: int + default: 0 # autologin duration in days # 0 means autologin is disabled autologin: diff -r f7c525dc7585 -r 0b6c82dead28 config/boot.rb --- a/config/boot.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/config/boot.rb Mon Jul 25 14:23:37 2011 +0100 @@ -106,5 +106,17 @@ end end +# TODO: Workaround for #7013 to be removed for 1.2.0 +# Loads i18n 0.4.2 before Rails loads any more recent gem +# 0.5.0 is not compatible with the old interpolation syntax +# Plugins will have to migrate to the new syntax for 1.2.0 +require 'rubygems' +begin + gem 'i18n', '0.4.2' +rescue Gem::LoadError => load_error + $stderr.puts %(Missing the i18n 0.4.2 gem. Please `gem install -v=0.4.2 i18n`) + exit 1 +end + # All that for this: Rails.boot! diff -r f7c525dc7585 -r 0b6c82dead28 config/configuration.yml.example --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/config/configuration.yml.example Mon Jul 25 14:23:37 2011 +0100 @@ -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: diff -r f7c525dc7585 -r 0b6c82dead28 config/database.yml.example --- a/config/database.yml.example Mon Mar 28 18:17:06 2011 +0100 +++ b/config/database.yml.example Mon Jul 25 14:23:37 2011 +0100 @@ -36,4 +36,4 @@ test_sqlite3: adapter: sqlite3 - database: db/test.db + database: db/test.sqlite3 diff -r f7c525dc7585 -r 0b6c82dead28 config/email.yml.example --- a/config/email.yml.example Mon Mar 28 18:17:06 2011 +0100 +++ /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" diff -r f7c525dc7585 -r 0b6c82dead28 config/environment.rb --- a/config/environment.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/config/environment.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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) @@ -36,7 +36,7 @@ # Activate observers that should always be running # config.active_record.observers = :cacher, :garbage_collector - config.active_record.observers = :message_observer, :issue_observer, :journal_observer, :news_observer, :document_observer, :wiki_content_observer + config.active_record.observers = :message_observer, :issue_observer, :journal_observer, :news_observer, :document_observer, :wiki_content_observer, :comment_observer # Make Active Record use UTC-base instead of local time # config.active_record.default_timezone = :utc @@ -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). diff -r f7c525dc7585 -r 0b6c82dead28 config/environments/.svn/all-wcprops --- a/config/environments/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 44 -/svn/!svn/ver/4405/trunk/config/environments -END -test.rb -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/4405/trunk/config/environments/test.rb -END -development.rb -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/975/trunk/config/environments/development.rb -END -test_sqlite3.rb -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/3397/trunk/config/environments/test_sqlite3.rb -END -demo.rb -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/772/trunk/config/environments/demo.rb -END -test_pgsql.rb -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/3397/trunk/config/environments/test_pgsql.rb -END -production.rb -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/4182/trunk/config/environments/production.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 config/environments/.svn/entries --- a/config/environments/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/config/environments/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/config/environments +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/config/environments http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-11-19T13:04:51.212937Z +2011-07-14T09:24:09.000000Z 08b25fdea5e3e041116340c3c3090b18 2010-11-14T15:14:19.280754Z 4405 @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.735734Z +2011-07-14T09:24:09.000000Z 02eadf22aa59353271c702e4865138b1 2007-12-10T17:58:07.273873Z 975 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.739734Z +2011-07-14T09:24:09.000000Z 213279c73e8c922d0a9d43f3c1cc6943 2010-02-08T18:53:07.634937Z 3397 @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.735734Z +2011-07-14T09:24:09.000000Z d08152d4dda4608f254785b23840140a 2007-09-27T22:30:57.196220Z 772 @@ -168,7 +168,7 @@ -2010-09-23T14:37:44.739734Z +2011-07-14T09:24:09.000000Z 213279c73e8c922d0a9d43f3c1cc6943 2010-02-08T18:53:07.634937Z 3397 @@ -202,7 +202,7 @@ -2010-11-19T13:04:51.212937Z +2011-07-14T09:24:09.000000Z 17a6fbb168f3951191541f0f5a554454 2010-09-26T16:54:38.112012Z 4182 diff -r f7c525dc7585 -r 0b6c82dead28 config/initializers/.svn/all-wcprops --- a/config/initializers/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/config/initializers/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 44 -/svn/!svn/ver/4389/trunk/config/initializers +/svn/!svn/ver/4904/trunk/config/initializers END inflections.rb K 25 @@ -13,13 +13,13 @@ K 25 svn:wc:ra_dav:version-url V 58 -/svn/!svn/ver/2493/trunk/config/initializers/30-redmine.rb +/svn/!svn/ver/4679/trunk/config/initializers/30-redmine.rb END 10-patches.rb K 25 svn:wc:ra_dav:version-url V 58 -/svn/!svn/ver/4389/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 diff -r f7c525dc7585 -r 0b6c82dead28 config/initializers/.svn/entries --- a/config/initializers/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/config/initializers/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/config/initializers +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/config/initializers http://redmine.rubyforge.org/svn -2010-11-09T19:44:37.907646Z -4389 +2011-07-02T17:43:08.003284Z +6161 jplang has-props @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.743734Z +2011-07-14T09:24:09.000000Z acc71445fc1c65ebe6fdeba695fea714 2009-09-20T14:06:57.257282Z 2895 @@ -66,10 +66,10 @@ -2010-09-23T14:37:44.743734Z -ceff5e8f4ea4a2540c9303dcdf936aed -2009-02-21T11:04:50.579477Z -2493 +2011-07-14T09:24:09.000000Z +45627c8ad9bafcee93e6ce01b92b57d1 +2011-01-10T18:25:12.105765Z +4679 jplang has-props @@ -92,7 +92,7 @@ -46 +168 10-patches.rb file @@ -100,10 +100,10 @@ -2010-11-19T13:04:51.204890Z -82c05bf7e87e057a6a3dd5d74a56ee7c -2010-11-09T19:44:37.907646Z -4389 +2011-07-14T09:28:12.000000Z +068b218ad33712ce7cb93fc627bce38b +2011-07-02T17:43:08.003284Z +6161 jplang has-props @@ -126,7 +126,7 @@ -3061 +2925 backtrace_silencers.rb file @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.743734Z +2011-07-14T09:24:09.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-07-14T09:24:09.000000Z 0005ed7b233f71646e0f75b9994cf219 2008-09-10T18:26:13.133776Z 1797 @@ -236,7 +202,7 @@ -2010-09-23T14:37:44.743734Z +2011-07-14T09:24:09.000000Z a7948d8e86bcd799c74945fe91b4a8b1 2009-09-20T14:06:57.257282Z 2895 diff -r f7c525dc7585 -r 0b6c82dead28 config/initializers/.svn/prop-base/40-email.rb.svn-base --- a/config/initializers/.svn/prop-base/40-email.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 config/initializers/.svn/text-base/10-patches.rb.svn-base --- a/config/initializers/.svn/text-base/10-patches.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/initializers/.svn/text-base/10-patches.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -7,7 +7,7 @@ # Translate attribute names for validation errors display def self.human_attribute_name(attr) - l("field_#{attr.to_s.gsub(/_id$/, '')}") + l("field_#{attr.to_s.gsub(/_id$/, '')}", :default => attr) end end end @@ -79,15 +79,21 @@ 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. Please use %{key} instead.\nDowngrade your i18n gem to 0.3.7 (everything above must be deinstalled) to remove this warning, see http://www.redmine.org/issues/5608 for more information." - @skip_syntax_deprecation = true +# 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 + +module ActionController + module MimeResponds + class Responder + def api(&block) + any(:xml, :json, &block) end end end diff -r f7c525dc7585 -r 0b6c82dead28 config/initializers/.svn/text-base/30-redmine.rb.svn-base --- a/config/initializers/.svn/text-base/30-redmine.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/initializers/.svn/text-base/30-redmine.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,3 +1,5 @@ I18n.default_locale = 'en' +# Adds fallback to default locale for untranslated strings +I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks) require 'redmine' diff -r f7c525dc7585 -r 0b6c82dead28 config/initializers/.svn/text-base/40-email.rb.svn-base --- a/config/initializers/.svn/text-base/40-email.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 config/initializers/10-patches.rb --- a/config/initializers/10-patches.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/config/initializers/10-patches.rb Mon Jul 25 14:23:37 2011 +0100 @@ -7,7 +7,7 @@ # Translate attribute names for validation errors display def self.human_attribute_name(attr) - l("field_#{attr.to_s.gsub(/_id$/, '')}") + l("field_#{attr.to_s.gsub(/_id$/, '')}", :default => attr) end end end @@ -79,15 +79,21 @@ 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. Please use %{key} instead.\nDowngrade your i18n gem to 0.3.7 (everything above must be deinstalled) to remove this warning, see http://www.redmine.org/issues/5608 for more information." - @skip_syntax_deprecation = true +# 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 + +module ActionController + module MimeResponds + class Responder + def api(&block) + any(:xml, :json, &block) end end end diff -r f7c525dc7585 -r 0b6c82dead28 config/initializers/30-redmine.rb --- a/config/initializers/30-redmine.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/config/initializers/30-redmine.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,3 +1,5 @@ I18n.default_locale = 'en' +# Adds fallback to default locale for untranslated strings +I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks) require 'redmine' diff -r f7c525dc7585 -r 0b6c82dead28 config/initializers/40-email.rb --- a/config/initializers/40-email.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/all-wcprops --- a/config/locales/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,263 +1,269 @@ K 25 svn:wc:ra_dav:version-url -V 39 -/svn/!svn/ver/4384/trunk/config/locales +V 53 +/svn/!svn/ver/6140/branches/1.2-stable/config/locales END lt.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/lt.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/lt.yml END sr-YU.yml K 25 svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/4384/trunk/config/locales/sr-YU.yml +V 63 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/sr-YU.yml END ro.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/ro.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/ro.yml END lv.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/lv.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/lv.yml END zh.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/zh.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/zh.yml END pt.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/pt.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/pt.yml END ca.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/ca.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/ca.yml END pt-BR.yml K 25 svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/4384/trunk/config/locales/pt-BR.yml +V 63 +/svn/!svn/ver/6097/branches/1.2-stable/config/locales/pt-BR.yml END tr.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/tr.yml +V 60 +/svn/!svn/ver/5998/branches/1.2-stable/config/locales/tr.yml END ru.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/ru.yml +V 60 +/svn/!svn/ver/6102/branches/1.2-stable/config/locales/ru.yml END en-GB.yml K 25 svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/4384/trunk/config/locales/en-GB.yml +V 63 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/en-GB.yml END id.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/id.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/id.yml END el.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/el.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/el.yml END en.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4382/trunk/config/locales/en.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/en.yml END gl.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/gl.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/gl.yml END cs.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/cs.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/cs.yml END mk.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/mk.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/mk.yml END es.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/es.yml +V 60 +/svn/!svn/ver/6029/branches/1.2-stable/config/locales/es.yml END ko.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/ko.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/ko.yml END eu.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/eu.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/eu.yml END zh-TW.yml K 25 svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/4384/trunk/config/locales/zh-TW.yml +V 63 +/svn/!svn/ver/5971/branches/1.2-stable/config/locales/zh-TW.yml END mn.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/mn.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/mn.yml END it.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/it.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/it.yml END sk.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/sk.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/sk.yml END sl.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/sl.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/sl.yml END uk.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/uk.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/uk.yml END da.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/da.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/da.yml END sr.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/sr.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/sr.yml +END +fa.yml +K 25 +svn:wc:ra_dav:version-url +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/fa.yml END bg.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/bg.yml +V 60 +/svn/!svn/ver/5963/branches/1.2-stable/config/locales/bg.yml END de.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/de.yml +V 60 +/svn/!svn/ver/6095/branches/1.2-stable/config/locales/de.yml END sv.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/sv.yml +V 60 +/svn/!svn/ver/6140/branches/1.2-stable/config/locales/sv.yml END ja.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/ja.yml +V 60 +/svn/!svn/ver/6015/branches/1.2-stable/config/locales/ja.yml END he.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/he.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/he.yml END fi.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/fi.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/fi.yml END bs.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/bs.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/bs.yml END fr.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4382/trunk/config/locales/fr.yml +V 60 +/svn/!svn/ver/5966/branches/1.2-stable/config/locales/fr.yml END nl.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/nl.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/nl.yml END hr.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/hr.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/hr.yml END pl.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/pl.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/pl.yml END th.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/th.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/th.yml END no.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/no.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/no.yml END hu.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/hu.yml +V 60 +/svn/!svn/ver/5961/branches/1.2-stable/config/locales/hu.yml END vi.yml K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4384/trunk/config/locales/vi.yml +V 60 +/svn/!svn/ver/6036/branches/1.2-stable/config/locales/vi.yml END diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/entries --- a/config/locales/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/config/locales +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/config/locales http://redmine.rubyforge.org/svn -2010-11-07T14:18:13.240686Z -4384 -jplang +2011-07-01T09:02:37.615218Z +6140 +tmaruyama @@ -32,10 +32,10 @@ -2010-11-19T13:04:51.152964Z -3c3e846c8a61fc0306fcac52e8a6db63 -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:22.000000Z +5e7b7f486912e5d0f86ef826213fdba6 +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -58,7 +58,7 @@ -43469 +46015 sr-YU.yml file @@ -66,33 +66,33 @@ -2010-11-19T13:04:51.152964Z -4270faebfc0875178412531d9945e450 -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:22.000000Z +48ebc431f92eb9909461b86595623d53 +2011-05-29T12:06:05.086159Z +5961 jplang - - - - - - - - - - - - - - - - - - - - - -40597 +has-props + + + + + + + + + + + + + + + + + + + + +43343 ro.yml file @@ -100,10 +100,10 @@ -2010-11-19T13:04:51.152964Z -a34852b28eb42df6bf3d98b6e4cfe8dc -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:22.000000Z +c89831e13c892860c203da66ef7cde39 +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -126,7 +126,7 @@ -39642 +42401 lv.yml file @@ -134,33 +134,33 @@ -2010-11-19T13:04:51.152964Z -77f6e9e4ebc4ece3ff5a79b62ee8a48b -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:22.000000Z +dd21f6353eda45c24f513402301a86ae +2011-05-29T12:06:05.086159Z +5961 jplang - - - - - - - - - - - - - - - - - - - - - -40602 +has-props + + + + + + + + + + + + + + + + + + + + +43354 zh.yml file @@ -168,10 +168,10 @@ -2010-11-19T13:04:51.156936Z -daf438594b071cc80e58e6704bbb8409 -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:22.000000Z +7a72ffc7de1ff3a52e782463729ddbc7 +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -194,7 +194,7 @@ -37725 +40191 pt.yml file @@ -202,10 +202,10 @@ -2010-11-19T13:04:51.156936Z -c9804b3b18de0884db4bb8d3305d0d59 -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:22.000000Z +ec11cbc0584c8ac119cfc6c29081f56f +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -228,7 +228,7 @@ -41198 +43934 ca.yml file @@ -236,10 +236,10 @@ -2010-11-19T13:04:51.156936Z -eec5aa8638e2792dd612c8938750d81e -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:21.000000Z +a3707360ad2b2de97d4ed95701a94356 +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -262,7 +262,7 @@ -41462 +44212 pt-BR.yml file @@ -270,11 +270,11 @@ -2010-11-19T13:04:51.160924Z -7fd270dbed421920ffba7910fec83c98 -2010-11-07T14:18:13.240686Z -4384 -jplang +2011-07-14T09:28:12.000000Z +b0ad3a799d1d876c7cbfc6ef612ec82e +2011-06-18T10:17:16.819844Z +6097 +tmaruyama has-props @@ -296,7 +296,7 @@ -41080 +43971 tr.yml file @@ -304,11 +304,11 @@ -2010-11-19T13:04:51.160924Z -6d497cb5cf2b3dc069bced1f7ab3e917 -2010-11-07T14:18:13.240686Z -4384 -jplang +2011-07-14T09:24:22.000000Z +7bb800f58917300c44761e96f4d5032f +2011-06-02T08:26:02.080563Z +5998 +tmaruyama has-props @@ -330,7 +330,7 @@ -39711 +43367 ru.yml file @@ -338,11 +338,11 @@ -2010-11-19T13:04:51.160924Z -bf6486d652d78029c05e10c1bb49a93d -2010-11-07T14:18:13.240686Z -4384 -jplang +2011-07-14T09:28:12.000000Z +d9755cfae05f74722acc70a1b3c47ea4 +2011-06-20T08:54:23.053007Z +6102 +tmaruyama has-props @@ -364,7 +364,7 @@ -61533 +65360 en-GB.yml file @@ -372,33 +372,33 @@ -2010-11-19T13:04:51.160924Z -b3c07f1bb7aa053e2314562eeff18c71 -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:21.000000Z +f78e8de5b513009213f9c69fc66247c0 +2011-05-29T12:06:05.086159Z +5961 jplang - - - - - - - - - - - - - - - - - - - - - -37977 +has-props + + + + + + + + + + + + + + + + + + + + +40744 id.yml file @@ -406,10 +406,10 @@ -2010-11-19T13:04:51.164928Z -b21510420c8cfb4c3ca3d90982f50c86 -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:22.000000Z +9d2d1e06b1b49d66819cc25def6eaa12 +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -432,7 +432,7 @@ -39277 +42018 el.yml file @@ -440,10 +440,10 @@ -2010-11-19T13:04:51.164928Z -ec14094c510964ef65cab6198c26153e -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:21.000000Z +a3900a53db9dd482bca160bc630f12d3 +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -466,7 +466,7 @@ -54374 +57131 en.yml file @@ -474,10 +474,10 @@ -2010-11-19T13:04:51.164928Z -dc0460b9c8f49b986b833f6a0e42d39a -2010-11-07T14:15:01.891476Z -4382 +2011-07-14T09:24:21.000000Z +2c7af38389b9234860de6bb7fe1f1803 +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -500,7 +500,7 @@ -38014 +40720 gl.yml file @@ -508,10 +508,10 @@ -2010-11-19T13:04:51.168928Z -1fe7f6095d46fe8f8bc5b49d72e2443c -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:22.000000Z +1246246f8c76fcfd296387509aa5b2cd +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -534,7 +534,7 @@ -40309 +42875 cs.yml file @@ -542,10 +542,10 @@ -2010-11-19T13:04:51.168928Z -13a9181b35a59a4f65ebcfcbbf3cdfd2 -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:21.000000Z +ecf7a07f4da1d9b7941892d52f8636e8 +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -568,7 +568,7 @@ -40854 +43747 mk.yml file @@ -576,33 +576,33 @@ -2010-11-19T13:04:51.168928Z -bf188cf4f7e8b821c0272a8f39e9e2de -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:22.000000Z +3b5cb975840d7ff4a5f669be5607b37d +2011-05-29T12:06:05.086159Z +5961 jplang - - - - - - - - - - - - - - - - - - - - - -47710 +has-props + + + + + + + + + + + + + + + + + + + + +50462 es.yml file @@ -610,10 +610,44 @@ -2010-11-19T13:04:51.168928Z -b2c1421e14275dd03308e69e24869a89 -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:28:12.000000Z +6a52011d5e9f28c3b5c36041c4b4199d +2011-06-09T08:06:24.315529Z +6029 +tmaruyama +has-props + + + + + + + + + + + + + + + + + + + + +46006 + +ko.yml +file + + + + +2011-07-14T09:24:22.000000Z +905023ea1e51638dc8be8ae0649a48ca +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -636,7 +670,41 @@ -43011 +46485 + +eu.yml +file + + + + +2011-07-14T09:24:21.000000Z +c03eeee6ca05c7f7301960370e6f0e7c +2011-05-29T12:06:05.086159Z +5961 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +43750 zh-TW.yml file @@ -644,11 +712,11 @@ -2010-11-19T13:04:51.168928Z -a400517e4ac5ec29285455a34430d5c7 -2010-11-07T14:18:13.240686Z -4384 -jplang +2011-07-14T09:24:22.000000Z +6e15c0de02a38cd855ec6ec008799a2e +2011-05-31T03:48:27.658498Z +5971 +tmaruyama has-props @@ -670,75 +738,7 @@ -42011 - -eu.yml -file - - - - -2010-11-19T13:04:51.172928Z -8b0c7dfb3b2e99ffee4e65b1015d6091 -2010-11-07T14:18:13.240686Z -4384 -jplang - - - - - - - - - - - - - - - - - - - - - -40663 - -ko.yml -file - - - - -2010-11-19T13:04:51.172928Z -436d7edeba50962c6fdb9faf6bdf3dce -2010-11-07T14:18:13.240686Z -4384 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -43751 +44611 mn.yml file @@ -746,33 +746,33 @@ -2010-11-19T13:04:51.172928Z -d4363b3560295e0a69987fedb561d447 -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:22.000000Z +d125d8a5d37d483faa77d2dab780d4b9 +2011-05-29T12:06:05.086159Z +5961 jplang - - - - - - - - - - - - - - - - - - - - - -52377 +has-props + + + + + + + + + + + + + + + + + + + + +55125 it.yml file @@ -780,10 +780,10 @@ -2010-11-19T13:04:51.172928Z -2a5286abf1ef2ef909cbcb254e229ebd -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:22.000000Z +85dcefefac13070b7aa284c6bf6c8787 +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -806,7 +806,7 @@ -40686 +43417 sk.yml file @@ -814,10 +814,10 @@ -2010-11-19T13:04:51.172928Z -36ffd38b0ec52602e1671d36e0f6e9c5 -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:22.000000Z +5d12e8694bbdc394e64f118e56e6ee2d +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -840,7 +840,7 @@ -40919 +43673 sl.yml file @@ -848,10 +848,10 @@ -2010-11-19T13:04:51.176929Z -fe0bcf8cf9643fa50fe3d21828434cf4 -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:22.000000Z +e2c9983529b81f1cb0f75f921f5ed40a +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -874,7 +874,7 @@ -39097 +41849 uk.yml file @@ -882,10 +882,10 @@ -2010-11-19T13:04:51.176929Z -db46f6a810e0dc67f1bac92a71b0948d -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:22.000000Z +f55dca5aa01e0404de280fbdafe0e79c +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -908,7 +908,41 @@ -46669 +49427 + +da.yml +file + + + + +2011-07-14T09:24:21.000000Z +5e1975c634cd0435fac3d988ae0c56ec +2011-05-29T12:06:05.086159Z +5961 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +41978 sr.yml file @@ -916,10 +950,10 @@ -2010-11-19T13:04:51.176929Z -248adf243f4bb59ac110d11530753c7b -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:22.000000Z +fab2e1c089f2d129ba1ef8ac29de2930 +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -942,18 +976,18 @@ -53786 +56541 -da.yml +fa.yml file -2010-11-19T13:04:51.180928Z -79fdefd9c5c9db00ee25aa63e771e626 -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:21.000000Z +dc9aa9dc1c76e148671ab6d121ff3b89 +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -976,7 +1010,75 @@ -39199 +53601 + +bg.yml +file + + + + +2011-07-14T09:24:21.000000Z +9a059cba7f432b990cef9cfd84a6c2c2 +2011-05-29T14:54:06.800463Z +5963 +tmaruyama +has-props + + + + + + + + + + + + + + + + + + + + +57818 + +de.yml +file + + + + +2011-07-14T09:28:12.000000Z +2bbd211ce32a7a4e7348a3f344a89e9a +2011-06-17T07:13:51.857267Z +6095 +tmaruyama +has-props + + + + + + + + + + + + + + + + + + + + +44855 sv.yml file @@ -984,11 +1086,11 @@ -2010-11-19T13:04:51.180928Z -41611818eaab75a3265b787b7b4cf575 -2010-11-07T14:18:13.240686Z -4384 -jplang +2011-07-14T09:28:12.000000Z +e9ab1c9f2a0fb8745fbd4dc4f984f7f0 +2011-07-01T09:02:37.615218Z +6140 +tmaruyama has-props @@ -1010,75 +1112,7 @@ -41581 - -de.yml -file - - - - -2010-11-19T13:04:51.180928Z -953288c28f8e952ddcc2db0bea13fe9a -2010-11-07T14:18:13.240686Z -4384 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -41776 - -bg.yml -file - - - - -2010-11-19T13:04:51.180928Z -47e98f0f9ee99de7fd6cf56ba3412107 -2010-11-07T14:18:13.240686Z -4384 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -52771 +44343 ja.yml file @@ -1086,11 +1120,11 @@ -2010-11-19T13:04:51.184942Z -180b2fd40dbb9ca6136d07d3886856ed -2010-11-07T14:18:13.240686Z -4384 -jplang +2011-07-14T09:28:12.000000Z +0106eb9d9ea24f5e941b1be78c2b41d0 +2011-06-08T23:53:03.998599Z +6015 +tmaruyama has-props @@ -1112,7 +1146,7 @@ -45539 +49003 he.yml file @@ -1120,10 +1154,10 @@ -2010-11-19T13:04:51.184942Z -c973a0f6b6038c4d94f59cb67a6362ef -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:22.000000Z +87a07cb160ea8fcd984e5ef254454861 +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -1146,7 +1180,7 @@ -44657 +47411 fi.yml file @@ -1154,10 +1188,10 @@ -2010-11-19T13:04:51.188959Z -d34af39e6c4e4a51dc0e5294b2fa6ebf -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:22.000000Z +6f7134b22b56cdb1713c7a3dbf38b742 +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -1180,7 +1214,7 @@ -40365 +42923 bs.yml file @@ -1188,10 +1222,10 @@ -2010-11-19T13:04:51.188959Z -3b1917239f864b8251f47ed4179bbeb9 -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:21.000000Z +46ab17e98f32862b0526430b9337c764 +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -1214,7 +1248,7 @@ -40112 +42866 fr.yml file @@ -1222,10 +1256,10 @@ -2010-11-19T13:04:51.188959Z -e5250df57dd3200252731533f635f3ff -2010-11-07T14:15:01.891476Z -4382 +2011-07-14T09:24:22.000000Z +89004e3fd348f579a5119c4f19054774 +2011-05-30T16:40:17.424028Z +5966 jplang has-props @@ -1248,7 +1282,7 @@ -42247 +45156 nl.yml file @@ -1256,10 +1290,10 @@ -2010-11-19T13:04:51.192925Z -5fc86161f1f72c9a027cb9083e79a18e -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:22.000000Z +1ca85bc2a1fabda051687f7bbb97db90 +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -1282,7 +1316,7 @@ -39665 +42618 hr.yml file @@ -1290,10 +1324,10 @@ -2010-11-19T13:04:51.192925Z -ea3dd89af05481d2c32934831258791d -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:22.000000Z +89ef8a359d83eaeebfc88f637be23163 +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -1316,7 +1350,7 @@ -39778 +42529 pl.yml file @@ -1324,10 +1358,10 @@ -2010-11-19T13:04:51.192925Z -262779f7ff6c420704d894caed2efb10 -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:22.000000Z +d44215277c85a0010b522b5d87f1ef9a +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -1350,7 +1384,7 @@ -42269 +44826 th.yml file @@ -1358,10 +1392,10 @@ -2010-11-19T13:04:51.196941Z -e56c0107ce9b73575b17bacafb4a5a4e -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:22.000000Z +54b9b765101bb126998397790b5d189a +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -1384,7 +1418,7 @@ -52528 +55287 no.yml file @@ -1392,10 +1426,10 @@ -2010-11-19T13:04:51.196941Z -b2ada0f5e3c0bd1dd09da8a258928d94 -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:22.000000Z +56c04554c393102c0d5d7142609a52eb +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -1418,7 +1452,7 @@ -38166 +40727 hu.yml file @@ -1426,10 +1460,10 @@ -2010-11-19T13:04:51.196941Z -5c4f617d0f309ca0dbd6429553dd0ced -2010-11-07T14:18:13.240686Z -4384 +2011-07-14T09:24:22.000000Z +91dbf51d0aebef5b2518ef387d0bd131 +2011-05-29T12:06:05.086159Z +5961 jplang has-props @@ -1452,7 +1486,7 @@ -42678 +45718 vi.yml file @@ -1460,11 +1494,11 @@ -2010-11-19T13:04:51.196941Z -85061e0562f86bb4aceeacab6dd6bb24 -2010-11-07T14:18:13.240686Z -4384 -jplang +2011-07-14T09:28:12.000000Z +38b878cdaa5a9b09625f29253c7fda52 +2011-06-10T02:15:30.548154Z +6036 +tmaruyama has-props @@ -1486,5 +1520,5 @@ -43252 +45816 diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/prop-base/fa.yml.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/config/locales/.svn/prop-base/fa.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/bg.yml.svn-base --- a/config/locales/.svn/text-base/bg.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/bg.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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" @@ -16,7 +17,10 @@ month_names: [~, Януари, Февруари, Март, Април, Май, Юни, Юли, Август, Септември, Октомври, Ноември, Декември] abbr_month_names: [~, Яну, Фев, Мар, Апр, Май, Юни, Юли, Авг, Сеп, Окт, Ное, Дек] # Used in date_select and datime_select. - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -32,45 +36,46 @@ half_a_minute: "half a minute" less_than_x_seconds: one: "по-малко от 1 секунда" - other: "по-малко от {{count}} секунди" + other: "по-малко от %{count} секунди" x_seconds: one: "1 секунда" - other: "{{count}} секунди" + other: "%{count} секунди" less_than_x_minutes: one: "по-малко от 1 минута" - other: "по-малко от {{count}} минути" + other: "по-малко от %{count} минути" x_minutes: one: "1 минута" - other: "{{count}} минути" + other: "%{count} минути" about_x_hours: one: "около 1 час" - other: "около {{count}} часа" + other: "около %{count} часа" x_days: one: "1 ден" - other: "{{count}} дена" + other: "%{count} дена" about_x_months: one: "около 1 месец" - other: "около {{count}} месеца" + other: "около %{count} месеца" x_months: one: "1 месец" - other: "{{count}} месеца" + other: "%{count} месеца" about_x_years: one: "около 1 година" - other: "около {{count}} години" + other: "около %{count} години" over_x_years: one: "над 1 година" - other: "над {{count}} години" + other: "над %{count} години" almost_x_years: one: "почти 1 година" - other: "почти {{count}} години" + other: "почти %{count} години" number: + # Default format for numbers format: separator: "." delimiter: "" precision: 3 - human: - format: + human: + format: precision: 1 delimiter: "" storage_units: @@ -83,7 +88,8 @@ mb: "MB" gb: "GB" tb: "TB" - + + # Used in array.to_sentence. support: array: @@ -92,6 +98,10 @@ activerecord: errors: + template: + header: + one: "1 грешка попречи този %{model} да бъде записан" + other: "%{count} грешки попречиха този %{model} да бъде записан" messages: inclusion: "не съществува в списъка" exclusion: "е запазено" @@ -106,16 +116,17 @@ taken: "вече съществува" not_a_number: "не е число" not_a_date: "е невалидна дата" - greater_than: "трябва да бъде по-голям[a/о] от {{count}}" - greater_than_or_equal_to: "трябва да бъде по-голям[a/о] от или равен[a/o] на {{count}}" - equal_to: "трябва да бъде равен[a/o] на {{count}}" - less_than: "трябва да бъде по-малък[a/o] от {{count}}" - less_than_or_equal_to: "трябва да бъде по-малък[a/o] от или равен[a/o] на {{count}}" + greater_than: "трябва да бъде по-голям[a/о] от %{count}" + greater_than_or_equal_to: "трябва да бъде по-голям[a/о] от или равен[a/o] на %{count}" + equal_to: "трябва да бъде равен[a/o] на %{count}" + less_than: "трябва да бъде по-малък[a/o] от %{count}" + less_than_or_equal_to: "трябва да бъде по-малък[a/o] от или равен[a/o] на %{count}" odd: "трябва да бъде нечетен[a/o]" even: "трябва да бъде четен[a/o]" greater_than_start_date: "трябва да е след началната дата" not_same_project: "не е от същия проект" circular_dependency: "Тази релация ще доведе до безкрайна зависимост" + cant_link_an_issue_with_a_descendant: "Една задача не може да бъде свързвана към своя подзадача" actionview_instancetag_blank_option: Изберете @@ -123,7 +134,7 @@ general_text_Yes: 'Да' general_text_no: 'не' general_text_yes: 'да' - general_lang_name: 'Bulgarian' + general_lang_name: 'Bulgarian (Български)' general_csv_separator: ',' general_csv_decimal_separator: '.' general_csv_encoding: UTF-8 @@ -146,24 +157,61 @@ notice_file_not_found: Несъществуваща или преместена страница. notice_locking_conflict: Друг потребител променя тези данни в момента. notice_not_authorized: Нямате право на достъп до тази страница. - notice_email_sent: "Изпратен e-mail на {{value}}" - notice_email_error: "Грешка при изпращане на e-mail ({{value}})" + 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_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_subject_lost_password: "Вашата парола (%{value})" mail_body_lost_password: 'За да смените паролата си, използвайте следния линк:' - mail_subject_register: "Активация на профил ({{value}})" + 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}} грешки" + gui_validation_error_plural: "%{count} грешки" field_name: Име field_description: Описание - field_summary: Групиран изглед + field_summary: Анотация field_is_required: Задължително field_firstname: Име field_lastname: Фамилия @@ -196,6 +244,7 @@ field_priority: Приоритет field_fixed_version: Планувана версия field_user: Потребител + field_principal: Principal field_role: Роля field_homepage: Начална страница field_is_public: Публичен @@ -221,7 +270,8 @@ field_attr_lastname: Атрибут Фамилия (Lastname) field_attr_mail: Атрибут Email field_onthefly: Динамично създаване на потребител - field_done_ratio: % Прогрес + field_start_date: Начална дата + field_done_ratio: "% Прогрес" field_auth_source: Начин на оторизация field_hide_mail: Скрий e-mail адреса ми field_comments: Коментар @@ -238,8 +288,34 @@ 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: Предупреди ме, когато напускам страница с незаписано съдържание + field_issues_visibility: Видимост на задачите + field_is_private: Лична + field_commit_logs_encoding: Кодова таблица на съобщенията при поверяване + field_scm_path_encoding: Кодова таблица на пътищата (path) + field_path_to_repository: Път до хранилището + field_root_directory: Коренна директория (папка) + field_cvsroot: CVSROOT + field_cvs_module: Модул + setting_app_title: Заглавие setting_app_subtitle: Описание setting_welcome_text: Допълнителен текст @@ -249,41 +325,157 @@ 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_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_set_own_issues_private: Установяване на собствените задачи публични или лични + permission_set_issues_private: Установяване на задачите публични или лични + 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}} проекта" + 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_issue_note_added: Добавена бележка + label_issue_status_updated: Обновено състояние + label_issue_priority_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_role_anonymous: Анонимен + label_role_non_member: Не член label_member: Член label_member_new: Нов член label_member_plural: Членове @@ -306,11 +498,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: Изход @@ -320,25 +514,30 @@ label_last_login: Последно свързване label_registered_on: Регистрация label_activity: Дейност + label_overall_activity: Цялостна дейност + label_user_activity: "Активност на %{value}" label_new: Нов - label_logged_as: Влязъл като + 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_download: "%{count} изтегляне" + label_download_plural: "%{count} изтегляния" label_no_data: Няма изходни данни label_change_status: Промяна на състоянието label_history: История @@ -346,6 +545,7 @@ label_attachment_new: Нов файл label_attachment_delete: Изтриване label_attachment_plural: Файлове + label_file_added: Добавен файл label_report: Справка label_report_plural: Справки label_news: Новини @@ -353,11 +553,14 @@ label_news_plural: Новини label_news_latest: Последни новини label_news_view_all: Виж всички + label_news_added: Добавена новина + label_news_comment_added: Добавен коментар към новина label_settings: Настройки label_overview: Общ изглед label_version: Версия label_version_new: Нова версия label_version_plural: Версии + label_close_versions: Затваряне на завършените версии label_confirmation: Одобрение label_export_to: Експорт към label_read: Read... @@ -367,23 +570,24 @@ label_closed_issues: затворена label_closed_issues_plural: затворени label_x_open_issues_abbr_on_total: - zero: 0 отворени / {{total}} - one: 1 отворена / {{total}} - other: "{{count}} отворени / {{total}}" + zero: 0 отворени / %{total} + one: 1 отворена / %{total} + other: "%{count} отворени / %{total}" label_x_open_issues_abbr: zero: 0 отворени one: 1 отворена - other: "{{count}} отворени" + other: "%{count} отворени" label_x_closed_issues_abbr: zero: 0 затворени one: 1 затворена - other: "{{count}} затворени" + 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: Използва се от @@ -394,7 +598,7 @@ label_months_from: месеца от label_gantt: Мрежов график label_internal: Вътрешен - label_last_changes: "последни {{count}} промени" + label_last_changes: "последни %{count} промени" label_change_view_all: Виж всички промени label_personalize_page: Персонализиране label_comment: Коментар @@ -402,22 +606,33 @@ label_x_comments: zero: 0 коментари one: 1 коментар - other: "{{count}} коментари" + other: "%{count} коментари" label_comment_add: Добавяне на коментар label_comment_added: Добавен коментар label_comment_delete: Изтриване на коментари 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: преди @@ -425,25 +640,33 @@ label_not_contains: не съдържа label_day_plural: дни label_repository: Хранилище + label_repository_plural: Хранилища label_browse: Разглеждане - label_modification: "{{count}} промяна" - label_modification_plural: "{{count}} промени" + 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_due_in: "Излиза след %{value}" + label_roadmap_overdue: "%{value} закъснение" label_roadmap_no_issues: Няма задачи за тази версия label_search: Търсене label_result_plural: Pезултати @@ -461,8 +684,9 @@ label_changes_details: Подробни промени label_issue_tracking: Тракинг label_spent_time: Отделено време - label_f_hour: "{{value}} час" - label_f_hour_plural: "{{value}} часа" + label_overall_spent_time: Общо употребено време + label_f_hour: "%{value} час" + label_f_hour_plural: "%{value} часа" label_time_tracking: Отделяне на време label_change_plural: Промени label_statistics: Статистики @@ -482,6 +706,7 @@ label_relation_delete: Изтриване на релация label_relates_to: свързана със label_duplicates: дублира + label_duplicated_by: дублирана от label_blocks: блокира label_blocked_by: блокирана от label_precedes: предшества @@ -497,10 +722,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: Година @@ -509,23 +737,103 @@ label_date_from: От label_date_to: До label_language_based: В зависимост от езика - label_sort_by: "Сортиране по {{value}}" + label_sort_by: "Сортиране по %{value}" label_send_test_email: Изпращане на тестов e-mail - label_feeds_access_key_created_on: "{{value}} от създаването на RSS ключа" + 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: "Обновена преди {{value}}" + 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_bulk_edit_selected_time_entries: Групово редактиране на записи за използвано време + 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: "Търсене на потребител:" + label_additional_workflow_transitions_for_author: Позволени са допълнителни преходи, когато потребителят е авторът + label_additional_workflow_transitions_for_assignee: Позволени са допълнителни преходи, когато потребителят е назначеният към задачата + label_issues_visibility_all: Всички задачи + label_issues_visibility_public: Всички не-лични задачи + label_issues_visibility_own: Задачи, създадени от или назначени на потребителя + label_git_report_last_commit: Извеждане на последното поверяване за файлове и папки + button_login: Вход button_submit: Прикачване button_save: Запис button_check_all: Избор на всички button_uncheck_all: Изчистване на всички + button_collapse_all: Скриване всички + button_expand_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: Приложи @@ -536,6 +844,7 @@ button_list: Списък button_view: Преглед button_move: Преместване + button_move_and_follow: Преместване и продължаване button_back: Назад button_cancel: Отказ button_activate: Активация @@ -549,34 +858,97 @@ 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_changed_no_detail: "%{label} променен" + 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), цифри и тирета.
    Невъзможна промяна след запис.' - text_caracters_maximum: "До {{count}} символа." - text_length_between: "От {{min}} до {{max}} символа." + 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_issue_added: "Публикувана е нова задача с номер %{id} (от %{author})." + text_issue_updated: "Задача %{id} е обновена (от %{author})." text_wiki_destroy_confirmation: Сигурни ли сте, че искате да изтриете това Wiki и цялото му съдържание? - text_issue_category_destroy_question: "Има задачи ({{count}}) обвързани с тази категория. Какво ще изберете?" + 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_issues_destroy_descendants_confirmation: Тази операция ще премахне и %{count} подзадача(и). + text_time_entries_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: Страницата съдържа незаписано съдържание, което може да бъде загубено, ако я напуснете. + text_scm_path_encoding_note: "По подразбиране: UTF-8" + text_git_repository_note: Празно и локално хранилище (например /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Локално хранилище (например /hgrepo, c:\hgrepo) + text_scm_command: SCM команда + text_scm_command_version: Версия + text_scm_config: Можете да конфигурирате SCM командите в config/configuration.yml. За да активирате промените, рестартирайте Redmine. + text_scm_command_not_available: SCM командата не е налична или достъпна. Проверете конфигурацията в административния панел. + default_role_manager: Мениджър default_role_developer: Разработчик default_role_reporter: Публикуващ @@ -598,328 +970,8 @@ 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: 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: The project you're trying to access has been archived. - text_tip_issue_end_day: issue ending this day - field_text: Text field - label_user_mail_option_only_owner: Only for things I am the owner of - field_member_of_group: Assignee's group - project_module_gantt: Gantt - text_are_you_sure_with_children: Delete issue and all child issues? - text_tip_issue_begin_end_day: issue beginning and ending this day - setting_default_notification_option: Default notification option - project_module_calendar: Calendar - label_user_mail_option_only_my_events: Only for things I watch or I'm involved in - text_tip_issue_begin_day: issue beginning this day - label_user_mail_option_only_assigned: Only for things I am assigned to - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" - field_assigned_to_role: Assignee's role - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/bs.yml.svn-base --- a/config/locales/.svn/text-base/bs.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/bs.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -15,7 +15,10 @@ month_names: [~, Januar, Februar, Mart, April, Maj, Jun, Jul, Avgust, Septembar, Oktobar, Novembar, Decembar] abbr_month_names: [~, Jan, Feb, Mar, Apr, Maj, Jun, Jul, Avg, Sep, Okt, Nov, Dec] - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -32,37 +35,37 @@ half_a_minute: "pola minute" less_than_x_seconds: one: "manje od 1 sekunde" - other: "manje od {{count}} sekudni" + other: "manje od %{count} sekudni" x_seconds: one: "1 sekunda" - other: "{{count}} sekundi" + other: "%{count} sekundi" less_than_x_minutes: one: "manje od 1 minute" - other: "manje od {{count}} minuta" + other: "manje od %{count} minuta" x_minutes: one: "1 minuta" - other: "{{count}} minuta" + other: "%{count} minuta" about_x_hours: one: "oko 1 sahat" - other: "oko {{count}} sahata" + other: "oko %{count} sahata" x_days: one: "1 dan" - other: "{{count}} dana" + other: "%{count} dana" about_x_months: one: "oko 1 mjesec" - other: "oko {{count}} mjeseci" + other: "oko %{count} mjeseci" x_months: one: "1 mjesec" - other: "{{count}} mjeseci" + other: "%{count} mjeseci" about_x_years: one: "oko 1 godine" - other: "oko {{count}} godina" + other: "oko %{count} godina" over_x_years: one: "preko 1 godine" - other: "preko {{count}} godina" + other: "preko %{count} godina" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" number: @@ -106,6 +109,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "nije uključeno u listu" exclusion: "je rezervisano" @@ -120,11 +127,11 @@ taken: "već je zauzeto" not_a_number: "nije broj" not_a_date: "nije ispravan datum" - greater_than: "mora bit veći od {{count}}" - greater_than_or_equal_to: "mora bit veći ili jednak {{count}}" - equal_to: "mora biti jednak {{count}}" - less_than: "mora biti manji od {{count}}" - less_than_or_equal_to: "mora bit manji ili jednak {{count}}" + greater_than: "mora bit veći od %{count}" + greater_than_or_equal_to: "mora bit veći ili jednak %{count}" + equal_to: "mora biti jednak %{count}" + less_than: "mora biti manji od %{count}" + less_than_or_equal_to: "mora bit manji ili jednak %{count}" odd: "mora biti neparan" even: "mora biti paran" greater_than_start_date: "mora biti veći nego početni datum" @@ -141,8 +148,8 @@ general_lang_name: 'Bosanski' general_csv_separator: ',' general_csv_decimal_separator: '.' - general_csv_encoding: utf8 - general_pdf_encoding: utf8 + general_csv_encoding: UTF-8 + general_pdf_encoding: UTF-8 general_first_day_of_week: '7' notice_account_activated: Vaš nalog je aktiviran. Možete se prijaviti. @@ -156,9 +163,9 @@ notice_account_wrong_password: Pogrešna lozinka notice_can_t_change_password: Ovaj nalog koristi eksterni izvor prijavljivanja. Ne mogu da promjenim šifru. notice_default_data_loaded: Podrazumjevana konfiguracija uspječno učitana. - notice_email_error: Došlo je do greške pri slanju emaila ({{value}}) - notice_email_sent: "Email je poslan {{value}}" - notice_failed_to_save_issues: "Neuspješno snimanje {{count}} aktivnosti na {{total}} izabrano: {{ids}}." + notice_email_error: Došlo je do greške pri slanju emaila (%{value}) + notice_email_sent: "Email je poslan %{value}" + notice_failed_to_save_issues: "Neuspješno snimanje %{count} aktivnosti na %{total} izabrano: %{ids}." notice_feeds_access_key_reseted: Vaš RSS pristup je resetovan. notice_file_not_found: Stranica kojoj pokušavate da pristupite ne postoji ili je uklonjena. notice_locking_conflict: "Konflikt: podaci su izmjenjeni od strane drugog korisnika." @@ -169,28 +176,28 @@ notice_successful_delete: Brisanje izvršeno. notice_successful_update: Promjene uspješno izvršene. - error_can_t_load_default_data: "Podrazumjevane postavke se ne mogu učitati {{value}}" - error_scm_command_failed: "Desila se greška pri pristupu repozitoriju: {{value}}" + error_can_t_load_default_data: "Podrazumjevane postavke se ne mogu učitati %{value}" + error_scm_command_failed: "Desila se greška pri pristupu repozitoriju: %{value}" error_scm_not_found: "Unos i/ili revizija ne postoji u repozitoriju." error_scm_annotate: "Ova stavka ne postoji ili nije označena." error_issue_not_found_in_project: 'Aktivnost nije nađena ili ne pripada ovom projektu' - warning_attachments_not_saved: "{{count}} fajl(ovi) ne mogu biti snimljen(i)." + warning_attachments_not_saved: "%{count} fajl(ovi) ne mogu biti snimljen(i)." - mail_subject_lost_password: "Vaša {{value}} lozinka" + mail_subject_lost_password: "Vaša %{value} lozinka" mail_body_lost_password: 'Za promjenu lozinke, kliknite na sljedeći link:' - mail_subject_register: "Aktivirajte {{value}} vaš korisnički račun" + mail_subject_register: "Aktivirajte %{value} vaš korisnički račun" mail_body_register: 'Za aktivaciju vašeg korisničkog računa, kliknite na sljedeći link:' - mail_body_account_information_external: "Možete koristiti vaš {{value}} korisnički račun za prijavu na sistem." + mail_body_account_information_external: "Možete koristiti vaš %{value} korisnički račun za prijavu na sistem." mail_body_account_information: Informacija o vašem korisničkom računu - mail_subject_account_activation_request: "{{value}} zahtjev za aktivaciju korisničkog računa" - mail_body_account_activation_request: "Novi korisnik ({{value}}) se registrovao. Korisnički račun čeka vaše odobrenje za aktivaciju:" - mail_subject_reminder: "{{count}} aktivnost(i) u kašnjenju u narednim {{days}} danima" - mail_body_reminder: "{{count}} aktivnost(i) koje su dodjeljenje vama u narednim {{days}} danima:" + mail_subject_account_activation_request: "%{value} zahtjev za aktivaciju korisničkog računa" + mail_body_account_activation_request: "Novi korisnik (%{value}) se registrovao. Korisnički račun čeka vaše odobrenje za aktivaciju:" + mail_subject_reminder: "%{count} aktivnost(i) u kašnjenju u narednim %{days} danima" + mail_body_reminder: "%{count} aktivnost(i) koje su dodjeljenje vama u narednim %{days} danima:" gui_validation_error: 1 greška - gui_validation_error_plural: "{{count}} grešaka" + gui_validation_error_plural: "%{count} grešaka" field_name: Ime field_description: Opis @@ -252,7 +259,8 @@ field_attr_lastname: Atribut za prezime field_attr_mail: Atribut za email field_onthefly: 'Kreiranje korisnika "On-the-fly"' - field_done_ratio: % Realizovano + field_start_date: Početak + field_done_ratio: "% Realizovano" field_auth_source: Mod za authentifikaciju field_hide_mail: Sakrij moju email adresu field_comments: Komentar @@ -307,7 +315,6 @@ setting_cross_project_issue_relations: Omogući relacije između aktivnosti na različitim projektima setting_issue_list_default_columns: Podrazumjevane koleone za prikaz na listi aktivnosti setting_repositories_encodings: Enkodiranje repozitorija - setting_commit_logs_encoding: 'Enkodiranje "commit" poruka' setting_emails_footer: Potpis na email-ovima setting_protocol: Protokol setting_per_page_options: Broj objekata po stranici @@ -391,14 +398,14 @@ label_x_projects: zero: 0 projekata one: 1 projekat - other: "{{count}} projekata" + other: "%{count} projekata" label_project_all: Svi projekti label_project_latest: Posljednji projekti label_issue: Aktivnost label_issue_new: Nova aktivnost label_issue_plural: Aktivnosti label_issue_view_all: Vidi sve aktivnosti - label_issues_by: "Aktivnosti po {{value}}" + label_issues_by: "Aktivnosti po %{value}" label_issue_added: Aktivnost je dodana label_issue_updated: Aktivnost je izmjenjena label_document: Dokument @@ -448,7 +455,7 @@ label_activity_plural: Promjene label_activity: Operacija label_overall_activity: Pregled svih promjena - label_user_activity: "Promjene izvršene od: {{value}}" + label_user_activity: "Promjene izvršene od: %{value}" label_new: Novi label_logged_as: Prijavljen kao label_environment: Sistemsko okruženje @@ -457,7 +464,7 @@ label_auth_source_new: Novi mod authentifikacije label_auth_source_plural: Modovi authentifikacije label_subproject_plural: Podprojekti - label_and_its_subprojects: "{{value}} i njegovi podprojekti" + label_and_its_subprojects: "%{value} i njegovi podprojekti" label_min_max_length: Min - Maks dužina label_list: Lista label_date: Datum @@ -468,8 +475,8 @@ label_text: Dugi tekst label_attribute: Atribut label_attribute_plural: Atributi - label_download: "{{count}} download" - label_download_plural: "{{count}} download-i" + label_download: "%{count} download" + label_download_plural: "%{count} download-i" label_no_data: Nema podataka za prikaz label_change_status: Promjeni status label_history: Istorija @@ -500,17 +507,17 @@ label_closed_issues: zatvoren label_closed_issues_plural: zatvoreni label_x_open_issues_abbr_on_total: - zero: 0 otvoreno / {{total}} - one: 1 otvorena / {{total}} - other: "{{count}} otvorene / {{total}}" + zero: 0 otvoreno / %{total} + one: 1 otvorena / %{total} + other: "%{count} otvorene / %{total}" label_x_open_issues_abbr: zero: 0 otvoreno one: 1 otvorena - other: "{{count}} otvorene" + other: "%{count} otvorene" label_x_closed_issues_abbr: zero: 0 zatvoreno one: 1 zatvorena - other: "{{count}} zatvorene" + other: "%{count} zatvorene" label_total: Ukupno label_permissions: Dozvole label_current_status: Tekući status @@ -528,7 +535,7 @@ label_months_from: mjeseci od label_gantt: Gantt label_internal: Interno - label_last_changes: "posljednjih {{count}} promjena" + label_last_changes: "posljednjih %{count} promjena" label_change_view_all: Vidi sve promjene label_personalize_page: Personaliziraj ovu stranicu label_comment: Komentar @@ -536,7 +543,7 @@ label_x_comments: zero: bez komentara one: 1 komentar - other: "{{count}} komentari" + other: "%{count} komentari" label_comment_add: Dodaj komentar label_comment_added: Komentar je dodan label_comment_delete: Izbriši komentar @@ -555,7 +562,7 @@ label_yesterday: juče label_this_week: ova hefta label_last_week: zadnja hefta - label_last_n_days: "posljednjih {{count}} dana" + label_last_n_days: "posljednjih %{count} dana" label_this_month: ovaj mjesec label_last_month: posljednji mjesec label_this_year: ova godina @@ -569,8 +576,8 @@ label_repository: Repozitorij label_repository_plural: Repozitoriji label_browse: Listaj - label_modification: "{{count}} promjena" - label_modification_plural: "{{count}} promjene" + label_modification: "%{count} promjena" + label_modification_plural: "%{count} promjene" label_revision: Revizija label_revision_plural: Revizije label_associated_revisions: Doddjeljene revizije @@ -588,8 +595,8 @@ label_sort_lower: Pomjeri dole label_sort_lowest: Pomjeri na dno label_roadmap: Plan realizacije - label_roadmap_due_in: "Obavezan do {{value}}" - label_roadmap_overdue: "{{value}} kasni" + label_roadmap_due_in: "Obavezan do %{value}" + label_roadmap_overdue: "%{value} kasni" label_roadmap_no_issues: Nema aktivnosti za ovu verziju label_search: Traži label_result_plural: Rezultati @@ -607,8 +614,8 @@ label_changes_details: Detalji svih promjena label_issue_tracking: Evidencija aktivnosti label_spent_time: Utrošak vremena - label_f_hour: "{{value}} sahat" - label_f_hour_plural: "{{value}} sahata" + label_f_hour: "%{value} sahat" + label_f_hour_plural: "%{value} sahata" label_time_tracking: Evidencija vremena label_change_plural: Promjene label_statistics: Statistika @@ -657,13 +664,13 @@ label_date_from: Od label_date_to: Do label_language_based: Bazirano na korisnikovom jeziku - label_sort_by: "Sortiraj po {{value}}" + label_sort_by: "Sortiraj po %{value}" label_send_test_email: Pošalji testni email - label_feeds_access_key_created_on: "RSS pristupni ključ kreiran prije {{value}} dana" + label_feeds_access_key_created_on: "RSS pristupni ključ kreiran prije %{value} dana" label_module_plural: Moduli - label_added_time_by: "Dodano od {{author}} prije {{age}}" - label_updated_time_by: "Izmjenjeno od {{author}} prije {{age}}" - label_updated_time: "Izmjenjeno prije {{value}}" + label_added_time_by: "Dodano od %{author} prije %{age}" + label_updated_time_by: "Izmjenjeno od %{author} prije %{age}" + label_updated_time: "Izmjenjeno prije %{value}" label_jump_to_a_project: Skoči na projekat... label_file_plural: Fajlovi label_changeset_plural: Setovi promjena @@ -679,7 +686,7 @@ label_registration_activation_by_email: aktivacija korisničkog računa email-om label_registration_manual_activation: ručna aktivacija korisničkog računa label_registration_automatic_activation: automatska kreacija korisničkog računa - label_display_per_page: "Po stranici: {{value}}" + label_display_per_page: "Po stranici: %{value}" label_age: Starost label_change_properties: Promjena osobina label_general: Generalno @@ -745,44 +752,44 @@ text_regexp_info: npr. ^[A-Z0-9]+$ text_min_max_length_info: 0 znači bez restrikcije text_project_destroy_confirmation: Sigurno želite izbrisati ovaj projekat i njegove podatke ? - text_subprojects_destroy_warning: "Podprojekt(i): {{value}} će takođe biti izbrisani." + text_subprojects_destroy_warning: "Podprojekt(i): %{value} će takođe biti izbrisani." text_workflow_edit: Odaberite ulogu i područje aktivnosti za ispravku toka promjena na aktivnosti text_are_you_sure: Da li ste sigurni ? text_tip_issue_begin_day: zadatak počinje danas text_tip_issue_end_day: zadatak završava danas text_tip_issue_begin_end_day: zadatak započinje i završava danas text_project_identifier_info: 'Samo mala slova (a-z), brojevi i crtice su dozvoljeni.
    Nakon snimanja, identifikator se ne može mijenjati.' - text_caracters_maximum: "maksimum {{count}} karaktera." - text_caracters_minimum: "Dužina mora biti najmanje {{count}} znakova." - text_length_between: "Broj znakova između {{min}} i {{max}}." + text_caracters_maximum: "maksimum %{count} karaktera." + text_caracters_minimum: "Dužina mora biti najmanje %{count} znakova." + text_length_between: "Broj znakova između %{min} i %{max}." text_tracker_no_workflow: Tok statusa nije definisan za ovo područje aktivnosti text_unallowed_characters: Nedozvoljeni znakovi text_comma_separated: Višestruke vrijednosti dozvoljene (odvojiti zarezom). text_issues_ref_in_commit_messages: 'Referenciranje i zatvaranje aktivnosti putem "commit" poruka' - text_issue_added: "Aktivnost {{id}} je prijavljena od {{author}}." - text_issue_updated: "Aktivnost {{id}} je izmjenjena od {{author}}." + text_issue_added: "Aktivnost %{id} je prijavljena od %{author}." + text_issue_updated: "Aktivnost %{id} je izmjenjena od %{author}." text_wiki_destroy_confirmation: Sigurno želite izbrisati ovaj wiki i čitav njegov sadržaj ? - text_issue_category_destroy_question: "Neke aktivnosti ({{count}}) pripadaju ovoj kategoriji. Sigurno to želite uraditi ?" + text_issue_category_destroy_question: "Neke aktivnosti (%{count}) pripadaju ovoj kategoriji. Sigurno to želite uraditi ?" text_issue_category_destroy_assignments: Ukloni kategoriju text_issue_category_reassign_to: Ponovo dodijeli ovu kategoriju text_user_mail_option: "Za projekte koje niste odabrali, primićete samo notifikacije o stavkama koje pratite ili ste u njih uključeni (npr. vi ste autor ili su vama dodjeljenje)." text_no_configuration_data: "Uloge, područja aktivnosti, statusi aktivnosti i tok promjena statusa nisu konfigurisane.\nKrajnje je preporučeno da učitate tekuđe postavke. Kasnije ćete ih moći mjenjati po svojim potrebama." text_load_default_configuration: Učitaj tekuću konfiguraciju - text_status_changed_by_changeset: "Primjenjeno u setu promjena {{value}}." + text_status_changed_by_changeset: "Primjenjeno u setu promjena %{value}." text_issues_destroy_confirmation: 'Sigurno želite izbrisati odabranu/e aktivnost/i ?' text_select_project_modules: 'Odaberi module koje želite u ovom projektu:' text_default_administrator_account_changed: Tekući administratorski račun je promjenjen text_file_repository_writable: U direktorij sa fajlovima koji su prilozi se može pisati text_plugin_assets_writable: U direktorij plugin-ova se može pisati text_rmagick_available: RMagick je dostupan (opciono) - text_destroy_time_entries_question: "{{hours}} sahata je prijavljeno na aktivnostima koje želite brisati. Želite li to učiniti ?" + text_destroy_time_entries_question: "%{hours} sahata je prijavljeno na aktivnostima koje želite brisati. Želite li to učiniti ?" text_destroy_time_entries: Izbriši prijavljeno vrijeme text_assign_time_entries_to_project: Dodaj prijavljenoo vrijeme projektu text_reassign_time_entries: 'Preraspodjeli prijavljeno vrijeme na ovu aktivnost:' - text_user_wrote: "{{value}} je napisao/la:" - text_enumeration_destroy_question: "Za {{count}} objekata je dodjeljenja ova vrijednost." + 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' @@ -817,23 +824,23 @@ button_annotate: Zabilježi button_activate: Aktiviraj label_sort: Sortiranje - label_date_from_to: Od {{start}} do {{end}} + label_date_from_to: Od %{start} do %{end} label_ascending: Rastuće label_descending: Opadajuće label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? + text_wiki_page_destroy_question: This page has %{descendants} child page(s) and descendant(s). What do you want to do? text_wiki_page_reassign_children: Reassign child pages to this parent page text_wiki_page_nullify_children: Keep child pages as root pages text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated" label_wiki_content_added: Wiki page added - 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_added: "'%{id}' wiki page has been added" + mail_body_wiki_content_added: The '%{id}' wiki page has been added by %{author}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '%{id}' wiki page has been updated by %{author}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -841,14 +848,14 @@ label_branch: Branch 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"). - 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_changed: "%{label} changed from %{old} to %{new}" + text_journal_set_to: "%{label} set to %{value}" + text_journal_deleted: "%{label} deleted (%{old})" label_group_plural: Groups label_group: Group label_group_new: New group label_time_entry_plural: Spent time - text_journal_added: "{{label}} {{value}} added" + text_journal_added: "%{label} %{value} added" field_active: Active enumeration_system_activity: System Activity permission_delete_issue_watchers: Delete watchers @@ -883,9 +890,9 @@ setting_start_of_week: Start calendars on permission_view_issues: View Issues label_display_used_statuses_only: Only display statuses that are used by this tracker - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_api_access_key: API access key - label_api_access_key_created_on: API access key created {{value}} ago + label_api_access_key_created_on: API access key created %{value} ago label_feeds_access_key: RSS access key notice_api_access_key_reseted: Your API access key was reset. setting_rest_api_enabled: Enable REST web service @@ -912,12 +919,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -925,7 +932,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -936,8 +943,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: 'Enkodiranje "commit" poruka' + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/ca.yml.svn-base --- a/config/locales/.svn/text-base/ca.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/ca.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -20,7 +20,10 @@ month_names: [~, Gener, Febrer, Març, Abril, Maig, Juny, Juliol, Agost, Setembre, Octubre, Novembre, Desembre] abbr_month_names: [~, Gen, Feb, Mar, Abr, Mai, Jun, Jul, Ago, Set, Oct, Nov, Des] # Used in date_select and datime_select. - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -36,37 +39,37 @@ half_a_minute: "mig minut" less_than_x_seconds: one: "menys d'un segon" - other: "menys de {{count}} segons" + other: "menys de %{count} segons" x_seconds: one: "1 segons" - other: "{{count}} segons" + other: "%{count} segons" less_than_x_minutes: one: "menys d'un minut" - other: "menys de {{count}} minuts" + other: "menys de %{count} minuts" x_minutes: one: "1 minut" - other: "{{count}} minuts" + other: "%{count} minuts" about_x_hours: one: "aproximadament 1 hora" - other: "aproximadament {{count}} hores" + other: "aproximadament %{count} hores" x_days: one: "1 dia" - other: "{{count}} dies" + other: "%{count} dies" about_x_months: one: "aproximadament 1 mes" - other: "aproximadament {{count}} mesos" + other: "aproximadament %{count} mesos" x_months: one: "1 mes" - other: "{{count}} mesos" + other: "%{count} mesos" about_x_years: one: "aproximadament 1 any" - other: "aproximadament {{count}} anys" + other: "aproximadament %{count} anys" over_x_years: one: "més d'un any" - other: "més de {{count}} anys" + other: "més de %{count} anys" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" number: # Default format for numbers @@ -98,6 +101,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "no està inclòs a la llista" exclusion: "està reservat" @@ -112,11 +119,11 @@ taken: "ja s'està utilitzant" not_a_number: "no és un número" not_a_date: "no és una data vàlida" - greater_than: "ha de ser més gran que {{count}}" - greater_than_or_equal_to: "ha de ser més gran o igual a {{count}}" - equal_to: "ha de ser igual a {{count}}" - less_than: "ha de ser menys que {{count}}" - less_than_or_equal_to: "ha de ser menys o igual a {{count}}" + greater_than: "ha de ser més gran que %{count}" + greater_than_or_equal_to: "ha de ser més gran o igual a %{count}" + equal_to: "ha de ser igual a %{count}" + less_than: "ha de ser menys que %{count}" + less_than_or_equal_to: "ha de ser menys o igual a %{count}" odd: "ha de ser senar" even: "ha de ser parell" greater_than_start_date: "ha de ser superior que la data inicial" @@ -134,7 +141,7 @@ general_csv_separator: ';' general_csv_decimal_separator: ',' general_csv_encoding: ISO-8859-15 - general_pdf_encoding: ISO-8859-15 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' notice_account_updated: "El compte s'ha actualitzat correctament." @@ -153,12 +160,12 @@ notice_file_not_found: "La pàgina a la que intenteu accedir no existeix o s'ha suprimit." notice_locking_conflict: Un altre usuari ha actualitzat les dades. notice_not_authorized: No teniu permís per a accedir a aquesta pàgina. - notice_email_sent: "S'ha enviat un correu electrònic a {{value}}" - notice_email_error: "S'ha produït un error en enviar el correu ({{value}})" + notice_email_sent: "S'ha enviat un correu electrònic a %{value}" + notice_email_error: "S'ha produït un error en enviar el correu (%{value})" notice_feeds_access_key_reseted: "S'ha reiniciat la clau d'accés del RSS." notice_api_access_key_reseted: "S'ha reiniciat la clau d'accés a l'API." - notice_failed_to_save_issues: "No s'han pogut desar %s assumptes de {{count}} seleccionats: {{ids}}." - notice_failed_to_save_members: "No s'han pogut desar els membres: {{errors}}." + notice_failed_to_save_issues: "No s'han pogut desar %{count} assumptes de %{total} seleccionats: %{ids}." + notice_failed_to_save_members: "No s'han pogut desar els membres: %{errors}." notice_no_issue_selected: "No s'ha seleccionat cap assumpte. Activeu els assumptes que voleu editar." notice_account_pending: "S'ha creat el compte i ara està pendent de l'aprovació de l'administrador." notice_default_data_loaded: "S'ha carregat correctament la configuració predeterminada." @@ -166,9 +173,9 @@ notice_unable_delete_time_entry: "No s'ha pogut suprimir l'entrada del registre de temps." notice_issue_done_ratios_updated: "S'ha actualitzat el tant per cent dels assumptes." - error_can_t_load_default_data: "No s'ha pogut carregar la configuració predeterminada: {{value}} " + error_can_t_load_default_data: "No s'ha pogut carregar la configuració predeterminada: %{value} " error_scm_not_found: "No s'ha trobat l'entrada o la revisió en el dipòsit." - error_scm_command_failed: "S'ha produït un error en intentar accedir al dipòsit: {{value}}" + error_scm_command_failed: "S'ha produït un error en intentar accedir al dipòsit: %{value}" error_scm_annotate: "L'entrada no existeix o no s'ha pogut anotar." error_issue_not_found_in_project: "No s'ha trobat l'assumpte o no pertany a aquest projecte" error_no_tracker_in_project: "Aquest projecte no té seguidor associat. Comproveu els paràmetres del projecte." @@ -182,26 +189,26 @@ error_workflow_copy_source: "Seleccioneu un seguidor o rol font" error_workflow_copy_target: "Seleccioneu seguidors i rols objectiu" error_unable_delete_issue_status: "No s'ha pogut suprimir l'estat de l'assumpte" - error_unable_to_connect: "No s'ha pogut connectar ({{value}})" - warning_attachments_not_saved: "No s'han pogut desar {{count}} fitxers." + error_unable_to_connect: "No s'ha pogut connectar (%{value})" + warning_attachments_not_saved: "No s'han pogut desar %{count} fitxers." - mail_subject_lost_password: "Contrasenya de {{value}}" + mail_subject_lost_password: "Contrasenya de %{value}" mail_body_lost_password: "Per a canviar la contrasenya, feu clic en l'enllaç següent:" - mail_subject_register: "Activació del compte de {{value}}" + mail_subject_register: "Activació del compte de %{value}" mail_body_register: "Per a activar el compte, feu clic en l'enllaç següent:" - mail_body_account_information_external: "Podeu utilitzar el compte «{{value}}» per a entrar." + mail_body_account_information_external: "Podeu utilitzar el compte «%{value}» per a entrar." mail_body_account_information: Informació del compte - mail_subject_account_activation_request: "Sol·licitud d'activació del compte de {{value}}" - mail_body_account_activation_request: "S'ha registrat un usuari nou ({{value}}). El seu compte està pendent d'aprovació:" - mail_subject_reminder: "{{count}} assumptes venceran els següents {{days}} dies" - mail_body_reminder: "{{count}} assumptes que teniu assignades venceran els següents {{days}} dies:" - mail_subject_wiki_content_added: "S'ha afegit la pàgina wiki «{{id}}»" - mail_body_wiki_content_added: "En {{author}} ha afegit la pàgina wiki «{{id}}»." - mail_subject_wiki_content_updated: "S'ha actualitzat la pàgina wiki «{{id}}»" - mail_body_wiki_content_updated: "En {{author}} ha actualitzat la pàgina wiki «{{id}}»." + mail_subject_account_activation_request: "Sol·licitud d'activació del compte de %{value}" + mail_body_account_activation_request: "S'ha registrat un usuari nou (%{value}). El seu compte està pendent d'aprovació:" + mail_subject_reminder: "%{count} assumptes venceran els següents %{days} dies" + mail_body_reminder: "%{count} assumptes que teniu assignades venceran els següents %{days} dies:" + mail_subject_wiki_content_added: "S'ha afegit la pàgina wiki «%{id}»" + mail_body_wiki_content_added: "En %{author} ha afegit la pàgina wiki «%{id}»." + mail_subject_wiki_content_updated: "S'ha actualitzat la pàgina wiki «%{id}»" + mail_body_wiki_content_updated: "En %{author} ha actualitzat la pàgina wiki «%{id}»." gui_validation_error: 1 error - gui_validation_error_plural: "{{count}} errors" + gui_validation_error_plural: "%{count} errors" field_name: Nom field_description: Descripció @@ -264,7 +271,8 @@ field_attr_lastname: Atribut del cognom field_attr_mail: Atribut del correu electrònic field_onthefly: "Creació de l'usuari «al vol»" - field_done_ratio: % realitzat + field_start_date: Inici + field_done_ratio: "% realitzat" field_auth_source: "Mode d'autenticació" field_hide_mail: "Oculta l'adreça de correu electrònic" field_comments: Comentari @@ -322,7 +330,6 @@ setting_cross_project_issue_relations: "Permet les relacions d'assumptes entre projectes" setting_issue_list_default_columns: "Columnes mostrades per defecte en la llista d'assumptes" setting_repositories_encodings: Codificacions del dipòsit - setting_commit_logs_encoding: Codificació dels missatges publicats setting_emails_footer: Peu dels correus electrònics setting_protocol: Protocol setting_per_page_options: Opcions dels objectes per pàgina @@ -427,14 +434,14 @@ label_x_projects: zero: cap projecte one: 1 projecte - other: "{{count}} projectes" + other: "%{count} projectes" label_project_all: Tots els projectes label_project_latest: Els últims projectes label_issue: Assumpte label_issue_new: Assumpte nou label_issue_plural: Assumptes label_issue_view_all: Visualitza tots els assumptes - label_issues_by: "Assumptes per {{value}}" + label_issues_by: "Assumptes per %{value}" label_issue_added: Assumpte afegit label_issue_updated: Assumpte actualitzat label_document: Document @@ -484,7 +491,7 @@ label_registered_on: Informat el label_activity: Activitat label_overall_activity: Activitat global - label_user_activity: "Activitat de {{value}}" + label_user_activity: "Activitat de %{value}" label_new: Nou label_logged_as: Heu entrat com a label_environment: Entorn @@ -494,7 +501,7 @@ label_auth_source_plural: "Modes d'autenticació" label_subproject_plural: Subprojectes label_subproject_new: "Subprojecte nou" - label_and_its_subprojects: "{{value}} i els seus subprojectes" + label_and_its_subprojects: "%{value} i els seus subprojectes" label_min_max_length: Longitud mín - max label_list: Llist label_date: Data @@ -505,8 +512,8 @@ label_text: Text llarg label_attribute: Atribut label_attribute_plural: Atributs - label_download: "{{count}} baixada" - label_download_plural: "{{count}} baixades" + label_download: "%{count} baixada" + label_download_plural: "%{count} baixades" label_no_data: Sense dades a mostrar label_change_status: "Canvia l'estat" label_history: Historial @@ -538,17 +545,17 @@ label_closed_issues: tancat label_closed_issues_plural: tancats label_x_open_issues_abbr_on_total: - zero: 0 oberts / {{total}} - one: 1 obert / {{total}} - other: "{{count}} oberts / {{total}}" + zero: 0 oberts / %{total} + one: 1 obert / %{total} + other: "%{count} oberts / %{total}" label_x_open_issues_abbr: zero: 0 oberts one: 1 obert - other: "{{count}} oberts" + other: "%{count} oberts" label_x_closed_issues_abbr: zero: 0 tancats one: 1 tancat - other: "{{count}} tancats" + other: "%{count} tancats" label_total: Total label_permissions: Permisos label_current_status: Estat actual @@ -566,7 +573,7 @@ label_months_from: mesos des de label_gantt: Gantt label_internal: Intern - label_last_changes: "últims {{count}} canvis" + label_last_changes: "últims %{count} canvis" label_change_view_all: Visualitza tots els canvis label_personalize_page: Personalitza aquesta pàgina label_comment: Comentari @@ -574,7 +581,7 @@ label_x_comments: zero: sense comentaris one: 1 comentari - other: "{{count}} comentaris" + other: "%{count} comentaris" label_comment_add: Afegeix un comentari label_comment_added: Comentari afegit label_comment_delete: Suprimeix comentaris @@ -595,7 +602,7 @@ label_yesterday: ahir label_this_week: aquesta setmana label_last_week: "l'última setmana" - label_last_n_days: "els últims {{count}} dies" + label_last_n_days: "els últims %{count} dies" label_this_month: aquest més label_last_month: "l'últim més" label_this_year: aquest any @@ -609,13 +616,13 @@ label_repository: Dipòsit label_repository_plural: Dipòsits label_browse: Navega - label_modification: "{{count}} canvi" - label_modification_plural: "{{count}} canvis" + label_modification: "%{count} canvi" + label_modification_plural: "%{count} canvis" label_branch: Branca label_tag: Etiqueta label_revision: Revisió label_revision_plural: Revisions - label_revision_id: "Revisió {{value}}" + label_revision_id: "Revisió %{value}" label_associated_revisions: Revisions associades label_added: afegit label_modified: modificat @@ -632,8 +639,8 @@ label_sort_lower: Mou cap avall label_sort_lowest: Mou a la part inferior label_roadmap: Planificació - label_roadmap_due_in: "Venç en {{value}}" - label_roadmap_overdue: "{{value}} tard" + label_roadmap_due_in: "Venç en %{value}" + label_roadmap_overdue: "%{value} tard" label_roadmap_no_issues: No hi ha assumptes per a aquesta versió label_search: Cerca label_result_plural: Resultats @@ -652,8 +659,8 @@ label_issue_tracking: "Seguiment d'assumptes" label_spent_time: Temps invertit label_overall_spent_time: "Temps total invertit" - label_f_hour: "{{value}} hora" - label_f_hour_plural: "{{value}} hores" + label_f_hour: "%{value} hora" + label_f_hour_plural: "%{value} hores" label_time_tracking: Temps de seguiment label_change_plural: Canvis label_statistics: Estadístiques @@ -704,15 +711,15 @@ label_date_from: Des de label_date_to: A label_language_based: "Basat en l'idioma de l'usuari" - label_sort_by: "Ordena per {{value}}" + label_sort_by: "Ordena per %{value}" label_send_test_email: Envia un correu electrònic de prova label_feeds_access_key: "Clau d'accés del RSS" label_missing_feeds_access_key: "Falta una clau d'accés del RSS" - label_feeds_access_key_created_on: "Clau d'accés del RSS creada fa {{value}}" + label_feeds_access_key_created_on: "Clau d'accés del RSS creada fa %{value}" label_module_plural: Mòduls - label_added_time_by: "Afegit per {{author}} fa {{age}}" - label_updated_time_by: "Actualitzat per {{author}} fa {{age}}" - label_updated_time: "Actualitzat fa {{value}}" + label_added_time_by: "Afegit per %{author} fa %{age}" + label_updated_time_by: "Actualitzat per %{author} fa %{age}" + label_updated_time: "Actualitzat fa %{value}" label_jump_to_a_project: Salta al projecte... label_file_plural: Fitxers label_changeset_plural: Conjunt de canvis @@ -728,7 +735,7 @@ label_registration_activation_by_email: activació del compte per correu electrònic label_registration_manual_activation: activació del compte manual label_registration_automatic_activation: activació del compte automàtica - label_display_per_page: "Per pàgina: {{value}}" + label_display_per_page: "Per pàgina: %{value}" label_age: Edat label_change_properties: Canvia les propietats label_general: General @@ -751,7 +758,7 @@ label_sort: Ordena label_ascending: Ascendent label_descending: Descendent - label_date_from_to: Des de {{start}} a {{end}} + label_date_from_to: Des de %{start} a %{end} label_wiki_content_added: "S'ha afegit la pàgina wiki" label_wiki_content_updated: "S'ha actualitzat la pàgina wiki" label_group: Grup @@ -770,7 +777,7 @@ label_display_used_statuses_only: "Mostra només els estats que utilitza aquest seguidor" label_api_access_key: "Clau d'accés a l'API" label_missing_api_access_key: "Falta una clau d'accés de l'API" - label_api_access_key_created_on: "Clau d'accés de l'API creada fa {{value}}" + label_api_access_key_created_on: "Clau d'accés de l'API creada fa %{value}" label_profile: Perfil label_subtask_plural: Subtasques label_project_copy_notifications: "Envia notificacions de correu electrònic durant la còpia del projecte" @@ -833,53 +840,53 @@ text_regexp_info: ex. ^[A-Z0-9]+$ text_min_max_length_info: 0 significa sense restricció text_project_destroy_confirmation: Segur que voleu suprimir aquest projecte i les dades relacionades? - text_subprojects_destroy_warning: "També seran suprimits els seus subprojectes: {{value}}." + text_subprojects_destroy_warning: "També seran suprimits els seus subprojectes: %{value}." text_workflow_edit: Seleccioneu un rol i un seguidor per a editar el flux de treball text_are_you_sure: Segur? - text_journal_changed: "{{label}} ha canviat de {{old}} a {{new}}" - text_journal_set_to: "{{label}} s'ha establert a {{value}}" - text_journal_deleted: "{{label}} s'ha suprimit ({{old}})" - text_journal_added: "S'ha afegit {{label}} {{value}}" + text_journal_changed: "%{label} ha canviat de %{old} a %{new}" + text_journal_set_to: "%{label} s'ha establert a %{value}" + text_journal_deleted: "%{label} s'ha suprimit (%{old})" + text_journal_added: "S'ha afegit %{label} %{value}" text_tip_issue_begin_day: "tasca que s'inicia aquest dia" text_tip_issue_end_day: tasca que finalitza aquest dia text_tip_issue_begin_end_day: "tasca que s'inicia i finalitza aquest dia" text_project_identifier_info: "Es permeten lletres en minúscules (a-z), números i guions.
    Un cop desat, l'identificador no es pot modificar." - text_caracters_maximum: "{{count}} caràcters com a màxim." - text_caracters_minimum: "Com a mínim ha de tenir {{count}} caràcters." - text_length_between: "Longitud entre {{min}} i {{max}} caràcters." + text_caracters_maximum: "%{count} caràcters com a màxim." + text_caracters_minimum: "Com a mínim ha de tenir %{count} caràcters." + text_length_between: "Longitud entre %{min} i %{max} caràcters." text_tracker_no_workflow: "No s'ha definit cap flux de treball per a aquest seguidor" text_unallowed_characters: Caràcters no permesos text_comma_separated: Es permeten valors múltiples (separats per una coma). text_line_separated: "Es permeten diversos valors (una línia per cada valor)." text_issues_ref_in_commit_messages: Referència i soluciona els assumptes en els missatges publicats - text_issue_added: "L'assumpte {{id}} ha sigut informat per {{author}}." - text_issue_updated: "L'assumpte {{id}} ha sigut actualitzat per {{author}}." + text_issue_added: "L'assumpte %{id} ha sigut informat per %{author}." + text_issue_updated: "L'assumpte %{id} ha sigut actualitzat per %{author}." text_wiki_destroy_confirmation: Segur que voleu suprimir aquest wiki i tots els seus continguts? - text_issue_category_destroy_question: "Alguns assumptes ({{count}}) estan assignats a aquesta categoria. Què voleu fer?" + text_issue_category_destroy_question: "Alguns assumptes (%{count}) estan assignats a aquesta categoria. Què voleu fer?" text_issue_category_destroy_assignments: Suprimeix les assignacions de la categoria text_issue_category_reassign_to: Torna a assignar els assumptes a aquesta categoria text_user_mail_option: "Per als projectes no seleccionats, només rebreu notificacions sobre les coses que vigileu o que hi esteu implicat (ex. assumptes que en sou l'autor o hi esteu assignat)." text_no_configuration_data: "Encara no s'han configurat els rols, seguidors, estats de l'assumpte i flux de treball.\nÉs altament recomanable que carregueu la configuració predeterminada. Podreu modificar-la un cop carregada." text_load_default_configuration: Carrega la configuració predeterminada - text_status_changed_by_changeset: "Aplicat en el conjunt de canvis {{value}}." + text_status_changed_by_changeset: "Aplicat en el conjunt de canvis %{value}." text_issues_destroy_confirmation: "Segur que voleu suprimir els assumptes seleccionats?" text_select_project_modules: "Seleccioneu els mòduls a habilitar per a aquest projecte:" text_default_administrator_account_changed: "S'ha canviat el compte d'administrador predeterminat" text_file_repository_writable: Es pot escriure en el dipòsit de fitxers text_plugin_assets_writable: Es pot escriure als connectors actius text_rmagick_available: RMagick disponible (opcional) - text_destroy_time_entries_question: "S'han informat {{hours}} hores en els assumptes que aneu a suprimir. Què voleu fer?" + text_destroy_time_entries_question: "S'han informat %{hours} hores en els assumptes que aneu a suprimir. Què voleu fer?" text_destroy_time_entries: Suprimeix les hores informades text_assign_time_entries_to_project: Assigna les hores informades al projecte text_reassign_time_entries: "Torna a assignar les hores informades a aquest assumpte:" - text_user_wrote: "{{value}} va escriure:" - text_enumeration_destroy_question: "{{count}} objectes estan assignats a aquest valor." + 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" - text_wiki_page_destroy_question: "Aquesta pàgina té {{descendants}} pàgines fill i descendents. Què voleu fer?" + text_wiki_page_destroy_question: "Aquesta pàgina té %{descendants} pàgines fill i descendents. Què voleu fer?" text_wiki_page_nullify_children: "Deixa les pàgines fill com a pàgines arrel" text_wiki_page_destroy_children: "Suprimeix les pàgines fill i tots els seus descendents" text_wiki_page_reassign_children: "Reasigna les pàgines fill a aquesta pàgina pare" @@ -914,7 +921,7 @@ enumeration_activities: Activitats (seguidor de temps) enumeration_system_activity: Activitat del sistema - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -925,8 +932,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Codificació dels missatges publicats + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/cs.yml.svn-base --- a/config/locales/.svn/text-base/cs.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/cs.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,4 +1,9 @@ +# Update to 1.1 by Michal Gebauer +# Updated by Josef Liška +# 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: @@ -16,7 +21,10 @@ month_names: [~, Leden, Únor, Březen, Duben, Květen, Červen, Červenec, Srpen, Září, Říjen, Listopad, Prosinec] abbr_month_names: [~, Led, Úno, Bře, Dub, Kvě, Čer, Čec, Srp, Zář, Říj, Lis, Pro] # Used in date_select and datime_select. - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -26,63 +34,65 @@ long: "%B %d, %Y %H:%M" am: "dop." pm: "odp." - + datetime: distance_in_words: half_a_minute: "půl minuty" less_than_x_seconds: one: "méně než sekunda" - other: "méně než {{count}} sekund" + other: "méně než %{count} sekund" x_seconds: one: "1 sekunda" - other: "{{count}} sekund" + other: "%{count} sekund" less_than_x_minutes: one: "méně než minuta" - other: "méně než {{count}} minut" + other: "méně než %{count} minut" x_minutes: one: "1 minuta" - other: "{{count}} minut" + other: "%{count} minut" about_x_hours: one: "asi 1 hodina" - other: "asi {{count}} hodin" + other: "asi %{count} hodin" x_days: one: "1 den" - other: "{{count}} dnů" + other: "%{count} dnů" about_x_months: one: "asi 1 měsíc" - other: "asi {{count}} měsíců" + other: "asi %{count} měsíců" x_months: one: "1 měsíc" - other: "{{count}} měsíců" + other: "%{count} měsíců" about_x_years: one: "asi 1 rok" - other: "asi {{count}} let" + other: "asi %{count} let" over_x_years: one: "více než 1 rok" - other: "více než {{count}} roky" + other: "více než %{count} roky" almost_x_years: one: "témeř 1 rok" - other: "téměř {{count}} roky" + 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: @@ -92,6 +102,10 @@ activerecord: errors: + template: + header: + 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" @@ -106,11 +120,11 @@ taken: "je již použito" not_a_number: "není číslo" not_a_date: "není platné datum" - greater_than: "musí být větší než {{count}}" - greater_than_or_equal_to: "musí být větší nebo rovno {{count}}" - equal_to: "musí být přesně {{count}}" - less_than: "musí být méně než {{count}}" - less_than_or_equal_to: "musí být méně nebo rovno {{count}}" + greater_than: "musí být větší než %{count}" + greater_than_or_equal_to: "musí být větší nebo rovno %{count}" + equal_to: "musí být přesně %{count}" + less_than: "musí být méně než %{count}" + less_than_or_equal_to: "musí být méně nebo rovno %{count}" odd: "musí být liché" even: "musí být sudé" greater_than_start_date: "musí být větší než počáteční datum" @@ -118,10 +132,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 - # 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' @@ -150,32 +160,58 @@ 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_email_sent: "Na adresu {{value}} byl odeslán email" - notice_email_error: "Při odesílání emailu nastala chyba ({{value}})" + 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_failed_to_save_issues: "Chyba při uložení {{count}} úkolu(ů) z {{total}} vybraných: {{ids}}." + 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_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_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_subject_lost_password: "Vaše heslo (%{value})" mail_body_lost_password: 'Pro změnu vašeho hesla klikněte na následující odkaz:' - mail_subject_register: "Aktivace účtu ({{value}})" + mail_subject_register: "Aktivace účtu (%{value})" mail_body_register: 'Pro aktivaci vašeho účtu klikněte na následující odkaz:' - mail_body_account_information_external: "Pomocí vašeho účtu {{value}} se můžete přihlásit." + mail_body_account_information_external: "Pomocí vašeho účtu %{value} se můžete přihlásit." 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_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)" + gui_validation_error_plural: "%{count} chyb(y)" field_name: Název field_description: Popis @@ -212,6 +248,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ý @@ -237,7 +274,8 @@ field_attr_lastname: Příjemní (atribut) field_attr_mail: Email (atribut) field_onthefly: Automatické vytváření uživatelů - field_done_ratio: % Hotovo + field_start_date: Začátek + field_done_ratio: "% Hotovo" field_auth_source: Autentifikační mód field_hide_mail: Nezobrazovat můj email field_comments: Komentář @@ -255,10 +293,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 @@ -270,6 +321,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 @@ -285,12 +337,93 @@ 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_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 @@ -300,24 +433,27 @@ 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 label_x_projects: zero: žádné projekty one: 1 projekt - other: "{{count}} projekty(ů)" + other: "%{count} projekty(ů)" label_project_all: Všechny projekty label_project_latest: Poslední projekty label_issue: Úkol label_issue_new: Nový úkol label_issue_plural: Úkoly label_issue_view_all: Všechny úkoly - label_issues_by: "Úkoly podle {{value}}" + label_issues_by: "Úkoly podle %{value}" label_issue_added: Úkol přidán label_issue_updated: Úkol aktualizován label_document: Dokument @@ -350,11 +486,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í @@ -365,6 +503,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í @@ -373,6 +512,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 @@ -383,8 +524,8 @@ label_text: Dlouhý text label_attribute: Atribut label_attribute_plural: Atributy - label_download: "{{count}} stažení" - label_download_plural: "{{count}} stažení" + label_download: "%{count} stažení" + label_download_plural: "%{count} stažení" label_no_data: Žádné položky label_change_status: Změnit stav label_history: Historie @@ -406,6 +547,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... @@ -415,17 +557,17 @@ label_closed_issues: uzavřený label_closed_issues_plural: uzavřené label_x_open_issues_abbr_on_total: - zero: 0 otevřených / {{total}} - one: 1 otevřený / {{total}} - other: "{{count}} otevřených / {{total}}" + zero: 0 otevřených / %{total} + one: 1 otevřený / %{total} + other: "%{count} otevřených / %{total}" label_x_open_issues_abbr: zero: 0 otevřených one: 1 otevřený - other: "{{count}} otevřených" + other: "%{count} otevřených" label_x_closed_issues_abbr: zero: 0 uzavřených one: 1 uzavřený - other: "{{count}} uzavřených" + other: "%{count} uzavřených" label_total: Celkem label_permissions: Práva label_current_status: Aktuální stav @@ -443,7 +585,7 @@ label_months_from: měsíců od label_gantt: Ganttův graf label_internal: Interní - label_last_changes: "posledních {{count}} změn" + label_last_changes: "posledních %{count} změn" label_change_view_all: Zobrazit všechny změny label_personalize_page: Přizpůsobit tuto stránku label_comment: Komentář @@ -451,7 +593,7 @@ label_x_comments: zero: žádné komentáře one: 1 komentář - other: "{{count}} komentářů" + other: "%{count} komentářů" label_comment_add: Přidat komentáře label_comment_added: Komentář přidán label_comment_delete: Odstranit komentář @@ -464,13 +606,15 @@ 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 label_yesterday: včera label_this_week: tento týden label_last_week: minulý týden - label_last_n_days: "posledních {{count}} dnů" + label_last_n_days: "posledních %{count} dnů" label_this_month: tento měsíc label_last_month: minulý měsíc label_this_year: tento rok @@ -484,25 +628,31 @@ label_repository: Repozitář label_repository_plural: Repozitáře label_browse: Procházet - label_modification: "{{count}} změna" - label_modification_plural: "{{count}} změn" + 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 label_sort_lower: Přesunout dolů label_sort_lowest: Přesunout na konec label_roadmap: Plán - label_roadmap_due_in: "Zbývá {{value}}" - label_roadmap_overdue: "{{value}} pozdě" + label_roadmap_due_in: "Zbývá %{value}" + label_roadmap_overdue: "%{value} pozdě" label_roadmap_no_issues: Pro tuto verzi nejsou žádné úkoly label_search: Hledat label_result_plural: Výsledky @@ -520,8 +670,9 @@ label_changes_details: Detail všech změn label_issue_tracking: Sledování úkolů label_spent_time: Strávený čas - label_f_hour: "{{value}} hodina" - label_f_hour_plural: "{{value}} hodin" + 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 label_change_plural: Změny label_statistics: Statistiky @@ -540,8 +691,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 @@ -556,6 +708,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 @@ -569,12 +723,15 @@ label_date_from: Od label_date_to: Do label_language_based: Podle výchozího jazyku - label_sort_by: "Seřadit podle {{value}}" + label_sort_by: "Seřadit podle %{value}" label_send_test_email: Poslat testovací email - label_feeds_access_key_created_on: "Přístupový klíč pro RSS byl vytvořen před {{value}}" + 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: "Aktualizováno před {{value}}" + 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 label_changeset_plural: Changesety @@ -586,11 +743,15 @@ 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 label_registration_automatic_activation: automatická aktivace účtu - label_display_per_page: "{{value}} na stránku" + label_display_per_page: "%{value} na stránku" label_age: Věk label_change_properties: Změnit vlastnosti label_general: Obecné @@ -604,6 +765,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 @@ -612,8 +807,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 @@ -624,6 +821,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 @@ -635,54 +833,87 @@ 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: Duplikovat + 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 text_project_identifier_info: 'Jsou povolena malá písmena (a-z), čísla a pomlčky.
    Po uložení již není možné identifikátor změnit.' - text_caracters_maximum: "{{count}} znaků maximálně." - text_caracters_minimum: "Musí být alespoň {{count}} znaků dlouhé." - text_length_between: "Délka mezi {{min}} a {{max}} znaky." + text_caracters_maximum: "%{count} znaků maximálně." + text_caracters_minimum: "Musí být alespoň %{count} znaků dlouhé." + text_length_between: "Délka mezi %{min} a %{max} znaky." 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}}." + text_issue_added: "Úkol %{id} byl vytvořen uživatelem %{author}." + text_issue_updated: "Úkol %{id} byl aktualizován uživatelem %{author}." text_wiki_destroy_confirmation: Opravdu si přejete odstranit tuto Wiki a celý její obsah? - text_issue_category_destroy_question: "Některé úkoly ({{count}}) jsou přiřazeny k této kategorii. Co s nimi chtete udělat?" + text_issue_category_destroy_question: "Některé úkoly (%{count}) jsou přiřazeny k této kategorii. Co s nimi chtete udělat?" text_issue_category_destroy_assignments: Zrušit přiřazení ke kategorii text_issue_category_reassign_to: Přiřadit úkoly do této kategorie text_user_mail_option: "U projektů, které nebyly vybrány, budete dostávat oznámení pouze o vašich či o sledovaných položkách (např. o položkách jejichž jste autor nebo ke kterým jste přiřazen(a))." 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_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_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/configuration.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ář @@ -709,221 +940,43 @@ 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. - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header + + 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Kódování zpráv při commitu + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/da.yml.svn-base --- a/config/locales/.svn/text-base/da.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/da.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -14,7 +14,10 @@ abbr_day_names: [sø, ma, ti, 'on', to, fr, lø] month_names: [~, januar, februar, marts, april, maj, juni, juli, august, september, oktober, november, december] abbr_month_names: [~, jan, feb, mar, apr, maj, jun, jul, aug, sep, okt, nov, dec] - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -35,37 +38,37 @@ half_a_minute: "et halvt minut" less_than_x_seconds: one: "mindre end et sekund" - other: "mindre end {{count}} sekunder" + other: "mindre end %{count} sekunder" x_seconds: one: "et sekund" - other: "{{count}} sekunder" + other: "%{count} sekunder" less_than_x_minutes: one: "mindre end et minut" - other: "mindre end {{count}} minutter" + other: "mindre end %{count} minutter" x_minutes: one: "et minut" - other: "{{count}} minutter" + other: "%{count} minutter" about_x_hours: one: "cirka en time" - other: "cirka {{count}} timer" + other: "cirka %{count} timer" x_days: one: "en dag" - other: "{{count}} dage" + other: "%{count} dage" about_x_months: one: "cirka en måned" - other: "cirka {{count}} måneder" + other: "cirka %{count} måneder" x_months: one: "en måned" - other: "{{count}} måneder" + other: "%{count} måneder" about_x_years: one: "cirka et år" - other: "cirka {{count}} år" + other: "cirka %{count} år" over_x_years: one: "mere end et år" - other: "mere end {{count}} år" + other: "mere end %{count} år" almost_x_years: one: "næsten 1 år" - other: "næsten {{count}} år" + other: "næsten %{count} år" number: format: @@ -107,6 +110,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "er ikke i listen" exclusion: "er reserveret" @@ -115,27 +122,27 @@ accepted: "skal accepteres" empty: "må ikke udelades" blank: "skal udfyldes" - too_long: "er for lang (højst {{count}} tegn)" - too_short: "er for kort (mindst {{count}} tegn)" - wrong_length: "har forkert længde (skulle være {{count}} tegn)" + too_long: "er for lang (højst %{count} tegn)" + too_short: "er for kort (mindst %{count} tegn)" + wrong_length: "har forkert længde (skulle være %{count} tegn)" taken: "er allerede anvendt" not_a_number: "er ikke et tal" - greater_than: "skal være større end {{count}}" - greater_than_or_equal_to: "skal være større end eller lig med {{count}}" - equal_to: "skal være lig med {{count}}" - less_than: "skal være mindre end {{count}}" - less_than_or_equal_to: "skal være mindre end eller lig med {{count}}" + greater_than: "skal være større end %{count}" + greater_than_or_equal_to: "skal være større end eller lig med %{count}" + equal_to: "skal være lig med %{count}" + less_than: "skal være mindre end %{count}" + less_than_or_equal_to: "skal være mindre end eller lig med %{count}" odd: "skal være ulige" even: "skal være lige" greater_than_start_date: "skal være senere end startdatoen" not_same_project: "hører ikke til samme projekt" circular_dependency: "Denne relation vil skabe et afhængighedsforhold" - 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: "En sag kan ikke relateres til en af dens underopgaver" template: header: - one: "En fejl forhindrede {{model}} i at blive gemt" - other: "{{count}} fejl forhindrede denne {{model}} i at blive gemt" + one: "En fejl forhindrede %{model} i at blive gemt" + other: "%{count} fejl forhindrede denne %{model} i at blive gemt" body: "Der var problemer med følgende felter:" actionview_instancetag_blank_option: Vælg venligst @@ -147,7 +154,7 @@ general_lang_name: 'Danish (Dansk)' general_csv_separator: ',' general_csv_encoding: ISO-8859-1 - general_pdf_encoding: ISO-8859-1 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' notice_account_updated: Kontoen er opdateret. @@ -166,29 +173,29 @@ notice_file_not_found: Siden du forsøger at tilgå eksisterer ikke eller er blevet fjernet. notice_locking_conflict: Data er opdateret af en anden bruger. notice_not_authorized: Du har ikke adgang til denne side. - notice_email_sent: "En email er sendt til {{value}}" - notice_email_error: "En fejl opstod under afsendelse af email ({{value}})" + notice_email_sent: "En email er sendt til %{value}" + notice_email_error: "En fejl opstod under afsendelse af email (%{value})" notice_feeds_access_key_reseted: Din adgangsnøgle til RSS er nulstillet. - notice_failed_to_save_issues: "Det mislykkedes at gemme {{count}} sage(r) på {{total}} valgt: {{ids}}." + notice_failed_to_save_issues: "Det mislykkedes at gemme %{count} sage(r) på %{total} valgt: %{ids}." notice_no_issue_selected: "Ingen sag er valgt! Vælg venligst hvilke emner du vil rette." notice_account_pending: "Din konto er oprettet, og afventer administrators godkendelse." notice_default_data_loaded: Standardopsætningen er indlæst. - error_can_t_load_default_data: "Standardopsætning kunne ikke indlæses: {{value}}" + error_can_t_load_default_data: "Standardopsætning kunne ikke indlæses: %{value}" error_scm_not_found: "Adgang nægtet og/eller revision blev ikke fundet i det valgte repository." - error_scm_command_failed: "En fejl opstod under forbindelsen til det valgte repository: {{value}}" + error_scm_command_failed: "En fejl opstod under forbindelsen til det valgte repository: %{value}" - mail_subject_lost_password: "Dit {{value}} kodeord" - mail_body_lost_password: 'For at ændre dit kodeord, klik på dette link:' - mail_subject_register: "{{value}} kontoaktivering" + mail_subject_lost_password: "Dit %{value} kodeord" + mail_body_lost_password: 'Klik på dette link for at ændre dit kodeord:' + mail_subject_register: "%{value} kontoaktivering" mail_body_register: 'Klik på dette link for at aktivere din konto:' - mail_body_account_information_external: "Du kan bruge din {{value}} konto til at logge ind." + mail_body_account_information_external: "Du kan bruge din %{value} konto til at logge ind." mail_body_account_information: Din kontoinformation - mail_subject_account_activation_request: "{{value}} kontoaktivering" - mail_body_account_activation_request: "En ny bruger ({{value}}) er registreret. Godkend venligst kontoen:" + mail_subject_account_activation_request: "%{value} kontoaktivering" + mail_body_account_activation_request: "En ny bruger (%{value}) er registreret. Godkend venligst kontoen:" gui_validation_error: 1 fejl - gui_validation_error_plural: "{{count}} fejl" + gui_validation_error_plural: "%{count} fejl" field_name: Navn field_description: Beskrivelse @@ -223,7 +230,7 @@ field_due_date: Deadline field_assigned_to: Tildelt til field_priority: Prioritet - field_fixed_version: Target version + field_fixed_version: Udgave field_user: Bruger field_role: Rolle field_homepage: Hjemmeside @@ -250,7 +257,8 @@ field_attr_lastname: Efternavn attribut field_attr_mail: Email attribut field_onthefly: løbende brugeroprettelse - field_done_ratio: % Færdig + field_start_date: Start dato + field_done_ratio: "% færdig" field_auth_source: Sikkerhedsmetode field_hide_mail: Skjul min email field_comments: Kommentar @@ -318,14 +326,14 @@ label_x_projects: zero: Ingen projekter one: 1 projekt - other: "{{count}} projekter" + other: "%{count} projekter" label_project_all: Alle projekter label_project_latest: Seneste projekter label_issue: Sag label_issue_new: Opret sag label_issue_plural: Sager label_issue_view_all: Vis alle sager - label_issues_by: "Sager fra {{value}}" + label_issues_by: "Sager fra %{value}" label_issue_added: Sagen er oprettet label_issue_updated: Sagen er opdateret label_document: Dokument @@ -344,7 +352,7 @@ label_tracker_new: Ny type label_workflow: Arbejdsgang label_issue_status: Sagsstatus - label_issue_status_plural: Sagsstatuser + label_issue_status_plural: Sagsstatusser label_issue_status_new: Ny status label_issue_category: Sagskategori label_issue_category_plural: Sagskategorier @@ -368,9 +376,9 @@ label_logout: Log ud label_help: Hjælp label_reported_issues: Rapporterede sager - label_assigned_to_me_issues: Sager tildelt mig - label_last_login: Sidste login tidspunkt - label_registered_on: Registeret den + label_assigned_to_me_issues: Sager tildelt til mig + label_last_login: Sidste logintidspunkt + label_registered_on: Registreret den label_activity: Aktivitet label_new: Ny label_logged_as: Registreret som @@ -390,8 +398,8 @@ label_text: Lang tekst label_attribute: Attribut label_attribute_plural: Attributter - label_download: "{{count}} Download" - label_download_plural: "{{count}} Downloads" + label_download: "%{count} Download" + label_download_plural: "%{count} Downloads" label_no_data: Ingen data at vise label_change_status: Ændringsstatus label_history: Historik @@ -422,17 +430,17 @@ label_closed_issues: lukket label_closed_issues_plural: lukkede label_x_open_issues_abbr_on_total: - zero: 0 åbne / {{total}} - one: 1 åben / {{total}} - other: "{{count}} åbne / {{total}}" + zero: 0 åbne / %{total} + one: 1 åben / %{total} + other: "%{count} åbne / %{total}" label_x_open_issues_abbr: zero: 0 åbne one: 1 åben - other: "{{count}} åbne" + other: "%{count} åbne" label_x_closed_issues_abbr: zero: 0 lukkede one: 1 lukket - other: "{{count}} lukkede" + other: "%{count} lukkede" label_total: Total label_permissions: Rettigheder label_current_status: Nuværende status @@ -441,7 +449,7 @@ label_none: intet label_nobody: ingen label_next: Næste - label_previous: Forrig + label_previous: Forrige label_used_by: Brugt af label_details: Detaljer label_add_note: Tilføj note @@ -450,7 +458,7 @@ label_months_from: måneder frem label_gantt: Gantt label_internal: Intern - label_last_changes: "sidste {{count}} ændringer" + label_last_changes: "sidste %{count} ændringer" label_change_view_all: Vis alle ændringer label_personalize_page: Tilret denne side label_comment: Kommentar @@ -458,7 +466,7 @@ label_x_comments: zero: ingen kommentarer one: 1 kommentar - other: "{{count}} kommentarer" + other: "%{count} kommentarer" label_comment_add: Tilføj en kommentar label_comment_added: Kommentaren er tilføjet label_comment_delete: Slet kommentar @@ -477,25 +485,25 @@ label_yesterday: i går label_this_week: denne uge label_last_week: sidste uge - label_last_n_days: "sidste {{count}} dage" + label_last_n_days: "sidste %{count} dage" label_this_month: denne måned label_last_month: sidste måned label_this_year: dette år label_date_range: Dato interval label_less_than_ago: mindre end dage siden label_more_than_ago: mere end dage siden - label_ago: days siden + label_ago: dage siden label_contains: indeholder label_not_contains: ikke indeholder label_day_plural: dage label_repository: Repository label_repository_plural: Repositories label_browse: Gennemse - label_modification: "{{count}} ændring" - label_modification_plural: "{{count}} ændringer" + label_modification: "%{count} ændring" + label_modification_plural: "%{count} ændringer" label_revision: Revision label_revision_plural: Revisioner - label_associated_revisions: Tilnyttede revisioner + label_associated_revisions: Tilknyttede revisioner label_added: tilføjet label_modified: ændret label_deleted: slettet @@ -509,7 +517,7 @@ label_sort_lowest: Flyt til bunden label_roadmap: Roadmap label_roadmap_due_in: Deadline - label_roadmap_overdue: "{{value}} forsinket" + label_roadmap_overdue: "%{value} forsinket" label_roadmap_no_issues: Ingen sager i denne version label_search: Søg label_result_plural: Resultater @@ -525,10 +533,10 @@ label_preview: Forhåndsvisning label_feed_plural: Feeds label_changes_details: Detaljer for alle ændringer - label_issue_tracking: Sags søgning + label_issue_tracking: Sagssøgning label_spent_time: Anvendt tid - label_f_hour: "{{value}} time" - label_f_hour_plural: "{{value}} timer" + label_f_hour: "%{value} time" + label_f_hour_plural: "%{value} timer" label_time_tracking: Tidsstyring label_change_plural: Ændringer label_statistics: Statistik @@ -537,17 +545,17 @@ label_view_diff: Vis forskelle label_diff_inline: inline label_diff_side_by_side: side om side - label_options: Optioner + label_options: Formatering label_copy_workflow_from: Kopier arbejdsgang fra label_permissions_report: Godkendelsesrapport label_watched_issues: Overvågede sager label_related_issues: Relaterede sager - label_applied_status: Anvendte statuser + label_applied_status: Anvendte statusser label_loading: Indlæser... label_relation_new: Ny relation label_relation_delete: Slet relation label_relates_to: relaterer til - label_duplicates: kopierer + label_duplicates: duplikater label_blocks: blokerer label_blocked_by: blokeret af label_precedes: kommer før @@ -576,16 +584,16 @@ label_date_from: Fra label_date_to: Til label_language_based: Baseret på brugerens sprog - label_sort_by: "Sortér efter {{value}}" + label_sort_by: "Sortér efter %{value}" label_send_test_email: Send en test email - label_feeds_access_key_created_on: "RSS adgangsnøgle dannet for {{value}} siden" + label_feeds_access_key_created_on: "RSS adgangsnøgle dannet for %{value} siden" label_module_plural: Moduler - label_added_time_by: "Tilføjet af {{author}} for {{age}} siden" - label_updated_time: "Opdateret for {{value}} siden" + label_added_time_by: "Tilføjet af %{author} for %{age} siden" + label_updated_time: "Opdateret for %{value} siden" label_jump_to_a_project: Skift til projekt... label_file_plural: Filer label_changeset_plural: Ændringer - label_default_columns: Standard kolonner + label_default_columns: Standardkolonner label_no_change_option: (Ingen ændringer) label_bulk_edit_selected_issues: Masse-ret de valgte sager label_theme: Tema @@ -597,7 +605,7 @@ label_registration_activation_by_email: kontoaktivering på email label_registration_manual_activation: manuel kontoaktivering label_registration_automatic_activation: automatisk kontoaktivering - label_display_per_page: "Per side: {{value}}" + label_display_per_page: "Per side: %{value}" label_age: Alder label_change_properties: Ændre indstillinger label_general: Generelt @@ -659,34 +667,34 @@ text_tip_issue_end_day: opaven slutter denne dag text_tip_issue_begin_end_day: opgaven begynder og slutter denne dag text_project_identifier_info: 'Små bogstaver (a-z), numre og bindestreg er tilladt.
    Denne er en unik identifikation for projektet, og kan defor ikke rettes senere.' - text_caracters_maximum: "max {{count}} karakterer." - text_caracters_minimum: "Skal være mindst {{count}} karakterer lang." - text_length_between: "Længde skal være mellem {{min}} og {{max}} karakterer." + text_caracters_maximum: "max %{count} karakterer." + text_caracters_minimum: "Skal være mindst %{count} karakterer lang." + text_length_between: "Længde skal være mellem %{min} og %{max} karakterer." text_tracker_no_workflow: Ingen arbejdsgang defineret for denne type text_unallowed_characters: Ikke-tilladte karakterer text_comma_separated: Adskillige værdier tilladt (adskilt med komma). text_issues_ref_in_commit_messages: Referer og løser sager i commit-beskeder - text_issue_added: "Sag {{id}} er rapporteret af {{author}}." - text_issue_updated: "Sag {{id}} er blevet opdateret af {{author}}." + text_issue_added: "Sag %{id} er rapporteret af %{author}." + text_issue_updated: "Sag %{id} er blevet opdateret af %{author}." text_wiki_destroy_confirmation: Er du sikker på at du vil slette denne wiki og dens indhold? - text_issue_category_destroy_question: "Nogle sager ({{count}}) er tildelt denne kategori. Hvad ønsker du at gøre?" + text_issue_category_destroy_question: "Nogle sager (%{count}) er tildelt denne kategori. Hvad ønsker du at gøre?" text_issue_category_destroy_assignments: Slet tildelinger af kategori text_issue_category_reassign_to: Tildel sager til denne kategori text_user_mail_option: "For ikke-valgte projekter vil du kun modtage beskeder omhandlende ting du er involveret i eller overvåger (f.eks. sager du har indberettet eller ejer)." - text_no_configuration_data: "Roller, typer, sagsstatuser og arbejdsgange er endnu ikke konfigureret.\nDet er anbefalet at indlæse standardopsætningen. Du vil kunne ændre denne når den er indlæst." + text_no_configuration_data: "Roller, typer, sagsstatusser og arbejdsgange er endnu ikke konfigureret.\nDet er anbefalet at indlæse standardopsætningen. Du vil kunne ændre denne når den er indlæst." text_load_default_configuration: Indlæs standardopsætningen - text_status_changed_by_changeset: "Anvendt i ændring {{value}}." + text_status_changed_by_changeset: "Anvendt i ændring %{value}." text_issues_destroy_confirmation: 'Er du sikker på du ønsker at slette den/de valgte sag(er)?' text_select_project_modules: 'Vælg moduler er skal være aktiveret for dette projekt:' - text_default_administrator_account_changed: Standard administratorkonto ændret + text_default_administrator_account_changed: Standardadministratorkonto ændret text_file_repository_writable: Filarkiv er skrivbar text_rmagick_available: RMagick tilgængelig (valgfri) default_role_manager: Leder default_role_developer: Udvikler default_role_reporter: Rapportør - default_tracker_bug: Bug - default_tracker_feature: Feature + default_tracker_bug: Fejl + default_tracker_feature: Funktion default_tracker_support: Support default_issue_status_new: Ny default_issue_status_in_progress: Igangværende @@ -711,21 +719,21 @@ label_add_another_file: Tilføj endnu en fil label_chronological_order: I kronologisk rækkefølge setting_activity_days_default: Antal dage der vises under projektaktivitet - text_destroy_time_entries_question: "{{hours}} timer er registreret på denne sag som du er ved at slette. Hvad vil du gøre?" + text_destroy_time_entries_question: "%{hours} timer er registreret på denne sag som du er ved at slette. Hvad vil du gøre?" error_issue_not_found_in_project: 'Sagen blev ikke fundet eller tilhører ikke dette projekt' text_assign_time_entries_to_project: Tildel raporterede timer til projektet setting_display_subprojects_issues: Vis sager for underprojekter på hovedprojektet som standard - label_optional_description: Optionel beskrivelse + label_optional_description: Valgfri beskrivelse text_destroy_time_entries: Slet registrerede timer field_comments_sorting: Vis kommentar text_reassign_time_entries: 'Tildel registrerede timer til denne sag igen' label_reverse_chronological_order: I omvendt kronologisk rækkefølge - label_preferences: Preferences + label_preferences: Præferencer label_overall_activity: Overordnet aktivitet setting_default_projects_public: Nye projekter er offentlige som standard error_scm_annotate: "Filen findes ikke, eller kunne ikke annoteres." label_planning: Planlægning - text_subprojects_destroy_warning: "Dets underprojekter(er): {{value}} vil også blive slettet." + text_subprojects_destroy_warning: "Dets underprojekter(er): %{value} vil også blive slettet." permission_edit_issues: Redigér sager setting_diff_max_lines_displayed: Højeste antal forskelle der vises permission_edit_own_issue_notes: Redigér egne noter @@ -748,19 +756,19 @@ 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 - warning_attachments_not_saved: "der var {{count}} fil(er), som ikke kunne gemmes." + warning_attachments_not_saved: "der var %{count} fil(er), som ikke kunne gemmes." permission_comment_news: Kommentér nyheder - text_enumeration_category_reassign_to: 'FLyt dem til denne værdi:' + text_enumeration_category_reassign_to: 'Flyt dem til denne værdi:' permission_select_project_modules: Vælg projektmoduler permission_view_gantt: Se Gantt diagram permission_delete_messages: Slet beskeder permission_move_issues: Flyt sager permission_edit_wiki_pages: Redigér wiki sider - label_user_activity: "{{value}}'s aktivitet" + label_user_activity: "%{value}'s aktivitet" permission_manage_issue_relations: Administrér sags-relationer label_issue_watchers: Overvågere permission_delete_wiki_pages: Slet wiki sider @@ -771,27 +779,27 @@ permission_manage_boards: Administrér fora permission_delete_wiki_pages_attachments: Slet filer vedhæftet wiki sider permission_view_messages: Se beskeder - text_enumeration_destroy_question: "{{count}} objekter er tildelt denne værdi." + text_enumeration_destroy_question: "%{count} objekter er tildelt denne værdi." permission_manage_files: Administrér filer permission_add_messages: Opret beskeder permission_edit_issue_notes: Redigér noter permission_manage_news: Administrér nyheder text_plugin_assets_writable: Der er skriverettigheder til plugin assets folderen label_display: Vis - label_and_its_subprojects: "{{value}} og dets underprojekter" + label_and_its_subprojects: "%{value} og dets underprojekter" permission_view_calendar: Se kalender button_create_and_continue: Opret og fortsæt - setting_gravatar_enabled: Anvend Gravatar bruger ikoner - label_updated_time_by: "Opdateret af {{author}} for {{age}} siden" - text_diff_truncated: '... Listen over forskelle er bleve afkortet da den overstiger den maksimale størrelse der kan vises.' - text_user_wrote: "{{value}} skrev:" + setting_gravatar_enabled: Anvend Gravatar brugerikoner + label_updated_time_by: "Opdateret af %{author} for %{age} siden" + text_diff_truncated: '... Listen over forskelle er blevet afkortet da den overstiger den maksimale størrelse der kan vises.' + text_user_wrote: "%{value} skrev:" setting_mail_handler_api_enabled: Aktiver webservice for indkomne emails permission_delete_issues: Slet sager permission_view_documents: Se dokumenter permission_browse_repository: Gennemse repository permission_manage_repository: Administrér repository permission_manage_members: Administrér medlemmer - mail_subject_reminder: "{{count}} sag(er) har deadline i de kommende dage ({{days}})" + mail_subject_reminder: "%{count} sag(er) har deadline i de kommende dage (%{days})" permission_add_issue_notes: Tilføj noter permission_edit_messages: Redigér beskeder permission_view_issue_watchers: Se liste over overvågere @@ -804,7 +812,6 @@ permission_edit_project: Redigér projekt permission_save_queries: Gem forespørgsler label_copied: kopieret - setting_commit_logs_encoding: Kodning af Commit beskeder text_repository_usernames_mapping: "Vælg eller opdatér de Redmine brugere der svarer til de enkelte brugere fundet i repository loggen.\nBrugere med samme brugernavn eller email adresse i både Redmine og det valgte repository bliver automatisk koblet sammen." permission_edit_time_entries: Redigér tidsregistreringer general_csv_decimal_separator: ',' @@ -816,78 +823,78 @@ field_identity_url: OpenID URL label_login_with_open_id_option: eller login med OpenID setting_per_page_options: Enheder per side muligheder - mail_body_reminder: "{{count}} sage(er) som er tildelt dig har deadline indenfor de næste {{days}} dage:" + mail_body_reminder: "%{count} sage(er) som er tildelt dig har deadline indenfor de næste %{days} dage:" field_content: Indhold label_descending: Aftagende label_sort: Sortér label_ascending: Tiltagende - label_date_from_to: Fra {{start}} til {{end}} + label_date_from_to: Fra %{start} til %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: Denne side har {{descendants}} underside(r) og afledte. Hvad vil du gøre? + text_wiki_page_destroy_question: Denne side har %{descendants} underside(r) og afledte. Hvad vil du gøre? text_wiki_page_reassign_children: Flyt undersider til denne side text_wiki_page_nullify_children: Behold undersider som rod-sider text_wiki_page_destroy_children: Slet undersider ogalle deres afledte sider. setting_password_min_length: Mindste længde på kodeord field_group_by: Gruppér resultater efter - mail_subject_wiki_content_updated: "'{{id}}' wikisiden er blevet opdateret" + mail_subject_wiki_content_updated: "'%{id}' wikisiden er blevet opdateret" label_wiki_content_added: Wiki side tilføjet - mail_subject_wiki_content_added: "'{{id}}' wikisiden er blevet tilføjet" - mail_body_wiki_content_added: The '{{id}}' wikiside er blevet tilføjet af {{author}}. + mail_subject_wiki_content_added: "'%{id}' wikisiden er blevet tilføjet" + mail_body_wiki_content_added: The '%{id}' wikiside er blevet tilføjet af %{author}. label_wiki_content_updated: Wikiside opdateret - mail_body_wiki_content_updated: Wikisiden '{{id}}' er blevet opdateret af {{author}}. + mail_body_wiki_content_updated: Wikisiden '%{id}' er blevet opdateret af %{author}. permission_add_project: Opret projekt setting_new_project_user_role_id: Denne rolle gives til en bruger, som ikke er administrator, og som opretter et projekt label_view_all_revisions: Se alle revisioner label_tag: Tag label_branch: Branch error_no_tracker_in_project: Der er ingen sagshåndtering for dette projekt. Kontrollér venligst projektindstillingerne. - error_no_default_issue_status: Der er ikek defineret en standardstatus. Kontrollér venligst indstillingernen (Gå til "Administration -> Sagsstatuser"). - text_journal_changed: "{{label}} ændret fra {{old}} til {{new}}" - text_journal_set_to: "{{label}} sat til {{value}}" - text_journal_deleted: "{{label}} slettet ({{old}})" + error_no_default_issue_status: Der er ikke defineret en standardstatus. Kontrollér venligst indstillingerne (gå til "Administration -> Sagsstatusser"). + text_journal_changed: "%{label} ændret fra %{old} til %{new}" + text_journal_set_to: "%{label} sat til %{value}" + text_journal_deleted: "%{label} slettet (%{old})" label_group_plural: Grupper label_group: Grupper label_group_new: Ny gruppe label_time_entry_plural: Anvendt tid - text_journal_added: "{{label}} {{value}} tilføjet" + text_journal_added: "%{label} %{value} tilføjet" field_active: Aktiv enumeration_system_activity: System Aktivitet permission_delete_issue_watchers: Slet overvågere version_status_closed: lukket version_status_locked: låst version_status_open: åben - error_can_not_reopen_issue_on_closed_version: En sag tildelt en lukket version, kan ikke genåbnes + error_can_not_reopen_issue_on_closed_version: En sag tildelt en lukket version kan ikke genåbnes label_user_anonymous: Anonym button_move_and_follow: Flyt og overvåg setting_default_projects_modules: Standard moduler, aktiveret for nye projekter setting_gravatar_default: Standard Gravatar billede field_sharing: Delning - label_version_sharing_hierarchy: Med projekt hierarki + label_version_sharing_hierarchy: Med projekthierarki label_version_sharing_system: Med alle projekter - label_version_sharing_descendants: Med under projekter - label_version_sharing_tree: Med projekt træ + label_version_sharing_descendants: Med underprojekter + label_version_sharing_tree: Med projekttræ label_version_sharing_none: Ikke delt error_can_not_archive_project: Dette projekt kan ikke arkiveres - button_duplicate: Kopier - button_copy_and_follow: Kopier og overvåg + button_duplicate: Duplikér + button_copy_and_follow: Kopiér og overvåg label_copy_source: Kilde setting_issue_done_ratio: Beregn sagsløsning ratio - setting_issue_done_ratio_issue_status: Benyt sags status + setting_issue_done_ratio_issue_status: Benyt sagsstatus error_issue_done_ratios_not_updated: Sagsløsnings ratio, ikke opdateret. - error_workflow_copy_target: Vælg venligst mål tracker og rolle(r) - setting_issue_done_ratio_issue_field: Benyt sags felt + error_workflow_copy_target: Vælg venligst måltracker og rolle(r) + setting_issue_done_ratio_issue_field: Benyt sagsfelt label_copy_same_as_target: Samme som mål label_copy_target: Mål - notice_issue_done_ratios_updated: Sagsløsnings ratio opdateret. - error_workflow_copy_source: Vælg venligst en kilde tracker eller rolle - label_update_issue_done_ratios: Opdater sagsløsnings ratio + notice_issue_done_ratios_updated: Sagsløsningsratio opdateret. + error_workflow_copy_source: Vælg venligst en kildetracker eller rolle + label_update_issue_done_ratios: Opdater sagsløsningsratio setting_start_of_week: Start kalendre på permission_view_issues: Vis sager - label_display_used_statuses_only: Vis kun statuser der er benyttet af denne tracker - label_revision_id: Revision {{value}} + label_display_used_statuses_only: Vis kun statusser der er benyttet af denne tracker + label_revision_id: Revision %{value} label_api_access_key: API nøgle - label_api_access_key_created_on: API nøgle genereret {{value}} siden + label_api_access_key_created_on: API nøgle genereret %{value} siden label_feeds_access_key: RSS nøgle notice_api_access_key_reseted: Din API nøgle er nulstillet. setting_rest_api_enabled: Aktiver REST web service @@ -895,51 +902,94 @@ label_missing_feeds_access_key: Mangler en RSS nøgle button_show: Vis text_line_separated: Flere væredier tilladt (en linje for hver værdi). - setting_mail_handler_body_delimiters: Trunker emails efter en af disse linjer + setting_mail_handler_body_delimiters: Trunkér emails efter en af disse linjer permission_add_subprojects: Lav underprojekter label_subproject_new: Nyt underprojekt text_own_membership_delete_confirmation: |- Du er ved at fjerne en eller flere af dine rettigheder, og kan muligvis ikke redigere projektet bagefter. Er du sikker på du ønsker at fortsætte? label_close_versions: Luk færdige versioner - label_board_sticky: Sticky + label_board_sticky: Klistret label_board_locked: Låst permission_export_wiki_pages: Eksporter wiki sider setting_cache_formatted_text: Cache formatteret tekst - permission_manage_project_activities: Administrer projekt aktiviteter - error_unable_delete_issue_status: Det var ikke muligt at slette sags status + permission_manage_project_activities: Administrer projektaktiviteter + error_unable_delete_issue_status: Det var ikke muligt at slette sagsstatus label_profile: Profil - permission_manage_subtasks: Administrer under opgaver - field_parent_issue: Hoved opgave - label_subtask_plural: Under opgaver + permission_manage_subtasks: Administrer underopgaver + field_parent_issue: Hovedopgave + label_subtask_plural: Underopgaver label_project_copy_notifications: Send email notifikationer, mens projektet kopieres - error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) - error_can_not_remove_role: This role is in use and can not be deleted. - error_can_not_delete_tracker: This tracker contains issues and can't be deleted. + error_can_not_delete_custom_field: Kan ikke slette brugerdefineret felt + error_unable_to_connect: Kan ikke forbinde (%{value}) + error_can_not_remove_role: Denne rolle er i brug og kan ikke slettes. + error_can_not_delete_tracker: Denne type indeholder sager og kan ikke slettes. 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 + label_my_page_block: blok + notice_failed_to_save_members: "Fejl under lagring af medlem(mer): %{errors}." + text_zoom_out: Zoom ud + text_zoom_in: Zoom ind + notice_unable_delete_time_entry: Kan ikke slette tidsregistrering. + label_overall_spent_time: Overordnet forbrug af tid + field_time_entries: Log tid 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. - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible + project_module_calendar: Kalender + button_edit_associated_wikipage: "Redigér tilknyttet Wiki side: %{page_title}" + text_are_you_sure_with_children: Slet sag og alle undersager? + field_text: Tekstfelt + label_user_mail_option_only_owner: Kun for ting jeg er ejer af + setting_default_notification_option: Standardpåmindelsesmulighed + label_user_mail_option_only_my_events: Kun for ting jeg overvåger eller er involveret i + label_user_mail_option_only_assigned: Kun for ting jeg er tildelt + label_user_mail_option_none: Ingen hændelser + field_member_of_group: Medlem af gruppe + field_assigned_to_role: Medlem af rolle + notice_not_authorized_archived_project: Projektet du prøver at tilgå, er blevet arkiveret. + label_principal_search: "Søg efter bruger eller gruppe:" + label_user_search: "Søg efter bruger:" + field_visible: Synlig setting_emails_header: Emails header + setting_commit_logtime_activity_id: Aktivitet for registreret tid + text_time_logged_by_changeset: Anvendt i changeset %{value}. + setting_commit_logtime_enabled: Aktiver tidsregistrering + notice_gantt_chart_truncated: Kortet er blevet afkortet, fordi det overstiger det maksimale antal elementer, der kan vises (%{max}) + setting_gantt_items_limit: Maksimalt antal af elementer der kan vises på gantt kortet + + 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Kodning af Commit beskeder + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/de.yml.svn-base --- a/config/locales/.svn/text-base/de.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/de.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,5 +1,6 @@ # German translations for Ruby on Rails # by Clemens Kofler (clemens@railway.at) +# additions for Redmine 1.2 by Jens Martsch (jmartsch@gmail.com) de: direction: ltr @@ -19,7 +20,10 @@ month_names: [~, Januar, Februar, März, April, Mai, Juni, Juli, August, September, Oktober, November, Dezember] abbr_month_names: [~, Jan, Feb, Mär, Apr, Mai, Jun, Jul, Aug, Sep, Okt, Nov, Dez] # Used in date_select and datime_select. - order: [:day, :month, :year] + order: + - :day + - :month + - :year time: formats: @@ -35,37 +39,37 @@ half_a_minute: 'eine halbe Minute' less_than_x_seconds: one: 'weniger als 1 Sekunde' - other: 'weniger als {{count}} Sekunden' + other: 'weniger als %{count} Sekunden' x_seconds: one: '1 Sekunde' - other: '{{count}} Sekunden' + other: '%{count} Sekunden' less_than_x_minutes: one: 'weniger als 1 Minute' - other: 'weniger als {{count}} Minuten' + other: 'weniger als %{count} Minuten' x_minutes: one: '1 Minute' - other: '{{count}} Minuten' + other: '%{count} Minuten' about_x_hours: one: 'etwa 1 Stunde' - other: 'etwa {{count}} Stunden' + other: 'etwa %{count} Stunden' x_days: one: '1 Tag' - other: '{{count}} Tagen' + other: '%{count} Tagen' about_x_months: one: 'etwa 1 Monat' - other: 'etwa {{count}} Monaten' + other: 'etwa %{count} Monaten' x_months: one: '1 Monat' - other: '{{count}} Monaten' + other: '%{count} Monaten' about_x_years: one: 'etwa 1 Jahr' - other: 'etwa {{count}} Jahren' + other: 'etwa %{count} Jahren' over_x_years: one: 'mehr als 1 Jahr' - other: 'mehr als {{count}} Jahren' + other: 'mehr als %{count} Jahren' almost_x_years: one: "fast 1 Jahr" - other: "fast {{count}} Jahren" + other: "fast %{count} Jahren" number: # Default format for numbers @@ -111,7 +115,9 @@ activerecord: errors: template: - header: "Dieses {{model}}-Objekt konnte nicht gespeichert werden: {{count}} Fehler." + header: + one: "Dieses %{model}-Objekt konnte nicht gespeichert werden: %{count} Fehler." + other: "Dieses %{model}-Objekt konnte nicht gespeichert werden: %{count} Fehler." body: "Bitte überprüfen Sie die folgenden Felder:" messages: @@ -122,17 +128,17 @@ accepted: "muss akzeptiert werden" empty: "muss ausgefüllt werden" blank: "muss ausgefüllt werden" - too_long: "ist zu lang (nicht mehr als {{count}} Zeichen)" - too_short: "ist zu kurz (nicht weniger als {{count}} Zeichen)" - wrong_length: "hat die falsche Länge (muss genau {{count}} Zeichen haben)" + too_long: "ist zu lang (nicht mehr als %{count} Zeichen)" + too_short: "ist zu kurz (nicht weniger als %{count} Zeichen)" + wrong_length: "hat die falsche Länge (muss genau %{count} Zeichen haben)" taken: "ist bereits vergeben" not_a_number: "ist keine Zahl" not_a_date: "is kein gültiges Datum" - greater_than: "muss größer als {{count}} sein" - greater_than_or_equal_to: "muss größer oder gleich {{count}} sein" - equal_to: "muss genau {{count}} sein" - less_than: "muss kleiner als {{count}} sein" - less_than_or_equal_to: "muss kleiner oder gleich {{count}} sein" + greater_than: "muss größer als %{count} sein" + greater_than_or_equal_to: "muss größer oder gleich %{count} sein" + equal_to: "muss genau %{count} sein" + less_than: "muss kleiner als %{count} sein" + less_than_or_equal_to: "muss kleiner oder gleich %{count} sein" odd: "muss ungerade sein" even: "muss gerade sein" greater_than_start_date: "muss größer als Anfangsdatum sein" @@ -150,7 +156,7 @@ general_csv_separator: ';' general_csv_decimal_separator: ',' general_csv_encoding: ISO-8859-1 - general_pdf_encoding: ISO-8859-1 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' notice_account_updated: Konto wurde erfolgreich aktualisiert. @@ -169,12 +175,12 @@ notice_file_not_found: Anhang existiert nicht oder ist gelöscht worden. notice_locking_conflict: Datum wurde von einem anderen Benutzer geändert. notice_not_authorized: Sie sind nicht berechtigt, auf diese Seite zuzugreifen. - notice_email_sent: "Eine E-Mail wurde an {{value}} gesendet." - notice_email_error: "Beim Senden einer E-Mail ist ein Fehler aufgetreten ({{value}})." + notice_email_sent: "Eine E-Mail wurde an %{value} gesendet." + notice_email_error: "Beim Senden einer E-Mail ist ein Fehler aufgetreten (%{value})." notice_feeds_access_key_reseted: Ihr Atom-Zugriffsschlüssel wurde zurückgesetzt. notice_api_access_key_reseted: Ihr API-Zugriffsschlüssel wurde zurückgesetzt. - notice_failed_to_save_issues: "{{count}} von {{total}} ausgewählten Tickets konnte(n) nicht gespeichert werden: {{ids}}." - notice_failed_to_save_members: "Benutzer konnte nicht gespeichert werden: {{errors}}." + notice_failed_to_save_issues: "%{count} von %{total} ausgewählten Tickets konnte(n) nicht gespeichert werden: %{ids}." + notice_failed_to_save_members: "Benutzer konnte nicht gespeichert werden: %{errors}." notice_no_issue_selected: "Kein Ticket ausgewählt! Bitte wählen Sie die Tickets, die Sie bearbeiten möchten." notice_account_pending: "Ihr Konto wurde erstellt und wartet jetzt auf die Genehmigung des Administrators." notice_default_data_loaded: Die Standard-Konfiguration wurde erfolgreich geladen. @@ -182,9 +188,9 @@ notice_unable_delete_time_entry: Der Zeiterfassungseintrag konnte nicht gelöscht werden. notice_issue_done_ratios_updated: Der Ticket-Fortschritt wurde aktualisiert. - error_can_t_load_default_data: "Die Standard-Konfiguration konnte nicht geladen werden: {{value}}" + error_can_t_load_default_data: "Die Standard-Konfiguration konnte nicht geladen werden: %{value}" error_scm_not_found: Eintrag und/oder Revision existiert nicht im Projektarchiv. - error_scm_command_failed: "Beim Zugriff auf das Projektarchiv ist ein Fehler aufgetreten: {{value}}" + error_scm_command_failed: "Beim Zugriff auf das Projektarchiv ist ein Fehler aufgetreten: %{value}" error_scm_annotate: "Der Eintrag existiert nicht oder kann nicht annotiert werden." error_issue_not_found_in_project: 'Das Ticket wurde nicht gefunden oder gehört nicht zu diesem Projekt.' error_no_tracker_in_project: Diesem Projekt ist kein Tracker zugeordnet. Bitte überprüfen Sie die Projekteinstellungen. @@ -198,26 +204,26 @@ error_workflow_copy_source: Bitte wählen Sie einen Quell-Tracker und eine Quell-Rolle. error_workflow_copy_target: Bitte wählen Sie die Ziel-Tracker und -Rollen. error_unable_delete_issue_status: "Der Ticket-Status konnte nicht gelöscht werden." - error_unable_to_connect: Fehler beim Verbinden ({{value}}) - warning_attachments_not_saved: "{{count}} Datei(en) konnten nicht gespeichert werden." + error_unable_to_connect: Fehler beim Verbinden (%{value}) + warning_attachments_not_saved: "%{count} Datei(en) konnten nicht gespeichert werden." - mail_subject_lost_password: "Ihr {{value}} Kennwort" + mail_subject_lost_password: "Ihr %{value} Kennwort" mail_body_lost_password: 'Benutzen Sie den folgenden Link, um Ihr Kennwort zu ändern:' - mail_subject_register: "{{value}} Kontoaktivierung" + mail_subject_register: "%{value} Kontoaktivierung" mail_body_register: 'Um Ihr Konto zu aktivieren, benutzen Sie folgenden Link:' - mail_body_account_information_external: "Sie können sich mit Ihrem Konto {{value}} an anmelden." + mail_body_account_information_external: "Sie können sich mit Ihrem Konto %{value} an anmelden." mail_body_account_information: Ihre Konto-Informationen - mail_subject_account_activation_request: "Antrag auf {{value}} Kontoaktivierung" - mail_body_account_activation_request: "Ein neuer Benutzer ({{value}}) hat sich registriert. Sein Konto wartet auf Ihre Genehmigung:" - mail_subject_reminder: "{{count}} Tickets müssen in den nächsten {{days}} Tagen abgegeben werden" - mail_body_reminder: "{{count}} Tickets, die Ihnen zugewiesen sind, müssen in den nächsten {{days}} Tagen abgegeben werden:" - mail_subject_wiki_content_added: "Wiki-Seite '{{id}}' hinzugefügt" - mail_body_wiki_content_added: "Die Wiki-Seite '{{id}}' wurde von {{author}} hinzugefügt." - mail_subject_wiki_content_updated: "Wiki-Seite '{{id}}' erfolgreich aktualisiert" - mail_body_wiki_content_updated: "Die Wiki-Seite '{{id}}' wurde von {{author}} aktualisiert." + mail_subject_account_activation_request: "Antrag auf %{value} Kontoaktivierung" + mail_body_account_activation_request: "Ein neuer Benutzer (%{value}) hat sich registriert. Sein Konto wartet auf Ihre Genehmigung:" + mail_subject_reminder: "%{count} Tickets müssen in den nächsten %{days} Tagen abgegeben werden" + mail_body_reminder: "%{count} Tickets, die Ihnen zugewiesen sind, müssen in den nächsten %{days} Tagen abgegeben werden:" + mail_subject_wiki_content_added: "Wiki-Seite '%{id}' hinzugefügt" + mail_body_wiki_content_added: "Die Wiki-Seite '%{id}' wurde von %{author} hinzugefügt." + mail_subject_wiki_content_updated: "Wiki-Seite '%{id}' erfolgreich aktualisiert" + mail_body_wiki_content_updated: "Die Wiki-Seite '%{id}' wurde von %{author} aktualisiert." gui_validation_error: 1 Fehler - gui_validation_error_plural: "{{count}} Fehler" + gui_validation_error_plural: "%{count} Fehler" field_name: Name field_description: Beschreibung @@ -280,7 +286,8 @@ field_attr_lastname: Name-Attribut field_attr_mail: E-Mail-Attribut field_onthefly: On-the-fly-Benutzererstellung - field_done_ratio: % erledigt + field_start_date: Beginn + field_done_ratio: "% erledigt" field_auth_source: Authentifizierungs-Modus field_hide_mail: E-Mail-Adresse nicht anzeigen field_comments: Kommentar @@ -338,7 +345,6 @@ setting_cross_project_issue_relations: Ticket-Beziehungen zwischen Projekten erlauben setting_issue_list_default_columns: Default-Spalten in der Ticket-Auflistung setting_repositories_encodings: Kodierungen der Projektarchive - setting_commit_logs_encoding: Kodierung der Commit-Log-Meldungen setting_emails_footer: E-Mail-Fußzeile setting_protocol: Protokoll setting_per_page_options: Objekte pro Seite @@ -443,14 +449,14 @@ label_x_projects: zero: keine Projekte one: 1 Projekt - other: "{{count}} Projekte" + other: "%{count} Projekte" label_project_all: Alle Projekte label_project_latest: Neueste Projekte label_issue: Ticket label_issue_new: Neues Ticket label_issue_plural: Tickets label_issue_view_all: Alle Tickets anzeigen - label_issues_by: "Tickets von {{value}}" + label_issues_by: "Tickets von %{value}" label_issue_added: Ticket hinzugefügt label_issue_updated: Ticket aktualisiert label_document: Dokument @@ -500,7 +506,7 @@ label_registered_on: Angemeldet am label_activity: Aktivität label_overall_activity: Aktivität aller Projekte anzeigen - label_user_activity: "Aktivität von {{value}}" + label_user_activity: "Aktivität von %{value}" label_new: Neu label_logged_as: Angemeldet als label_environment: Umgebung @@ -510,7 +516,7 @@ label_auth_source_plural: Authentifizierungs-Arten label_subproject_plural: Unterprojekte label_subproject_new: Neues Unterprojekt - label_and_its_subprojects: "{{value}} und dessen Unterprojekte" + label_and_its_subprojects: "%{value} und dessen Unterprojekte" label_min_max_length: Länge (Min. - Max.) label_list: Liste label_date: Datum @@ -521,8 +527,8 @@ label_text: Langer Text label_attribute: Attribut label_attribute_plural: Attribute - label_download: "{{count}} Download" - label_download_plural: "{{count}} Downloads" + label_download: "%{count} Download" + label_download_plural: "%{count} Downloads" label_no_data: Nichts anzuzeigen label_change_status: Statuswechsel label_history: Historie @@ -554,17 +560,17 @@ label_closed_issues: geschlossen label_closed_issues_plural: geschlossen label_x_open_issues_abbr_on_total: - zero: 0 offen / {{total}} - one: 1 offen / {{total}} - other: "{{count}} offen / {{total}}" + zero: 0 offen / %{total} + one: 1 offen / %{total} + other: "%{count} offen / %{total}" label_x_open_issues_abbr: zero: 0 offen one: 1 offen - other: "{{count}} offen" + other: "%{count} offen" label_x_closed_issues_abbr: zero: 0 geschlossen one: 1 geschlossen - other: "{{count}} geschlossen" + other: "%{count} geschlossen" label_total: Gesamtzahl label_permissions: Berechtigungen label_current_status: Gegenwärtiger Status @@ -582,7 +588,7 @@ label_months_from: Monate ab label_gantt: Gantt-Diagramm label_internal: Intern - label_last_changes: "{{count}} letzte Änderungen" + label_last_changes: "%{count} letzte Änderungen" label_change_view_all: Alle Änderungen anzeigen label_personalize_page: Diese Seite anpassen label_comment: Kommentar @@ -590,7 +596,7 @@ label_x_comments: zero: keine Kommentare one: 1 Kommentar - other: "{{count}} Kommentare" + other: "%{count} Kommentare" label_comment_add: Kommentar hinzufügen label_comment_added: Kommentar hinzugefügt label_comment_delete: Kommentar löschen @@ -611,7 +617,7 @@ label_yesterday: gestern label_this_week: aktuelle Woche label_last_week: vorige Woche - label_last_n_days: "die letzten {{count}} Tage" + label_last_n_days: "die letzten %{count} Tage" label_this_month: aktueller Monat label_last_month: voriger Monat label_this_year: aktuelles Jahr @@ -625,13 +631,13 @@ label_repository: Projektarchiv label_repository_plural: Projektarchive label_browse: Codebrowser - label_modification: "{{count}} Änderung" - label_modification_plural: "{{count}} Änderungen" + label_modification: "%{count} Änderung" + label_modification_plural: "%{count} Änderungen" label_branch: Zweig label_tag: Markierung label_revision: Revision label_revision_plural: Revisionen - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_associated_revisions: Zugehörige Revisionen label_added: hinzugefügt label_modified: geändert @@ -648,8 +654,8 @@ label_sort_lower: Eins tiefer label_sort_lowest: Ans Ende label_roadmap: Roadmap - label_roadmap_due_in: "Fällig in {{value}}" - label_roadmap_overdue: "{{value}} verspätet" + label_roadmap_due_in: "Fällig in %{value}" + label_roadmap_overdue: "%{value} verspätet" label_roadmap_no_issues: Keine Tickets für diese Version label_search: Suche label_result_plural: Resultate @@ -668,8 +674,8 @@ label_issue_tracking: Tickets label_spent_time: Aufgewendete Zeit label_overall_spent_time: Aufgewendete Zeit aller Projekte anzeigen - label_f_hour: "{{value}} Stunde" - label_f_hour_plural: "{{value}} Stunden" + label_f_hour: "%{value} Stunde" + label_f_hour_plural: "%{value} Stunden" label_time_tracking: Zeiterfassung label_change_plural: Änderungen label_statistics: Statistiken @@ -720,15 +726,15 @@ label_date_from: Von label_date_to: Bis label_language_based: Sprachabhängig - label_sort_by: "Sortiert nach {{value}}" + label_sort_by: "Sortiert nach %{value}" label_send_test_email: Test-E-Mail senden label_feeds_access_key: RSS-Zugriffsschlüssel label_missing_feeds_access_key: Der RSS-Zugriffsschlüssel fehlt. - label_feeds_access_key_created_on: "Atom-Zugriffsschlüssel vor {{value}} erstellt" + label_feeds_access_key_created_on: "Atom-Zugriffsschlüssel vor %{value} erstellt" label_module_plural: Module - label_added_time_by: "Von {{author}} vor {{age}} hinzugefügt" - label_updated_time_by: "Von {{author}} vor {{age}} aktualisiert" - label_updated_time: "Vor {{value}} aktualisiert" + label_added_time_by: "Von %{author} vor %{age} hinzugefügt" + label_updated_time_by: "Von %{author} vor %{age} aktualisiert" + label_updated_time: "Vor %{value} aktualisiert" label_jump_to_a_project: Zu einem Projekt springen... label_file_plural: Dateien label_changeset_plural: Changesets @@ -744,7 +750,7 @@ label_registration_activation_by_email: Kontoaktivierung durch E-Mail label_registration_manual_activation: Manuelle Kontoaktivierung label_registration_automatic_activation: Automatische Kontoaktivierung - label_display_per_page: "Pro Seite: {{value}}" + label_display_per_page: "Pro Seite: %{value}" label_age: Geändert vor label_change_properties: Eigenschaften ändern label_general: Allgemein @@ -767,7 +773,7 @@ label_sort: Sortierung label_ascending: Aufsteigend label_descending: Absteigend - label_date_from_to: von {{start}} bis {{end}} + label_date_from_to: von %{start} bis %{end} label_wiki_content_added: Die Wiki-Seite wurde erfolgreich hinzugefügt. label_wiki_content_updated: Die Wiki-Seite wurde erfolgreich aktualisiert. label_group: Gruppe @@ -786,7 +792,7 @@ label_display_used_statuses_only: Zeige nur Status an, die von diesem Tracker verwendet werden label_api_access_key: API-Zugriffsschlüssel label_missing_api_access_key: Der API-Zugriffsschlüssel fehlt. - label_api_access_key_created_on: Der API-Zugriffsschlüssel wurde vor {{value}} erstellt + label_api_access_key_created_on: Der API-Zugriffsschlüssel wurde vor %{value} erstellt label_profile: Profil label_subtask_plural: Unteraufgaben label_project_copy_notifications: Sende Mailbenachrichtigungen beim Kopieren des Projekts. @@ -803,7 +809,7 @@ button_create_and_continue: Anlegen und weiter button_test: Testen button_edit: Bearbeiten - button_edit_associated_wikipage: "Zugehörige Wikiseite bearbeiten: {{page_title}}" + button_edit_associated_wikipage: "Zugehörige Wikiseite bearbeiten: %{page_title}" button_add: Hinzufügen button_change: Wechseln button_apply: Anwenden @@ -852,53 +858,54 @@ text_regexp_info: z. B. ^[A-Z0-9]+$ text_min_max_length_info: 0 heißt keine Beschränkung text_project_destroy_confirmation: Sind Sie sicher, dass sie das Projekt löschen wollen? - text_subprojects_destroy_warning: "Dessen Unterprojekte ({{value}}) werden ebenfalls gelöscht." + text_subprojects_destroy_warning: "Dessen Unterprojekte (%{value}) werden ebenfalls gelöscht." text_workflow_edit: Workflow zum Bearbeiten auswählen text_are_you_sure: Sind Sie sicher? - text_journal_changed: "{{label}} wurde von {{old}} zu {{new}} geändert" - text_journal_set_to: "{{label}} wurde auf {{value}} gesetzt" - text_journal_deleted: "{{label}} {{old}} wurde gelöscht" - text_journal_added: "{{label}} {{value}} wurde hinzugefügt" + text_are_you_sure_with_children: "Lösche Aufgabe und alle Unteraufgaben?" + text_journal_changed: "%{label} wurde von %{old} zu %{new} geändert" + text_journal_set_to: "%{label} wurde auf %{value} gesetzt" + text_journal_deleted: "%{label} %{old} wurde gelöscht" + text_journal_added: "%{label} %{value} wurde hinzugefügt" text_tip_issue_begin_day: Aufgabe, die an diesem Tag beginnt text_tip_issue_end_day: Aufgabe, die an diesem Tag endet text_tip_issue_begin_end_day: Aufgabe, die an diesem Tag beginnt und endet text_project_identifier_info: 'Kleinbuchstaben (a-z), Ziffern und Bindestriche erlaubt.
    Einmal gespeichert, kann die Kennung nicht mehr geändert werden.' - text_caracters_maximum: "Max. {{count}} Zeichen." - text_caracters_minimum: "Muss mindestens {{count}} Zeichen lang sein." - text_length_between: "Länge zwischen {{min}} und {{max}} Zeichen." + text_caracters_maximum: "Max. %{count} Zeichen." + text_caracters_minimum: "Muss mindestens %{count} Zeichen lang sein." + text_length_between: "Länge zwischen %{min} und %{max} Zeichen." text_tracker_no_workflow: Kein Workflow für diesen Tracker definiert. text_unallowed_characters: Nicht erlaubte Zeichen text_comma_separated: Mehrere Werte erlaubt (durch Komma getrennt). text_line_separated: Mehrere Werte sind erlaubt (eine Zeile pro Wert). text_issues_ref_in_commit_messages: Ticket-Beziehungen und -Status in Commit-Log-Meldungen - text_issue_added: "Ticket {{id}} wurde erstellt von {{author}}." - text_issue_updated: "Ticket {{id}} wurde aktualisiert von {{author}}." + text_issue_added: "Ticket %{id} wurde erstellt von %{author}." + text_issue_updated: "Ticket %{id} wurde aktualisiert von %{author}." text_wiki_destroy_confirmation: Sind Sie sicher, dass Sie dieses Wiki mit sämtlichem Inhalt löschen möchten? - text_issue_category_destroy_question: "Einige Tickets ({{count}}) sind dieser Kategorie zugeodnet. Was möchten Sie tun?" + text_issue_category_destroy_question: "Einige Tickets (%{count}) sind dieser Kategorie zugeodnet. Was möchten Sie tun?" text_issue_category_destroy_assignments: Kategorie-Zuordnung entfernen text_issue_category_reassign_to: Tickets dieser Kategorie zuordnen text_user_mail_option: "Für nicht ausgewählte Projekte werden Sie nur Benachrichtigungen für Dinge erhalten, die Sie beobachten oder an denen Sie beteiligt sind (z. B. Tickets, deren Autor Sie sind oder die Ihnen zugewiesen sind)." text_no_configuration_data: "Rollen, Tracker, Ticket-Status und Workflows wurden noch nicht konfiguriert.\nEs ist sehr zu empfehlen, die Standard-Konfiguration zu laden. Sobald sie geladen ist, können Sie sie abändern." text_load_default_configuration: Standard-Konfiguration laden - text_status_changed_by_changeset: "Status geändert durch Changeset {{value}}." + text_status_changed_by_changeset: "Status geändert durch Changeset %{value}." text_issues_destroy_confirmation: 'Sind Sie sicher, dass Sie die ausgewählten Tickets löschen möchten?' text_select_project_modules: 'Bitte wählen Sie die Module aus, die in diesem Projekt aktiviert sein sollen:' text_default_administrator_account_changed: Administrator-Kennwort geändert text_file_repository_writable: Verzeichnis für Dateien beschreibbar text_plugin_assets_writable: Verzeichnis für Plugin-Assets beschreibbar text_rmagick_available: RMagick verfügbar (optional) - text_destroy_time_entries_question: Es wurden bereits {{hours}} Stunden auf dieses Ticket gebucht. Was soll mit den Aufwänden geschehen? + text_destroy_time_entries_question: Es wurden bereits %{hours} Stunden auf dieses Ticket gebucht. Was soll mit den Aufwänden geschehen? text_destroy_time_entries: Gebuchte Aufwände löschen text_assign_time_entries_to_project: Gebuchte Aufwände dem Projekt zuweisen text_reassign_time_entries: 'Gebuchte Aufwände diesem Ticket zuweisen:' - text_user_wrote: "{{value}} schrieb:" - text_enumeration_destroy_question: "{{count}} Objekt(e) sind diesem Wert zugeordnet." + 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' - text_wiki_page_destroy_question: "Diese Seite hat {{descendants}} Unterseite(n). Was möchten Sie tun?" + text_wiki_page_destroy_question: "Diese Seite hat %{descendants} Unterseite(n). Was möchten Sie tun?" text_wiki_page_nullify_children: Verschiebe die Unterseiten auf die oberste Ebene text_wiki_page_destroy_children: Lösche alle Unterseiten text_wiki_page_reassign_children: Ordne die Unterseiten dieser Seite zu @@ -933,16 +940,58 @@ enumeration_activities: Aktivitäten (Zeiterfassung) enumeration_system_activity: System-Aktivität - 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_user_mail_option_none: No events - field_member_of_group: Assignee's group - field_assigned_to_role: Assignee's role - field_start_date: Start date - field_visible: Visible - setting_emails_header: Emails header + field_text: Textfeld + label_user_mail_option_only_owner: Nur für Aufgaben die ich angelegt habe + setting_default_notification_option: Standard Benachrichtigungsoptionen + label_user_mail_option_only_my_events: Nur für Aufgaben die ich beobachte oder an welchen ich mitarbeite + label_user_mail_option_only_assigned: Nur für Aufgaben für die ich zuständig bin. + notice_not_authorized_archived_project: Das Projekt wurde archiviert und ist daher nicht nicht verfügbar. + label_user_mail_option_none: keine Ereignisse + field_member_of_group: Zuständigkeitsgruppe + field_assigned_to_role: Zuständigkeitsrolle + field_visible: Sichtbar + setting_emails_header: E-Mail Betreffzeile + setting_commit_logtime_activity_id: Aktivität für die Zeiterfassung + text_time_logged_by_changeset: Angewendet in Changeset %{value}. + 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: vor dem Verlassen einer Seite mit ungesichertem Text im Editor warnen + text_warn_on_leaving_unsaved: Die aktuellen Änderungen gehen verloren, wenn Sie diese Seite verlassen. + label_my_queries: Meine eigenen Abfragen + text_journal_changed_no_detail: "%{label} aktualisiert" + label_news_comment_added: Kommentar zu einer News hinzugefügt + button_expand_all: Alle ausklappen + button_collapse_all: Alle einklappen + label_additional_workflow_transitions_for_assignee: Zusätzliche Berechtigungen wenn der Benutzer der Zugewiesene ist + label_additional_workflow_transitions_for_author: Zusätzliche Berechtigungen wenn der Benutzer der Autor ist + label_bulk_edit_selected_time_entries: Ausgewählte Zeitaufwände bearbeiten + text_time_entries_destroy_confirmation: Sind Sie sicher, dass Sie die ausgewählten Zeitaufwände löschen möchten? + label_role_anonymous: Anonymous + label_role_non_member: Nichtmitglied + label_issue_note_added: Notiz hinzugefügt + label_issue_status_updated: Status aktualisiert + label_issue_priority_updated: Priorität aktualisiert + label_issues_visibility_own: Tickets die folgender User erstellt hat oder die ihm zugewiesen sind + field_issues_visibility: Ticket Sichtbarkeit + label_issues_visibility_all: Alle Tickets + permission_set_own_issues_private: Eigene Tickets privat oder öffentlich markieren + field_is_private: Privat + permission_set_issues_private: Tickets privat oder öffentlich markieren + label_issues_visibility_public: Alle öffentlichen Tickets + text_issues_destroy_descendants_confirmation: Dies wird auch %{count} Unteraufgabe/n löschen. + field_commit_logs_encoding: Kodierung der Commit-Log-Meldungen + field_scm_path_encoding: Pfad Kodierung + text_scm_path_encoding_note: "Standard: UTF-8" + field_path_to_repository: Pfad zum repository + field_root_directory: Wurzelverzeichnis + field_cvs_module: Modul + field_cvsroot: CVSROOT + text_git_repository_note: Bare und lokales repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Lokales repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Kommando + text_scm_command_version: Version + label_git_report_last_commit: Bericht des letzten Commits für Dateien und Verzeichnisse + text_scm_config: Die SCM-Kommandos können in der in config/configuration.yml konfiguriert werden. Redmine muss anschließend neu gestartet werden. + text_scm_command_not_available: Scm Kommando ist nicht verfügbar. Bitte prüfen Sie die Einstellungen im Administrationspanel. + diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/el.yml.svn-base --- a/config/locales/.svn/text-base/el.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/el.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -19,7 +19,10 @@ month_names: [~, Ιανουάριος, Φεβρουάριος, Μάρτιος, Απρίλιος, Μάϊος, Ιούνιος, Ιούλιος, Αύγουστος, Σεπτέμβριος, Οκτώβριος, Νοέμβριος, Δεκέμβριος] abbr_month_names: [~, Ιαν, Φεβ, Μαρ, Απρ, Μαϊ, Ιον, Ιολ, Αυγ, Σεπ, Οκτ, Νοε, Δεκ] # Used in date_select and datime_select. - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -35,37 +38,37 @@ half_a_minute: "μισό λεπτό" less_than_x_seconds: one: "λιγότερο από 1 δευτερόλεπτο" - other: "λιγότερο από {{count}} δευτερόλεπτα" + other: "λιγότερο από %{count} δευτερόλεπτα" x_seconds: one: "1 δευτερόλεπτο" - other: "{{count}} δευτερόλεπτα" + other: "%{count} δευτερόλεπτα" less_than_x_minutes: one: "λιγότερο από ένα λεπτό" - other: "λιγότερο από {{count}} λεπτά" + other: "λιγότερο από %{count} λεπτά" x_minutes: one: "1 λεπτό" - other: "{{count}} λεπτά" + other: "%{count} λεπτά" about_x_hours: one: "περίπου 1 ώρα" - other: "περίπου {{count}} ώρες" + other: "περίπου %{count} ώρες" x_days: one: "1 ημέρα" - other: "{{count}} ημέρες" + other: "%{count} ημέρες" about_x_months: one: "περίπου 1 μήνα" - other: "περίπου {{count}} μήνες" + other: "περίπου %{count} μήνες" x_months: one: "1 μήνα" - other: "{{count}} μήνες" + other: "%{count} μήνες" about_x_years: one: "περίπου 1 χρόνο" - other: "περίπου {{count}} χρόνια" + other: "περίπου %{count} χρόνια" over_x_years: one: "πάνω από 1 χρόνο" - other: "πάνω από {{count}} χρόνια" + other: "πάνω από %{count} χρόνια" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" number: format: @@ -95,6 +98,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "δεν περιέχεται στη λίστα" exclusion: "έχει κατοχυρωθεί" @@ -103,17 +110,17 @@ accepted: "πρέπει να γίνει αποδοχή" empty: "δε μπορεί να είναι άδειο" blank: "δε μπορεί να είναι κενό" - too_long: "έχει πολλούς (μέγ.επιτρ. {{count}} χαρακτήρες)" - too_short: "έχει λίγους (ελάχ.επιτρ. {{count}} χαρακτήρες)" - wrong_length: "δεν είναι σωστός ο αριθμός χαρακτήρων (πρέπει να έχει {{count}} χαρακτήρες)" + 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}}" + 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: "πρέπει να είναι αργότερα από την ημερομηνία έναρξης" @@ -150,42 +157,42 @@ notice_file_not_found: Η σελίδα που ζητήσατε δεν υπάρχει ή έχει αφαιρεθεί. notice_locking_conflict: Τα δεδομένα έχουν ενημερωθεί από άλλο χρήστη. notice_not_authorized: Δεν έχετε δικαίωμα πρόσβασης σε αυτή τη σελίδα. - notice_email_sent: "Ένα μήνυμα ηλεκτρονικού ταχυδρομείου εστάλη στο {{value}}" - notice_email_error: "Σφάλμα κατά την αποστολή του μηνύματος στο ({{value}})" + notice_email_sent: "Ένα μήνυμα ηλεκτρονικού ταχυδρομείου εστάλη στο %{value}" + notice_email_error: "Σφάλμα κατά την αποστολή του μηνύματος στο (%{value})" notice_feeds_access_key_reseted: Έγινε επαναφορά στο κλειδί πρόσβασης RSS. - notice_failed_to_save_issues: "Αποτυχία αποθήκευσης {{count}} θεμα(των) από τα {{total}} επιλεγμένα: {{ids}}." + notice_failed_to_save_issues: "Αποτυχία αποθήκευσης %{count} θεμα(των) από τα %{total} επιλεγμένα: %{ids}." notice_no_issue_selected: "Κανένα θέμα δεν είναι επιλεγμένο! Παρακαλούμε, ελέγξτε τα θέματα που θέλετε να επεξεργαστείτε." notice_account_pending: "Ο λογαριασμός σας έχει δημιουργηθεί και είναι σε στάδιο έγκρισης από τον διαχειριστή." notice_default_data_loaded: Οι προεπιλεγμένες ρυθμίσεις φορτώθηκαν επιτυχώς. notice_unable_delete_version: Αδύνατον να διαγραφεί η έκδοση. - error_can_t_load_default_data: "Οι προεπιλεγμένες ρυθμίσεις δεν μπόρεσαν να φορτωθούν:: {{value}}" + error_can_t_load_default_data: "Οι προεπιλεγμένες ρυθμίσεις δεν μπόρεσαν να φορτωθούν:: %{value}" error_scm_not_found: "Η εγγραφή ή η αναθεώρηση δεν βρέθηκε στο αποθετήριο." - error_scm_command_failed: "Παρουσιάστηκε σφάλμα κατά την προσπάθεια πρόσβασης στο αποθετήριο: {{value}}" + error_scm_command_failed: "Παρουσιάστηκε σφάλμα κατά την προσπάθεια πρόσβασης στο αποθετήριο: %{value}" error_scm_annotate: "Η καταχώριση δεν υπάρχει ή δεν μπορεί να σχολιαστεί." error_issue_not_found_in_project: 'Το θέμα δεν βρέθηκε ή δεν ανήκει σε αυτό το έργο' error_no_tracker_in_project: 'Δεν υπάρχει ανιχνευτής για αυτό το έργο. Παρακαλώ ελέγξτε τις ρυθμίσεις του έργου.' error_no_default_issue_status: 'Δεν έχει οριστεί η προεπιλογή κατάστασης θεμάτων. Παρακαλώ ελέγξτε τις ρυθμίσεις σας (Μεταβείτε στην "Διαχείριση -> Κατάσταση θεμάτων").' - warning_attachments_not_saved: "{{count}} αρχείο(α) δε μπορούν να αποθηκευτούν." + warning_attachments_not_saved: "%{count} αρχείο(α) δε μπορούν να αποθηκευτούν." - mail_subject_lost_password: "Ο κωδικός σας {{value}}" + mail_subject_lost_password: "Ο κωδικός σας %{value}" mail_body_lost_password: 'Για να αλλάξετε τον κωδικό πρόσβασης, πατήστε τον ακόλουθο σύνδεσμο:' - mail_subject_register: "Ενεργοποίηση του λογαριασμού χρήστη {{value}} " + mail_subject_register: "Ενεργοποίηση του λογαριασμού χρήστη %{value} " mail_body_register: 'Για να ενεργοποιήσετε το λογαριασμό σας, επιλέξτε τον ακόλουθο σύνδεσμο:' - mail_body_account_information_external: "Μπορείτε να χρησιμοποιήσετε τον λογαριασμό {{value}} για να συνδεθείτε." + 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}}." + 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}} σφάλματα" + gui_validation_error_plural: "%{count} σφάλματα" field_name: Όνομα field_description: Περιγραφή @@ -247,7 +254,8 @@ field_attr_lastname: Ιδιότητα επωνύμου field_attr_mail: Ιδιότητα email field_onthefly: Άμεση δημιουργία χρήστη - field_done_ratio: % επιτεύχθη + field_start_date: Εκκίνηση + field_done_ratio: "% επιτεύχθη" field_auth_source: Τρόπος πιστοποίησης field_hide_mail: Απόκρυψη διεύθυνσης email field_comments: Σχόλιο @@ -302,7 +310,6 @@ setting_cross_project_issue_relations: Επιτρέψτε συσχετισμό θεμάτων σε διασταύρωση-έργων setting_issue_list_default_columns: Προκαθορισμένες εμφανιζόμενες στήλες στη λίστα θεμάτων setting_repositories_encodings: Κωδικοποίηση χαρακτήρων αποθετηρίου - setting_commit_logs_encoding: Κωδικοποίηση μηνυμάτων commit setting_emails_footer: Υποσέλιδο στα email setting_protocol: Πρωτόκολο setting_per_page_options: Αντικείμενα ανά σελίδα επιλογών @@ -389,14 +396,14 @@ label_x_projects: zero: κανένα έργο one: 1 έργο - other: "{{count}} έργα" + 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_issues_by: "Θέματα του %{value}" label_issue_added: Το θέμα προστέθηκε label_issue_updated: Το θέμα ενημερώθηκε label_document: Έγγραφο @@ -445,7 +452,7 @@ label_registered_on: Εγγράφηκε την label_activity: Δραστηριότητα label_overall_activity: Συνολική δραστηριότητα - label_user_activity: "δραστηριότητα του {{value}}" + label_user_activity: "δραστηριότητα του %{value}" label_new: Νέο label_logged_as: Σύνδεδεμένος ως label_environment: Περιβάλλον @@ -454,7 +461,7 @@ label_auth_source_new: Νέος τρόπος πιστοποίησης label_auth_source_plural: Τρόποι πιστοποίησης label_subproject_plural: Επιμέρους έργα - label_and_its_subprojects: "{{value}} και τα επιμέρους έργα του" + label_and_its_subprojects: "%{value} και τα επιμέρους έργα του" label_min_max_length: Ελάχ. - Μέγ. μήκος label_list: Λίστα label_date: Ημερομηνία @@ -465,8 +472,8 @@ label_text: Μακροσκελές κείμενο label_attribute: Ιδιότητα label_attribute_plural: Ιδιότητες - label_download: "{{count}} Μεταφόρτωση" - label_download_plural: "{{count}} Μεταφορτώσεις" + label_download: "%{count} Μεταφόρτωση" + label_download_plural: "%{count} Μεταφορτώσεις" label_no_data: Δεν υπάρχουν δεδομένα label_change_status: Αλλαγή κατάστασης label_history: Ιστορικό @@ -497,17 +504,17 @@ label_closed_issues: Κλειστό label_closed_issues_plural: Κλειστά label_x_open_issues_abbr_on_total: - zero: 0 ανοικτά / {{total}} - one: 1 ανοικτό / {{total}} - other: "{{count}} ανοικτά / {{total}}" + zero: 0 ανοικτά / %{total} + one: 1 ανοικτό / %{total} + other: "%{count} ανοικτά / %{total}" label_x_open_issues_abbr: zero: 0 ανοικτά one: 1 ανοικτό - other: "{{count}} ανοικτά" + other: "%{count} ανοικτά" label_x_closed_issues_abbr: zero: 0 κλειστά one: 1 κλειστό - other: "{{count}} κλειστά" + other: "%{count} κλειστά" label_total: Σύνολο label_permissions: Άδειες label_current_status: Τρέχουσα κατάσταση @@ -525,7 +532,7 @@ label_months_from: μηνών από label_gantt: Gantt label_internal: Εσωτερικό - label_last_changes: "Τελευταίες {{count}} αλλαγές" + label_last_changes: "Τελευταίες %{count} αλλαγές" label_change_view_all: Προβολή όλων των αλλαγών label_personalize_page: Προσαρμογή σελίδας label_comment: Σχόλιο @@ -533,7 +540,7 @@ label_x_comments: zero: δεν υπάρχουν σχόλια one: 1 σχόλιο - other: "{{count}} σχόλια" + other: "%{count} σχόλια" label_comment_add: Προσθήκη σχολίου label_comment_added: Τα σχόλια προστέθηκαν label_comment_delete: Διαγραφή σχολίων @@ -554,7 +561,7 @@ label_yesterday: χθες label_this_week: αυτή την εβδομάδα label_last_week: την προηγούμενη εβδομάδα - label_last_n_days: "τελευταίες {{count}} μέρες" + label_last_n_days: "τελευταίες %{count} μέρες" label_this_month: αυτό το μήνα label_last_month: τον προηγούμενο μήνα label_this_year: αυτό το χρόνο @@ -568,8 +575,8 @@ label_repository: Αποθετήριο label_repository_plural: Αποθετήρια label_browse: Πλοήγηση - label_modification: "{{count}} τροποποίηση" - label_modification_plural: "{{count}} τροποποιήσεις" + label_modification: "%{count} τροποποίηση" + label_modification_plural: "%{count} τροποποιήσεις" label_branch: Branch label_tag: Tag label_revision: Αναθεώρηση @@ -590,8 +597,8 @@ label_sort_lower: Μετακίνηση προς τα κάτω label_sort_lowest: Μετακίνηση στο κατώτατο μέρος label_roadmap: Χάρτης πορείας - label_roadmap_due_in: "Προθεσμία σε {{value}}" - label_roadmap_overdue: "{{value}} καθυστερημένο" + label_roadmap_due_in: "Προθεσμία σε %{value}" + label_roadmap_overdue: "%{value} καθυστερημένο" label_roadmap_no_issues: Δεν υπάρχουν θέματα για αυτή την έκδοση label_search: Αναζήτηση label_result_plural: Αποτελέσματα @@ -609,8 +616,8 @@ label_changes_details: Λεπτομέρειες όλων των αλλαγών label_issue_tracking: Ανίχνευση θεμάτων label_spent_time: Δαπανημένος χρόνος - label_f_hour: "{{value}} ώρα" - label_f_hour_plural: "{{value}} ώρες" + label_f_hour: "%{value} ώρα" + label_f_hour_plural: "%{value} ώρες" label_time_tracking: Ανίχνευση χρόνου label_change_plural: Αλλαγές label_statistics: Στατιστικά @@ -659,13 +666,13 @@ label_date_from: Από label_date_to: Έως label_language_based: Με βάση τη γλώσσα του χρήστη - label_sort_by: "Ταξινόμηση ανά {{value}}" + label_sort_by: "Ταξινόμηση ανά %{value}" label_send_test_email: Αποστολή δοκιμαστικού email - label_feeds_access_key_created_on: "το κλειδί πρόσβασης RSS δημιουργήθηκε πριν από {{value}}" + 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_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: Changesets @@ -681,7 +688,7 @@ label_registration_activation_by_email: ενεργοποίηση λογαριασμού με email label_registration_manual_activation: χειροκίνητη ενεργοποίηση λογαριασμού label_registration_automatic_activation: αυτόματη ενεργοποίηση λογαριασμού - label_display_per_page: "Ανά σελίδα: {{value}}" + label_display_per_page: "Ανά σελίδα: %{value}" label_age: Ηλικία label_change_properties: Αλλαγή ιδιοτήτων label_general: Γενικά @@ -704,7 +711,7 @@ label_sort: Ταξινόμηση label_ascending: Αύξουσα label_descending: Φθίνουσα - label_date_from_to: Από {{start}} έως {{end}} + label_date_from_to: Από %{start} έως %{end} label_wiki_content_added: Η σελίδα Wiki προστέθηκε label_wiki_content_updated: Η σελίδα Wiki ενημερώθηκε @@ -756,48 +763,48 @@ text_regexp_info: eg. ^[A-Z0-9]+$ text_min_max_length_info: 0 σημαίνει ότι δεν υπάρχουν περιορισμοί text_project_destroy_confirmation: Είστε σίγουροι ότι θέλετε να διαγράψετε αυτό το έργο και τα σχετικά δεδομένα του; - text_subprojects_destroy_warning: "Επίσης το(α) επιμέρους έργο(α): {{value}} θα διαγραφούν." + text_subprojects_destroy_warning: "Επίσης το(α) επιμέρους έργο(α): %{value} θα διαγραφούν." text_workflow_edit: Επιλέξτε ένα ρόλο και έναν ανιχνευτή για να επεξεργαστείτε τη ροή εργασίας text_are_you_sure: Είστε σίγουρος ; text_tip_issue_begin_day: καθήκοντα που ξεκινάνε σήμερα text_tip_issue_end_day: καθήκοντα που τελειώνουν σήμερα text_tip_issue_begin_end_day: καθήκοντα που ξεκινάνε και τελειώνουν σήμερα text_project_identifier_info: 'Επιτρέπονται μόνο μικρά πεζά γράμματα (a-z), αριθμοί και παύλες.
    Μετά την αποθήκευση, το αναγνωριστικό δεν μπορεί να αλλάξει.' - text_caracters_maximum: "μέγιστος αριθμός {{count}} χαρακτήρες." - text_caracters_minimum: "Πρέπει να περιέχει τουλάχιστον {{count}} χαρακτήρες." - text_length_between: "Μήκος μεταξύ {{min}} και {{max}} χαρακτήρες." + text_caracters_maximum: "μέγιστος αριθμός %{count} χαρακτήρες." + text_caracters_minimum: "Πρέπει να περιέχει τουλάχιστον %{count} χαρακτήρες." + text_length_between: "Μήκος μεταξύ %{min} και %{max} χαρακτήρες." text_tracker_no_workflow: Δεν έχει οριστεί ροή εργασίας για αυτό τον ανιχνευτή text_unallowed_characters: Μη επιτρεπόμενοι χαρακτήρες text_comma_separated: Επιτρέπονται πολλαπλές τιμές (χωρισμένες με κόμμα). text_issues_ref_in_commit_messages: Αναφορά και καθορισμός θεμάτων σε μηνύματα commit - text_issue_added: "Το θέμα {{id}} παρουσιάστηκε από τον {{author}}." - text_issue_updated: "Το θέμα {{id}} ενημερώθηκε από τον {{author}}." + text_issue_added: "Το θέμα %{id} παρουσιάστηκε από τον %{author}." + text_issue_updated: "Το θέμα %{id} ενημερώθηκε από τον %{author}." text_wiki_destroy_confirmation: Είστε σίγουροι ότι θέλετε να διαγράψετε αυτό το wiki και όλο το περιεχόμενο του ; - text_issue_category_destroy_question: "Κάποια θέματα ({{count}}) έχουν εκχωρηθεί σε αυτή την κατηγορία. Τι θέλετε να κάνετε ;" + 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: "Εφαρμόστηκε στο changeset {{value}}." + text_status_changed_by_changeset: "Εφαρμόστηκε στο changeset %{value}." text_issues_destroy_confirmation: 'Είστε σίγουρος ότι θέλετε να διαγράψετε το επιλεγμένο θέμα(τα);' text_select_project_modules: 'Επιλέξτε ποιες μονάδες θα ενεργοποιήσετε για αυτό το έργο:' text_default_administrator_account_changed: Ο προκαθορισμένος λογαριασμός του διαχειριστή άλλαξε text_file_repository_writable: Εγγράψιμος κατάλογος συνημμένων text_plugin_assets_writable: Εγγράψιμος κατάλογος plugin assets text_rmagick_available: Διαθέσιμο RMagick (προαιρετικό) - text_destroy_time_entries_question: "{{hours}} δαπανήθηκαν σχετικά με τα θέματα που πρόκειται να διαγράψετε. Τι θέλετε να κάνετε ;" + 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_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: 'Μία γραμμή για κάθε τιμή' - text_wiki_page_destroy_question: "Αυτή η σελίδα έχει {{descendants}} σελίδες τέκνων και απογόνων. Τι θέλετε να κάνετε ;" + text_wiki_page_destroy_question: "Αυτή η σελίδα έχει %{descendants} σελίδες τέκνων και απογόνων. Τι θέλετε να κάνετε ;" text_wiki_page_nullify_children: "Διατηρήστε τις σελίδες τέκνων ως σελίδες root" text_wiki_page_destroy_children: "Διαγράψτε όλες τις σελίδες τέκνων και των απογόνων τους" text_wiki_page_reassign_children: "Επανεκχώριση των σελίδων τέκνων στη γονική σελίδα" @@ -827,14 +834,14 @@ enumeration_issue_priorities: Προτεραιότητα θέματος enumeration_doc_categories: Κατηγορία εγγράφων enumeration_activities: Δραστηριότητες (κατακερματισμός χρόνου) - text_journal_changed: "{{label}} άλλαξε από {{old}} σε {{new}}" - text_journal_set_to: "{{label}} ορίζεται σε {{value}}" - text_journal_deleted: "{{label}} διαγράφηκε ({{old}})" + 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}} added" + text_journal_added: "%{label} %{value} added" field_active: Active enumeration_system_activity: System Activity permission_delete_issue_watchers: Delete watchers @@ -869,9 +876,9 @@ setting_start_of_week: Start calendars on permission_view_issues: View Issues label_display_used_statuses_only: Only display statuses that are used by this tracker - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_api_access_key: API access key - label_api_access_key_created_on: API access key created {{value}} ago + label_api_access_key_created_on: API access key created %{value} ago label_feeds_access_key: RSS access key notice_api_access_key_reseted: Your API access key was reset. setting_rest_api_enabled: Enable REST web service @@ -898,12 +905,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -911,7 +918,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -922,8 +929,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Κωδικοποίηση μηνυμάτων commit + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/en-GB.yml.svn-base --- a/config/locales/.svn/text-base/en-GB.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/en-GB.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -16,7 +16,10 @@ 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 ] + order: + - :year + - :month + - :day time: formats: @@ -32,37 +35,37 @@ half_a_minute: "half a minute" less_than_x_seconds: one: "less than 1 second" - other: "less than {{count}} seconds" + other: "less than %{count} seconds" x_seconds: one: "1 second" - other: "{{count}} seconds" + other: "%{count} seconds" less_than_x_minutes: one: "less than a minute" - other: "less than {{count}} minutes" + other: "less than %{count} minutes" x_minutes: one: "1 minute" - other: "{{count}} minutes" + other: "%{count} minutes" about_x_hours: one: "about 1 hour" - other: "about {{count}} hours" + other: "about %{count} hours" x_days: one: "1 day" - other: "{{count}} days" + other: "%{count} days" about_x_months: one: "about 1 month" - other: "about {{count}} months" + other: "about %{count} months" x_months: one: "1 month" - other: "{{count}} months" + other: "%{count} months" about_x_years: one: "about 1 year" - other: "about {{count}} years" + other: "about %{count} years" over_x_years: one: "over 1 year" - other: "over {{count}} years" + other: "over %{count} years" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" number: format: @@ -74,6 +77,7 @@ format: format: "%u%n" unit: "£" + human: format: delimiter: "" @@ -98,6 +102,10 @@ 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" @@ -106,23 +114,23 @@ 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)" + 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}}" + 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" + cant_link_an_issue_with_a_descendant: "An issue cannot be linked to one of its subtasks" actionview_instancetag_blank_option: Please select @@ -134,7 +142,7 @@ general_csv_separator: ',' general_csv_decimal_separator: '.' general_csv_encoding: ISO-8859-1 - general_pdf_encoding: ISO-8859-1 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' notice_account_updated: Account was successfully updated. @@ -153,56 +161,64 @@ 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_not_authorized_archived_project: The project you're trying to access has been archived. + 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_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}." + notice_failed_to_save_members: "Failed to save member(s): %{errors}." 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_unable_delete_time_entry: Unable to delete time log entry. notice_issue_done_ratios_updated: Issue done ratios updated. + notice_gantt_chart_truncated: "The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})" - error_can_t_load_default_data: "Default configuration could not be loaded: {{value}}" + 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_scm_command_failed: "An error occurred when trying to access the repository: %{value}" + error_scm_annotate: "The entry does not exist or cannot 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_can_not_delete_custom_field: Unable to delete custom field + error_can_not_delete_tracker: "This tracker contains issues and cannot be deleted." + error_can_not_remove_role: "This role is in use and cannot be deleted." + error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version cannot be reopened' + error_can_not_archive_project: This project cannot 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)' + error_unable_delete_issue_status: 'Unable to delete issue status' + error_unable_to_connect: "Unable to connect (%{value})" + warning_attachments_not_saved: "%{count} file(s) could not be saved." - warning_attachments_not_saved: "{{count}} file(s) could not be saved." - - mail_subject_lost_password: "Your {{value}} password" + 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_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_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}}." + 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" + 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_firstname: First name + field_lastname: Last name field_mail: Email field_filename: File field_filesize: Size @@ -232,6 +248,7 @@ field_priority: Priority field_fixed_version: Target version field_user: User + field_principal: Principal field_role: Role field_homepage: Homepage field_is_public: Public @@ -258,7 +275,7 @@ field_attr_mail: Email attribute field_onthefly: On-the-fly user creation field_start_date: Start date - field_done_ratio: % Done + field_done_ratio: "% Done" field_auth_source: Authentication mode field_hide_mail: Hide my email address field_comments: Comment @@ -276,6 +293,7 @@ field_redirect_existing_links: Redirect existing links field_estimated_hours: Estimated time field_column_names: Columns + field_time_entries: Log time field_time_zone: Time zone field_searchable: Searchable field_default_value: Default value @@ -287,6 +305,12 @@ field_content: Content field_group_by: Group results by field_sharing: Sharing + field_parent_issue: Parent task + field_member_of_group: "Assignee's group" + 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 @@ -314,7 +338,7 @@ 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_header: Emails header setting_emails_footer: Emails footer setting_protocol: Protocol setting_per_page_options: Objects per page options @@ -341,6 +365,10 @@ setting_start_of_week: Start calendars on setting_rest_api_enabled: Enable REST web service setting_cache_formatted_text: Cache formatted text + setting_default_notification_option: Default notification option + setting_commit_logtime_enabled: Enable time logging + setting_commit_logtime_activity_id: Activity for logged time + setting_gantt_items_limit: Maximum number of items displayed on the gantt chart permission_add_project: Create project permission_add_subprojects: Create subprojects @@ -388,7 +416,7 @@ permission_browse_repository: Browse repository permission_view_changesets: View changesets permission_commit_access: Commit access - permission_manage_boards: Manage boards + permission_manage_boards: Manage forums permission_view_messages: View messages permission_add_messages: Post messages permission_edit_messages: Edit messages @@ -396,6 +424,7 @@ permission_delete_messages: Delete messages permission_delete_own_messages: Delete own messages permission_export_wiki_pages: Export wiki pages + permission_manage_subtasks: Manage subtasks project_module_issue_tracking: Issue tracking project_module_time_tracking: Time tracking @@ -404,7 +433,9 @@ project_module_files: Files project_module_wiki: Wiki project_module_repository: Repository - project_module_boards: Boards + project_module_boards: Forums + project_module_calendar: Calendar + project_module_gantt: Gantt label_user: User label_user_plural: Users @@ -416,14 +447,14 @@ label_x_projects: zero: no projects one: 1 project - other: "{{count}} projects" + 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_issues_by: "Issues by %{value}" label_issue_added: Issue added label_issue_updated: Issue updated label_document: Document @@ -434,6 +465,8 @@ label_role_plural: Roles label_role_new: New role label_role_and_permissions: Roles and permissions + label_role_anonymous: Anonymous + label_role_non_member: Non member label_member: Member label_member_new: New member label_member_plural: Members @@ -462,6 +495,7 @@ label_my_page: My page label_my_account: My account label_my_projects: My projects + label_my_page_block: My page block label_administration: Administration label_login: Sign in label_logout: Sign out @@ -472,7 +506,7 @@ label_registered_on: Registered on label_activity: Activity label_overall_activity: Overall activity - label_user_activity: "{{value}}'s activity" + label_user_activity: "%{value}'s activity" label_new: New label_logged_as: Logged in as label_environment: Environment @@ -482,7 +516,7 @@ label_auth_source_plural: Authentication modes label_subproject_plural: Subprojects label_subproject_new: New subproject - label_and_its_subprojects: "{{value}} and its subprojects" + label_and_its_subprojects: "%{value} and its subprojects" label_min_max_length: Min - Max length label_list: List label_date: Date @@ -493,8 +527,8 @@ label_text: Long text label_attribute: Attribute label_attribute_plural: Attributes - label_download: "{{count}} Download" - label_download_plural: "{{count}} Downloads" + label_download: "%{count} Download" + label_download_plural: "%{count} Downloads" label_no_data: No data to display label_change_status: Change status label_history: History @@ -511,6 +545,7 @@ label_news_latest: Latest news label_news_view_all: View all news label_news_added: News added + label_news_comment_added: Comment added to a news label_settings: Settings label_overview: Overview label_version: Version @@ -526,17 +561,17 @@ 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}}" + 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" + other: "%{count} open" label_x_closed_issues_abbr: zero: 0 closed one: 1 closed - other: "{{count}} closed" + other: "%{count} closed" label_total: Total label_permissions: Permissions label_current_status: Current status @@ -554,7 +589,7 @@ label_months_from: months from label_gantt: Gantt label_internal: Internal - label_last_changes: "last {{count}} changes" + label_last_changes: "last %{count} changes" label_change_view_all: View all changes label_personalize_page: Personalise this page label_comment: Comment @@ -562,13 +597,14 @@ label_x_comments: zero: no comments one: 1 comment - other: "{{count}} comments" + 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_my_queries: My custom queries label_filter_add: Add filter label_filter_plural: Filters label_equals: is @@ -583,7 +619,7 @@ label_yesterday: yesterday label_this_week: this week label_last_week: last week - label_last_n_days: "last {{count}} days" + label_last_n_days: "last %{count} days" label_this_month: this month label_last_month: last month label_this_year: this year @@ -597,13 +633,13 @@ label_repository: Repository label_repository_plural: Repositories label_browse: Browse - label_modification: "{{count}} change" - label_modification_plural: "{{count}} changes" + 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_revision_id: "Revision %{value}" label_associated_revisions: Associated revisions label_added: added label_modified: modified @@ -620,8 +656,8 @@ 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_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 @@ -639,8 +675,9 @@ 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_overall_spent_time: Overall 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 @@ -691,15 +728,15 @@ label_date_from: From label_date_to: To label_language_based: Based on user's language - label_sort_by: "Sort by {{value}}" + 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_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_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 @@ -712,11 +749,14 @@ 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_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_only_owner: "Only for things I am the owner of" 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_display_per_page: "Per page: %{value}" label_age: Age label_change_properties: Change properties label_general: General @@ -739,7 +779,7 @@ label_sort: Sort label_ascending: Ascending label_descending: Descending - label_date_from_to: From {{start}} to {{end}} + 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 @@ -758,18 +798,26 @@ 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" + label_api_access_key_created_on: "API access key created %{value} ago" + label_profile: Profile + label_subtask_plural: Subtasks + label_project_copy_notifications: Send email notifications during the project copy + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" button_login: Login button_submit: Submit button_save: Save button_check_all: Check all button_uncheck_all: Uncheck all + button_collapse_all: Collapse all + button_expand_all: Expand all button_delete: Delete button_create: Create button_create_and_continue: Create and continue button_test: Test button_edit: Edit + button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}" button_add: Add button_change: Change button_apply: Apply @@ -818,57 +866,63 @@ 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_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_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: 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.
    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_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.
    Once saved, the identifier cannot 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_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_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_status_changed_by_changeset: "Applied in changeset %{value}." + text_time_logged_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_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_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' - text_wiki_page_destroy_question: "This page has {{descendants}} child page(s) and descendant(s). What do you want to do?" + 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_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 @@ -896,38 +950,32 @@ 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 + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Commit messages encoding + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/en.yml.svn-base --- a/config/locales/.svn/text-base/en.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/en.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -17,7 +17,10 @@ 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 ] + order: + - :year + - :month + - :day time: formats: @@ -33,44 +36,44 @@ half_a_minute: "half a minute" less_than_x_seconds: one: "less than 1 second" - other: "less than {{count}} seconds" + other: "less than %{count} seconds" x_seconds: one: "1 second" - other: "{{count}} seconds" + other: "%{count} seconds" less_than_x_minutes: one: "less than a minute" - other: "less than {{count}} minutes" + other: "less than %{count} minutes" x_minutes: one: "1 minute" - other: "{{count}} minutes" + other: "%{count} minutes" about_x_hours: one: "about 1 hour" - other: "about {{count}} hours" + other: "about %{count} hours" x_days: one: "1 day" - other: "{{count}} days" + other: "%{count} days" about_x_months: one: "about 1 month" - other: "about {{count}} months" + other: "about %{count} months" x_months: one: "1 month" - other: "{{count}} months" + other: "%{count} months" about_x_years: one: "about 1 year" - other: "about {{count}} years" + other: "about %{count} years" over_x_years: one: "over 1 year" - other: "over {{count}} years" + other: "over %{count} years" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" number: - # Default format for numbers format: separator: "." delimiter: "" precision: 3 + human: format: delimiter: "" @@ -95,6 +98,10 @@ 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" @@ -103,23 +110,23 @@ 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)" + 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}}" + 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" + cant_link_an_issue_with_a_descendant: "An issue cannot be linked to one of its subtasks" actionview_instancetag_blank_option: Please select @@ -131,7 +138,7 @@ general_csv_separator: ',' general_csv_decimal_separator: '.' general_csv_encoding: ISO-8859-1 - general_pdf_encoding: ISO-8859-1 + general_pdf_encoding: UTF-8 general_first_day_of_week: '7' notice_account_updated: Account was successfully updated. @@ -151,62 +158,63 @@ notice_locking_conflict: Data has been updated by another user. notice_not_authorized: You are not authorized to access this page. notice_not_authorized_archived_project: The project you're trying to access has been archived. - notice_email_sent: "An email was sent to {{value}}" - notice_email_error: "An error occurred while sending mail ({{value}})" + 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_failed_to_save_members: "Failed to save member(s): {{errors}}." + notice_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}." + notice_failed_to_save_members: "Failed to save member(s): %{errors}." 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_unable_delete_time_entry: Unable to delete time log entry. notice_issue_done_ratios_updated: Issue done ratios updated. + notice_gantt_chart_truncated: "The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})" - error_can_t_load_default_data: "Default configuration could not be loaded: {{value}}" + 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_scm_command_failed: "An error occurred when trying to access the repository: %{value}" + error_scm_annotate: "The entry does not exist or cannot 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_delete_custom_field: Unable to delete custom field - error_can_not_delete_tracker: "This tracker contains issues and can't be deleted." - error_can_not_remove_role: "This role is in use and can not be deleted." - 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_can_not_delete_tracker: "This tracker contains issues and cannot be deleted." + error_can_not_remove_role: "This role is in use and cannot be deleted." + error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version cannot be reopened' + error_can_not_archive_project: This project cannot 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)' error_unable_delete_issue_status: 'Unable to delete issue status' - error_unable_to_connect: "Unable to connect ({{value}})" - warning_attachments_not_saved: "{{count}} file(s) could not be saved." + error_unable_to_connect: "Unable to connect (%{value})" + warning_attachments_not_saved: "%{count} file(s) could not be saved." - mail_subject_lost_password: "Your {{value}} password" + 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_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_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}}." + 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" + 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_firstname: First name + field_lastname: Last name field_mail: Email field_filename: File field_filesize: Size @@ -263,7 +271,7 @@ field_attr_mail: Email attribute field_onthefly: On-the-fly user creation field_start_date: Start date - field_done_ratio: % Done + field_done_ratio: "% Done" field_auth_source: Authentication mode field_hide_mail: Hide my email address field_comments: Comment @@ -298,7 +306,16 @@ 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" + field_issues_visibility: Issues visibility + field_is_private: Private + field_commit_logs_encoding: Commit messages encoding + field_scm_path_encoding: Path encoding + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvsroot: CVSROOT + field_cvs_module: Module + setting_app_title: Application title setting_app_subtitle: Application subtitle setting_welcome_text: Welcome text @@ -325,7 +342,6 @@ 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_header: Emails header setting_emails_footer: Emails footer setting_protocol: Protocol @@ -354,6 +370,9 @@ setting_rest_api_enabled: Enable REST web service setting_cache_formatted_text: Cache formatted text setting_default_notification_option: Default notification option + setting_commit_logtime_enabled: Enable time logging + setting_commit_logtime_activity_id: Activity for logged time + setting_gantt_items_limit: Maximum number of items displayed on the gantt chart permission_add_project: Create project permission_add_subprojects: Create subprojects @@ -367,6 +386,8 @@ permission_add_issues: Add issues permission_edit_issues: Edit issues permission_manage_issue_relations: Manage issue relations + permission_set_issues_private: Set issues public or private + permission_set_own_issues_private: Set own issues public or private permission_add_issue_notes: Add notes permission_edit_issue_notes: Edit notes permission_edit_own_issue_notes: Edit own notes @@ -401,7 +422,7 @@ permission_browse_repository: Browse repository permission_view_changesets: View changesets permission_commit_access: Commit access - permission_manage_boards: Manage boards + permission_manage_boards: Manage forums permission_view_messages: View messages permission_add_messages: Post messages permission_edit_messages: Edit messages @@ -418,7 +439,7 @@ project_module_files: Files project_module_wiki: Wiki project_module_repository: Repository - project_module_boards: Boards + project_module_boards: Forums project_module_calendar: Calendar project_module_gantt: Gantt @@ -432,16 +453,19 @@ label_x_projects: zero: no projects one: 1 project - other: "{{count}} projects" + 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_issues_by: "Issues by %{value}" label_issue_added: Issue added label_issue_updated: Issue updated + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated label_document: Document label_document_new: New document label_document_plural: Documents @@ -450,6 +474,8 @@ label_role_plural: Roles label_role_new: New role label_role_and_permissions: Roles and permissions + label_role_anonymous: Anonymous + label_role_non_member: Non member label_member: Member label_member_new: New member label_member_plural: Members @@ -489,7 +515,7 @@ label_registered_on: Registered on label_activity: Activity label_overall_activity: Overall activity - label_user_activity: "{{value}}'s activity" + label_user_activity: "%{value}'s activity" label_new: New label_logged_as: Logged in as label_environment: Environment @@ -499,7 +525,7 @@ label_auth_source_plural: Authentication modes label_subproject_plural: Subprojects label_subproject_new: New subproject - label_and_its_subprojects: "{{value}} and its subprojects" + label_and_its_subprojects: "%{value} and its subprojects" label_min_max_length: Min - Max length label_list: List label_date: Date @@ -510,8 +536,8 @@ label_text: Long text label_attribute: Attribute label_attribute_plural: Attributes - label_download: "{{count}} Download" - label_download_plural: "{{count}} Downloads" + label_download: "%{count} Download" + label_download_plural: "%{count} Downloads" label_no_data: No data to display label_change_status: Change status label_history: History @@ -528,6 +554,7 @@ label_news_latest: Latest news label_news_view_all: View all news label_news_added: News added + label_news_comment_added: Comment added to a news label_settings: Settings label_overview: Overview label_version: Version @@ -543,17 +570,17 @@ 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}}" + 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" + other: "%{count} open" label_x_closed_issues_abbr: zero: 0 closed one: 1 closed - other: "{{count}} closed" + other: "%{count} closed" label_total: Total label_permissions: Permissions label_current_status: Current status @@ -571,7 +598,7 @@ label_months_from: months from label_gantt: Gantt label_internal: Internal - label_last_changes: "last {{count}} changes" + label_last_changes: "last %{count} changes" label_change_view_all: View all changes label_personalize_page: Personalize this page label_comment: Comment @@ -579,13 +606,14 @@ label_x_comments: zero: no comments one: 1 comment - other: "{{count}} comments" + 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_my_queries: My custom queries label_filter_add: Add filter label_filter_plural: Filters label_equals: is @@ -600,7 +628,7 @@ label_yesterday: yesterday label_this_week: this week label_last_week: last week - label_last_n_days: "last {{count}} days" + label_last_n_days: "last %{count} days" label_this_month: this month label_last_month: last month label_this_year: this year @@ -614,13 +642,13 @@ label_repository: Repository label_repository_plural: Repositories label_browse: Browse - label_modification: "{{count}} change" - label_modification_plural: "{{count}} changes" + 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_revision_id: "Revision %{value}" label_associated_revisions: Associated revisions label_added: added label_modified: modified @@ -637,8 +665,8 @@ 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_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 @@ -657,8 +685,8 @@ label_issue_tracking: Issue tracking label_spent_time: Spent time label_overall_spent_time: Overall spent time - label_f_hour: "{{value}} hour" - label_f_hour_plural: "{{value}} hours" + label_f_hour: "%{value} hour" + label_f_hour_plural: "%{value} hours" label_time_tracking: Time tracking label_change_plural: Changes label_statistics: Statistics @@ -709,21 +737,22 @@ label_date_from: From label_date_to: To label_language_based: Based on user's language - label_sort_by: "Sort by {{value}}" + 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_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_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_bulk_edit_selected_time_entries: Bulk edit selected time entries label_theme: Theme label_default: Default label_search_titles_only: Search titles only @@ -737,7 +766,7 @@ 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_display_per_page: "Per page: %{value}" label_age: Age label_change_properties: Change properties label_general: General @@ -760,7 +789,7 @@ label_sort: Sort label_ascending: Ascending label_descending: Descending - label_date_from_to: From {{start}} to {{end}} + 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 @@ -779,24 +808,32 @@ 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" + label_api_access_key_created_on: "API access key created %{value} ago" label_profile: Profile label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy label_principal_search: "Search for user or group:" label_user_search: "Search for user:" - + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_issues_visibility_all: All issues + label_issues_visibility_public: All non private issues + label_issues_visibility_own: Issues created by or assigned to the user + label_git_report_last_commit: Report last commit for files and directories + button_login: Login button_submit: Submit button_save: Save button_check_all: Check all button_uncheck_all: Uncheck all + button_collapse_all: Collapse all + button_expand_all: Expand all button_delete: Delete button_create: Create button_create_and_continue: Create and continue button_test: Test button_edit: Edit - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}" button_add: Add button_change: Change button_apply: Apply @@ -830,76 +867,88 @@ 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_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_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_set_to: "{{label}} set to {{value}}" - text_journal_deleted: "{{label}} deleted ({{old}})" - text_journal_added: "{{label}} {{value}} added" + 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.
    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_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.
    Once saved, the identifier cannot 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_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_status_changed_by_changeset: "Applied in changeset %{value}." + text_time_logged_by_changeset: "Applied in changeset %{value}." + text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s)?' + text_issues_destroy_descendants_confirmation: "This will also delete %{count} subtask(s)." + text_time_entries_destroy_confirmation: 'Are you sure you want to delete the selected time entr(y/ies)?' 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_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_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' - text_wiki_page_destroy_question: "This page has {{descendants}} child page(s) and descendant(s). What do you want to do?" + 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_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." + text_scm_path_encoding_note: "Default: UTF-8" + text_git_repository_note: "Bare and local repository (e.g. /gitrepo, c:\gitrepo)" + text_mercurial_repository_note: "Local repository (e.g. /hgrepo, c:\hgrepo)" + text_scm_command: Command + text_scm_command_version: Version + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. + default_role_manager: Manager default_role_developer: Developer default_role_reporter: Reporter @@ -921,9 +970,8 @@ 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 - diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/es.yml.svn-base --- a/config/locales/.svn/text-base/es.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/es.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -66,44 +66,44 @@ half_a_minute: "medio minuto" less_than_x_seconds: one: "menos de 1 segundo" - other: "menos de {{count}} segundos" + other: "menos de %{count} segundos" x_seconds: one: "1 segundo" - other: "{{count}} segundos" + other: "%{count} segundos" less_than_x_minutes: one: "menos de 1 minuto" - other: "menos de {{count}} minutos" + other: "menos de %{count} minutos" x_minutes: one: "1 minuto" - other: "{{count}} minutos" + other: "%{count} minutos" about_x_hours: one: "alrededor de 1 hora" - other: "alrededor de {{count}} horas" + other: "alrededor de %{count} horas" x_days: one: "1 día" - other: "{{count}} días" + other: "%{count} días" about_x_months: one: "alrededor de 1 mes" - other: "alrededor de {{count}} meses" + other: "alrededor de %{count} meses" x_months: one: "1 mes" - other: "{{count}} meses" + other: "%{count} meses" about_x_years: one: "alrededor de 1 año" - other: "alrededor de {{count}} años" + other: "alrededor de %{count} años" over_x_years: one: "más de 1 año" - other: "más de {{count}} años" + other: "más de %{count} años" almost_x_years: one: "casi 1 año" - other: "casi {{count}} años" + other: "casi %{count} años" activerecord: errors: template: header: - one: "no se pudo guardar este {{model}} porque se encontró 1 error" - other: "no se pudo guardar este {{model}} porque se encontraron {{count}} errores" + one: "no se pudo guardar este %{model} porque se encontró 1 error" + other: "no se pudo guardar este %{model} porque se encontraron %{count} errores" # The variable :count is also available body: "Se encontraron problemas con los siguientes campos:" @@ -117,16 +117,16 @@ accepted: "debe ser aceptado" empty: "no puede estar vacío" blank: "no puede estar en blanco" - too_long: "es demasiado largo ({{count}} caracteres máximo)" - too_short: "es demasiado corto ({{count}} caracteres mínimo)" - wrong_length: "no tiene la longitud correcta ({{count}} caracteres exactos)" + too_long: "es demasiado largo (%{count} caracteres máximo)" + too_short: "es demasiado corto (%{count} caracteres mínimo)" + wrong_length: "no tiene la longitud correcta (%{count} caracteres exactos)" taken: "ya está en uso" not_a_number: "no es un número" - greater_than: "debe ser mayor que {{count}}" - greater_than_or_equal_to: "debe ser mayor que o igual a {{count}}" - equal_to: "debe ser igual a {{count}}" - less_than: "debe ser menor que {{count}}" - less_than_or_equal_to: "debe ser menor que o igual a {{count}}" + greater_than: "debe ser mayor que %{count}" + greater_than_or_equal_to: "debe ser mayor que o igual a %{count}" + equal_to: "debe ser igual a %{count}" + less_than: "debe ser menor que %{count}" + less_than_or_equal_to: "debe ser menor que o igual a %{count}" odd: "debe ser impar" even: "debe ser par" greater_than_start_date: "debe ser posterior a la fecha de comienzo" @@ -159,7 +159,10 @@ month_names: [~, Enero, Febrero, Marzo, Abril, Mayo, Junio, Julio, Agosto, Setiembre, Octubre, Noviembre, Diciembre] abbr_month_names: [~, Ene, Feb, Mar, Abr, May, Jun, Jul, Ago, Set, Oct, Nov, Dic] # Used in date_select and datime_select. - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -239,10 +242,10 @@ enumeration_activities: Actividades (tiempo dedicado) enumeration_doc_categories: Categorías del documento enumeration_issue_priorities: Prioridad de las peticiones - error_can_t_load_default_data: "No se ha podido cargar la configuración por defecto: {{value}}" + error_can_t_load_default_data: "No se ha podido cargar la configuración por defecto: %{value}" error_issue_not_found_in_project: 'La petición no se encuentra o no está asociada a este proyecto' error_scm_annotate: "No existe la entrada o no ha podido ser anotada" - error_scm_command_failed: "Se produjo un error al acceder al repositorio: {{value}}" + error_scm_command_failed: "Se produjo un error al acceder al repositorio: %{value}" error_scm_not_found: "La entrada y/o la revisión no existe en el repositorio." field_account: Cuenta field_activity: Actividad @@ -264,7 +267,7 @@ field_default_value: Estado por defecto field_delay: Retraso field_description: Descripción - field_done_ratio: % Realizado + field_done_ratio: "% Realizado" field_downloads: Descargas field_due_date: Fecha fin field_effective_date: Fecha @@ -313,6 +316,7 @@ field_role: Perfil field_searchable: Incluir en las búsquedas field_spent_on: Fecha + field_start_date: Fecha de inicio field_start_page: Página principal field_status: Estado field_subject: Tema @@ -332,25 +336,25 @@ general_csv_separator: ';' general_first_day_of_week: '1' general_lang_name: 'Español' - general_pdf_encoding: ISO-8859-15 + general_pdf_encoding: UTF-8 general_text_No: 'No' general_text_Yes: 'Sí' general_text_no: 'no' general_text_yes: 'sí' gui_validation_error: 1 error - gui_validation_error_plural: "{{count}} errores" + gui_validation_error_plural: "%{count} errores" label_activity: Actividad label_add_another_file: Añadir otro fichero label_add_note: Añadir una nota label_added: añadido - label_added_time_by: "Añadido por {{author}} hace {{age}}" + label_added_time_by: "Añadido por %{author} hace %{age}" label_administration: Administración label_age: Edad label_ago: hace label_all: todos label_all_time: todo el tiempo label_all_words: Todas las palabras - label_and_its_subprojects: "{{value}} y proyectos secundarios" + label_and_its_subprojects: "%{value} y proyectos secundarios" label_applied_status: Aplicar estado label_assigned_to_me_issues: Peticiones que me están asignadas label_associated_revisions: Revisiones asociadas @@ -383,17 +387,17 @@ label_closed_issues: cerrada label_closed_issues_plural: cerradas label_x_open_issues_abbr_on_total: - zero: 0 abiertas / {{total}} - one: 1 abierta / {{total}} - other: "{{count}} abiertas / {{total}}" + zero: 0 abiertas / %{total} + one: 1 abierta / %{total} + other: "%{count} abiertas / %{total}" label_x_open_issues_abbr: zero: 0 abiertas one: 1 abierta - other: "{{count}} abiertas" + other: "%{count} abiertas" label_x_closed_issues_abbr: zero: 0 cerradas one: 1 cerrada - other: "{{count}} cerradas" + other: "%{count} cerradas" label_comment: Comentario label_comment_add: Añadir un comentario label_comment_added: Comentario añadido @@ -402,7 +406,7 @@ label_x_comments: zero: sin comentarios one: 1 comentario - other: "{{count}} comentarios" + other: "%{count} comentarios" label_commits_per_author: Commits por autor label_commits_per_month: Commits por mes label_confirmation: Confirmación @@ -426,13 +430,13 @@ label_diff_inline: en línea label_diff_side_by_side: cara a cara label_disabled: deshabilitado - label_display_per_page: "Por página: {{value}}" + label_display_per_page: "Por página: %{value}" label_document: Documento label_document_added: Documento añadido label_document_new: Nuevo documento label_document_plural: Documentos - label_download: "{{count}} Descarga" - label_download_plural: "{{count}} Descargas" + label_download: "%{count} Descarga" + label_download_plural: "%{count} Descargas" label_downloads_abbr: D/L label_duplicated_by: duplicada por label_duplicates: duplicada de @@ -444,10 +448,10 @@ label_equals: igual label_example: Ejemplo label_export_to: 'Exportar a:' - label_f_hour: "{{value}} hora" - label_f_hour_plural: "{{value}} horas" + label_f_hour: "%{value} hora" + label_f_hour_plural: "%{value} horas" label_feed_plural: Feeds - label_feeds_access_key_created_on: "Clave de acceso por RSS creada hace {{value}}" + label_feeds_access_key_created_on: "Clave de acceso por RSS creada hace %{value}" label_file_added: Fichero añadido label_file_plural: Archivos label_filter_add: Añadir el filtro @@ -484,13 +488,13 @@ label_issue_updated: Petición actualizada label_issue_view_all: Ver todas las peticiones label_issue_watchers: Seguidores - label_issues_by: "Peticiones por {{value}}" + label_issues_by: "Peticiones por %{value}" label_jump_to_a_project: Ir al proyecto... label_language_based: Basado en el idioma - label_last_changes: "últimos {{count}} cambios" + label_last_changes: "últimos %{count} cambios" label_last_login: Última conexión label_last_month: último mes - label_last_n_days: "últimos {{count}} días" + label_last_n_days: "últimos %{count} días" label_last_week: última semana label_latest_revision: Última revisión label_latest_revision_plural: Últimas revisiones @@ -511,8 +515,8 @@ label_message_plural: Mensajes label_message_posted: Mensaje añadido label_min_max_length: Longitud mín - máx - label_modification: "{{count}} modificación" - label_modification_plural: "{{count}} modificaciones" + label_modification: "%{count} modificación" + label_modification_plural: "%{count} modificaciones" label_modified: modificado label_module_plural: Módulos label_month: Mes @@ -563,7 +567,7 @@ label_x_projects: zero: sin proyectos one: 1 proyecto - other: "{{count}} proyectos" + other: "%{count} proyectos" label_public_projects: Proyectos públicos label_query: Consulta personalizada label_query_new: Nueva consulta @@ -590,9 +594,9 @@ label_revision: Revisión label_revision_plural: Revisiones label_roadmap: Planificación - label_roadmap_due_in: "Finaliza en {{value}}" + label_roadmap_due_in: "Finaliza en %{value}" label_roadmap_no_issues: No hay peticiones para esta versión - label_roadmap_overdue: "{{value}} tarde" + label_roadmap_overdue: "%{value} tarde" label_role: Perfil label_role_and_permissions: Perfiles y permisos label_role_new: Nuevo perfil @@ -604,7 +608,7 @@ label_send_test_email: Enviar un correo de prueba label_settings: Configuración label_show_completed_versions: Muestra las versiones terminadas - label_sort_by: "Ordenar por {{value}}" + label_sort_by: "Ordenar por %{value}" label_sort_higher: Subir label_sort_highest: Primero label_sort_lower: Bajar @@ -628,11 +632,11 @@ label_tracker: Tipo label_tracker_new: Nuevo tipo label_tracker_plural: Tipos de peticiones - label_updated_time: "Actualizado hace {{value}}" - label_updated_time_by: "Actualizado por {{author}} hace {{age}}" + label_updated_time: "Actualizado hace %{value}" + label_updated_time_by: "Actualizado por %{author} hace %{age}" label_used_by: Utilizado por label_user: Usuario - label_user_activity: "Actividad de {{value}}" + label_user_activity: "Actividad de %{value}" label_user_mail_no_self_notified: "No quiero ser avisado de cambios hechos por mí" label_user_mail_option_all: "Para cualquier evento en todos mis proyectos" label_user_mail_option_selected: "Para cualquier evento de los proyectos seleccionados..." @@ -653,16 +657,16 @@ label_workflow: Flujo de trabajo label_year: Año label_yesterday: ayer - mail_body_account_activation_request: "Se ha inscrito un nuevo usuario ({{value}}). La cuenta está pendiende de aprobación:" + mail_body_account_activation_request: "Se ha inscrito un nuevo usuario (%{value}). La cuenta está pendiende de aprobación:" mail_body_account_information: Información sobre su cuenta - mail_body_account_information_external: "Puede usar su cuenta {{value}} para conectarse." + mail_body_account_information_external: "Puede usar su cuenta %{value} para conectarse." mail_body_lost_password: 'Para cambiar su contraseña, haga clic en el siguiente enlace:' mail_body_register: 'Para activar su cuenta, haga clic en el siguiente enlace:' - mail_body_reminder: "{{count}} peticion(es) asignadas a tí finalizan en los próximos {{days}} días:" - mail_subject_account_activation_request: "Petición de activación de cuenta {{value}}" - mail_subject_lost_password: "Tu contraseña del {{value}}" - mail_subject_register: "Activación de la cuenta del {{value}}" - mail_subject_reminder: "{{count}} peticion(es) finalizan en los próximos {{days}} días" + mail_body_reminder: "%{count} peticion(es) asignadas a tí finalizan en los próximos %{days} días:" + mail_subject_account_activation_request: "Petición de activación de cuenta %{value}" + mail_subject_lost_password: "Tu contraseña del %{value}" + mail_subject_register: "Activación de la cuenta del %{value}" + mail_subject_reminder: "%{count} peticion(es) finalizan en los próximos %{days} días" notice_account_activated: Su cuenta ha sido activada. Ya puede conectarse. notice_account_invalid_creditentials: Usuario o contraseña inválido. notice_account_lost_email_sent: Se le ha enviado un correo con instrucciones para elegir una nueva contraseña. @@ -674,9 +678,9 @@ notice_account_wrong_password: Contraseña incorrecta. notice_can_t_change_password: Esta cuenta utiliza una fuente de autenticación externa. No es posible cambiar la contraseña. notice_default_data_loaded: Configuración por defecto cargada correctamente. - notice_email_error: "Ha ocurrido un error mientras enviando el correo ({{value}})" - notice_email_sent: "Se ha enviado un correo a {{value}}" - notice_failed_to_save_issues: "Imposible grabar %s peticion(es) en {{count}} seleccionado: {{ids}}." + notice_email_error: "Ha ocurrido un error mientras enviando el correo (%{value})" + notice_email_sent: "Se ha enviado un correo a %{value}" + notice_failed_to_save_issues: "Imposible grabar %{count} peticion(es) de %{total} seleccionada(s): %{ids}." notice_feeds_access_key_reseted: Su clave de acceso para RSS ha sido reiniciada. notice_file_not_found: La página a la que intenta acceder no existe. notice_locking_conflict: Los datos han sido modificados por otro usuario. @@ -751,7 +755,6 @@ setting_autologin: Conexión automática setting_bcc_recipients: Ocultar las copias de carbón (bcc) setting_commit_fix_keywords: Palabras clave para la corrección - setting_commit_logs_encoding: Codificación de los mensajes de commit setting_commit_ref_keywords: Palabras clave para la referencia setting_cross_project_issue_relations: Permitir relacionar peticiones de distintos proyectos setting_date_format: Formato de fecha @@ -787,25 +790,25 @@ status_registered: registrado text_are_you_sure: ¿Está seguro? text_assign_time_entries_to_project: Asignar las horas al proyecto - text_caracters_maximum: "{{count}} caracteres como máximo." - text_caracters_minimum: "{{count}} caracteres como mínimo." + text_caracters_maximum: "%{count} caracteres como máximo." + text_caracters_minimum: "%{count} caracteres como mínimo." text_comma_separated: Múltiples valores permitidos (separados por coma). text_default_administrator_account_changed: Cuenta de administrador por defecto modificada 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_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_enumeration_destroy_question: "%{count} objetos con este valor asignado." text_file_repository_writable: Se puede escribir en el repositorio - text_issue_added: "Petición {{id}} añadida por {{author}}." + text_issue_added: "Petición %{id} añadida por %{author}." text_issue_category_destroy_assignments: Dejar las peticiones sin categoría - text_issue_category_destroy_question: "Algunas peticiones ({{count}}) están asignadas a esta categoría. ¿Qué desea hacer?" + text_issue_category_destroy_question: "Algunas peticiones (%{count}) están asignadas a esta categoría. ¿Qué desea hacer?" text_issue_category_reassign_to: Reasignar las peticiones a la categoría - text_issue_updated: "La petición {{id}} ha sido actualizada por {{author}}." + text_issue_updated: "La petición %{id} ha sido actualizada por %{author}." text_issues_destroy_confirmation: '¿Seguro que quiere borrar las peticiones seleccionadas?' text_issues_ref_in_commit_messages: Referencia y petición de corrección en los mensajes - text_length_between: "Longitud entre {{min}} y {{max}} caracteres." + text_length_between: "Longitud entre %{min} y %{max} caracteres." text_load_default_configuration: Cargar la configuración por defecto text_min_max_length_info: 0 para ninguna restricción text_no_configuration_data: "Todavía no se han configurado perfiles, ni tipos, estados y flujo de trabajo asociado a peticiones. Se recomiendo encarecidamente cargar la configuración por defecto. Una vez cargada, podrá modificarla." @@ -817,19 +820,19 @@ text_rmagick_available: RMagick disponible (opcional) text_select_mail_notifications: Seleccionar los eventos a notificar text_select_project_modules: 'Seleccione los módulos a activar para este proyecto:' - text_status_changed_by_changeset: "Aplicado en los cambios {{value}}" - text_subprojects_destroy_warning: "Los proyectos secundarios: {{value}} también se eliminarán" + text_status_changed_by_changeset: "Aplicado en los cambios %{value}" + text_subprojects_destroy_warning: "Los proyectos secundarios: %{value} también se eliminarán" text_tip_issue_begin_day: tarea que comienza este día text_tip_issue_begin_end_day: tarea que comienza y termina este día text_tip_issue_end_day: tarea que termina este día text_tracker_no_workflow: No hay ningún flujo de trabajo definido para este tipo de petición text_unallowed_characters: Caracteres no permitidos text_user_mail_option: "De los proyectos no seleccionados, sólo recibirá notificaciones sobre elementos monitorizados o elementos en los que esté involucrado (por ejemplo, peticiones de las que usted sea autor o asignadas a usted)." - text_user_wrote: "{{value}} escribió:" + text_user_wrote: "%{value} escribió:" text_wiki_destroy_confirmation: ¿Seguro que quiere borrar el wiki y todo su contenido? text_workflow_edit: Seleccionar un flujo de trabajo para actualizar text_plugin_assets_writable: Se puede escribir en el directorio público de las extensiones - warning_attachments_not_saved: "No se han podido grabar {{count}} ficheros." + warning_attachments_not_saved: "No se han podido grabar %{count} ficheros." button_create_and_continue: Crear y continuar text_custom_field_possible_values_info: 'Un valor en cada línea' label_display: Mostrar @@ -844,21 +847,21 @@ label_descending: Descendente label_sort: Ordenar label_ascending: Ascendente - label_date_from_to: Desde {{start}} hasta {{end}} + label_date_from_to: Desde %{start} hasta %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: Esta página tiene {{descendants}} página(s) hija(s) y descendiente(s). ¿Qué desea hacer? + text_wiki_page_destroy_question: Esta página tiene %{descendants} página(s) hija(s) y descendiente(s). ¿Qué desea hacer? text_wiki_page_reassign_children: Reasignar páginas hijas a esta página text_wiki_page_nullify_children: Dejar páginas hijas como páginas raíz text_wiki_page_destroy_children: Eliminar páginas hijas y todos sus descendientes setting_password_min_length: Longitud mínima de la contraseña field_group_by: Agrupar resultados por - mail_subject_wiki_content_updated: "La página wiki '{{id}}' ha sido actualizada" + mail_subject_wiki_content_updated: "La página wiki '%{id}' ha sido actualizada" label_wiki_content_added: Página wiki añadida - mail_subject_wiki_content_added: "Se ha añadido la página wiki '{{id}}'." - mail_body_wiki_content_added: "{{author}} ha añadido la página wiki '{{id}}'." + mail_subject_wiki_content_added: "Se ha añadido la página wiki '%{id}'." + mail_body_wiki_content_added: "%{author} ha añadido la página wiki '%{id}'." label_wiki_content_updated: Página wiki actualizada - mail_body_wiki_content_updated: La página wiki '{{id}}' ha sido actualizada por {{author}}. + mail_body_wiki_content_updated: La página wiki '%{id}' ha sido actualizada por %{author}. permission_add_project: Crear proyecto setting_new_project_user_role_id: Permiso asignado a un usuario no-administrador para crear proyectos label_view_all_revisions: Ver todas las revisiones @@ -866,14 +869,14 @@ label_branch: Rama error_no_tracker_in_project: Este proyecto no tiene asociados tipos de peticiones. Por favor, revise la configuración. error_no_default_issue_status: No se ha definido un estado de petición por defecto. Por favor, revise la configuración (en "Administración" -> "Estados de las peticiones"). - text_journal_changed: "{{label}} cambiado {{old}} por {{new}}" - text_journal_set_to: "{{label}} establecido a {{value}}" - text_journal_deleted: "{{label}} eliminado ({{old}})" + text_journal_changed: "%{label} cambiado %{old} por %{new}" + text_journal_set_to: "%{label} establecido a %{value}" + text_journal_deleted: "%{label} eliminado (%{old})" label_group_plural: Grupos label_group: Grupo label_group_new: Nuevo grupo label_time_entry_plural: Tiempo dedicado - text_journal_added: "Añadido {{label}} {{value}}" + text_journal_added: "Añadido %{label} %{value}" field_active: Activo enumeration_system_activity: Actividad del sistema permission_delete_issue_watchers: Borrar seguidores @@ -909,9 +912,9 @@ setting_start_of_week: Comenzar las semanas en permission_view_issues: Ver peticiones label_display_used_statuses_only: Sólo mostrar los estados usados por este tipo de petición - label_revision_id: Revisión {{value}} + label_revision_id: Revisión %{value} label_api_access_key: Clave de acceso de la API - label_api_access_key_created_on: Clave de acceso de la API creada hace {{value}} + label_api_access_key_created_on: Clave de acceso de la API creada hace %{value} label_feeds_access_key: Clave de acceso RSS notice_api_access_key_reseted: Clave de acceso a la API regenerada. setting_rest_api_enabled: Activar servicio web REST @@ -938,32 +941,75 @@ label_subtask_plural: Subtareas label_project_copy_notifications: Enviar notificaciones por correo electrónico durante la copia del proyecto error_can_not_delete_custom_field: Fue imposible eliminar el campo personalizado - error_unable_to_connect: Fue imposible conectar con ({{value}}) + error_unable_to_connect: Fue imposible conectar con (%{value}) error_can_not_remove_role: Este rol está en uso y no puede ser eliminado. error_can_not_delete_tracker: Este tipo contiene peticiones y no puede ser eliminado. field_principal: Principal label_my_page_block: Bloque Mi página - notice_failed_to_save_members: "Fallo al guardar miembro(s): {{errors}}." + notice_failed_to_save_members: "Fallo al guardar miembro(s): %{errors}." text_zoom_out: Alejar text_zoom_in: Acercar notice_unable_delete_time_entry: Fue imposible eliminar la entrada de tiempo dedicado. label_overall_spent_time: Tiempo total dedicado field_time_entries: Log time 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. - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" + project_module_calendar: Calendario + button_edit_associated_wikipage: "Editar paginas Wiki asociadas: %{page_title}" + text_are_you_sure_with_children: ¿Borrar peticiones y todas sus peticiones hijas? + field_text: Campo de texto + label_user_mail_option_only_owner: Solo para objetos que soy propietario + setting_default_notification_option: Opcion de notificacion por defecto + label_user_mail_option_only_my_events: Solo para objetos que soy seguidor o estoy involucrado + label_user_mail_option_only_assigned: Solo para objetos que estoy asignado + label_user_mail_option_none: Sin eventos + field_member_of_group: Asignado al grupo + field_assigned_to_role: Asignado al perfil + notice_not_authorized_archived_project: El proyecto al que intenta acceder ha sido archivado. + label_principal_search: "Buscar por usuario o grupo:" + label_user_search: "Buscar por usuario:" field_visible: Visible - setting_emails_header: Emails header + setting_emails_header: Encabezado de Correos + + setting_commit_logtime_activity_id: Actividad de los tiempos registrados + text_time_logged_by_changeset: Aplicado en los cambios %{value}. + setting_commit_logtime_enabled: Habilitar registro de horas + notice_gantt_chart_truncated: Se recortó el diagrama porque excede el número máximo de elementos que pueden ser mostrados (%{max}) + setting_gantt_items_limit: Número máximo de elementos mostrados en el diagrama de Gantt + field_warn_on_leaving_unsaved: Avisarme cuando vaya a abandonar una página con texto no guardado + text_warn_on_leaving_unsaved: Esta página contiene texto no guardado y si la abandona sus cambios se perderán + label_my_queries: Mis consultas personalizadas + text_journal_changed_no_detail: "Se actualizó %{label}" + label_news_comment_added: Comentario añadido a noticia + button_expand_all: Expandir todo + button_collapse_all: Contraer todo + label_additional_workflow_transitions_for_assignee: Transiciones adicionales permitidas cuando la petición está asignada al usuario + label_additional_workflow_transitions_for_author: Transiciones adicionales permitidas cuando el usuario es autor de la petición + label_bulk_edit_selected_time_entries: Editar en bloque las horas seleccionadas + text_time_entries_destroy_confirmation: ¿Está seguro de querer eliminar (la hora seleccionada/las horas seleccionadas)? + label_role_anonymous: Anónimo + label_role_non_member: No miembro + label_issue_note_added: Nota añadida + label_issue_status_updated: Estado actualizado + label_issue_priority_updated: Prioridad actualizada + label_issues_visibility_own: Peticiones creadas por el usuario o asignadas a él + field_issues_visibility: Visibilidad de las peticiones + label_issues_visibility_all: Todas las peticiones + permission_set_own_issues_private: Poner las peticiones propias como públicas o privadas + field_is_private: Privada + permission_set_issues_private: Poner peticiones como públicas o privadas + label_issues_visibility_public: Todas las peticiones no privadas + text_issues_destroy_descendants_confirmation: Se procederá a borrar también %{count} subtarea(s). + field_commit_logs_encoding: Codificación de los mensajes de commit + field_scm_path_encoding: Codificación de las rutas + text_scm_path_encoding_note: "Por defecto: UTF-8" + field_path_to_repository: Ruta al repositorio + field_root_directory: Directorio raíz + field_cvs_module: Módulo + field_cvsroot: CVSROOT + text_git_repository_note: Repositorio local (bare repository) (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Repositorio local (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Orden + text_scm_command_version: Versión + label_git_report_last_commit: Informar del último commit para ficheros y directorios + text_scm_config: Puede configurar las órdenes de cada scm en configuration/configuration.yml. Por favor, reinicie la aplicación después de editarlo + text_scm_command_not_available: La orden para el Scm no está disponible. Por favor, compruebe la configuración en el panel de administración. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/eu.yml.svn-base --- a/config/locales/.svn/text-base/eu.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/eu.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -20,7 +20,10 @@ month_names: [~, Urtarrila, Otsaila, Martxoa, Apirila, Maiatza, Ekaina, Uztaila, Abuztua, Iraila, Urria, Azaroa, Abendua] abbr_month_names: [~, Urt, Ots, Mar, Api, Mai, Eka, Uzt, Abu, Ira, Urr, Aza, Abe] # Used in date_select and datime_select. - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -36,37 +39,37 @@ half_a_minute: "minutu erdi" less_than_x_seconds: one: "segundu bat baino gutxiago" - other: "{{count}} segundu baino gutxiago" + other: "%{count} segundu baino gutxiago" x_seconds: one: "segundu 1" - other: "{{count}} segundu" + other: "%{count} segundu" less_than_x_minutes: one: "minutu bat baino gutxiago" - other: "{{count}} minutu baino gutxiago" + other: "%{count} minutu baino gutxiago" x_minutes: one: "minutu 1" - other: "{{count}} minutu" + other: "%{count} minutu" about_x_hours: one: "ordu 1 inguru" - other: "{{count}} ordu inguru" + other: "%{count} ordu inguru" x_days: one: "egun 1" - other: "{{count}} egun" + other: "%{count} egun" about_x_months: one: "hilabete 1 inguru" - other: "{{count}} hilabete inguru" + other: "%{count} hilabete inguru" x_months: one: "hilabete 1" - other: "{{count}} hilabete" + other: "%{count} hilabete" about_x_years: one: "urte 1 inguru" - other: "{{count}} urte inguru" + other: "%{count} urte inguru" over_x_years: one: "urte 1 baino gehiago" - other: "{{count}} urte baino gehiago" + other: "%{count} urte baino gehiago" almost_x_years: one: "ia urte 1" - other: "ia {{count}} urte" + other: "ia %{count} urte" number: format: @@ -97,6 +100,10 @@ activerecord: errors: + template: + header: + one: "Errore batek %{model} hau godetzea galarazi du." + other: "%{count} errorek %{model} hau gordetzea galarazi dute." messages: inclusion: "ez dago zerrendan" exclusion: "erreserbatuta dago" @@ -105,23 +112,23 @@ accepted: "onartu behar da" empty: "ezin da hutsik egon" blank: "ezin da hutsik egon" - too_long: "luzeegia da (maximoa {{count}} karaktere dira)" - too_short: "laburregia da (minimoa {{count}} karaktere dira)" - wrong_length: "luzera ezegokia da ({{count}} karakter izan beharko litzake)" + too_long: "luzeegia da (maximoa %{count} karaktere dira)" + too_short: "laburregia da (minimoa %{count} karaktere dira)" + wrong_length: "luzera ezegokia da (%{count} karakter izan beharko litzake)" taken: "dagoeneko hartuta dago" not_a_number: "ez da zenbaki bat" not_a_date: "ez da baliozko data" - greater_than: "{{count}} baino handiagoa izan behar du" - greater_than_or_equal_to: "{{count}} edo handiagoa izan behar du" - equal_to: "{{count}} izan behar du" - less_than: "{{count}} baino gutxiago izan behar du" - less_than_or_equal_to: "{{count}} edo gutxiago izan behar du" + greater_than: "%{count} baino handiagoa izan behar du" + greater_than_or_equal_to: "%{count} edo handiagoa izan behar du" + equal_to: "%{count} izan behar du" + less_than: "%{count} baino gutxiago izan behar du" + less_than_or_equal_to: "%{count} edo gutxiago izan behar du" odd: "bakoitia izan behar du" even: "bikoitia izan behar du" 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 @@ -152,20 +159,20 @@ notice_file_not_found: Atzitu nahi duzun orria ez da exisitzen edo ezabatua izan da. notice_locking_conflict: Beste erabiltzaile batek datuak eguneratu ditu. notice_not_authorized: Ez duzu orri hau atzitzeko baimenik. - notice_email_sent: "{{value}} helbidera eposta bat bidali da" - notice_email_error: "Errorea eposta bidaltzean ({{value}})" + notice_email_sent: "%{value} helbidera eposta bat bidali da" + notice_email_error: "Errorea eposta bidaltzean (%{value})" notice_feeds_access_key_reseted: Zure RSS atzipen giltza berrezarri da. notice_api_access_key_reseted: Zure API atzipen giltza berrezarri da. - notice_failed_to_save_issues: "Hautatutako {{total}} zereginetatik {{count}} ezin izan dira konpondu: {{ids}}." + notice_failed_to_save_issues: "Hautatutako %{total} zereginetatik %{count} ezin izan dira konpondu: %{ids}." notice_no_issue_selected: "Ez da zereginik hautatu! Mesedez, editatu nahi dituzun arazoak markatu." notice_account_pending: "Zure kontua sortu da, orain kudeatzailearen onarpenaren zain dago." notice_default_data_loaded: Lehenetsitako konfigurazioa ongi kargatu da. notice_unable_delete_version: Ezin da bertsioa ezabatu. notice_issue_done_ratios_updated: Burututako zereginen erlazioa eguneratu da. - error_can_t_load_default_data: "Ezin izan da lehenetsitako konfigurazioa kargatu: {{value}}" + error_can_t_load_default_data: "Ezin izan da lehenetsitako konfigurazioa kargatu: %{value}" error_scm_not_found: "Sarrera edo berrikuspena ez da biltegian topatu." - error_scm_command_failed: "Errorea gertatu da biltegia atzitzean: {{value}}" + error_scm_command_failed: "Errorea gertatu da biltegia atzitzean: %{value}" error_scm_annotate: "Sarrera ez da existitzen edo ezin da anotatu." error_issue_not_found_in_project: 'Zeregina ez da topatu edo ez da proiektu honetakoa' error_no_tracker_in_project: 'Proiektu honek ez du aztarnaririk esleituta. Mesedez egiaztatu Proiektuaren ezarpenak.' @@ -176,25 +183,25 @@ error_workflow_copy_source: 'Mesedez hautatu iturburuko aztarnari edo rola' error_workflow_copy_target: 'Mesedez hautatu helburuko aztarnari(ak) edo rola(k)' - warning_attachments_not_saved: "{{count}} fitxategi ezin izan d(ir)a gorde." + warning_attachments_not_saved: "%{count} fitxategi ezin izan d(ir)a gorde." - mail_subject_lost_password: "Zure {{value}} pasahitza" + mail_subject_lost_password: "Zure %{value} pasahitza" mail_body_lost_password: 'Zure pasahitza aldatzeko hurrengo estekan klikatu:' - mail_subject_register: "Zure {{value}} kontuaren gaitzea" + mail_subject_register: "Zure %{value} kontuaren gaitzea" mail_body_register: 'Zure kontua gaitzeko hurrengo estekan klikatu:' - mail_body_account_information_external: "Zure {{value}} kontua erabil dezakezu saioa hasteko." + mail_body_account_information_external: "Zure %{value} kontua erabil dezakezu saioa hasteko." mail_body_account_information: Zure kontuaren informazioa - mail_subject_account_activation_request: "{{value}} kontu gaitzeko eskaera" - mail_body_account_activation_request: "Erabiltzaile berri bat ({{value}}) erregistratu da. Kontua zure onarpenaren zain dago:" - mail_subject_reminder: "{{count}} arazo hurrengo {{days}} egunetan amaitzen d(ir)a" - mail_body_reminder: "Zuri esleituta dauden {{count}} arazo hurrengo {{days}} egunetan amaitzen d(ir)a:" - mail_subject_wiki_content_added: "'{{id}}' wiki orria gehitu da" - mail_body_wiki_content_added: "{{author}}-(e)k '{{id}}' wiki orria gehitu du." - mail_subject_wiki_content_updated: "'{{id}}' wiki orria eguneratu da" - mail_body_wiki_content_updated: "{{author}}-(e)k '{{id}}' wiki orria eguneratu du." + mail_subject_account_activation_request: "%{value} kontu gaitzeko eskaera" + mail_body_account_activation_request: "Erabiltzaile berri bat (%{value}) erregistratu da. Kontua zure onarpenaren zain dago:" + mail_subject_reminder: "%{count} arazo hurrengo %{days} egunetan amaitzen d(ir)a" + mail_body_reminder: "Zuri esleituta dauden %{count} arazo hurrengo %{days} egunetan amaitzen d(ir)a:" + mail_subject_wiki_content_added: "'%{id}' wiki orria gehitu da" + mail_body_wiki_content_added: "%{author}-(e)k '%{id}' wiki orria gehitu du." + mail_subject_wiki_content_updated: "'%{id}' wiki orria eguneratu da" + mail_body_wiki_content_updated: "%{author}-(e)k '%{id}' wiki orria eguneratu du." gui_validation_error: akats 1 - gui_validation_error_plural: "{{count}} akats" + gui_validation_error_plural: "%{count} akats" field_name: Izena field_description: Deskribapena @@ -257,6 +264,7 @@ field_attr_lastname: Abizenak atributua field_attr_mail: Eposta atributua field_onthefly: Zuzeneko erabiltzaile sorrera + field_start_date: Hasiera field_done_ratio: Egindako % field_auth_source: Autentikazio modua field_hide_mail: Nire eposta helbidea ezkutatu @@ -272,7 +280,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 @@ -313,7 +321,6 @@ 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_emails_footer: Eposten oina setting_protocol: Protokoloa setting_per_page_options: Orriko objektuen aukerak @@ -358,7 +365,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 @@ -412,14 +419,14 @@ label_x_projects: zero: proiekturik ez one: proiektu bat - other: "{{count}} proiektu" + other: "%{count} proiektu" label_project_all: Proiektu guztiak label_project_latest: Azken proiektuak label_issue: Zeregina label_issue_new: Zeregin berria label_issue_plural: Zereginak label_issue_view_all: Zeregin guztiak ikusi - label_issues_by: "Zereginak honengatik: {{value}}" + label_issues_by: "Zereginak honengatik: %{value}" label_issue_added: Zeregina gehituta label_issue_updated: Zeregina eguneratuta label_document: Dokumentua @@ -436,7 +443,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 @@ -468,7 +475,7 @@ label_registered_on: Noiz erregistratuta label_activity: Jarduerak label_overall_activity: Jarduera guztiak - label_user_activity: "{{value}}-(r)en jarduerak" + label_user_activity: "%{value}-(r)en jarduerak" label_new: Berria label_logged_as: "Sartutako erabiltzailea:" label_environment: Ingurune @@ -478,7 +485,7 @@ label_auth_source_plural: Autentikazio moduak label_subproject_plural: Azpiproiektuak label_subproject_new: Azpiproiektu berria - label_and_its_subprojects: "{{value}} eta bere azpiproiektuak" + label_and_its_subprojects: "%{value} eta bere azpiproiektuak" label_min_max_length: Luzera min - max label_list: Zerrenda label_date: Data @@ -489,8 +496,8 @@ label_text: Testu luzea label_attribute: Atributua label_attribute_plural: Atributuak - label_download: "Deskarga {{count}}" - label_download_plural: "{{count}} Deskarga" + label_download: "Deskarga %{count}" + label_download_plural: "%{count} Deskarga" label_no_data: Ez dago erakusteko daturik label_change_status: Egoera aldatu label_history: Historikoa @@ -501,7 +508,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 @@ -523,17 +530,17 @@ label_closed_issues: itxita label_closed_issues_plural: itxiak label_x_open_issues_abbr_on_total: - zero: 0 irekita / {{total}} - one: 1 irekita / {{total}} - other: "{{count}} irekiak / {{total}}" + zero: 0 irekita / %{total} + one: 1 irekita / %{total} + other: "%{count} irekiak / %{total}" label_x_open_issues_abbr: zero: 0 irekita one: 1 irekita - other: "{{count}} irekiak" + other: "%{count} irekiak" label_x_closed_issues_abbr: zero: 0 itxita one: 1 itxita - other: "{{count}} itxiak" + other: "%{count} itxiak" label_total: Guztira label_permissions: Baimenak label_current_status: Uneko egoera @@ -548,10 +555,10 @@ 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" + label_last_changes: "azken %{count} aldaketak" label_change_view_all: Aldaketa guztiak ikusi label_personalize_page: Orri hau pertsonalizatu label_comment: Iruzkin @@ -559,7 +566,7 @@ label_x_comments: zero: iruzkinik ez one: iruzkin 1 - other: "{{count}} iruzkin" + other: "%{count} iruzkin" label_comment_add: Iruzkina gehitu label_comment_added: Iruzkina gehituta label_comment_delete: Iruzkinak ezabatu @@ -580,7 +587,7 @@ label_yesterday: atzo label_this_week: aste honetan label_last_week: pasadan astean - label_last_n_days: "azken {{count}} egunetan" + label_last_n_days: "azken %{count} egunetan" label_this_month: hilabete hau label_last_month: pasadan hilabetea label_this_year: urte hau @@ -594,13 +601,13 @@ label_repository: Biltegia label_repository_plural: Biltegiak label_browse: Arakatu - label_modification: "aldaketa {{count}}" - label_modification_plural: "{{count}} aldaketa" + label_modification: "aldaketa %{count}" + label_modification_plural: "%{count} aldaketa" label_branch: Adarra label_tag: Etiketa label_revision: Berrikuspena label_revision_plural: Berrikuspenak - label_revision_id: "{{value}} berrikuspen" + label_revision_id: "%{value} berrikuspen" label_associated_revisions: Elkartutako berrikuspenak label_added: gehituta label_modified: aldatuta @@ -617,8 +624,8 @@ label_sort_lower: Behera mugitu label_sort_lowest: Beheraino mugitu label_roadmap: Ibilbide-mapa - label_roadmap_due_in: "Epea: {{value}}" - label_roadmap_overdue: "{{value}} berandu" + label_roadmap_due_in: "Epea: %{value}" + label_roadmap_overdue: "%{value} berandu" label_roadmap_no_issues: Ez dago zereginik bertsio honetan label_search: Bilatu label_result_plural: Emaitzak @@ -636,8 +643,8 @@ label_changes_details: Aldaketa guztien xehetasunak label_issue_tracking: Zeregin jarraipena label_spent_time: Igarotako denbora - label_f_hour: "ordu {{value}}" - label_f_hour_plural: "{{value}} ordu" + label_f_hour: "ordu %{value}" + label_f_hour_plural: "%{value} ordu" label_time_tracking: Denbora jarraipena label_change_plural: Aldaketak label_statistics: Estatistikak @@ -677,7 +684,7 @@ label_message_plural: Mezuak label_message_last: Azken mezua label_message_new: Mezu berria - label_message_posted: Mesua gehituta + label_message_posted: Mezua gehituta label_reply_plural: Erantzunak label_send_information: Erabiltzaileai kontuaren informazioa bidali label_year: Urtea @@ -686,15 +693,15 @@ label_date_from: Nork label_date_to: Nori label_language_based: Erabiltzailearen hizkuntzaren arabera - label_sort_by: "Ordenazioa: {{value}}" + label_sort_by: "Ordenazioa: %{value}" label_send_test_email: Frogako mezua bidali label_feeds_access_key: RSS atzipen giltza label_missing_feeds_access_key: RSS atzipen giltza falta da - label_feeds_access_key_created_on: "RSS atzipen giltza orain dela {{value}} sortuta" + label_feeds_access_key_created_on: "RSS atzipen giltza orain dela %{value} sortuta" label_module_plural: Moduluak - label_added_time_by: "{{author}}, orain dela {{age}} gehituta" - label_updated_time_by: "{{author}}, orain dela {{age}} eguneratuta" - label_updated_time: "Orain dela {{value}} eguneratuta" + label_added_time_by: "%{author}, orain dela %{age} gehituta" + label_updated_time_by: "%{author}, orain dela %{age} eguneratuta" + label_updated_time: "Orain dela %{value} eguneratuta" label_jump_to_a_project: Joan proiektura... label_file_plural: Fitxategiak label_changeset_plural: Aldaketak @@ -710,7 +717,7 @@ label_registration_activation_by_email: kontuak epostaz gaitu label_registration_manual_activation: kontuak eskuz gaitu label_registration_automatic_activation: kontuak automatikoki gaitu - label_display_per_page: "Orriko: {{value}}" + label_display_per_page: "Orriko: %{value}" label_age: Adina label_change_properties: Propietateak aldatu label_general: Orokorra @@ -733,7 +740,7 @@ label_sort: Ordenatu label_ascending: Gorantz label_descending: Beherantz - label_date_from_to: "{{start}}-tik {{end}}-ra" + label_date_from_to: "%{start}-tik %{end}-ra" label_wiki_content_added: Wiki orria gehituta label_wiki_content_updated: Wiki orria eguneratuta label_group: Taldea @@ -752,7 +759,7 @@ label_display_used_statuses_only: Aztarnari honetan erabiltzen diren egoerak bakarrik erakutsi label_api_access_key: API atzipen giltza label_missing_api_access_key: API atzipen giltza falta da - label_api_access_key_created_on: "API atzipen giltza sortuta orain dela {{value}}" + label_api_access_key_created_on: "API atzipen giltza sortuta orain dela %{value}" button_login: Saioa hasi button_submit: Bidali @@ -779,7 +786,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 @@ -812,53 +819,53 @@ text_regexp_info: adib. ^[A-Z0-9]+$ text_min_max_length_info: 0k mugarik gabe esan nahi du text_project_destroy_confirmation: Ziur zaude proiektu hau eta erlazionatutako datu guztiak ezabatu nahi dituzula? - text_subprojects_destroy_warning: "{{value}} azpiproiektuak ere ezabatuko dira." + text_subprojects_destroy_warning: "%{value} azpiproiektuak ere ezabatuko dira." text_workflow_edit: Hautatu rola eta aztarnaria workflow-a editatzeko text_are_you_sure: Ziur zaude? - text_journal_changed: "{{label}} {{old}}-(e)tik {{new}}-(e)ra aldatuta" - 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_journal_changed: "%{label} %{old}-(e)tik %{new}-(e)ra aldatuta" + 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 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.
    Gorde eta gero identifikadorea ezin da aldatu.' - text_caracters_maximum: "{{count}} karaktere gehienez." - text_caracters_minimum: "Gutxienez {{count}} karaktereetako luzerakoa izan behar du." - text_length_between: "Luzera {{min}} eta {{max}} karaktereen artekoa." + text_caracters_maximum: "%{count} karaktere gehienez." + text_caracters_minimum: "Gutxienez %{count} karaktereetako luzerakoa izan behar du." + text_length_between: "Luzera %{min} eta %{max} karaktereen artekoa." text_tracker_no_workflow: Ez da workflow-rik definitu aztarnari honentzako text_unallowed_characters: Debekatutako karaktereak text_comma_separated: Balio anitz izan daitezke (komaz banatuta). text_line_separated: Balio anitz izan daitezke (balio bakoitza lerro batean). text_issues_ref_in_commit_messages: Commit-en mezuetan zereginak erlazionatu eta konpontzen - text_issue_added: "{{id}} zeregina {{author}}-(e)k jakinarazi du." - text_issue_updated: "{{id}} zeregina {{author}}-(e)k eguneratu du." + text_issue_added: "%{id} zeregina %{author}-(e)k jakinarazi du." + text_issue_updated: "%{id} zeregina %{author}-(e)k eguneratu du." text_wiki_destroy_confirmation: Ziur zaude wiki hau eta bere eduki guztiak ezabatu nahi dituzula? - text_issue_category_destroy_question: "Zeregin batzuk ({{count}}) kategoria honetara esleituta daude. Zer egin nahi duzu?" + text_issue_category_destroy_question: "Zeregin batzuk (%{count}) kategoria honetara esleituta daude. Zer egin nahi duzu?" text_issue_category_destroy_assignments: Kategoria esleipenak kendu text_issue_category_reassign_to: Zereginak kategoria honetara esleitu text_user_mail_option: "Hautatu gabeko proiektuetan, behatzen edo parte hartzen duzun gauzei buruzko jakinarazpenak jasoko dituzu (adib. zu egile zaren edo esleituta dituzun zereginak)." text_no_configuration_data: "Rolak, aztarnariak, zeregin egoerak eta workflow-ak ez dira oraindik konfiguratu.\nOso gomendagarria de lehenetsitako kkonfigurazioa kargatzea. Kargatu eta gero aldatu ahalko duzu." text_load_default_configuration: Lehenetsitako konfigurazioa kargatu - text_status_changed_by_changeset: "{{value}} aldaketan aplikatuta." + text_status_changed_by_changeset: "%{value} aldaketan aplikatuta." text_issues_destroy_confirmation: 'Ziur zaude hautatutako zeregina(k) ezabatu nahi dituzula?' text_select_project_modules: 'Hautatu proiektu honetan gaitu behar diren moduluak:' text_default_administrator_account_changed: Lehenetsitako kudeatzaile kontua aldatuta text_file_repository_writable: Eranskinen direktorioan idatz daiteke text_plugin_assets_writable: Pluginen baliabideen direktorioan idatz daiteke text_rmagick_available: RMagick eskuragarri (aukerazkoa) - text_destroy_time_entries_question: "{{hours}} orduei buruz berri eman zen zuk ezabatzera zoazen zereginean. Zer egin nahi duzu?" + text_destroy_time_entries_question: "%{hours} orduei buruz berri eman zen zuk ezabatzera zoazen zereginean. Zer egin nahi duzu?" text_destroy_time_entries: Ezabatu berri emandako orduak text_assign_time_entries_to_project: Berri emandako orduak proiektura esleitu text_reassign_time_entries: 'Berri emandako orduak zeregin honetara esleitu:' - text_user_wrote: "{{value}}-(e)k idatzi zuen:" - text_enumeration_destroy_question: "{{count}} objetu balio honetara esleituta daude." + 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' - text_wiki_page_destroy_question: "Orri honek {{descendants}} orri seme eta ondorengo ditu. Zer egin nahi duzu?" + text_wiki_page_destroy_question: "Orri honek %{descendants} orri seme eta ondorengo ditu. Zer egin nahi duzu?" text_wiki_page_nullify_children: "Orri semeak erro orri moduan mantendu" text_wiki_page_destroy_children: "Orri semeak eta beraien ondorengo guztiak ezabatu" text_wiki_page_reassign_children: "Orri semeak orri guraso honetara esleitu" @@ -890,7 +897,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 @@ -898,36 +905,78 @@ 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_unable_to_connect: Ezin da konektatu ({{value}}) + 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. - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header + 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: Gorde gabeko testua duen orri batetik ateratzen naizenean ohartarazi + text_warn_on_leaving_unsaved: Uneko orritik joaten bazara gorde gabeko testua galduko da. + label_my_queries: Nire galdera pertsonalizatuak + text_journal_changed_no_detail: "%{label} eguneratuta" + label_news_comment_added: Berri batera iruzkina gehituta + button_expand_all: Guztia zabaldu + button_collapse_all: Guztia tolestu + label_additional_workflow_transitions_for_assignee: Erabiltzaileak esleitua duenean baimendutako transtsizio gehigarriak + label_additional_workflow_transitions_for_author: Erabiltzailea egilea denean baimendutako transtsizio gehigarriak + label_bulk_edit_selected_time_entries: Hautatutako denbora egunkariak batera editatu + text_time_entries_destroy_confirmation: Ziur zaude hautatutako denbora egunkariak ezabatu nahi dituzula? + label_role_anonymous: Ezezaguna + label_role_non_member: Ez kidea + label_issue_note_added: Oharra gehituta + label_issue_status_updated: Egoera eguneratuta + label_issue_priority_updated: Lehentasuna eguneratuta + label_issues_visibility_own: Erabiltzaileak sortu edo esleituta dituen zereginak + field_issues_visibility: Zeregin ikusgarritasuna + label_issues_visibility_all: Zeregin guztiak + permission_set_own_issues_private: Nork bere zereginak publiko edo pribatu jarri + field_is_private: Pribatu + permission_set_issues_private: Zereginak publiko edo pribatu jarri + label_issues_visibility_public: Pribatu ez diren zeregin guztiak + text_issues_destroy_descendants_confirmation: Honek %{count} azpiataza ezabatuko ditu baita ere. + field_commit_logs_encoding: Commit-en egunkarien kodetzea + field_scm_path_encoding: Bidearen kodeketa + text_scm_path_encoding_note: "Lehentsita: UTF-8" + field_path_to_repository: Biltegirako bidea + field_root_directory: Erro direktorioa + field_cvs_module: Modulua + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Biltegi locala (adib. /hgrepo, c:\hgrepo) + text_scm_command: Komandoa + text_scm_command_version: Bertsioa + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/fa.yml.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/config/locales/.svn/text-base/fa.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,981 @@ +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 - %H:%M" + time: "%H:%M" + short: "%d %b %H:%M" + long: "%d %B %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_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)، شماره‌ها و خط تیره پذیرفتنی است.
    پس از ذخیره سازی، شناسه نمی‌تواند جایگزین شود.' + 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: پیامد در این روز آغاز می‌شود + field_warn_on_leaving_unsaved: هنگام ترک برگه‌ای که نوشته‌های آن نگهداری نشده، به من هشدار بده + text_tip_issue_begin_end_day: پیامد در این روز آغاز می‌شود و پایان می‌پذیرد + text_tip_issue_end_day: پیامد در این روز پایان می‌پذیرد + text_warn_on_leaving_unsaved: این برگه دارای نوشته‌های نگهداری نشده است که اگر آن را ترک کنید، از میان می‌روند. + label_my_queries: جستارهای سفارشی من + text_journal_changed_no_detail: "%{label} بروز شد" + label_news_comment_added: دیدگاه به یک رویداد افزوده شد + button_expand_all: باز کردن همه + button_collapse_all: بستن همه + label_additional_workflow_transitions_for_assignee: زمانی که به کاربر واگذار شده، گذارهای بیشتر پذیرفته می‌شود + label_additional_workflow_transitions_for_author: زمانی که کاربر نویسنده است، گذارهای بیشتر پذیرفته می‌شود + label_bulk_edit_selected_time_entries: ویرایش دسته‌ای زمان‌های گزارش شده گزینش شده + text_time_entries_destroy_confirmation: آیا می‌خواهید زمان‌های گزارش شده گزینش شده پاک شوند؟ + label_role_anonymous: ناشناس + label_role_non_member: غیر عضو + label_issue_note_added: یادداشت افزوده شد + label_issue_status_updated: وضعیت بروز شد + label_issue_priority_updated: برتری بروز شد + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: کدگذاری پیام‌های انباره + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/fi.yml.svn-base --- a/config/locales/.svn/text-base/fi.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/fi.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -13,7 +13,10 @@ abbr_day_names: [Su, Ma, Ti, Ke, To, Pe, La] month_names: [~, Tammikuu, Helmikuu, Maaliskuu, Huhtikuu, Toukokuu, Kesäkuu, Heinäkuu, Elokuu, Syyskuu, Lokakuu, Marraskuu, Joulukuu] abbr_month_names: [~, Tammi, Helmi, Maalis, Huhti, Touko, Kesä, Heinä, Elo, Syys, Loka, Marras, Joulu] - order: [:day, :month, :year] + order: + - :day + - :month + - :year time: formats: @@ -78,37 +81,37 @@ half_a_minute: "puoli minuuttia" less_than_x_seconds: one: "aiemmin kuin sekunti" - other: "aiemmin kuin {{count}} sekuntia" + other: "aiemmin kuin %{count} sekuntia" x_seconds: one: "sekunti" - other: "{{count}} sekuntia" + other: "%{count} sekuntia" less_than_x_minutes: one: "aiemmin kuin minuutti" - other: "aiemmin kuin {{count}} minuuttia" + other: "aiemmin kuin %{count} minuuttia" x_minutes: one: "minuutti" - other: "{{count}} minuuttia" + other: "%{count} minuuttia" about_x_hours: one: "noin tunti" - other: "noin {{count}} tuntia" + other: "noin %{count} tuntia" x_days: one: "päivä" - other: "{{count}} päivää" + other: "%{count} päivää" about_x_months: one: "noin kuukausi" - other: "noin {{count}} kuukautta" + other: "noin %{count} kuukautta" x_months: one: "kuukausi" - other: "{{count}} kuukautta" + other: "%{count} kuukautta" about_x_years: one: "vuosi" - other: "noin {{count}} vuotta" + other: "noin %{count} vuotta" over_x_years: one: "yli vuosi" - other: "yli {{count}} vuotta" + other: "yli %{count} vuotta" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" prompts: year: "Vuosi" month: "Kuukausi" @@ -121,8 +124,8 @@ errors: template: header: - one: "1 virhe esti tämän {{model}} mallinteen tallentamisen" - other: "{{count}} virhettä esti tämän {{model}} mallinteen tallentamisen" + one: "1 virhe esti tämän %{model} mallinteen tallentamisen" + other: "%{count} virhettä esti tämän %{model} mallinteen tallentamisen" body: "Seuraavat kentät aiheuttivat ongelmia:" messages: inclusion: "ei löydy listauksesta" @@ -132,16 +135,16 @@ accepted: "täytyy olla hyväksytty" empty: "ei voi olla tyhjä" blank: "ei voi olla sisällötön" - too_long: "on liian pitkä (maksimi on {{count}} merkkiä)" - too_short: "on liian lyhyt (minimi on {{count}} merkkiä)" - wrong_length: "on väärän pituinen (täytyy olla täsmälleen {{count}} merkkiä)" + too_long: "on liian pitkä (maksimi on %{count} merkkiä)" + too_short: "on liian lyhyt (minimi on %{count} merkkiä)" + wrong_length: "on väärän pituinen (täytyy olla täsmälleen %{count} merkkiä)" taken: "on jo käytössä" not_a_number: "ei ole numero" - greater_than: "täytyy olla suurempi kuin {{count}}" - greater_than_or_equal_to: "täytyy olla suurempi tai yhtä suuri kuin{{count}}" - equal_to: "täytyy olla yhtä suuri kuin {{count}}" - less_than: "täytyy olla pienempi kuin {{count}}" - less_than_or_equal_to: "täytyy olla pienempi tai yhtä suuri kuin {{count}}" + greater_than: "täytyy olla suurempi kuin %{count}" + greater_than_or_equal_to: "täytyy olla suurempi tai yhtä suuri kuin%{count}" + equal_to: "täytyy olla yhtä suuri kuin %{count}" + less_than: "täytyy olla pienempi kuin %{count}" + less_than_or_equal_to: "täytyy olla pienempi tai yhtä suuri kuin %{count}" odd: "täytyy olla pariton" even: "täytyy olla parillinen" greater_than_start_date: "tulee olla aloituspäivän jälkeinen" @@ -159,7 +162,7 @@ general_csv_separator: ',' general_csv_decimal_separator: '.' general_csv_encoding: ISO-8859-15 - general_pdf_encoding: ISO-8859-15 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' notice_account_updated: Tilin päivitys onnistui. @@ -178,29 +181,29 @@ notice_file_not_found: Hakemaasi sivua ei löytynyt tai se on poistettu. notice_locking_conflict: Toinen käyttäjä on päivittänyt tiedot. notice_not_authorized: Sinulla ei ole oikeutta näyttää tätä sivua. - notice_email_sent: "Sähköposti on lähetty osoitteeseen {{value}}" - notice_email_error: "Sähköpostilähetyksessä tapahtui virhe ({{value}})" + notice_email_sent: "Sähköposti on lähetty osoitteeseen %{value}" + notice_email_error: "Sähköpostilähetyksessä tapahtui virhe (%{value})" notice_feeds_access_key_reseted: RSS salasana on nollaantunut. - notice_failed_to_save_issues: "{{count}} Tapahtum(an/ien) tallennus epäonnistui {{total}} valitut: {{ids}}." + notice_failed_to_save_issues: "%{count} Tapahtum(an/ien) tallennus epäonnistui %{total} valitut: %{ids}." notice_no_issue_selected: "Tapahtumia ei ole valittu! Valitse tapahtumat joita haluat muokata." notice_account_pending: "Tilisi on luotu ja odottaa ylläpitäjän hyväksyntää." notice_default_data_loaded: Vakioasetusten palautus onnistui. - error_can_t_load_default_data: "Vakioasetuksia ei voitu ladata: {{value}}" + error_can_t_load_default_data: "Vakioasetuksia ei voitu ladata: %{value}" error_scm_not_found: "Syötettä ja/tai versiota ei löydy tietovarastosta." - error_scm_command_failed: "Tietovarastoon pääsyssä tapahtui virhe: {{value}}" + error_scm_command_failed: "Tietovarastoon pääsyssä tapahtui virhe: %{value}" - mail_subject_lost_password: "Sinun {{value}} salasanasi" + mail_subject_lost_password: "Sinun %{value} salasanasi" mail_body_lost_password: 'Vaihtaaksesi salasanasi, napsauta seuraavaa linkkiä:' - mail_subject_register: "{{value}} tilin aktivointi" + mail_subject_register: "%{value} tilin aktivointi" mail_body_register: 'Aktivoidaksesi tilisi, napsauta seuraavaa linkkiä:' - mail_body_account_information_external: "Voit nyt käyttää {{value}} tiliäsi kirjautuaksesi järjestelmään." + mail_body_account_information_external: "Voit nyt käyttää %{value} tiliäsi kirjautuaksesi järjestelmään." mail_body_account_information: Sinun tilin tiedot - mail_subject_account_activation_request: "{{value}} tilin aktivointi pyyntö" - mail_body_account_activation_request: "Uusi käyttäjä ({{value}}) on rekisteröitynyt. Hänen tili odottaa hyväksyntääsi:" + mail_subject_account_activation_request: "%{value} tilin aktivointi pyyntö" + mail_body_account_activation_request: "Uusi käyttäjä (%{value}) on rekisteröitynyt. Hänen tili odottaa hyväksyntääsi:" gui_validation_error: 1 virhe - gui_validation_error_plural: "{{count}} virhettä" + gui_validation_error_plural: "%{count} virhettä" field_name: Nimi field_description: Kuvaus @@ -262,7 +265,8 @@ field_attr_lastname: Sukunimenmääre field_attr_mail: Sähköpostinmääre field_onthefly: Automaattinen käyttäjien luonti - field_done_ratio: % Tehty + field_start_date: Alku + field_done_ratio: "% Tehty" field_auth_source: Varmennusmuoto field_hide_mail: Piiloita sähköpostiosoitteeni field_comments: Kommentti @@ -321,14 +325,14 @@ label_x_projects: zero: no projects one: 1 project - other: "{{count}} projects" + other: "%{count} projects" label_project_all: Kaikki projektit label_project_latest: Uusimmat projektit label_issue: Tapahtuma label_issue_new: Uusi tapahtuma label_issue_plural: Tapahtumat label_issue_view_all: Näytä kaikki tapahtumat - label_issues_by: "Tapahtumat {{value}}" + label_issues_by: "Tapahtumat %{value}" label_document: Dokumentti label_document_new: Uusi dokumentti label_document_plural: Dokumentit @@ -390,8 +394,8 @@ label_text: Pitkä merkkijono label_attribute: Määre label_attribute_plural: Määreet - label_download: "{{count}} Lataus" - label_download_plural: "{{count}} Lataukset" + label_download: "%{count} Lataus" + label_download_plural: "%{count} Lataukset" label_no_data: Ei tietoa näytettäväksi label_change_status: Muutos tila label_history: Historia @@ -420,17 +424,17 @@ label_closed_issues: suljettu label_closed_issues_plural: suljettua label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{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" + other: "%{count} open" label_x_closed_issues_abbr: zero: 0 closed one: 1 closed - other: "{{count}} closed" + other: "%{count} closed" label_total: Yhteensä label_permissions: Oikeudet label_current_status: Nykyinen tila @@ -448,7 +452,7 @@ label_months_from: kuukauden päässä label_gantt: Gantt label_internal: Sisäinen - label_last_changes: "viimeiset {{count}} muutokset" + label_last_changes: "viimeiset %{count} muutokset" label_change_view_all: Näytä kaikki muutokset label_personalize_page: Personoi tämä sivu label_comment: Kommentti @@ -456,7 +460,7 @@ label_x_comments: zero: no comments one: 1 comment - other: "{{count}} comments" + other: "%{count} comments" label_comment_add: Lisää kommentti label_comment_added: Kommentti lisätty label_comment_delete: Poista kommentti @@ -480,8 +484,8 @@ label_repository: Tietovarasto label_repository_plural: Tietovarastot label_browse: Selaus - label_modification: "{{count}} muutos" - label_modification_plural: "{{count}} muutettu" + label_modification: "%{count} muutos" + label_modification_plural: "%{count} muutettu" label_revision: Versio label_revision_plural: Versiot label_added: lisätty @@ -496,8 +500,8 @@ label_sort_lower: Siirrä alas label_sort_lowest: Siirrä alimmaiseksi label_roadmap: Roadmap - label_roadmap_due_in: "Määräaika {{value}}" - label_roadmap_overdue: "{{value}} myöhässä" + label_roadmap_due_in: "Määräaika %{value}" + label_roadmap_overdue: "%{value} myöhässä" label_roadmap_no_issues: Ei tapahtumia tälle versiolle label_search: Haku label_result_plural: Tulokset @@ -515,8 +519,8 @@ label_changes_details: Kaikkien muutosten yksityiskohdat label_issue_tracking: Tapahtumien seuranta label_spent_time: Käytetty aika - label_f_hour: "{{value}} tunti" - label_f_hour_plural: "{{value}} tuntia" + label_f_hour: "%{value} tunti" + label_f_hour_plural: "%{value} tuntia" label_time_tracking: Ajan seuranta label_change_plural: Muutokset label_statistics: Tilastot @@ -561,12 +565,12 @@ label_month: Kuukausi label_week: Viikko label_language_based: Pohjautuen käyttäjän kieleen - label_sort_by: "Lajittele {{value}}" + label_sort_by: "Lajittele %{value}" label_send_test_email: Lähetä testi sähköposti - label_feeds_access_key_created_on: "RSS salasana luotiin {{value}} sitten" + label_feeds_access_key_created_on: "RSS salasana luotiin %{value} sitten" label_module_plural: Moduulit - label_added_time_by: "Lisännyt {{author}} {{age}} sitten" - label_updated_time: "Päivitetty {{value}} sitten" + label_added_time_by: "Lisännyt %{author} %{age} sitten" + label_updated_time: "Päivitetty %{value} sitten" label_jump_to_a_project: Siirry projektiin... label_file_plural: Tiedostot label_changeset_plural: Muutosryhmät @@ -582,7 +586,7 @@ label_registration_activation_by_email: tilin aktivointi sähköpostitse label_registration_manual_activation: tilin aktivointi käsin label_registration_automatic_activation: tilin aktivointi automaattisesti - label_display_per_page: "Per sivu: {{value}}" + label_display_per_page: "Per sivu: %{value}" label_age: Ikä label_change_properties: Vaihda asetuksia label_general: Yleinen @@ -638,17 +642,17 @@ text_tip_issue_end_day: tehtävä joka loppuu tänä päivänä text_tip_issue_begin_end_day: tehtävä joka alkaa ja loppuu tänä päivänä text_project_identifier_info: 'Pienet kirjaimet (a-z), numerot ja viivat ovat sallittu.
    Tallentamisen jälkeen tunnistetta ei voi muuttaa.' - text_caracters_maximum: "{{count}} merkkiä enintään." - text_caracters_minimum: "Täytyy olla vähintään {{count}} merkkiä pitkä." - text_length_between: "Pituus välillä {{min}} ja {{max}} merkkiä." + text_caracters_maximum: "%{count} merkkiä enintään." + text_caracters_minimum: "Täytyy olla vähintään %{count} merkkiä pitkä." + text_length_between: "Pituus välillä %{min} ja %{max} merkkiä." text_tracker_no_workflow: Työnkulkua ei määritelty tälle tapahtumalle text_unallowed_characters: Kiellettyjä merkkejä text_comma_separated: Useat arvot sallittu (pilkku eroteltuna). text_issues_ref_in_commit_messages: Liitän ja korjaan ongelmia syötetyssä viestissä - text_issue_added: "Issue {{id}} has been reported by {{author}}." - text_issue_updated: "Issue {{id}} has been updated by {{author}}." + text_issue_added: "Issue %{id} has been reported by %{author}." + text_issue_updated: "Issue %{id} has been updated by %{author}." text_wiki_destroy_confirmation: Oletko varma että haluat poistaa tämän wiki:n ja kaikki sen sisältämän tiedon? - text_issue_category_destroy_question: "Jotkut tapahtumat ({{count}}) ovat nimetty tälle luokalle. Mitä haluat tehdä?" + text_issue_category_destroy_question: "Jotkut tapahtumat (%{count}) ovat nimetty tälle luokalle. Mitä haluat tehdä?" text_issue_category_destroy_assignments: Poista luokan tehtävät text_issue_category_reassign_to: Vaihda tapahtuma tähän luokkaan text_user_mail_option: "Valitsemattomille projekteille, saat vain muistutuksen asioista joita seuraat tai olet mukana (esim. tapahtumat joissa olet tekijä tai nimettynä)." @@ -682,7 +686,7 @@ enumeration_activities: Historia (ajan seuranta) label_associated_revisions: Liittyvät versiot setting_user_format: Käyttäjien esitysmuoto - text_status_changed_by_changeset: "Päivitetty muutosversioon {{value}}." + text_status_changed_by_changeset: "Päivitetty muutosversioon %{value}." text_issues_destroy_confirmation: 'Oletko varma että haluat poistaa valitut tapahtumat ?' label_more: Lisää label_issue_added: Tapahtuma lisätty @@ -710,8 +714,8 @@ label_downloads_abbr: D/L label_add_another_file: Lisää uusi tiedosto label_this_month: tässä kuussa - text_destroy_time_entries_question: "{{hours}} tuntia on raportoitu tapahtumasta jonka aiot poistaa. Mitä haluat tehdä ?" - label_last_n_days: "viimeiset {{count}} päivää" + text_destroy_time_entries_question: "%{hours} tuntia on raportoitu tapahtumasta jonka aiot poistaa. Mitä haluat tehdä ?" + label_last_n_days: "viimeiset %{count} päivää" label_all_time: koko ajalta error_issue_not_found_in_project: 'Tapahtumaa ei löytynyt tai se ei kuulu tähän projektiin' label_this_year: tänä vuonna @@ -736,25 +740,24 @@ label_overall_activity: Kokonaishistoria error_scm_annotate: "Merkintää ei ole tai siihen ei voi lisätä selityksiä." label_planning: Suunnittelu - text_subprojects_destroy_warning: "Tämän aliprojekti(t): {{value}} tullaan myös poistamaan." - label_and_its_subprojects: "{{value}} ja aliprojektit" - mail_body_reminder: "{{count}} sinulle nimettyä tapahtuma(a) erääntyy {{days}} päivä sisään:" - mail_subject_reminder: "{{count}} tapahtuma(a) erääntyy {{days}} lähipäivinä" - text_user_wrote: "{{value}} kirjoitti:" + text_subprojects_destroy_warning: "Tämän aliprojekti(t): %{value} tullaan myös poistamaan." + label_and_its_subprojects: "%{value} ja aliprojektit" + mail_body_reminder: "%{count} sinulle nimettyä tapahtuma(a) erääntyy %{days} päivä sisään:" + mail_subject_reminder: "%{count} tapahtuma(a) erääntyy %{days} lähipäivinä" + text_user_wrote: "%{value} kirjoitti:" label_duplicated_by: kopioinut setting_enabled_scm: Versionhallinta käytettävissä text_enumeration_category_reassign_to: 'Siirrä täksi arvoksi:' - text_enumeration_destroy_question: "{{count}} kohdetta on sijoitettu tälle arvolle." + text_enumeration_destroy_question: "%{count} kohdetta on sijoitettu tälle arvolle." label_incoming_emails: Saapuvat sähköpostiviestit 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 setting_sequential_project_identifiers: Luo peräkkäiset projektien tunnisteet - setting_commit_logs_encoding: Tee viestien koodaus notice_unable_delete_version: Version poisto epäonnistui label_renamed: uudelleennimetty label_copied: kopioitu @@ -810,12 +813,12 @@ text_repository_usernames_mapping: "Valitse päivittääksesi Redmine käyttäjä jokaiseen käyttäjään joka löytyy tietovaraston lokista.\nKäyttäjät joilla on sama Redmine ja tietovaraston käyttäjänimi tai sähköpostiosoite, yhdistetään automaattisesti." permission_edit_own_messages: Muokkaa omia viestejä permission_delete_own_messages: Poista omia viestejä - label_user_activity: "Käyttäjän {{value}} historia" - label_updated_time_by: "Updated by {{author}} {{age}} ago" + label_user_activity: "Käyttäjän %{value} historia" + label_updated_time_by: "Updated by %{author} %{age} ago" text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' setting_diff_max_lines_displayed: Max number of diff lines displayed text_plugin_assets_writable: Plugin assets directory writable - warning_attachments_not_saved: "{{count}} file(s) could not be saved." + warning_attachments_not_saved: "%{count} file(s) could not be saved." button_create_and_continue: Create and continue text_custom_field_possible_values_info: 'One line for each value' label_display: Display @@ -830,21 +833,21 @@ label_descending: Descending label_sort: Sort label_ascending: Ascending - label_date_from_to: From {{start}} to {{end}} + label_date_from_to: From %{start} to %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? + text_wiki_page_destroy_question: This page has %{descendants} child page(s) and descendant(s). What do you want to do? text_wiki_page_reassign_children: Reassign child pages to this parent page text_wiki_page_nullify_children: Keep child pages as root pages text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated" label_wiki_content_added: Wiki page added - 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_added: "'%{id}' wiki page has been added" + mail_body_wiki_content_added: The '%{id}' wiki page has been added by %{author}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '%{id}' wiki page has been updated by %{author}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -852,14 +855,14 @@ label_branch: Branch 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"). - 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_changed: "%{label} changed from %{old} to %{new}" + text_journal_set_to: "%{label} set to %{value}" + text_journal_deleted: "%{label} deleted (%{old})" label_group_plural: Groups label_group: Group label_group_new: New group label_time_entry_plural: Spent time - text_journal_added: "{{label}} {{value}} added" + text_journal_added: "%{label} %{value} added" field_active: Active enumeration_system_activity: System Activity permission_delete_issue_watchers: Delete watchers @@ -894,9 +897,9 @@ setting_start_of_week: Start calendars on permission_view_issues: View Issues label_display_used_statuses_only: Only display statuses that are used by this tracker - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_api_access_key: API access key - label_api_access_key_created_on: API access key created {{value}} ago + label_api_access_key_created_on: API access key created %{value} ago label_feeds_access_key: RSS access key notice_api_access_key_reseted: Your API access key was reset. setting_rest_api_enabled: Enable REST web service @@ -923,12 +926,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -936,7 +939,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -947,8 +950,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Tee viestien koodaus + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/fr.yml.svn-base --- a/config/locales/.svn/text-base/fr.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/fr.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -17,7 +17,10 @@ abbr_day_names: [dim, lun, mar, mer, jeu, ven, sam] month_names: [~, janvier, février, mars, avril, mai, juin, juillet, août, septembre, octobre, novembre, décembre] abbr_month_names: [~, jan., fév., mar., avr., mai, juin, juil., août, sept., oct., nov., déc.] - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -36,38 +39,38 @@ less_than_x_seconds: zero: "moins d'une seconde" one: "moins d'une seconde" - other: "moins de {{count}} secondes" + other: "moins de %{count} secondes" x_seconds: one: "1 seconde" - other: "{{count}} secondes" + other: "%{count} secondes" less_than_x_minutes: zero: "moins d'une minute" one: "moins d'une minute" - other: "moins de {{count}} minutes" + other: "moins de %{count} minutes" x_minutes: one: "1 minute" - other: "{{count}} minutes" + other: "%{count} minutes" about_x_hours: one: "environ une heure" - other: "environ {{count}} heures" + other: "environ %{count} heures" x_days: one: "un jour" - other: "{{count}} jours" + other: "%{count} jours" about_x_months: one: "environ un mois" - other: "environ {{count}} mois" + other: "environ %{count} mois" x_months: one: "un mois" - other: "{{count}} mois" + other: "%{count} mois" about_x_years: one: "environ un an" - other: "environ {{count}} ans" + other: "environ %{count} ans" over_x_years: one: "plus d'un an" - other: "plus de {{count}} ans" + other: "plus de %{count} ans" almost_x_years: one: "presqu'un an" - other: "presque {{count}} ans" + other: "presque %{count} ans" prompts: year: "Année" month: "Mois" @@ -112,8 +115,8 @@ errors: template: header: - one: "Impossible d'enregistrer {{model}} : une erreur" - other: "Impossible d'enregistrer {{model}} : {{count}} erreurs." + one: "Impossible d'enregistrer %{model} : une erreur" + other: "Impossible d'enregistrer %{model} : %{count} erreurs." body: "Veuillez vérifier les champs suivants :" messages: inclusion: "n'est pas inclus(e) dans la liste" @@ -123,16 +126,17 @@ accepted: "doit être accepté(e)" empty: "doit être renseigné(e)" blank: "doit être renseigné(e)" - too_long: "est trop long (pas plus de {{count}} caractères)" - too_short: "est trop court (au moins {{count}} caractères)" - wrong_length: "ne fait pas la bonne longueur (doit comporter {{count}} caractères)" + too_long: "est trop long (pas plus de %{count} caractères)" + too_short: "est trop court (au moins %{count} caractères)" + wrong_length: "ne fait pas la bonne longueur (doit comporter %{count} caractères)" taken: "est déjà utilisé" not_a_number: "n'est pas un nombre" - greater_than: "doit être supérieur à {{count}}" - greater_than_or_equal_to: "doit être supérieur ou égal à {{count}}" - equal_to: "doit être égal à {{count}}" - less_than: "doit être inférieur à {{count}}" - less_than_or_equal_to: "doit être inférieur ou égal à {{count}}" + not_a_date: "n'est pas une date valide" + greater_than: "doit être supérieur à %{count}" + greater_than_or_equal_to: "doit être supérieur ou égal à %{count}" + equal_to: "doit être égal à %{count}" + less_than: "doit être inférieur à %{count}" + less_than_or_equal_to: "doit être inférieur ou égal à %{count}" odd: "doit être impair" even: "doit être pair" greater_than_start_date: "doit être postérieure à la date de début" @@ -150,7 +154,7 @@ general_csv_separator: ';' general_csv_decimal_separator: ',' general_csv_encoding: ISO-8859-1 - general_pdf_encoding: ISO-8859-1 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' notice_account_updated: Le compte a été mis à jour avec succès. @@ -165,25 +169,26 @@ 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}})" + notice_email_sent: "Un email a été envoyé à %{value}" + notice_email_error: "Erreur lors de l'envoi de l'email (%{value})" notice_feeds_access_key_reseted: "Votre clé d'accès aux flux RSS a été réinitialisée." - notice_failed_to_save_issues: "{{count}} demande(s) sur les {{total}} sélectionnées n'ont pas pu être mise(s) à jour : {{ids}}." + notice_failed_to_save_issues: "%{count} demande(s) sur les %{total} sélectionnées n'ont pas pu être mise(s) à jour : %{ids}." notice_no_issue_selected: "Aucune demande sélectionnée ! Cochez les demandes que vous voulez mettre à jour." notice_account_pending: "Votre compte a été créé et attend l'approbation de l'administrateur." notice_default_data_loaded: Paramétrage par défaut chargé avec succès. notice_unable_delete_version: Impossible de supprimer cette version. notice_issue_done_ratios_updated: L'avancement des demandes a été mis à jour. notice_api_access_key_reseted: Votre clé d'accès API a été réinitialisée. + notice_gantt_chart_truncated: "Le diagramme a été tronqué car il excède le nombre maximal d'éléments pouvant être affichés (%{max})" - error_can_t_load_default_data: "Une erreur s'est produite lors du chargement du paramétrage : {{value}}" + error_can_t_load_default_data: "Une erreur s'est produite lors du chargement du paramétrage : %{value}" error_scm_not_found: "L'entrée et/ou la révision demandée n'existe pas dans le dépôt." - error_scm_command_failed: "Une erreur s'est produite lors de l'accès au dépôt : {{value}}" + error_scm_command_failed: "Une erreur s'est produite lors de l'accès au dépôt : %{value}" error_scm_annotate: "L'entrée n'existe pas ou ne peut pas être annotée." error_issue_not_found_in_project: "La demande n'existe pas ou n'appartient pas à ce projet" error_can_not_reopen_issue_on_closed_version: 'Une demande assignée à une version fermée ne peut pas être réouverte' @@ -192,25 +197,25 @@ error_workflow_copy_target: 'Veuillez sélectionner les trackers et rôles cibles' error_issue_done_ratios_not_updated: L'avancement des demandes n'a pas pu être mis à jour. - warning_attachments_not_saved: "{{count}} fichier(s) n'ont pas pu être sauvegardés." + warning_attachments_not_saved: "%{count} fichier(s) n'ont pas pu être sauvegardés." - mail_subject_lost_password: "Votre mot de passe {{value}}" + mail_subject_lost_password: "Votre mot de passe %{value}" mail_body_lost_password: 'Pour changer votre mot de passe, cliquez sur le lien suivant :' - mail_subject_register: "Activation de votre compte {{value}}" + mail_subject_register: "Activation de votre compte %{value}" mail_body_register: 'Pour activer votre compte, cliquez sur le lien suivant :' - mail_body_account_information_external: "Vous pouvez utiliser votre compte {{value}} pour vous connecter." + mail_body_account_information_external: "Vous pouvez utiliser votre compte %{value} pour vous connecter." mail_body_account_information: Paramètres de connexion de votre compte - mail_subject_account_activation_request: "Demande d'activation d'un compte {{value}}" - mail_body_account_activation_request: "Un nouvel utilisateur ({{value}}) s'est inscrit. Son compte nécessite votre approbation :" - mail_subject_reminder: "{{count}} demande(s) arrivent à échéance ({{days}})" - mail_body_reminder: "{{count}} demande(s) qui vous sont assignées arrivent à échéance dans les {{days}} prochains jours :" - mail_subject_wiki_content_added: "Page wiki '{{id}}' ajoutée" - mail_body_wiki_content_added: "La page wiki '{{id}}' a été ajoutée par {{author}}." - mail_subject_wiki_content_updated: "Page wiki '{{id}}' mise à jour" - mail_body_wiki_content_updated: "La page wiki '{{id}}' a été mise à jour par {{author}}." + mail_subject_account_activation_request: "Demande d'activation d'un compte %{value}" + mail_body_account_activation_request: "Un nouvel utilisateur (%{value}) s'est inscrit. Son compte nécessite votre approbation :" + mail_subject_reminder: "%{count} demande(s) arrivent à échéance (%{days})" + mail_body_reminder: "%{count} demande(s) qui vous sont assignées arrivent à échéance dans les %{days} prochains jours :" + mail_subject_wiki_content_added: "Page wiki '%{id}' ajoutée" + mail_body_wiki_content_added: "La page wiki '%{id}' a été ajoutée par %{author}." + mail_subject_wiki_content_updated: "Page wiki '%{id}' mise à jour" + mail_body_wiki_content_updated: "La page wiki '%{id}' a été mise à jour par %{author}." gui_validation_error: 1 erreur - gui_validation_error_plural: "{{count}} erreurs" + gui_validation_error_plural: "%{count} erreurs" field_name: Nom field_description: Description @@ -272,7 +277,8 @@ field_attr_lastname: Attribut Nom field_attr_mail: Attribut Email field_onthefly: Création des utilisateurs à la volée - field_done_ratio: % réalisé + field_start_date: Début + field_done_ratio: "% réalisé" field_auth_source: Mode d'authentification field_hide_mail: Cacher mon adresse mail field_comments: Commentaire @@ -304,7 +310,11 @@ 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é" + field_issues_visibility: Visibilité des demandes + field_is_private: Privée + field_commit_logs_encoding: Encodage des messages de commit + setting_app_title: Titre de l'application setting_app_subtitle: Sous-titre de l'application setting_welcome_text: Texte d'accueil @@ -320,18 +330,17 @@ 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 setting_cross_project_issue_relations: Autoriser les relations entre demandes de différents projets setting_issue_list_default_columns: Colonnes affichées par défaut sur la liste des demandes setting_repositories_encodings: Encodages des dépôts - setting_commit_logs_encoding: Encodage des messages de commit setting_emails_footer: Pied-de-page des emails setting_protocol: Protocole setting_per_page_options: Options d'objets affichés par page @@ -346,7 +355,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 @@ -358,18 +367,23 @@ setting_gravatar_default: Image Gravatar par défaut setting_start_of_week: Jour de début des calendriers setting_cache_formatted_text: Mettre en cache le texte formaté + setting_commit_logtime_enabled: Permettre la saisie de temps + setting_commit_logtime_activity_id: Activité pour le temps saisi + setting_gantt_items_limit: Nombre maximum d'éléments affichés sur le gantt permission_add_project: Créer un projet 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 permission_add_issues: Créer des demandes permission_edit_issues: Modifier les demandes permission_manage_issue_relations: Gérer les relations + permission_set_issues_private: Rendre les demandes publiques ou privées + permission_set_own_issues_private: Rendre ses propres demandes publiques ou privées permission_add_issue_notes: Ajouter des notes permission_edit_issue_notes: Modifier les notes permission_edit_own_issue_notes: Modifier ses propres notes @@ -434,7 +448,7 @@ label_x_projects: zero: aucun projet one: un projet - other: "{{count}} projets" + other: "%{count} projets" label_project_all: Tous les projets label_project_latest: Derniers projets label_issue: Demande @@ -443,7 +457,10 @@ label_issue_view_all: Voir toutes les demandes label_issue_added: Demande ajoutée label_issue_updated: Demande mise à jour - label_issues_by: "Demandes par {{value}}" + label_issue_note_added: Note ajoutée + label_issue_status_updated: Statut changé + label_issue_priority_updated: Priorité changée + label_issues_by: "Demandes par %{value}" label_document: Document label_document_new: Nouveau document label_document_plural: Documents @@ -452,6 +469,8 @@ label_role_plural: Rôles label_role_new: Nouveau rôle label_role_and_permissions: Rôles et permissions + label_role_anonymous: Anonyme + label_role_non_member: Non membre label_member: Membre label_member_new: Nouveau membre label_member_plural: Membres @@ -480,7 +499,7 @@ label_my_page: Ma page label_my_account: Mon compte label_my_projects: Mes projets - label_my_page_block: Ma page bloque + label_my_page_block: Blocs disponibles label_administration: Administration label_login: Connexion label_logout: Déconnexion @@ -491,7 +510,7 @@ label_registered_on: "Inscrit le " label_activity: Activité label_overall_activity: Activité globale - label_user_activity: "Activité de {{value}}" + label_user_activity: "Activité de %{value}" label_new: Nouveau label_logged_as: Connecté en tant que label_environment: Environnement @@ -501,7 +520,7 @@ label_auth_source_plural: Modes d'authentification label_subproject_plural: Sous-projets label_subproject_new: Nouveau sous-projet - label_and_its_subprojects: "{{value}} et ses sous-projets" + label_and_its_subprojects: "%{value} et ses sous-projets" label_min_max_length: Longueurs mini - maxi label_list: Liste label_date: Date @@ -512,8 +531,8 @@ label_text: Texte long label_attribute: Attribut label_attribute_plural: Attributs - label_download: "{{count}} téléchargement" - label_download_plural: "{{count}} téléchargements" + label_download: "%{count} téléchargement" + label_download_plural: "%{count} téléchargements" label_no_data: Aucune donnée à afficher label_change_status: Changer le statut label_history: Historique @@ -530,6 +549,7 @@ label_news_latest: Dernières annonces label_news_view_all: Voir toutes les annonces label_news_added: Annonce ajoutée + label_news_comment_added: Commentaire ajouté à une annonce label_settings: Configuration label_overview: Aperçu label_version: Version @@ -544,17 +564,17 @@ label_closed_issues: fermé label_closed_issues_plural: fermés label_x_open_issues_abbr_on_total: - zero: 0 ouvert sur {{total}} - one: 1 ouvert sur {{total}} - other: "{{count}} ouverts sur {{total}}" + zero: 0 ouvert sur %{total} + one: 1 ouvert sur %{total} + other: "%{count} ouverts sur %{total}" label_x_open_issues_abbr: zero: 0 ouvert one: 1 ouvert - other: "{{count}} ouverts" + other: "%{count} ouverts" label_x_closed_issues_abbr: zero: 0 fermé one: 1 fermé - other: "{{count}} fermés" + other: "%{count} fermés" label_total: Total label_permissions: Permissions label_current_status: Statut actuel @@ -572,7 +592,7 @@ label_months_from: mois depuis label_gantt: Gantt label_internal: Interne - label_last_changes: "{{count}} derniers changements" + label_last_changes: "%{count} derniers changements" label_change_view_all: Voir tous les changements label_personalize_page: Personnaliser cette page label_comment: Commentaire @@ -580,13 +600,14 @@ label_x_comments: zero: aucun commentaire one: un commentaire - other: "{{count}} commentaires" + other: "%{count} commentaires" label_comment_add: Ajouter un commentaire label_comment_added: Commentaire ajouté label_comment_delete: Supprimer les commentaires 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 @@ -599,7 +620,7 @@ label_yesterday: hier label_this_week: cette semaine label_last_week: la semaine dernière - label_last_n_days: "les {{count}} derniers jours" + label_last_n_days: "les %{count} derniers jours" label_this_month: ce mois-ci label_last_month: le mois dernier label_this_year: cette année @@ -613,8 +634,8 @@ label_repository: Dépôt label_repository_plural: Dépôts label_browse: Parcourir - label_modification: "{{count}} modification" - label_modification_plural: "{{count}} modifications" + label_modification: "%{count} modification" + label_modification_plural: "%{count} modifications" label_revision: "Révision " label_revision_plural: Révisions label_associated_revisions: Révisions associées @@ -632,8 +653,8 @@ label_sort_lower: Descendre label_sort_lowest: Descendre en dernier label_roadmap: Roadmap - label_roadmap_due_in: "Échéance dans {{value}}" - label_roadmap_overdue: "En retard de {{value}}" + label_roadmap_due_in: "Échéance dans %{value}" + label_roadmap_overdue: "En retard de %{value}" label_roadmap_no_issues: Aucune demande pour cette version label_search: "Recherche " label_result_plural: Résultats @@ -651,8 +672,8 @@ label_changes_details: Détails de tous les changements label_issue_tracking: Suivi des demandes label_spent_time: Temps passé - label_f_hour: "{{value}} heure" - label_f_hour_plural: "{{value}} heures" + label_f_hour: "%{value} heure" + label_f_hour_plural: "%{value} heures" label_time_tracking: Suivi du temps label_change_plural: Changements label_statistics: Statistiques @@ -701,13 +722,13 @@ label_date_from: Du label_date_to: Au label_language_based: Basé sur la langue de l'utilisateur - label_sort_by: "Trier par {{value}}" + label_sort_by: "Trier par %{value}" label_send_test_email: Envoyer un email de test - label_feeds_access_key_created_on: "Clé d'accès RSS créée il y a {{value}}" + label_feeds_access_key_created_on: "Clé d'accès RSS créée il y a %{value}" label_module_plural: Modules - label_added_time_by: "Ajouté par {{author}} il y a {{age}}" - label_updated_time_by: "Mis à jour par {{author}} il y a {{age}}" - label_updated_time: "Mis à jour il y a {{value}}" + label_added_time_by: "Ajouté par %{author} il y a %{age}" + label_updated_time_by: "Mis à jour par %{author} il y a %{age}" + label_updated_time: "Mis à jour il y a %{value}" label_jump_to_a_project: Aller à un projet... label_file_plural: Fichiers label_changeset_plural: Révisions @@ -723,7 +744,7 @@ label_registration_activation_by_email: activation du compte par email label_registration_manual_activation: activation manuelle du compte label_registration_automatic_activation: activation automatique du compte - label_display_per_page: "Par page : {{value}}" + label_display_per_page: "Par page : %{value}" label_age: Âge label_change_properties: Changer les propriétés label_general: Général @@ -746,7 +767,7 @@ label_sort: Tri label_ascending: Croissant label_descending: Décroissant - label_date_from_to: Du {{start}} au {{end}} + label_date_from_to: Du %{start} au %{end} label_wiki_content_added: Page wiki ajoutée label_wiki_content_updated: Page wiki mise à jour label_group_plural: Groupes @@ -764,23 +785,30 @@ label_update_issue_done_ratios: Mettre à jour l'avancement des demandes label_display_used_statuses_only: N'afficher que les statuts utilisés dans ce tracker label_api_access_key: Clé d'accès API - label_api_access_key_created_on: Clé d'accès API créée il y a {{value}} + label_api_access_key_created_on: Clé d'accès API créée il y a %{value} label_feeds_access_key: Clé d'accès RSS label_missing_api_access_key: Clé d'accès API manquante label_missing_feeds_access_key: Clé d'accès RSS manquante label_close_versions: Fermer les versions terminées - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_profile: Profil label_subtask_plural: Sous-tâches label_project_copy_notifications: Envoyer les notifications durant la copie du projet label_principal_search: "Rechercher un utilisateur ou un groupe :" label_user_search: "Rechercher un utilisateur :" + label_additional_workflow_transitions_for_author: Autorisations supplémentaires lorsque l'utilisateur a créé la demande + label_additional_workflow_transitions_for_assignee: Autorisations supplémentaires lorsque la demande est assignée à l'utilisateur + label_issues_visibility_all: Toutes les demandes + label_issues_visibility_public: Toutes les demandes non privées + label_issues_visibility_own: Demandes créées par ou assignées à l'utilisateur button_login: Connexion button_submit: Soumettre button_save: Sauvegarder button_check_all: Tout cocher button_uncheck_all: Tout décocher + button_collapse_all: Plier tout + button_expand_all: Déplier tout button_delete: Supprimer button_create: Créer button_create_and_continue: Créer et continuer @@ -832,53 +860,56 @@ text_regexp_info: ex. ^[A-Z0-9]+$ text_min_max_length_info: 0 pour aucune restriction text_project_destroy_confirmation: Êtes-vous sûr de vouloir supprimer ce projet et toutes ses données ? - text_subprojects_destroy_warning: "Ses sous-projets : {{value}} seront également supprimés." + text_subprojects_destroy_warning: "Ses sous-projets : %{value} seront également supprimés." text_workflow_edit: Sélectionner un tracker et un rôle pour éditer le workflow text_are_you_sure: Êtes-vous sûr ? text_tip_issue_begin_day: tâche commençant ce jour text_tip_issue_end_day: tâche finissant ce jour text_tip_issue_begin_end_day: tâche commençant et finissant ce jour text_project_identifier_info: 'Seuls les lettres minuscules (a-z), chiffres et tirets sont autorisés.
    Un fois sauvegardé, l''identifiant ne pourra plus être modifié.' - text_caracters_maximum: "{{count}} caractères maximum." - text_caracters_minimum: "{{count}} caractères minimum." - text_length_between: "Longueur comprise entre {{min}} et {{max}} caractères." + text_caracters_maximum: "%{count} caractères maximum." + text_caracters_minimum: "%{count} caractères minimum." + text_length_between: "Longueur comprise entre %{min} et %{max} caractères." text_tracker_no_workflow: Aucun worflow n'est défini pour ce tracker text_unallowed_characters: Caractères non autorisés text_comma_separated: Plusieurs valeurs possibles (séparées par des virgules). text_line_separated: Plusieurs valeurs possibles (une valeur par ligne). text_issues_ref_in_commit_messages: Référencement et résolution des demandes dans les commentaires de commits - text_issue_added: "La demande {{id}} a été soumise par {{author}}." - text_issue_updated: "La demande {{id}} a été mise à jour par {{author}}." + 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)." text_no_configuration_data: "Les rôles, trackers, statuts et le workflow ne sont pas encore paramétrés.\nIl est vivement recommandé de charger le paramétrage par defaut. Vous pourrez le modifier une fois chargé." text_load_default_configuration: Charger le paramétrage par défaut - text_status_changed_by_changeset: "Appliqué par commit {{value}}." - text_issues_destroy_confirmation: 'Êtes-vous sûr de vouloir supprimer le(s) demandes(s) selectionnée(s) ?' + text_status_changed_by_changeset: "Appliqué par commit %{value}." + text_time_logged_by_changeset: "Appliqué par commit %{value}" + text_issues_destroy_confirmation: 'Êtes-vous sûr de vouloir supprimer la ou les demandes(s) selectionnée(s) ?' + text_issues_destroy_descendants_confirmation: "Cela entrainera également la suppression de %{count} sous-tâche(s)." text_select_project_modules: 'Sélectionner les modules à activer pour ce projet :' text_default_administrator_account_changed: Compte administrateur par défaut changé text_file_repository_writable: Répertoire de stockage des fichiers accessible en écriture text_plugin_assets_writable: Répertoire public des plugins accessible en écriture text_rmagick_available: Bibliothèque RMagick présente (optionnelle) - text_destroy_time_entries_question: "{{hours}} heures ont été enregistrées sur les demandes à supprimer. Que voulez-vous faire ?" + text_destroy_time_entries_question: "%{hours} heures ont été enregistrées sur les demandes à supprimer. Que voulez-vous faire ?" text_destroy_time_entries: Supprimer les heures text_assign_time_entries_to_project: Reporter les heures sur le projet text_reassign_time_entries: 'Reporter les heures sur cette demande:' - text_user_wrote: "{{value}} a écrit :" - text_enumeration_destroy_question: "Cette valeur est affectée à {{count}} objets." + 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' - text_wiki_page_destroy_question: "Cette page possède {{descendants}} sous-page(s) et descendante(s). Que voulez-vous faire ?" + text_wiki_page_destroy_question: "Cette page possède %{descendants} sous-page(s) et descendante(s). Que voulez-vous faire ?" text_wiki_page_nullify_children: "Conserver les sous-pages en tant que pages racines" 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 " @@ -912,28 +943,29 @@ label_branch: Branche 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_set_to: "{{label}} mis à {{value}}" - text_journal_deleted: "{{label}} {{old}} supprimé" - text_journal_added: "{{label}} {{value}} ajouté" + 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é" enumeration_system_activity: Activité système label_board_sticky: Sticky label_board_locked: Verrouillé error_unable_delete_issue_status: Impossible de supprimer le statut de demande error_can_not_delete_custom_field: Impossible de supprimer le champ personnalisé - error_unable_to_connect: Connexion impossible ({{value}}) + error_unable_to_connect: Connexion impossible (%{value}) error_can_not_remove_role: Ce rôle est utilisé et ne peut pas être supprimé. error_can_not_delete_tracker: Ce tracker contient des demandes et ne peut pas être supprimé. field_principal: Principal - notice_failed_to_save_members: "Erreur lors de la sauvegarde des membres: {{errors}}." + notice_failed_to_save_members: "Erreur lors de la sauvegarde des membres: %{errors}." text_zoom_out: Zoom arrière text_zoom_in: Zoom avant notice_unable_delete_time_entry: Impossible de supprimer le temps passé. label_overall_spent_time: Temps passé global - field_time_entries: Log time + field_time_entries: Temps passé project_module_gantt: Gantt project_module_calendar: Calendrier - button_edit_associated_wikipage: "Modifier la page wiki associée: {{page_title}}" + button_edit_associated_wikipage: "Modifier la page wiki associée: %{page_title}" text_are_you_sure_with_children: Supprimer la demande et toutes ses sous-demandes ? field_text: Champ texte label_user_mail_option_only_owner: Seulement pour ce que j'ai créé @@ -943,5 +975,19 @@ label_user_mail_option_none: Aucune notification field_member_of_group: Groupe de l'assigné field_assigned_to_role: Rôle de l'assigné - field_start_date: Start date - setting_emails_header: Emails header + setting_emails_header: En-tête des emails + label_bulk_edit_selected_time_entries: Modifier les temps passés sélectionnées + text_time_entries_destroy_confirmation: "Etes-vous sûr de vouloir supprimer les temps passés sélectionnés ?" + field_scm_path_encoding: Encodage des chemins + text_scm_path_encoding_note: "Défaut : UTF-8" + field_path_to_repository: Chemin du dépôt + field_root_directory: Répertoire racine + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: "Dépôt nu (bare) et local (exemples : /gitrepo, c:\gitrepo)" + text_mercurial_repository_note: "Dépôt local (exemples : /hgrepo, c:\hgrepo)" + text_scm_command: Commande + text_scm_command_version: Version + label_git_report_last_commit: Afficher le dernier commit des fichiers et répertoires + text_scm_config: Vous pouvez configurer les commandes des SCM dans config/configuration.yml. Redémarrer l'application après modification. + text_scm_command_not_available: Ce SCM n'est pas disponible. Vérifier les paramètres dans la section administration. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/gl.yml.svn-base --- a/config/locales/.svn/text-base/gl.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/gl.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -55,7 +55,10 @@ abbr_day_names: [Dom, Lun, Mar, Mer, Xov, Ven, Sab] month_names: [~, Xaneiro, Febreiro, Marzo, Abril, Maio, Xunio, Xullo, Agosto, Setembro, Outubro, Novembro, Decembro] abbr_month_names: [~, Xan, Feb, Maz, Abr, Mai, Xun, Xul, Ago, Set, Out, Nov, Dec] - order: [:day, :month, :year] + order: + - :day + - :month + - :year time: formats: @@ -74,41 +77,41 @@ zero: 'menos dun segundo' one: '1 segundo' few: 'poucos segundos' - other: '{{count}} segundos' + other: '%{count} segundos' x_seconds: one: '1 segundo' - other: '{{count}} segundos' + other: '%{count} segundos' less_than_x_minutes: zero: 'menos dun minuto' one: '1 minuto' - other: '{{count}} minutos' + other: '%{count} minutos' x_minutes: one: '1 minuto' - other: '{{count}} minuto' + other: '%{count} minuto' about_x_hours: one: 'aproximadamente unha hora' - other: '{{count}} horas' + other: '%{count} horas' x_days: one: '1 día' - other: '{{count}} días' + other: '%{count} días' x_weeks: one: '1 semana' - other: '{{count}} semanas' + other: '%{count} semanas' about_x_months: one: 'aproximadamente 1 mes' - other: '{{count}} meses' + other: '%{count} meses' x_months: one: '1 mes' - other: '{{count}} meses' + other: '%{count} meses' about_x_years: one: 'aproximadamente 1 ano' - other: '{{count}} anos' + other: '%{count} anos' over_x_years: one: 'máis dun ano' - other: '{{count}} anos' + other: '%{count} anos' almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" now: 'agora' today: 'hoxe' tomorrow: 'mañá' @@ -124,8 +127,8 @@ errors: template: header: - one: "1 erro evitou que se poidese gardar o {{model}}" - other: "{{count}} erros evitaron que se poidese gardar o {{model}}" + one: "1 erro evitou que se poidese gardar o %{model}" + other: "%{count} erros evitaron que se poidese gardar o %{model}" body: "Atopáronse os seguintes problemas:" messages: inclusion: "non está incluido na lista" @@ -135,16 +138,16 @@ accepted: "debe ser aceptado" empty: "non pode estar valeiro" blank: "non pode estar en blanco" - too_long: "é demasiado longo (non máis de {{count}} carácteres)" - too_short: "é demasiado curto (non menos de {{count}} carácteres)" - wrong_length: "non ten a lonxitude correcta (debe ser de {{count}} carácteres)" + too_long: "é demasiado longo (non máis de %{count} carácteres)" + too_short: "é demasiado curto (non menos de %{count} carácteres)" + wrong_length: "non ten a lonxitude correcta (debe ser de %{count} carácteres)" taken: "non está dispoñible" not_a_number: "non é un número" - greater_than: "debe ser maior que {{count}}" - greater_than_or_equal_to: "debe ser maior ou igual que {{count}}" - equal_to: "debe ser igual a {{count}}" - less_than: "debe ser menor que {{count}}" - less_than_or_equal_to: "debe ser menor ou igual que {{count}}" + greater_than: "debe ser maior que %{count}" + greater_than_or_equal_to: "debe ser maior ou igual que %{count}" + equal_to: "debe ser igual a %{count}" + less_than: "debe ser menor que %{count}" + less_than_or_equal_to: "debe ser menor ou igual que %{count}" odd: "debe ser par" even: "debe ser impar" greater_than_start_date: "debe ser posterior á data de comezo" @@ -216,10 +219,10 @@ enumeration_activities: Actividades (tempo dedicado) enumeration_doc_categories: Categorías do documento enumeration_issue_priorities: Prioridade das peticións - error_can_t_load_default_data: "Non se puido cargar a configuración por defecto: {{value}}" + error_can_t_load_default_data: "Non se puido cargar a configuración por defecto: %{value}" error_issue_not_found_in_project: 'A petición non se atopa ou non está asociada a este proxecto' error_scm_annotate: "Non existe a entrada ou non se puido anotar" - error_scm_command_failed: "Aconteceu un erro ao acceder ó repositorio: {{value}}" + error_scm_command_failed: "Aconteceu un erro ao acceder ó repositorio: %{value}" error_scm_not_found: "A entrada e/ou revisión non existe no repositorio." field_account: Conta field_activity: Actividade @@ -241,7 +244,7 @@ field_default_value: Estado por defecto field_delay: Retraso field_description: Descrición - field_done_ratio: % Realizado + field_done_ratio: "% Realizado" field_downloads: Descargas field_due_date: Data fin field_effective_date: Data @@ -290,6 +293,7 @@ field_role: Perfil field_searchable: Incluír nas búsquedas field_spent_on: Data + field_start_date: Data de inicio field_start_page: Páxina principal field_status: Estado field_subject: Tema @@ -309,25 +313,25 @@ general_csv_separator: ';' general_first_day_of_week: '1' general_lang_name: 'Galego' - general_pdf_encoding: ISO-8859-15 + general_pdf_encoding: UTF-8 general_text_No: 'Non' general_text_Yes: 'Si' general_text_no: 'non' general_text_yes: 'si' gui_validation_error: 1 erro - gui_validation_error_plural: "{{count}} erros" + gui_validation_error_plural: "%{count} erros" label_activity: Actividade label_add_another_file: Engadir outro arquivo label_add_note: Engadir unha nota label_added: engadido - label_added_time_by: "Engadido por {{author}} fai {{age}}" + label_added_time_by: "Engadido por %{author} fai %{age}" label_administration: Administración label_age: Idade label_ago: fai label_all: todos label_all_time: todo o tempo label_all_words: Tódalas palabras - label_and_its_subprojects: "{{value}} e proxectos secundarios" + label_and_its_subprojects: "%{value} e proxectos secundarios" label_applied_status: Aplicar estado label_assigned_to_me_issues: Peticións asignadas a min label_associated_revisions: Revisións asociadas @@ -360,17 +364,17 @@ label_closed_issues: pechada label_closed_issues_plural: pechadas label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{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" + other: "%{count} open" label_x_closed_issues_abbr: zero: 0 closed one: 1 closed - other: "{{count}} closed" + other: "%{count} closed" label_comment: Comentario label_comment_add: Engadir un comentario label_comment_added: Comentario engadido @@ -379,7 +383,7 @@ label_x_comments: zero: no comments one: 1 comment - other: "{{count}} comments" + other: "%{count} comments" label_commits_per_author: Commits por autor label_commits_per_month: Commits por mes label_confirmation: Confirmación @@ -403,13 +407,13 @@ label_diff_inline: en liña label_diff_side_by_side: cara a cara label_disabled: deshabilitado - label_display_per_page: "Por páxina: {{value}}" + label_display_per_page: "Por páxina: %{value}" label_document: Documento label_document_added: Documento engadido label_document_new: Novo documento label_document_plural: Documentos - label_download: "{{count}} Descarga" - label_download_plural: "{{count}} Descargas" + label_download: "%{count} Descarga" + label_download_plural: "%{count} Descargas" label_downloads_abbr: D/L label_duplicated_by: duplicada por label_duplicates: duplicada de @@ -421,10 +425,10 @@ label_equals: igual label_example: Exemplo label_export_to: 'Exportar a:' - label_f_hour: "{{value}} hora" - label_f_hour_plural: "{{value}} horas" + label_f_hour: "%{value} hora" + label_f_hour_plural: "%{value} horas" label_feed_plural: Feeds - label_feeds_access_key_created_on: "Clave de acceso por RSS creada fai {{value}}" + label_feeds_access_key_created_on: "Clave de acceso por RSS creada fai %{value}" label_file_added: Arquivo engadido label_file_plural: Arquivos label_filter_add: Engadir o filtro @@ -461,13 +465,13 @@ label_issue_updated: Petición actualizada label_issue_view_all: Ver tódalas peticións label_issue_watchers: Seguidores - label_issues_by: "Peticións por {{value}}" + label_issues_by: "Peticións por %{value}" label_jump_to_a_project: Ir ao proxecto... label_language_based: Baseado no idioma - label_last_changes: "últimos {{count}} cambios" + label_last_changes: "últimos %{count} cambios" label_last_login: Última conexión label_last_month: último mes - label_last_n_days: "últimos {{count}} días" + label_last_n_days: "últimos %{count} días" label_last_week: última semana label_latest_revision: Última revisión label_latest_revision_plural: Últimas revisións @@ -488,8 +492,8 @@ label_message_plural: Mensaxes label_message_posted: Mensaxe engadida label_min_max_length: Lonxitude mín - máx - label_modification: "{{count}} modificación" - label_modification_plural: "{{count}} modificacións" + label_modification: "%{count} modificación" + label_modification_plural: "%{count} modificacións" label_modified: modificado label_module_plural: Módulos label_month: Mes @@ -540,7 +544,7 @@ label_x_projects: zero: no projects one: 1 project - other: "{{count}} projects" + other: "%{count} projects" label_public_projects: Proxectos públicos label_query: Consulta personalizada label_query_new: Nova consulta @@ -567,9 +571,9 @@ label_revision: Revisión label_revision_plural: Revisións label_roadmap: Planificación - label_roadmap_due_in: "Remata en {{value}}" + label_roadmap_due_in: "Remata en %{value}" label_roadmap_no_issues: Non hai peticións para esta versión - label_roadmap_overdue: "{{value}} tarde" + label_roadmap_overdue: "%{value} tarde" label_role: Perfil label_role_and_permissions: Perfiles e permisos label_role_new: Novo perfil @@ -581,7 +585,7 @@ label_send_test_email: Enviar un correo de proba label_settings: Configuración label_show_completed_versions: Mostra as versións rematadas - label_sort_by: "Ordenar por {{value}}" + label_sort_by: "Ordenar por %{value}" label_sort_higher: Subir label_sort_highest: Primeiro label_sort_lower: Baixar @@ -605,11 +609,11 @@ label_tracker: Tipo label_tracker_new: Novo tipo label_tracker_plural: Tipos de peticións - label_updated_time: "Actualizado fai {{value}}" - label_updated_time_by: "Actualizado por {{author}} fai {{age}}" + label_updated_time: "Actualizado fai %{value}" + label_updated_time_by: "Actualizado por %{author} fai %{age}" label_used_by: Utilizado por label_user: Usuario - label_user_activity: "Actividade de {{value}}" + label_user_activity: "Actividade de %{value}" label_user_mail_no_self_notified: "Non quero ser avisado de cambios feitos por min" label_user_mail_option_all: "Para calquera evento en tódolos proxectos" label_user_mail_option_selected: "Para calquera evento dos proxectos seleccionados..." @@ -630,16 +634,16 @@ label_workflow: Fluxo de traballo label_year: Ano label_yesterday: onte - mail_body_account_activation_request: "Inscribiuse un novo usuario ({{value}}). A conta está pendente de aprobación:" + mail_body_account_activation_request: "Inscribiuse un novo usuario (%{value}). A conta está pendente de aprobación:" mail_body_account_information: Información sobre a súa conta - mail_body_account_information_external: "Pode usar a súa conta {{value}} para conectarse." + mail_body_account_information_external: "Pode usar a súa conta %{value} para conectarse." mail_body_lost_password: 'Para cambiar o seu contrasinal, faga clic no seguinte enlace:' mail_body_register: 'Para activar a súa conta, faga clic no seguinte enlace:' - mail_body_reminder: "{{count}} petición(s) asignadas a ti rematan nos próximos {{days}} días:" - mail_subject_account_activation_request: "Petición de activación de conta {{value}}" - mail_subject_lost_password: "O teu contrasinal de {{value}}" - mail_subject_register: "Activación da conta de {{value}}" - mail_subject_reminder: "{{count}} petición(s) rematarán nos próximos {{days}} días" + mail_body_reminder: "%{count} petición(s) asignadas a ti rematan nos próximos %{days} días:" + mail_subject_account_activation_request: "Petición de activación de conta %{value}" + mail_subject_lost_password: "O teu contrasinal de %{value}" + mail_subject_register: "Activación da conta de %{value}" + mail_subject_reminder: "%{count} petición(s) rematarán nos próximos %{days} días" notice_account_activated: A súa conta foi activada. Xa pode conectarse. notice_account_invalid_creditentials: Usuario ou contrasinal inválido. notice_account_lost_email_sent: Enviouse un correo con instrucións para elixir un novo contrasinal. @@ -651,9 +655,9 @@ notice_account_wrong_password: Contrasinal incorrecto. notice_can_t_change_password: Esta conta utiliza unha fonte de autenticación externa. Non é posible cambiar o contrasinal. notice_default_data_loaded: Configuración por defecto cargada correctamente. - notice_email_error: "Ocorreu un error enviando o correo ({{value}})" - notice_email_sent: "Enviouse un correo a {{value}}" - notice_failed_to_save_issues: "Imposible gravar %s petición(s) en {{count}} seleccionado: {{ids}}." + notice_email_error: "Ocorreu un error enviando o correo (%{value})" + notice_email_sent: "Enviouse un correo a %{value}" + notice_failed_to_save_issues: "Imposible gravar %{count} petición(s) de %{total} seleccionada(s): %{ids}." notice_feeds_access_key_reseted: A súa clave de acceso para RSS reiniciouse. notice_file_not_found: A páxina á que tenta acceder non existe. notice_locking_conflict: Os datos modificáronse por outro usuario. @@ -728,7 +732,6 @@ setting_autologin: Conexión automática setting_bcc_recipients: Ocultar as copias de carbón (bcc) setting_commit_fix_keywords: Palabras clave para a corrección - setting_commit_logs_encoding: Codificación das mensaxes de commit setting_commit_ref_keywords: Palabras clave para a referencia setting_cross_project_issue_relations: Permitir relacionar peticións de distintos proxectos setting_date_format: Formato da data @@ -764,25 +767,25 @@ status_registered: rexistrado text_are_you_sure: ¿Está seguro? text_assign_time_entries_to_project: Asignar as horas ó proxecto - text_caracters_maximum: "{{count}} caracteres como máximo." - text_caracters_minimum: "{{count}} caracteres como mínimo" + text_caracters_maximum: "%{count} caracteres como máximo." + text_caracters_minimum: "%{count} caracteres como mínimo" text_comma_separated: Múltiples valores permitidos (separados por coma). text_default_administrator_account_changed: Conta de administrador por defecto modificada 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_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_enumeration_destroy_question: "%{count} obxectos con este valor asignado." text_file_repository_writable: Pódese escribir no repositorio - text_issue_added: "Petición {{id}} engadida por {{author}}." + text_issue_added: "Petición %{id} engadida por %{author}." text_issue_category_destroy_assignments: Deixar as peticións sen categoría - text_issue_category_destroy_question: "Algunhas peticións ({{count}}) están asignadas a esta categoría. ¿Que desexa facer?" + text_issue_category_destroy_question: "Algunhas peticións (%{count}) están asignadas a esta categoría. ¿Que desexa facer?" text_issue_category_reassign_to: Reasignar as peticións á categoría - text_issue_updated: "A petición {{id}} actualizouse por {{author}}." + text_issue_updated: "A petición %{id} actualizouse por %{author}." text_issues_destroy_confirmation: '¿Seguro que quere borrar as peticións seleccionadas?' text_issues_ref_in_commit_messages: Referencia e petición de corrección nas mensaxes - text_length_between: "Lonxitude entre {{min}} e {{max}} caracteres." + text_length_between: "Lonxitude entre %{min} e %{max} caracteres." text_load_default_configuration: Cargar a configuración por defecto text_min_max_length_info: 0 para ningunha restrición text_no_configuration_data: "Inda non se configuraron perfiles, nin tipos, estados e fluxo de traballo asociado a peticións. Recoméndase encarecidamente cargar a configuración por defecto. Unha vez cargada, poderá modificala." @@ -794,18 +797,18 @@ text_rmagick_available: RMagick dispoñible (opcional) text_select_mail_notifications: Seleccionar os eventos a notificar text_select_project_modules: 'Seleccione os módulos a activar para este proxecto:' - text_status_changed_by_changeset: "Aplicado nos cambios {{value}}" - text_subprojects_destroy_warning: "Os proxectos secundarios: {{value}} tamén se eliminarán" + text_status_changed_by_changeset: "Aplicado nos cambios %{value}" + text_subprojects_destroy_warning: "Os proxectos secundarios: %{value} tamén se eliminarán" text_tip_issue_begin_day: tarefa que comeza este día text_tip_issue_begin_end_day: tarefa que comeza e remata este día text_tip_issue_end_day: tarefa que remata este día text_tracker_no_workflow: Non hai ningún fluxo de traballo definido para este tipo de petición text_unallowed_characters: Caracteres non permitidos text_user_mail_option: "Dos proxectos non seleccionados, só recibirá notificacións sobre elementos monitorizados ou elementos nos que estea involucrado (por exemplo, peticións das que vostede sexa autor ou asignadas a vostede)." - text_user_wrote: "{{value}} escribiu:" + text_user_wrote: "%{value} escribiu:" text_wiki_destroy_confirmation: ¿Seguro que quere borrar o wiki e todo o seu contido? text_workflow_edit: Seleccionar un fluxo de traballo para actualizar - warning_attachments_not_saved: "{{count}} file(s) could not be saved." + warning_attachments_not_saved: "%{count} file(s) could not be saved." field_editable: Editable text_plugin_assets_writable: Plugin assets directory writable label_display: Display @@ -821,21 +824,21 @@ label_descending: Descending label_sort: Sort label_ascending: Ascending - label_date_from_to: From {{start}} to {{end}} + label_date_from_to: From %{start} to %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? + text_wiki_page_destroy_question: This page has %{descendants} child page(s) and descendant(s). What do you want to do? text_wiki_page_reassign_children: Reassign child pages to this parent page text_wiki_page_nullify_children: Keep child pages as root pages text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated" label_wiki_content_added: Wiki page added - 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_added: "'%{id}' wiki page has been added" + mail_body_wiki_content_added: The '%{id}' wiki page has been added by %{author}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '%{id}' wiki page has been updated by %{author}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -843,14 +846,14 @@ label_branch: Branch 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"). - 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_changed: "%{label} changed from %{old} to %{new}" + text_journal_set_to: "%{label} set to %{value}" + text_journal_deleted: "%{label} deleted (%{old})" label_group_plural: Groups label_group: Group label_group_new: New group label_time_entry_plural: Spent time - text_journal_added: "{{label}} {{value}} added" + text_journal_added: "%{label} %{value} added" field_active: Active enumeration_system_activity: System Activity permission_delete_issue_watchers: Delete watchers @@ -885,9 +888,9 @@ setting_start_of_week: Start calendars on permission_view_issues: View Issues label_display_used_statuses_only: Only display statuses that are used by this tracker - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_api_access_key: API access key - label_api_access_key_created_on: API access key created {{value}} ago + label_api_access_key_created_on: API access key created %{value} ago label_feeds_access_key: RSS access key notice_api_access_key_reseted: Your API access key was reset. setting_rest_api_enabled: Enable REST web service @@ -914,12 +917,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -927,7 +930,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -938,8 +941,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Codificación das mensaxes de commit + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/he.yml.svn-base --- a/config/locales/.svn/text-base/he.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/he.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -15,7 +15,10 @@ abbr_day_names: ["א'", "ב'", "ג'", "ד'", "ה'", "ו'", "ש'"] month_names: [~, ינואר, פברואר, מרץ, אפריל, מאי, יוני, יולי, אוגוסט, ספטמבר, אוקטובר, נובמבר, דצמבר] abbr_month_names: [~, יאנ, פבר, מרץ, אפר, מאי, יונ, יול, אוג, ספט, אוק, נוב, דצמ] - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -38,38 +41,38 @@ less_than_x_seconds: zero: 'פחות משניה' one: 'פחות משניה' - other: 'פחות מ־{{count}} שניות' + other: 'פחות מ־%{count} שניות' x_seconds: one: 'שניה אחת' - other: '{{count}} שניות' + other: '%{count} שניות' less_than_x_minutes: zero: 'פחות מדקה אחת' one: 'פחות מדקה אחת' - other: 'פחות מ־{{count}} דקות' + other: 'פחות מ־%{count} דקות' x_minutes: one: 'דקה אחת' - other: '{{count}} דקות' + other: '%{count} דקות' about_x_hours: one: 'בערך שעה אחת' - other: 'בערך {{count}} שעות' + other: 'בערך %{count} שעות' x_days: one: 'יום אחד' - other: '{{count}} ימים' + other: '%{count} ימים' about_x_months: one: 'בערך חודש אחד' - other: 'בערך {{count}} חודשים' + other: 'בערך %{count} חודשים' x_months: one: 'חודש אחד' - other: '{{count}} חודשים' + other: '%{count} חודשים' about_x_years: one: 'בערך שנה אחת' - other: 'בערך {{count}} שנים' + other: 'בערך %{count} שנים' over_x_years: one: 'מעל שנה אחת' - other: 'מעל {{count}} שנים' + other: 'מעל %{count} שנים' almost_x_years: one: "כמעט שנה" - other: "כמעט {{count}} שנים" + other: "כמעט %{count} שנים" number: format: @@ -100,6 +103,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "לא נכלל ברשימה" exclusion: "לא זמין" @@ -108,16 +115,16 @@ accepted: "חייב באישור" empty: "חייב להכלל" blank: "חייב להכלל" - too_long: "ארוך מדי (לא יותר מ־{{count}} תוים)" - too_short: "קצר מדי (לא יותר מ־{{count}} תוים)" - wrong_length: "לא באורך הנכון (חייב להיות {{count}} תוים)" + too_long: "ארוך מדי (לא יותר מ־%{count} תוים)" + too_short: "קצר מדי (לא יותר מ־%{count} תוים)" + wrong_length: "לא באורך הנכון (חייב להיות %{count} תוים)" taken: "לא זמין" not_a_number: "הוא לא מספר" - greater_than: "חייב להיות גדול מ־{{count}}" - greater_than_or_equal_to: "חייב להיות גדול או שווה ל־{{count}}" - equal_to: "חייב להיות שווה ל־{{count}}" - less_than: "חייב להיות קטן מ־{{count}}" - less_than_or_equal_to: "חייב להיות קטן או שווה ל־{{count}}" + 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: "חייב להיות מאוחר יותר מתאריך ההתחלה" @@ -135,7 +142,7 @@ general_csv_separator: ',' general_csv_decimal_separator: '.' general_csv_encoding: ISO-8859-8 - general_pdf_encoding: ISO-8859-8 + general_pdf_encoding: UTF-8 general_first_day_of_week: '7' notice_account_updated: החשבון עודכן בהצלחה! @@ -155,12 +162,12 @@ notice_locking_conflict: המידע עודכן על ידי משתמש אחר. notice_not_authorized: אינך מורשה לראות דף זה. notice_not_authorized_archived_project: הפרויקט שאתה מנסה לגשת אליו נמצא בארכיון. - notice_email_sent: "דואל נשלח לכתובת {{value}}" - notice_email_error: "ארעה שגיאה בעת שליחת הדואל ({{value}})" + 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_failed_to_save_issues: "נכשרת בשמירת %{count} נושאים ב %{total} נבחרו: %{ids}." + notice_failed_to_save_members: "כשלון בשמירת חבר(ים): %{errors}." notice_no_issue_selected: "לא נבחר אף נושא! בחר בבקשה את הנושאים שברצונך לערוך." notice_account_pending: "החשבון שלך נוצר ועתה מחכה לאישור מנהל המערכת." notice_default_data_loaded: אפשרויות ברירת מחדל מופעלות. @@ -168,9 +175,9 @@ notice_unable_delete_time_entry: לא ניתן למחוק רשומת זמן. notice_issue_done_ratios_updated: אחוזי התקדמות לנושא עודכנו. - error_can_t_load_default_data: "אפשרויות ברירת המחדל לא הצליחו להיטען: {{value}}" + error_can_t_load_default_data: "אפשרויות ברירת המחדל לא הצליחו להיטען: %{value}" error_scm_not_found: כניסה ו\או מהדורה אינם קיימים במאגר. - error_scm_command_failed: "ארעה שגיאה בעת ניסון גישה למאגר: {{value}}" + error_scm_command_failed: "ארעה שגיאה בעת ניסון גישה למאגר: %{value}" error_scm_annotate: "הכניסה לא קיימת או שלא ניתן לתאר אותה." error_issue_not_found_in_project: 'הנושאים לא נמצאו או אינם שיכים לפרויקט' error_no_tracker_in_project: לא הוגדר סיווג לפרויקט זה. נא בדוק את הגדרות הפרויקט. @@ -184,26 +191,26 @@ error_workflow_copy_source: נא בחר סיווג או תפקיד מקור error_workflow_copy_target: נא בחר תפקיד(ים) וסיווג(ים) error_unable_delete_issue_status: לא ניתן למחוק מצב נושא - error_unable_to_connect: לא ניתן להתחבר ({{value}}) - warning_attachments_not_saved: "כשלון בשמירת {{count}} קבצים." + error_unable_to_connect: לא ניתן להתחבר (%{value}) + warning_attachments_not_saved: "כשלון בשמירת %{count} קבצים." - mail_subject_lost_password: "סיסמת ה־{{value}} שלך" + mail_subject_lost_password: "סיסמת ה־%{value} שלך" mail_body_lost_password: 'לשינו סיסמת ה־Redmine שלך, לחץ על הקישור הבא:' - mail_subject_register: "הפעלת חשבון {{value}}" + mail_subject_register: "הפעלת חשבון %{value}" mail_body_register: 'להפעלת חשבון ה־Redmine שלך, לחץ על הקישור הבא:' - mail_body_account_information_external: "אתה יכול להשתמש בחשבון {{value}} כדי להתחבר" + 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}}. + 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}} שגיאות" + gui_validation_error_plural: "%{count} שגיאות" field_name: שם field_description: תיאור @@ -266,7 +273,8 @@ field_attr_lastname: תכונת שם משפחה field_attr_mail: תכונת דוא"ל field_onthefly: יצירת משתמשים זריזה - field_done_ratio: % גמור + field_start_date: תאריך התחלה + field_done_ratio: "% גמור" field_auth_source: מקור הזדהות field_hide_mail: החבא את כתובת הדוא"ל שלי field_comments: הערות @@ -325,7 +333,6 @@ setting_cross_project_issue_relations: הרשה קישור נושאים בין פרויקטים setting_issue_list_default_columns: עמודות ברירת מחדל המוצגות ברשימת הנושאים setting_repositories_encodings: קידוד המאגרים - setting_commit_logs_encoding: קידוד הודעות הפקדה setting_emails_footer: תחתית דוא"ל setting_protocol: פרוטוקול setting_per_page_options: אפשרויות אוביקטים לפי דף @@ -431,14 +438,14 @@ label_x_projects: zero: ללא פרויקטים one: פרויקט אחד - other: "{{count}} פרויקטים" + 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_issues_by: "נושאים לפי %{value}" label_issue_added: נושא נוסף label_issue_updated: נושא עודכן label_document: מסמך @@ -488,7 +495,7 @@ label_registered_on: נרשם בתאריך label_activity: פעילות label_overall_activity: פעילות כוללת - label_user_activity: "הפעילות של {{value}}" + label_user_activity: "הפעילות של %{value}" label_new: חדש label_logged_as: מחובר כ label_environment: סביבה @@ -498,7 +505,7 @@ label_auth_source_plural: מקורות הזדהות label_subproject_plural: תת־פרויקטים label_subproject_new: תת־פרויקט חדש - label_and_its_subprojects: "{{value}} וכל תתי־הפרויקטים שלו" + label_and_its_subprojects: "%{value} וכל תתי־הפרויקטים שלו" label_min_max_length: אורך מינימאלי - מקסימאלי label_list: רשימה label_date: תאריך @@ -509,8 +516,8 @@ label_text: טקסט ארוך label_attribute: תכונה label_attribute_plural: תכונות - label_download: "הורדה {{count}}" - label_download_plural: "{{count}} הורדות" + label_download: "הורדה %{count}" + label_download_plural: "%{count} הורדות" label_no_data: אין מידע להציג label_change_status: שנה מצב label_history: היסטוריה @@ -542,17 +549,17 @@ label_closed_issues: סגור label_closed_issues_plural: סגורים label_x_open_issues_abbr_on_total: - zero: 0 פתוחים / {{total}} - one: 1 פתוח / {{total}} - other: "{{count}} פתוחים / {{total}}" + zero: 0 פתוחים / %{total} + one: 1 פתוח / %{total} + other: "%{count} פתוחים / %{total}" label_x_open_issues_abbr: zero: 0 פתוחים one: 1 פתוח - other: "{{count}} פתוחים" + other: "%{count} פתוחים" label_x_closed_issues_abbr: zero: 0 סגורים one: 1 סגור - other: "{{count}} סגורים" + other: "%{count} סגורים" label_total: סה"כ label_permissions: הרשאות label_current_status: מצב נוכחי @@ -570,7 +577,7 @@ label_months_from: חודשים מ label_gantt: גאנט label_internal: פנימי - label_last_changes: "{{count}} שינוים אחרונים" + label_last_changes: "%{count} שינוים אחרונים" label_change_view_all: צפה בכל השינוים label_personalize_page: התאם אישית דף זה label_comment: תגובה @@ -578,7 +585,7 @@ label_x_comments: zero: אין הערות one: הערה אחת - other: "{{count}} הערות" + other: "%{count} הערות" label_comment_add: הוסף תגובה label_comment_added: תגובה נוספה label_comment_delete: מחק תגובות @@ -599,7 +606,7 @@ label_yesterday: אתמול label_this_week: השבוע label_last_week: השבוע שעבר - label_last_n_days: "ב־{{count}} ימים אחרונים" + label_last_n_days: "ב־%{count} ימים אחרונים" label_this_month: החודש label_last_month: חודש שעבר label_this_year: השנה @@ -613,13 +620,13 @@ label_repository: מאגר label_repository_plural: מאגרים label_browse: סייר - label_modification: "שינוי {{count}}" - label_modification_plural: "{{count}} שינויים" + label_modification: "שינוי %{count}" + label_modification_plural: "%{count} שינויים" label_branch: ענף label_tag: סימון label_revision: מהדורה label_revision_plural: מהדורות - label_revision_id: מהדורה {{value}} + label_revision_id: מהדורה %{value} label_associated_revisions: מהדורות קשורות label_added: נוסף label_modified: שונה @@ -636,8 +643,8 @@ label_sort_lower: הזז למטה label_sort_lowest: הזז לתחתית label_roadmap: מפת הדרכים - label_roadmap_due_in: "נגמר בעוד {{value}}" - label_roadmap_overdue: "{{value}} מאחר" + label_roadmap_due_in: "נגמר בעוד %{value}" + label_roadmap_overdue: "%{value} מאחר" label_roadmap_no_issues: אין נושאים לגירסה זו label_search: חפש label_result_plural: תוצאות @@ -656,8 +663,8 @@ label_issue_tracking: מעקב אחר נושאים label_spent_time: זמן שהושקע label_overall_spent_time: זמן שהושקע סה"כ - label_f_hour: "{{value}} שעה" - label_f_hour_plural: "{{value}} שעות" + label_f_hour: "%{value} שעה" + label_f_hour_plural: "%{value} שעות" label_time_tracking: מעקב זמנים label_change_plural: שינויים label_statistics: סטטיסטיקות @@ -708,15 +715,15 @@ label_date_from: מתאריך label_date_to: עד label_language_based: מבוסס שפה - label_sort_by: "מיין לפי {{value}}" + 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_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_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: סדרות שינויים @@ -735,7 +742,7 @@ label_registration_activation_by_email: הפעל חשבון באמצעות דוא"ל label_registration_manual_activation: הפעלת חשבון ידנית label_registration_automatic_activation: הפעלת חשבון אוטומטית - label_display_per_page: "בכל דף: {{value}} תוצאות" + label_display_per_page: "בכל דף: %{value} תוצאות" label_age: גיל label_change_properties: שנה מאפיינים label_general: כללי @@ -758,7 +765,7 @@ label_sort: מיון label_ascending: בסדר עולה label_descending: בסדר יורד - label_date_from_to: 'מתאריך {{start}} ועד תאריך {{end}}' + label_date_from_to: 'מתאריך %{start} ועד תאריך %{end}' label_wiki_content_added: נוסף דף ל־wiki label_wiki_content_updated: דף wiki עודכן label_group: קבוצה @@ -777,7 +784,7 @@ 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_api_access_key_created_on: 'מפתח גישה ל־API נוצר לפני %{value}' label_profile: פרופיל label_subtask_plural: תתי־משימות label_project_copy_notifications: שלח התראות דואר במהלך העתקת הפרויקט @@ -792,7 +799,7 @@ button_create_and_continue: צור ופתח חדש button_test: בדוק button_edit: ערוך - button_edit_associated_wikipage: "ערוך דף wiki מקושר: {{page_title}}" + button_edit_associated_wikipage: "ערוך דף wiki מקושר: %{page_title}" button_add: הוסף button_change: שנה button_apply: החל @@ -841,54 +848,54 @@ text_regexp_info: כגון. ^[A-Z0-9]+$ text_min_max_length_info: 0 משמעו ללא הגבלות text_project_destroy_confirmation: האם אתה בטוח שברצונך למחוק את הפרויקט ואת כל המידע הקשור אליו? - text_subprojects_destroy_warning: "תת־הפרויקט\ים: {{value}} ימחקו גם כן." + 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_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), מספרים ומקפים.
    ברגע שנשמר, לא ניתן לשנות את המזהה.' - text_caracters_maximum: "מקסימום {{count}} תווים." - text_caracters_minimum: "חייב להיות לפחות באורך של {{count}} תווים." - text_length_between: "אורך בין {{min}} ל {{max}} תווים." + 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_issue_added: "הנושא %{id} דווח (בידי %{author})." + text_issue_updated: "הנושא %{id} עודכן (בידי %{author})." text_wiki_destroy_confirmation: האם אתה בטוח שברצונך למחוק את הWIKI הזה ואת כל תוכנו? - text_issue_category_destroy_question: "כמה נושאים ({{count}}) מוצבים לקטגוריה הזו. מה ברצונך לעשות?" + 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_issues_destroy_confirmation: 'האם אתה בטוח שברצונך למחוק את הנושא\ים?' + text_status_changed_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_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_user_wrote: "%{value} כתב:" + text_enumeration_destroy_question: "%{count} אוביקטים מוצבים לערך זה." text_enumeration_category_reassign_to: 'הצב מחדש לערך הזה:' - text_email_delivery_not_configured: 'לא נקבעה תצורה לשליחת דואר, וההתראות כבויות.\nקבע את תצורת שרת ה־SMTP בקובץ /etc/redmine/<instance>/email.yml והתחל את האפליקציה מחדש ע"מ לאפשר אותם.' + text_email_delivery_not_configured: 'לא נקבעה תצורה לשליחת דואר, וההתראות כבויות.\nקבע את תצורת שרת ה־SMTP בקובץ /etc/redmine/<instance>/configuration.yml והתחל את האפליקציה מחדש ע"מ לאפשר אותם.' text_repository_usernames_mapping: "בחר או עדכן את משתמש Redmine הממופה לכל שם משתמש ביומן המאגר.\nמשתמשים בעלי שם או כתובת דואר זהה ב־Redmine ובמאגר ממופים באופן אוטומטי." text_diff_truncated: '... השינויים עוברים את מספר השורות המירבי לתצוגה, ולכן הם קוצצו.' text_custom_field_possible_values_info: שורה אחת לכל ערך - text_wiki_page_destroy_question: לדף זה יש {{descendants}} דפים בנים ותלויים. מה ברצונך לעשות? + text_wiki_page_destroy_question: לדף זה יש %{descendants} דפים בנים ותלויים. מה ברצונך לעשות? text_wiki_page_nullify_children: השאר דפים בנים כדפים ראשיים text_wiki_page_destroy_children: מחק את הדפים הבנים ואת כל התלויים בהם text_wiki_page_reassign_children: הצב מחדש דפים בנים לדף האב הנוכחי @@ -927,8 +934,50 @@ label_user_mail_option_none: No events field_member_of_group: Assignee's group field_assigned_to_role: Assignee's role - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: קידוד הודעות הפקדה + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/hr.yml.svn-base --- a/config/locales/.svn/text-base/hr.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/hr.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -19,7 +19,10 @@ month_names: [~, Sijecanj, Veljaca, Ožujak, Travanj, Svibanj, Lipanj, Srpanj, Kolovoz, Rujan, Listopad, Studeni, Prosinac] abbr_month_names: [~, Sij, Velj, Ožu, Tra, Svi, Lip, Srp, Kol, Ruj, List, Stu, Pro] # Used in date_select and datime_select. - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -35,34 +38,34 @@ half_a_minute: "pola minute" less_than_x_seconds: one: "manje od sekunde" - other: "manje od {{count}} sekundi" + other: "manje od %{count} sekundi" x_seconds: one: "1 sekunda" - other: "{{count}} sekundi" + other: "%{count} sekundi" less_than_x_minutes: one: "manje od minute" - other: "manje od {{count}} minuta" + other: "manje od %{count} minuta" x_minutes: one: "1 minuta" - other: "{{count}} minuta" + other: "%{count} minuta" about_x_hours: one: "oko sat vremena" - other: "oko {{count}} sati" + other: "oko %{count} sati" x_days: one: "1 dan" - other: "{{count}} dana" + other: "%{count} dana" about_x_months: one: "oko 1 mjesec" - other: "oko {{count}} mjeseci" + other: "oko %{count} mjeseci" x_months: one: "mjesec" - other: "{{count}} mjeseci" + other: "%{count} mjeseci" about_x_years: one: "1 godina" - other: "{{count}} godina" + other: "%{count} godina" over_x_years: one: "preko 1 godine" - other: "preko {{count}} godina" + other: "preko %{count} godina" number: format: @@ -93,6 +96,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "nije ukljuceno u listu" exclusion: "je rezervirano" @@ -101,17 +108,17 @@ accepted: "mora biti prihvaćen" empty: "ne može biti prazno" blank: "ne može biti razmaka" - too_long: "je predug (maximum is {{count}} characters)" - too_short: "je prekratak (minimum is {{count}} characters)" - wrong_length: "je pogrešne dužine (should be {{count}} characters)" + too_long: "je predug (maximum is %{count} characters)" + too_short: "je prekratak (minimum is %{count} characters)" + wrong_length: "je pogrešne dužine (should be %{count} characters)" taken: "već je zauzeto" not_a_number: "nije broj" not_a_date: "nije ispravan datum" - greater_than: "mora biti veći od {{count}}" - greater_than_or_equal_to: "mora biti veći ili jednak {{count}}" - equal_to: "mora biti jednak {{count}}" - less_than: "mora biti manji od {{count}}" - less_than_or_equal_to: "mora bit manji ili jednak{{count}}" + greater_than: "mora biti veći od %{count}" + greater_than_or_equal_to: "mora biti veći ili jednak %{count}" + equal_to: "mora biti jednak %{count}" + less_than: "mora biti manji od %{count}" + less_than_or_equal_to: "mora bit manji ili jednak%{count}" odd: "mora biti neparan" even: "mora biti paran" greater_than_start_date: "mora biti veci nego pocetni datum" @@ -128,8 +135,8 @@ general_lang_name: 'Hrvatski' general_csv_separator: ',' general_csv_decimal_separator: '.' - general_csv_encoding: utf8 - general_pdf_encoding: utf8 + general_csv_encoding: UTF-8 + general_pdf_encoding: UTF-8 general_first_day_of_week: '7' notice_account_updated: Vaš profil je uspješno promijenjen. @@ -148,20 +155,20 @@ notice_file_not_found: Stranica kojoj ste pokušali pristupiti ne postoji ili je uklonjena. notice_locking_conflict: Podataci su ažurirani od strane drugog korisnika. notice_not_authorized: Niste ovlašteni za pristup ovoj stranici. - notice_email_sent: E-mail je poslan {{value}}" - notice_email_error: Dogodila se pogreška tijekom slanja E-maila ({{value}})" + notice_email_sent: E-mail je poslan %{value}" + notice_email_error: Dogodila se pogreška tijekom slanja E-maila (%{value})" notice_feeds_access_key_reseted: Vaš RSS pristup je resetovan. notice_api_access_key_reseted: Vaš API pristup je resetovan. - notice_failed_to_save_issues: "Neuspjelo spremanje {{count}} predmeta na {{total}} odabrane: {{ids}}." + notice_failed_to_save_issues: "Neuspjelo spremanje %{count} predmeta na %{total} odabrane: %{ids}." notice_no_issue_selected: "Niti jedan predmet nije odabran! Molim, odaberite predmete koje želite urediti." notice_account_pending: "Vaš korisnicki račun je otvoren, čeka odobrenje administratora." notice_default_data_loaded: Konfiguracija je uspješno učitana. notice_unable_delete_version: Nije moguće izbrisati verziju. notice_issue_done_ratios_updated: Issue done ratios updated. - error_can_t_load_default_data: "Zadanu konfiguracija nije učitana: {{value}}" + error_can_t_load_default_data: "Zadanu konfiguracija nije učitana: %{value}" error_scm_not_found: "Unos i/ili revizija nije pronađen." - error_scm_command_failed: "Dogodila se pogreška prilikom pokušaja pristupa: {{value}}" + error_scm_command_failed: "Dogodila se pogreška prilikom pokušaja pristupa: %{value}" error_scm_annotate: "Ne postoji ili ne može biti obilježen." error_issue_not_found_in_project: 'Nije pronađen ili ne pripada u ovaj projekt' error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.' @@ -172,25 +179,25 @@ 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}} Datoteka/e nije mogla biti spremljena." + warning_attachments_not_saved: "%{count} Datoteka/e nije mogla biti spremljena." - mail_subject_lost_password: "Vaša {{value}} zaporka" + mail_subject_lost_password: "Vaša %{value} zaporka" mail_body_lost_password: 'Kako biste promijenili Vašu zaporku slijedite poveznicu:' - mail_subject_register: "Aktivacija korisničog računa {{value}}" + mail_subject_register: "Aktivacija korisničog računa %{value}" mail_body_register: 'Da biste aktivirali svoj račun, kliknite na sljedeci link:' - mail_body_account_information_external: "Možete koristiti vaš račun {{value}} za prijavu." + mail_body_account_information_external: "Možete koristiti vaš račun %{value} za prijavu." mail_body_account_information: Vaši korisnički podaci - mail_subject_account_activation_request: "{{value}} predmet za aktivaciju korisničkog računa" - mail_body_account_activation_request: "Novi korisnik ({{value}}) je registriran. Njegov korisnički račun čeka vaše odobrenje:" - mail_subject_reminder: "{{count}} predmet(a) dospijeva sljedećih {{days}} dana" - mail_body_reminder: "{{count}} vama dodijeljen(ih) predmet(a) dospijeva u sljedećih {{days}} dana:" - 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}}." + mail_subject_account_activation_request: "%{value} predmet za aktivaciju korisničkog računa" + mail_body_account_activation_request: "Novi korisnik (%{value}) je registriran. Njegov korisnički račun čeka vaše odobrenje:" + mail_subject_reminder: "%{count} predmet(a) dospijeva sljedećih %{days} dana" + mail_body_reminder: "%{count} vama dodijeljen(ih) predmet(a) dospijeva u sljedećih %{days} dana:" + 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 pogreška - gui_validation_error_plural: "{{count}} pogrešaka" + gui_validation_error_plural: "%{count} pogrešaka" field_name: Ime field_description: Opis @@ -253,7 +260,8 @@ field_attr_lastname: Atribut prezimena field_attr_mail: Atribut e-pošte field_onthefly: "Izrada korisnika \"u hodu\"" - field_done_ratio: % Učinjeno + field_start_date: Pocetak + field_done_ratio: "% Učinjeno" field_auth_source: Vrsta prijavljivanja field_hide_mail: Sakrij moju adresu e-pošte field_comments: Komentar @@ -308,7 +316,6 @@ setting_cross_project_issue_relations: Dozvoli povezivanje predmeta izmedu različitih projekata setting_issue_list_default_columns: Stupci prikazani na listi predmeta setting_repositories_encodings: Kodna stranica - setting_commit_logs_encoding: Commit messages encoding setting_emails_footer: Zaglavlje e-pošte setting_protocol: Protokol setting_per_page_options: Objekata po stranici opcija @@ -407,14 +414,14 @@ label_x_projects: zero: no projects one: 1 project - other: "{{count}} projects" + other: "%{count} projects" label_project_all: Svi Projekti label_project_latest: Najnoviji projekt label_issue: Predmet label_issue_new: Novi predmet label_issue_plural: Predmeti label_issue_view_all: Pregled svih predmeta - label_issues_by: "Predmeti od {{value}}" + label_issues_by: "Predmeti od %{value}" label_issue_added: Predmet dodan label_issue_updated: Predmet promijenjen label_document: Dokument @@ -463,7 +470,7 @@ label_registered_on: Registrirano label_activity: Aktivnosti label_overall_activity: Aktivnosti - label_user_activity: "{{value}} ova/ina aktivnost" + label_user_activity: "%{value} ova/ina aktivnost" label_new: Novi label_logged_as: Prijavljeni ste kao label_environment: Okolina @@ -473,7 +480,7 @@ label_auth_source_plural: Načini prijavljivanja label_subproject_plural: Potprojekti label_subproject_new: Novi potprojekt - label_and_its_subprojects: "{{value}} i njegovi potprojekti" + label_and_its_subprojects: "%{value} i njegovi potprojekti" label_min_max_length: Min - Maks veličina label_list: Liste label_date: Datum @@ -484,8 +491,8 @@ label_text: Long text label_attribute: Atribut label_attribute_plural: Atributi - label_download: "{{count}} Download" - label_download_plural: "{{count}} Downloads" + label_download: "%{count} Download" + label_download_plural: "%{count} Downloads" label_no_data: Nema podataka za prikaz label_change_status: Promjena statusa label_history: Povijest @@ -517,17 +524,17 @@ label_closed_issues: Zatvoren label_closed_issues_plural: Zatvoreno label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{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" + other: "%{count} open" label_x_closed_issues_abbr: zero: 0 closed one: 1 closed - other: "{{count}} closed" + other: "%{count} closed" label_total: Ukupno label_permissions: Dozvole label_current_status: Trenutni status @@ -545,7 +552,7 @@ label_months_from: Mjeseci od label_gantt: Gantt label_internal: Interno - label_last_changes: "Posljednjih {{count}} promjena" + label_last_changes: "Posljednjih %{count} promjena" label_change_view_all: Prikaz svih promjena label_personalize_page: Prilagodite ovu stranicu label_comment: Komentar @@ -553,7 +560,7 @@ label_x_comments: zero: no comments one: 1 comment - other: "{{count}} comments" + other: "%{count} comments" label_comment_add: Dodaj komentar label_comment_added: Komentar dodan label_comment_delete: Brisanje komentara @@ -574,7 +581,7 @@ label_yesterday: jučer label_this_week: ovog tjedna label_last_week: prošlog tjedna - label_last_n_days: "zadnjih {{count}} dana" + label_last_n_days: "zadnjih %{count} dana" label_this_month: ovog mjeseca label_last_month: prošlog mjeseca label_this_year: ove godine @@ -588,13 +595,13 @@ label_repository: Skladište label_repository_plural: Skladišta label_browse: Pregled - label_modification: "{{count}} promjena" - label_modification_plural: "{{count}} promjena" + label_modification: "%{count} promjena" + label_modification_plural: "%{count} promjena" label_branch: Branch label_tag: Tag label_revision: Revizija label_revision_plural: Revizije - label_revision_id: "Revision {{value}}" + label_revision_id: "Revision %{value}" label_associated_revisions: Dodijeljene revizije label_added: dodano label_modified: promijenjen @@ -611,8 +618,8 @@ label_sort_lower: Premjesti prema dolje label_sort_lowest: Premjesti na dno label_roadmap: Putokaz - label_roadmap_due_in: "Završava se za {{value}}" - label_roadmap_overdue: "{{value}} kasni" + label_roadmap_due_in: "Završava se za %{value}" + label_roadmap_overdue: "%{value} kasni" label_roadmap_no_issues: Nema predmeta za ovu verziju label_search: Traži label_result_plural: Rezultati @@ -630,8 +637,8 @@ label_changes_details: Detalji svih promjena label_issue_tracking: Praćenje predmeta label_spent_time: Utrošeno vrijeme - label_f_hour: "{{value}} sata" - label_f_hour_plural: "{{value}} sati" + label_f_hour: "%{value} sata" + label_f_hour_plural: "%{value} sati" label_time_tracking: Praćenje vremena label_change_plural: Promjene label_statistics: Statistika @@ -680,15 +687,15 @@ label_date_from: Od label_date_to: Do label_language_based: Zasnovano na jeziku - label_sort_by: "Uredi po {{value}}" + label_sort_by: "Uredi po %{value}" label_send_test_email: Pošalji testno E-pismo label_feeds_access_key: RSS access key label_missing_feeds_access_key: Missing a RSS access key - label_feeds_access_key_created_on: "RSS kljuc za pristup je napravljen prije {{value}}" + label_feeds_access_key_created_on: "RSS kljuc za pristup je napravljen prije %{value}" label_module_plural: Moduli - label_added_time_by: "Promijenio {{author}} prije {{age}}" - label_updated_time_by: "Dodao/la {{author}} prije {{age}}" - label_updated_time: "Promijenjeno prije {{value}}" + label_added_time_by: "Promijenio %{author} prije %{age}" + label_updated_time_by: "Dodao/la %{author} prije %{age}" + label_updated_time: "Promijenjeno prije %{value}" label_jump_to_a_project: Prebaci se na projekt... label_file_plural: Datoteke label_changeset_plural: Promjene @@ -704,7 +711,7 @@ label_registration_activation_by_email: aktivacija putem e-pošte label_registration_manual_activation: ručna aktivacija label_registration_automatic_activation: automatska aktivacija - label_display_per_page: "Po stranici: {{value}}" + label_display_per_page: "Po stranici: %{value}" label_age: Starost label_change_properties: Promijeni svojstva label_general: Općenito @@ -727,7 +734,7 @@ label_sort: Sort label_ascending: Ascending label_descending: Descending - label_date_from_to: From {{start}} to {{end}} + 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 @@ -746,7 +753,7 @@ 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" + label_api_access_key_created_on: "API access key created %{value} ago" button_login: Prijavi button_submit: Pošalji @@ -806,54 +813,54 @@ text_regexp_info: eg. ^[A-Z0-9]+$ text_min_max_length_info: 0 znači bez ograničenja text_project_destroy_confirmation: Da li ste sigurni da želite izbrisati ovaj projekt i sve njegove podatke? - text_subprojects_destroy_warning: "Njegov(i) potprojekt(i): {{value}} će također biti obrisan." + text_subprojects_destroy_warning: "Njegov(i) potprojekt(i): %{value} će također biti obrisan." text_workflow_edit: Select a role and a tracker to edit the workflow text_are_you_sure: Da li ste sigurni? - text_journal_changed: "{{label}} promijenjen iz {{old}} u {{new}}" - text_journal_set_to: "{{label}} postavi na {{value}}" - text_journal_deleted: "{{label}} izbrisano ({{old}})" - text_journal_added: "{{label}} {{value}} added" + text_journal_changed: "%{label} promijenjen iz %{old} u %{new}" + text_journal_set_to: "%{label} postavi na %{value}" + text_journal_deleted: "%{label} izbrisano (%{old})" + text_journal_added: "%{label} %{value} added" text_tip_issue_begin_day: Zadaci koji počinju ovog dana text_tip_issue_end_day: zadaci koji se završavaju ovog dana text_tip_issue_begin_end_day: Zadaci koji počinju i završavaju se ovog dana text_project_identifier_info: 'mala slova (a-z), brojevi i crtice su dozvoljeni.
    Jednom snimljen identifikator se ne može mijenjati!' - text_caracters_maximum: "Najviše {{count}} znakova." - text_caracters_minimum: "Mora biti dugačko najmanje {{count}} znakova." - text_length_between: "Dužina izmedu {{min}} i {{max}} znakova." + text_caracters_maximum: "Najviše %{count} znakova." + text_caracters_minimum: "Mora biti dugačko najmanje %{count} znakova." + text_length_between: "Dužina izmedu %{min} i %{max} znakova." text_tracker_no_workflow: Tijek rada nije definiran za ovaj tracker text_unallowed_characters: Nedozvoljeni znakovi text_comma_separated: Višestruke vrijednosti su dozvoljene (razdvojene zarezom). text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages text_tracker_no_workflow: No workflow defined for this tracker text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages - text_issue_added: "Predmet {{id}} je prijavljen (prijavio {{author}})." - text_issue_updated: "Predmet {{id}} je promijenjen {{author}})." + text_issue_added: "Predmet %{id} je prijavljen (prijavio %{author})." + text_issue_updated: "Predmet %{id} je promijenjen %{author})." text_wiki_destroy_confirmation: Da li ste sigurni da želite izbrisati ovaj wiki i njegov sadržaj? - text_issue_category_destroy_question: "Neke predmeti ({{count}}) su dodijeljeni ovoj kategoriji. Što želite uraditi?" + text_issue_category_destroy_question: "Neke predmeti (%{count}) su dodijeljeni ovoj kategoriji. Što želite uraditi?" text_issue_category_destroy_assignments: Ukloni dodjeljivanje kategorija text_issue_category_reassign_to: Ponovo dodijeli predmete ovoj kategoriji text_user_mail_option: "Za neizabrane projekte, primit ćete obavjesti samo o stvarima koje pratite ili u kojima sudjelujete (npr. predmete koje ste vi napravili ili koje su vama dodjeljeni)." 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: Učitaj početnu konfiguraciju - text_status_changed_by_changeset: "Applied in changeset {{value}}." + text_status_changed_by_changeset: "Applied in changeset %{value}." text_issues_destroy_confirmation: 'Jeste li sigurni da želite obrisati izabrani/e predmet(e)?' text_select_project_modules: 'Odaberite module koji će biti omogućeni za ovaj projekt:' text_default_administrator_account_changed: Default administrator account changed text_file_repository_writable: Dozvoljeno pisanje u direktorij za privitke text_plugin_assets_writable: Plugin assets directory writable text_rmagick_available: RMagick dostupan (nije obavezno) - text_destroy_time_entries_question: "{{hours}} sati je prijavljeno za predmete koje želite obrisati. Što ćete učiniti?" + text_destroy_time_entries_question: "%{hours} sati je prijavljeno za predmete koje želite obrisati. Što ćete učiniti?" text_destroy_time_entries: Obriši prijavljene sate text_assign_time_entries_to_project: Pridruži prijavljene sate projektu text_reassign_time_entries: 'Premjesti prijavljene sate ovom predmetu:' - text_user_wrote: "{{value}} je napisao/la:" - text_enumeration_destroy_question: "{{count}} objekata je pridruženo toj vrijednosti." + 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' - text_wiki_page_destroy_question: "This page has {{descendants}} child page(s) and descendant(s). What do you want to do?" + 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" @@ -905,12 +912,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -918,7 +925,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -929,8 +936,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Commit messages encoding + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/hu.yml.svn-base --- a/config/locales/.svn/text-base/hu.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/hu.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -16,7 +16,10 @@ abbr_day_names: [v., h., k., sze., cs., p., szo.] month_names: [~, január, február, március, április, május, június, július, augusztus, szeptember, október, november, december] abbr_month_names: [~, jan., febr., márc., ápr., máj., jún., júl., aug., szept., okt., nov., dec.] - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -33,38 +36,38 @@ less_than_x_seconds: # zero: 'kevesebb, mint 1 másodperc' one: 'kevesebb, mint 1 másodperc' - other: 'kevesebb, mint {{count}} másodperc' + other: 'kevesebb, mint %{count} másodperc' x_seconds: one: '1 másodperc' - other: '{{count}} másodperc' + other: '%{count} másodperc' less_than_x_minutes: # zero: 'kevesebb, mint 1 perc' one: 'kevesebb, mint 1 perc' - other: 'kevesebb, mint {{count}} perc' + other: 'kevesebb, mint %{count} perc' x_minutes: one: '1 perc' - other: '{{count}} perc' + other: '%{count} perc' about_x_hours: one: 'majdnem 1 óra' - other: 'majdnem {{count}} óra' + other: 'majdnem %{count} óra' x_days: one: '1 nap' - other: '{{count}} nap' + other: '%{count} nap' about_x_months: one: 'majdnem 1 hónap' - other: 'majdnem {{count}} hónap' + other: 'majdnem %{count} hónap' x_months: one: '1 hónap' - other: '{{count}} hónap' + other: '%{count} hónap' about_x_years: one: 'majdnem 1 év' - other: 'majdnem {{count}} év' + other: 'majdnem %{count} év' over_x_years: one: 'több, mint 1 év' - other: 'több, mint {{count}} év' + other: 'több, mint %{count} év' almost_x_years: one: "közel 1 év" - other: "közel {{count}} év" + other: "közel %{count} év" prompts: year: "Év" month: "Hónap" @@ -117,8 +120,8 @@ errors: template: header: - one: "1 hiba miatt nem menthető a következő: {{model}}" - other: "{{count}} hiba miatt nem menthető a következő: {{model}}" + one: "1 hiba miatt nem menthető a következő: %{model}" + other: "%{count} hiba miatt nem menthető a következő: %{model}" body: "Problémás mezők:" messages: inclusion: "nincs a listában" @@ -128,16 +131,16 @@ accepted: "nincs elfogadva" empty: "nincs megadva" blank: "nincs megadva" - too_long: "túl hosszú (nem lehet több {{count}} karakternél)" - too_short: "túl rövid (legalább {{count}} karakter kell legyen)" - wrong_length: "nem megfelelő hosszúságú ({{count}} karakter szükséges)" + too_long: "túl hosszú (nem lehet több %{count} karakternél)" + too_short: "túl rövid (legalább %{count} karakter kell legyen)" + wrong_length: "nem megfelelő hosszúságú (%{count} karakter szükséges)" taken: "már foglalt" not_a_number: "nem szám" - greater_than: "nagyobb kell legyen, mint {{count}}" - greater_than_or_equal_to: "legalább {{count}} kell legyen" - equal_to: "pontosan {{count}} kell legyen" - less_than: "kevesebb, mint {{count}} kell legyen" - less_than_or_equal_to: "legfeljebb {{count}} lehet" + greater_than: "nagyobb kell legyen, mint %{count}" + greater_than_or_equal_to: "legalább %{count} kell legyen" + equal_to: "pontosan %{count} kell legyen" + less_than: "kevesebb, mint %{count} kell legyen" + less_than_or_equal_to: "legfeljebb %{count} lehet" odd: "páratlan kell legyen" even: "páros kell legyen" greater_than_start_date: "nagyobbnak kell lennie, mint az indítás dátuma" @@ -155,7 +158,7 @@ general_csv_separator: ',' general_csv_decimal_separator: '.' general_csv_encoding: ISO-8859-2 - general_pdf_encoding: ISO-8859-2 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' notice_account_updated: A fiók adatai sikeresen frissítve. @@ -174,17 +177,17 @@ notice_file_not_found: Az oldal, amit meg szeretne nézni nem található, vagy átkerült egy másik helyre. notice_locking_conflict: Az adatot egy másik felhasználó idő közben módosította. notice_not_authorized: Nincs hozzáférési engedélye ehhez az oldalhoz. - notice_email_sent: "Egy e-mail üzenetet küldtünk a következő címre {{value}}" - notice_email_error: "Hiba történt a levél küldése közben ({{value}})" + notice_email_sent: "Egy e-mail üzenetet küldtünk a következő címre %{value}" + notice_email_error: "Hiba történt a levél küldése közben (%{value})" notice_feeds_access_key_reseted: Az RSS hozzáférési kulcsát újra generáltuk. - notice_failed_to_save_issues: "Nem sikerült a {{count}} feladat(ok) mentése a {{total}} -ban kiválasztva: {{ids}}." + notice_failed_to_save_issues: "Nem sikerült a %{count} feladat(ok) mentése a %{total} -ban kiválasztva: %{ids}." notice_no_issue_selected: "Nincs feladat kiválasztva! Kérem jelölje meg melyik feladatot szeretné szerkeszteni!" notice_account_pending: "A fiókja létrejött, és adminisztrátori jóváhagyásra vár." notice_default_data_loaded: Az alapértelmezett konfiguráció betöltése sikeresen megtörtént. - error_can_t_load_default_data: "Az alapértelmezett konfiguráció betöltése nem lehetséges: {{value}}" + error_can_t_load_default_data: "Az alapértelmezett konfiguráció betöltése nem lehetséges: %{value}" error_scm_not_found: "A bejegyzés, vagy revízió nem található a tárolóban." - error_scm_command_failed: "A tároló elérése közben hiba lépett fel: {{value}}" + error_scm_command_failed: "A tároló elérése közben hiba lépett fel: %{value}" error_scm_annotate: "A bejegyzés nem létezik, vagy nics jegyzetekkel ellátva." error_issue_not_found_in_project: 'A feladat nem található, vagy nem ehhez a projekthez tartozik' @@ -192,13 +195,13 @@ mail_body_lost_password: 'A Redmine jelszó megváltoztatásához, kattintson a következő linkre:' mail_subject_register: Redmine azonosító aktiválása mail_body_register: 'A Redmine azonosítója aktiválásához, kattintson a következő linkre:' - mail_body_account_information_external: "A {{value}} azonosító használatával bejelentkezhet a Redmine-ba." + mail_body_account_information_external: "A %{value} azonosító használatával bejelentkezhet a Redmine-ba." mail_body_account_information: Az Ön Redmine azonosítójának információi mail_subject_account_activation_request: Redmine azonosító aktiválási kérelem - mail_body_account_activation_request: "Egy új felhasználó ({{value}}) regisztrált, azonosítója jóváhasgyásra várakozik:" + mail_body_account_activation_request: "Egy új felhasználó (%{value}) regisztrált, azonosítója jóváhasgyásra várakozik:" gui_validation_error: 1 hiba - gui_validation_error_plural: "{{count}} hiba" + gui_validation_error_plural: "%{count} hiba" field_name: Név field_description: Leírás @@ -260,6 +263,7 @@ field_attr_lastname: Vezetéknév field_attr_mail: E-mail field_onthefly: On-the-fly felhasználó létrehozás + field_start_date: Kezdés dátuma field_done_ratio: Elkészült (%) field_auth_source: Azonosítási mód field_hide_mail: Rejtse el az e-mail címem @@ -334,14 +338,14 @@ label_x_projects: zero: nincsenek projektek one: 1 projekt - other: "{{count}} projekt" + other: "%{count} projekt" label_project_all: Az összes projekt label_project_latest: Legutóbbi projektek label_issue: Feladat label_issue_new: Új feladat label_issue_plural: Feladatok label_issue_view_all: Minden feladat - label_issues_by: "{{value}} feladatai" + label_issues_by: "%{value} feladatai" label_issue_added: Feladat hozzáadva label_issue_updated: Feladat frissítve label_document: Dokumentum @@ -397,7 +401,7 @@ label_auth_source_new: Új azonosítási mód label_auth_source_plural: Azonosítási módok label_subproject_plural: Alprojektek - label_and_its_subprojects: "{{value}} és alprojektjei" + label_and_its_subprojects: "%{value} és alprojektjei" label_min_max_length: Min - Max hossz label_list: Lista label_date: Dátum @@ -408,8 +412,8 @@ label_text: Hosszú szöveg label_attribute: Tulajdonság label_attribute_plural: Tulajdonságok - label_download: "{{count}} Letöltés" - label_download_plural: "{{count}} Letöltés" + label_download: "%{count} Letöltés" + label_download_plural: "%{count} Letöltés" label_no_data: Nincs megjeleníthető adat label_change_status: Státusz módosítása label_history: Történet @@ -440,17 +444,17 @@ label_closed_issues: lezárt label_closed_issues_plural: lezárt label_x_open_issues_abbr_on_total: - zero: nyitott 0 / {{total}} - one: nyitott 1 / {{total}} - other: "nyitott {{count}} / {{total}}" + zero: nyitott 0 / %{total} + one: nyitott 1 / %{total} + other: "nyitott %{count} / %{total}" label_x_open_issues_abbr: zero: 0 nyitott one: 1 nyitott - other: "{{count}} nyitott" + other: "%{count} nyitott" label_x_closed_issues_abbr: zero: 0 lezárt one: 1 lezárt - other: "{{count}} lezárt" + other: "%{count} lezárt" label_total: Összesen label_permissions: Jogosultságok label_current_status: Jelenlegi státusz @@ -468,7 +472,7 @@ label_months_from: hónap, kezdve label_gantt: Gantt label_internal: Belső - label_last_changes: "utolsó {{count}} változás" + label_last_changes: "utolsó %{count} változás" label_change_view_all: Minden változás megtekintése label_personalize_page: Az oldal testreszabása label_comment: Megjegyzés @@ -476,7 +480,7 @@ label_x_comments: zero: nincs megjegyzés one: 1 megjegyzés - other: "{{count}} megjegyzés" + other: "%{count} megjegyzés" label_comment_add: Megjegyzés hozzáadása label_comment_added: Megjegyzés hozzáadva label_comment_delete: Megjegyzések törlése @@ -495,7 +499,7 @@ label_yesterday: tegnap label_this_week: aktuális hét label_last_week: múlt hét - label_last_n_days: "az elmúlt {{count}} nap" + label_last_n_days: "az elmúlt %{count} nap" label_this_month: aktuális hónap label_last_month: múlt hónap label_this_year: aktuális év @@ -509,8 +513,8 @@ label_repository: Tároló label_repository_plural: Tárolók label_browse: Tallóz - label_modification: "{{count}} változás" - label_modification_plural: "{{count}} változás" + label_modification: "%{count} változás" + label_modification_plural: "%{count} változás" label_revision: Revízió label_revision_plural: Revíziók label_associated_revisions: Kapcsolt revíziók @@ -526,8 +530,8 @@ label_sort_lower: Eggyel lejjebb label_sort_lowest: Az aljára label_roadmap: Életút - label_roadmap_due_in: "Elkészültéig várhatóan még {{value}}" - label_roadmap_overdue: "{{value}} késésben" + label_roadmap_due_in: "Elkészültéig várhatóan még %{value}" + label_roadmap_overdue: "%{value} késésben" label_roadmap_no_issues: Nincsenek feladatok ehhez a verzióhoz label_search: Keresés label_result_plural: Találatok @@ -545,8 +549,8 @@ label_changes_details: Változások részletei label_issue_tracking: Feladat követés label_spent_time: Ráfordított idő - label_f_hour: "{{value}} óra" - label_f_hour_plural: "{{value}} óra" + label_f_hour: "%{value} óra" + label_f_hour_plural: "%{value} óra" label_time_tracking: Idő rögzítés label_change_plural: Változások label_statistics: Statisztikák @@ -594,12 +598,12 @@ label_date_from: 'Kezdet:' label_date_to: 'Vége:' label_language_based: A felhasználó nyelve alapján - label_sort_by: "{{value}} szerint rendezve" + label_sort_by: "%{value} szerint rendezve" label_send_test_email: Teszt e-mail küldése - label_feeds_access_key_created_on: "RSS hozzáférési kulcs létrehozva ennyivel ezelőtt: {{value}}" + label_feeds_access_key_created_on: "RSS hozzáférési kulcs létrehozva ennyivel ezelőtt: %{value}" label_module_plural: Modulok - label_added_time_by: "{{author}} adta hozzá ennyivel ezelőtt: {{age}}" - label_updated_time: "Utolsó módosítás ennyivel ezelőtt: {{value}}" + label_added_time_by: "%{author} adta hozzá ennyivel ezelőtt: %{age}" + label_updated_time: "Utolsó módosítás ennyivel ezelőtt: %{value}" label_jump_to_a_project: Ugrás projekthez... label_file_plural: Fájlok label_changeset_plural: Changesets @@ -615,7 +619,7 @@ label_registration_activation_by_email: Fiók aktiválása e-mailben label_registration_manual_activation: Manuális fiók aktiválás label_registration_automatic_activation: Automatikus fiók aktiválás - label_display_per_page: "Oldalanként: {{value}}" + label_display_per_page: "Oldalanként: %{value}" label_age: Kor label_change_properties: Tulajdonságok változtatása label_general: Általános @@ -677,36 +681,36 @@ text_regexp_info: pl. ^[A-Z0-9]+$ text_min_max_length_info: 0 = nincs korlátozás text_project_destroy_confirmation: Biztosan törölni szeretné a projektet és vele együtt minden kapcsolódó adatot ? - text_subprojects_destroy_warning: "Az alprojekt(ek): {{value}} szintén törlésre kerülnek." + text_subprojects_destroy_warning: "Az alprojekt(ek): %{value} szintén törlésre kerülnek." text_workflow_edit: Válasszon egy szerepkört, és egy feladat típust a workflow szerkesztéséhez text_are_you_sure: Biztos benne ? text_tip_issue_begin_day: a feladat ezen a napon kezdődik text_tip_issue_end_day: a feladat ezen a napon ér véget text_tip_issue_begin_end_day: a feladat ezen a napon kezdődik és ér véget text_project_identifier_info: 'Kis betűk (a-z), számok és kötőjel megengedett.
    Mentés után az azonosítót megváltoztatni nem lehet.' - text_caracters_maximum: "maximum {{count}} karakter." - text_caracters_minimum: "Legkevesebb {{count}} karakter hosszúnek kell lennie." - text_length_between: "Legalább {{min}} és legfeljebb {{max}} hosszú karakter." + text_caracters_maximum: "maximum %{count} karakter." + text_caracters_minimum: "Legkevesebb %{count} karakter hosszúnek kell lennie." + text_length_between: "Legalább %{min} és legfeljebb %{max} hosszú karakter." text_tracker_no_workflow: Nincs workflow definiálva ehhez a feladat típushoz text_unallowed_characters: Tiltott karakterek text_comma_separated: Több érték megengedett (vesszővel elválasztva) text_issues_ref_in_commit_messages: Hivatkozás feladatokra, feladatok javítása a commit üzenetekben - text_issue_added: "A feladatot {{id}} bejelentette: {{author}}." - text_issue_updated: "A feladatot {{id}} módosította: {{author}}." + text_issue_added: "A feladatot %{id} bejelentette: %{author}." + text_issue_updated: "A feladatot %{id} módosította: %{author}." text_wiki_destroy_confirmation: Biztosan törölni szeretné ezt a wiki-t minden tartalmával együtt ? - text_issue_category_destroy_question: "Néhány feladat ({{count}}) hozzá van rendelve ehhez a kategóriához. Mit szeretne tenni ?" + text_issue_category_destroy_question: "Néhány feladat (%{count}) hozzá van rendelve ehhez a kategóriához. Mit szeretne tenni ?" text_issue_category_destroy_assignments: Kategória hozzárendelés megszűntetése text_issue_category_reassign_to: Feladatok újra hozzárendelése másik kategóriához text_user_mail_option: "A nem kiválasztott projektekről csak akkor kap értesítést, ha figyelést kér rá, vagy részt vesz benne (pl. Ön a létrehozó, vagy a hozzárendelő)" text_no_configuration_data: "Szerepkörök, feladat típusok, feladat státuszok, és workflow adatok még nincsenek konfigurálva.\nErősen ajánlott, az alapértelmezett konfiguráció betöltése, és utána módosíthatja azt." text_load_default_configuration: Alapértelmezett konfiguráció betöltése - text_status_changed_by_changeset: "Applied in changeset {{value}}." + text_status_changed_by_changeset: "Applied in changeset %{value}." text_issues_destroy_confirmation: 'Biztos benne, hogy törölni szeretné a kijelölt feladato(ka)t ?' text_select_project_modules: 'Válassza ki az engedélyezett modulokat ehhez a projekthez:' text_default_administrator_account_changed: Alapértelmezett adminisztrátor fiók megváltoztatva text_file_repository_writable: Fájl tároló írható text_rmagick_available: RMagick elérhető (opcionális) - text_destroy_time_entries_question: "{{hours}} órányi munka van rögzítve a feladatokon, amiket törölni szeretne. Mit szeretne tenni ?" + text_destroy_time_entries_question: "%{hours} órányi munka van rögzítve a feladatokon, amiket törölni szeretne. Mit szeretne tenni ?" text_destroy_time_entries: A rögzített órák törlése text_assign_time_entries_to_project: A rögzített órák hozzárendelése a projekthez text_reassign_time_entries: 'A rögzített órák újra hozzárendelése másik feladathoz:' @@ -736,21 +740,20 @@ enumeration_issue_priorities: Feladat prioritások enumeration_doc_categories: Dokumentum kategóriák enumeration_activities: Tevékenységek (idő rögzítés) - mail_body_reminder: "{{count}} neked kiosztott feladat határidős az elkövetkező {{days}} napban:" - mail_subject_reminder: "{{count}} feladat határidős az elkövetkező {{days}} napokban" - text_user_wrote: "{{value}} írta:" + mail_body_reminder: "%{count} neked kiosztott feladat határidős az elkövetkező %{days} napban:" + mail_subject_reminder: "%{count} feladat határidős az elkövetkező %{days} napokban" + text_user_wrote: "%{value} írta:" label_duplicated_by: duplikálta setting_enabled_scm: Forráskódkezelő (SCM) engedélyezése text_enumeration_category_reassign_to: 'Újra hozzárendelés ehhez:' - text_enumeration_destroy_question: "{{count}} objektum van hozzárendelve ehhez az értékhez." + text_enumeration_destroy_question: "%{count} objektum van hozzárendelve ehhez az értékhez." label_incoming_emails: Beérkezett levelek 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 button_quote: Hozzászólás / Idézet setting_sequential_project_identifiers: Szekvenciális projekt azonosítók generálása notice_unable_delete_version: A verziót nem lehet törölni @@ -808,12 +811,12 @@ text_repository_usernames_mapping: "Állítsd be a felhasználó összerendeléseket a Redmine, és a tároló logban található felhasználók között.\nAz azonos felhasználó nevek összerendelése automatikusan megtörténik." permission_edit_own_messages: Saját üzenetek szerkesztése permission_delete_own_messages: Saját üzenetek törlése - label_user_activity: "{{value}} tevékenységei" - label_updated_time_by: "Módosította {{author}} ennyivel ezelőtt: {{age}}" + label_user_activity: "%{value} tevékenységei" + label_updated_time_by: "Módosította %{author} ennyivel ezelőtt: %{age}" text_diff_truncated: '... A diff fájl vége nem jelenik meg, mert hosszab, mint a megjeleníthető sorok száma.' setting_diff_max_lines_displayed: A megjelenítendő sorok száma (maximum) a diff fájloknál text_plugin_assets_writable: Plugin eszközök könyvtár írható - warning_attachments_not_saved: "{{count}} fájl mentése nem sikerült." + warning_attachments_not_saved: "%{count} fájl mentése nem sikerült." button_create_and_continue: Létrehozás és folytatás text_custom_field_possible_values_info: 'Értékenként egy sor' label_display: Megjelenés @@ -828,21 +831,21 @@ label_descending: Csökkenő label_sort: Rendezés label_ascending: Növekvő - label_date_from_to: "{{start}} -tól {{end}} -ig" + label_date_from_to: "%{start} -tól %{end} -ig" label_greater_or_equal: ">=" label_less_or_equal: "<=" - text_wiki_page_destroy_question: Ennek az oldalnak {{descendants}} gyermek-, és leszármazott oldala van. Mit szeretne tenni? + text_wiki_page_destroy_question: Ennek az oldalnak %{descendants} gyermek-, és leszármazott oldala van. Mit szeretne tenni? text_wiki_page_reassign_children: Az aloldalak hozzárendelése ehhez a szülő oldalhoz text_wiki_page_nullify_children: Az aloldalak megtartása, mint főoldalak text_wiki_page_destroy_children: Minden aloldal és leszármazottjának törlése setting_password_min_length: Minimum jelszó hosszúság field_group_by: Szerint csoportosítva - mail_subject_wiki_content_updated: "'{{id}}' wiki oldal frissítve" + mail_subject_wiki_content_updated: "'%{id}' wiki oldal frissítve" label_wiki_content_added: Wiki oldal hozzáadva - mail_subject_wiki_content_added: "Új wiki oldal: '{{id}}'" - mail_body_wiki_content_added: A '{{id}}' wiki oldalt {{author}} hozta létre. + mail_subject_wiki_content_added: "Új wiki oldal: '%{id}'" + mail_body_wiki_content_added: A '%{id}' wiki oldalt %{author} hozta létre. label_wiki_content_updated: Wiki oldal frissítve - mail_body_wiki_content_updated: A '{{id}}' wiki oldalt {{author}} frissítette. + mail_body_wiki_content_updated: A '%{id}' wiki oldalt %{author} frissítette. permission_add_project: Projekt létrehozása setting_new_project_user_role_id: Projekt létrehozási jog nem adminisztrátor felhasználóknak label_view_all_revisions: Minden revízió megtekintése @@ -850,14 +853,14 @@ label_branch: Branch error_no_tracker_in_project: Nincs feladat típus hozzárendelve ehhez a projekthez. Kérem ellenőrizze a projekt beállításait. error_no_default_issue_status: Nincs alapértelmezett feladat státusz beállítva. Kérem ellenőrizze a beállításokat (Itt találja "Adminisztráció -> Feladat státuszok"). - text_journal_changed: "{{label}} változott erről: {{old}} erre: {{new}}" - text_journal_set_to: "{{label}} új értéke: {{value}}" - text_journal_deleted: "{{label}} törölve ({{old}})" + text_journal_changed: "%{label} változott erről: %{old} erre: %{new}" + text_journal_set_to: "%{label} új értéke: %{value}" + text_journal_deleted: "%{label} törölve (%{old})" label_group_plural: Csoportok label_group: Csoport label_group_new: Új csoport label_time_entry_plural: Rögzített idő - text_journal_added: "{{label}} {{value}} hozzáadva" + text_journal_added: "%{label} %{value} hozzáadva" field_active: Aktív enumeration_system_activity: Rendszer Tevékenység permission_delete_issue_watchers: Megfigyelők törlése @@ -892,9 +895,9 @@ setting_start_of_week: A hét első napja permission_view_issues: Feladatok megtekintése label_display_used_statuses_only: Csak olyan feladat státuszok megjelenítése, amit ez a feladat típus használ - label_revision_id: Revízió {{value}} + label_revision_id: Revízió %{value} label_api_access_key: API hozzáférési kulcs - label_api_access_key_created_on: API hozzáférési kulcs létrehozva {{value}} ezelőtt + label_api_access_key_created_on: API hozzáférési kulcs létrehozva %{value} ezelőtt label_feeds_access_key: RSS hozzáférési kulcs notice_api_access_key_reseted: Az API hozzáférési kulcsa újragenerálva. setting_rest_api_enabled: REST web service engedélyezése @@ -917,7 +920,7 @@ error_can_not_delete_custom_field: Nem lehet törölni az egyéni mezőt permission_manage_subtasks: Alfeladatok kezelése label_profile: Profil - error_unable_to_connect: Nem lehet csatlakozni ({{value}}) + error_unable_to_connect: Nem lehet csatlakozni (%{value}) error_can_not_remove_role: Ez a szerepkör használatban van és ezért nem törölhető- field_parent_issue: Szülő feladat error_unable_delete_issue_status: Nem lehet törölni a feladat állapotát @@ -926,27 +929,69 @@ label_project_copy_notifications: Küldjön e-mail értesítéseket projektmásolás közben. field_principal: Felelős label_my_page_block: Saját kezdőlap-blokk - notice_failed_to_save_members: "Nem sikerült menteni a tago(ka)t: {{errors}}." + notice_failed_to_save_members: "Nem sikerült menteni a tago(ka)t: %{errors}." text_zoom_out: Kicsinyít text_zoom_in: Nagyít notice_unable_delete_time_entry: Az időrögzítés nem törölhető - label_overall_spent_time: Összes rászánt idő - field_time_entries: Log time + label_overall_spent_time: Összes ráfordított idő + field_time_entries: Idő rögzítés 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. - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header + project_module_calendar: Naptár + button_edit_associated_wikipage: "Hozzárendelt Wiki oldal szerkesztése: %{page_title}" + text_are_you_sure_with_children: A feladat törlése az összes alfeladattal együtt? + field_text: Szöveg mező + label_user_mail_option_only_owner: Csak arról, aminek én vagyok a tulajdonosa + setting_default_notification_option: Alapértelmezett értesítési beállítások + label_user_mail_option_only_my_events: Csak az általam megfigyelt dolgokról vagy amiben részt veszek + label_user_mail_option_only_assigned: Csak a hozzámrendelt dolgokról + label_user_mail_option_none: Semilyen eseményről + field_member_of_group: Hozzárendelt csoport + field_assigned_to_role: Hozzárendelt szerepkör + notice_not_authorized_archived_project: A projekt, amihez hozzá szeretnél férni archiválva lett. + label_principal_search: "Felhasználó vagy csoport keresése:" + label_user_search: "Felhasználó keresése:" + field_visible: Látható + setting_emails_header: Emailek fejléce + setting_commit_logtime_activity_id: A rögzített időhöz tartozó tevékenység + text_time_logged_by_changeset: Alkalmazva a %{value} changeset-ben. + setting_commit_logtime_enabled: Időrögzítés engedélyezése + notice_gantt_chart_truncated: A diagram le lett vágva, mert elérte a maximálisan megjeleníthető elemek számát (%{max}) + setting_gantt_items_limit: A gantt diagrammon megjeleníthető maximális elemek száma + field_warn_on_leaving_unsaved: Figyelmeztessen, nem mentett módosításokat tartalmazó oldal elhagyásakor + text_warn_on_leaving_unsaved: A jelenlegi oldal nem mentett módosításokat tartalmaz, ami elvész, ha elhagyja az oldalt. + label_my_queries: Egyéni lekérdezéseim + text_journal_changed_no_detail: "%{label} módosítva" + label_news_comment_added: Megjegyzés hozzáadva a hírhez + button_expand_all: Mindet kibont + button_collapse_all: Mindet összecsuk + label_additional_workflow_transitions_for_assignee: További átmenetek engedélyezettek, ha a felhasználó a hozzárendelt + label_additional_workflow_transitions_for_author: További átmenetek engedélyezettek, ha a felhasználó a szerző + label_bulk_edit_selected_time_entries: A kiválasztott idő bejegyzések csoportos szerkesztése + text_time_entries_destroy_confirmation: Biztos benne, hogy törölni szeretné a kiválasztott idő bejegyzés(eke)t? + label_role_anonymous: Anonymous + label_role_non_member: Nem tag + label_issue_note_added: Jegyzet hozzáadva + label_issue_status_updated: Állapot módosítva + label_issue_priority_updated: Prioritás módosítva + label_issues_visibility_own: A felhasználó által létrehozott vagy hozzárendelt feladatok + field_issues_visibility: Feladatok láthatósága + label_issues_visibility_all: Minden feladat + permission_set_own_issues_private: Saját feladatok beállítása nyilvánosra vagy privátra + field_is_private: Privát + permission_set_issues_private: Feladatok beállítása nyilvánosra vagy privátra + label_issues_visibility_public: Minden nem privát feladat + text_issues_destroy_descendants_confirmation: Ezzel törölni fog %{count} alfeladatot is. + field_commit_logs_encoding: Commit üzenetek kódlapja + field_scm_path_encoding: Elérési útvonal kódlapja + text_scm_path_encoding_note: "Alapértelmezett: UTF-8" + field_path_to_repository: A repository elérési útja + field_root_directory: Gyökér könyvtár + field_cvs_module: Modul + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Helyi repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Parancs + text_scm_command_version: Verzió + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/id.yml.svn-base --- a/config/locales/.svn/text-base/id.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/id.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -14,7 +14,10 @@ month_names: [~, Januari, Februari, Maret, April, Mei, Juni, Juli, Agustus, September, Oktober, November, Desember] abbr_month_names: [~, Jan, Feb, Mar, Apr, Mei, Jun, Jul, Agu, Sep, Okt, Nov, Des] - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -30,37 +33,37 @@ half_a_minute: "setengah menit" less_than_x_seconds: one: "kurang dari sedetik" - other: "kurang dari {{count}} detik" + other: "kurang dari %{count} detik" x_seconds: one: "sedetik" - other: "{{count}} detik" + other: "%{count} detik" less_than_x_minutes: one: "kurang dari semenit" - other: "kurang dari {{count}} menit" + other: "kurang dari %{count} menit" x_minutes: one: "semenit" - other: "{{count}} menit" + other: "%{count} menit" about_x_hours: one: "sekitar sejam" - other: "sekitar {{count}} jam" + other: "sekitar %{count} jam" x_days: one: "sehari" - other: "{{count}} hari" + other: "%{count} hari" about_x_months: one: "sekitar sebulan" - other: "sekitar {{count}} bulan" + other: "sekitar %{count} bulan" x_months: one: "sebulan" - other: "{{count}} bulan" + other: "%{count} bulan" about_x_years: one: "sekitar setahun" - other: "sekitar {{count}} tahun" + other: "sekitar %{count} tahun" over_x_years: one: "lebih dari setahun" - other: "lebih dari {{count}} tahun" + other: "lebih dari %{count} tahun" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" number: format: @@ -95,6 +98,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "tidak termasuk dalam daftar" exclusion: "sudah dicadangkan" @@ -103,17 +110,17 @@ accepted: "harus disetujui" empty: "tidak boleh kosong" blank: "tidak boleh kosong" - too_long: "terlalu panjang (maksimum {{count}} karakter)" - too_short: "terlalu pendek (minimum {{count}} karakter)" - wrong_length: "panjangnya salah (seharusnya {{count}} karakter)" + too_long: "terlalu panjang (maksimum %{count} karakter)" + too_short: "terlalu pendek (minimum %{count} karakter)" + wrong_length: "panjangnya salah (seharusnya %{count} karakter)" taken: "sudah diambil" not_a_number: "bukan angka" not_a_date: "bukan tanggal" - greater_than: "harus lebih besar dari {{count}}" - greater_than_or_equal_to: "harus lebih besar atau sama dengan {{count}}" - equal_to: "harus sama dengan {{count}}" - less_than: "harus kurang dari {{count}}" - less_than_or_equal_to: "harus kurang atau sama dengan {{count}}" + greater_than: "harus lebih besar dari %{count}" + greater_than_or_equal_to: "harus lebih besar atau sama dengan %{count}" + equal_to: "harus sama dengan %{count}" + less_than: "harus kurang dari %{count}" + less_than_or_equal_to: "harus kurang atau sama dengan %{count}" odd: "harus ganjil" even: "harus genap" greater_than_start_date: "harus lebih besar dari tanggal mulai" @@ -131,7 +138,7 @@ general_csv_separator: ',' general_csv_decimal_separator: '.' general_csv_encoding: ISO-8859-1 - general_pdf_encoding: ISO-8859-1 + general_pdf_encoding: UTF-8 general_first_day_of_week: '7' notice_account_updated: Akun sudah berhasil diperbarui. @@ -150,18 +157,18 @@ notice_file_not_found: Berkas yang anda buka tidak ada atau sudah dihapus. notice_locking_conflict: Data sudah diubah oleh pengguna lain. notice_not_authorized: Anda tidak memiliki akses ke halaman ini. - notice_email_sent: "Email sudah dikirim ke {{value}}" - notice_email_error: "Terjadi kesalahan pada saat pengiriman email ({{value}})" + notice_email_sent: "Email sudah dikirim ke %{value}" + notice_email_error: "Terjadi kesalahan pada saat pengiriman email (%{value})" notice_feeds_access_key_reseted: RSS access key anda sudah direset. - notice_failed_to_save_issues: "Gagal menyimpan {{count}} masalah dari {{total}} yang dipilih: {{ids}}." + notice_failed_to_save_issues: "Gagal menyimpan %{count} masalah dari %{total} yang dipilih: %{ids}." notice_no_issue_selected: "Tidak ada masalah yang dipilih! Silakan pilih masalah yang akan anda sunting." notice_account_pending: "Akun anda sudah dibuat dan sekarang sedang menunggu persetujuan administrator." notice_default_data_loaded: Konfigurasi default sudah berhasil dimuat. notice_unable_delete_version: Tidak bisa menghapus versi. - error_can_t_load_default_data: "Konfigurasi default tidak bisa dimuat: {{value}}" + error_can_t_load_default_data: "Konfigurasi default tidak bisa dimuat: %{value}" error_scm_not_found: "Entri atau revisi tidak terdapat pada repositori." - error_scm_command_failed: "Terjadi kesalahan pada saat mengakses repositori: {{value}}" + error_scm_command_failed: "Terjadi kesalahan pada saat mengakses repositori: %{value}" error_scm_annotate: "Entri tidak ada, atau tidak dapat di anotasi." error_issue_not_found_in_project: 'Masalah tidak ada atau tidak tergabung dalam proyek ini.' error_no_tracker_in_project: 'Tidak ada pelacak yang diasosiasikan pada proyek ini. Silakan pilih Pengaturan Proyek.' @@ -169,25 +176,25 @@ error_can_not_reopen_issue_on_closed_version: 'Masalah yang ditujukan pada versi tertutup tidak bisa dibuka kembali' error_can_not_archive_project: Proyek ini tidak bisa diarsipkan - warning_attachments_not_saved: "{{count}} berkas tidak bisa disimpan." + warning_attachments_not_saved: "%{count} berkas tidak bisa disimpan." - mail_subject_lost_password: "Kata sandi {{value}} anda" + mail_subject_lost_password: "Kata sandi %{value} anda" mail_body_lost_password: 'Untuk mengubah kata sandi anda, klik tautan berikut::' - mail_subject_register: "Aktivasi akun {{value}} anda" + mail_subject_register: "Aktivasi akun %{value} anda" mail_body_register: 'Untuk mengaktifkan akun anda, klik tautan berikut:' - mail_body_account_information_external: "Anda dapat menggunakan akun {{value}} anda untuk login." + mail_body_account_information_external: "Anda dapat menggunakan akun %{value} anda untuk login." mail_body_account_information: Informasi akun anda - mail_subject_account_activation_request: "Permintaan aktivasi akun {{value}} " - mail_body_account_activation_request: "Pengguna baru ({{value}}) sudan didaftarkan. Akun tersebut menunggu persetujuan anda:" - mail_subject_reminder: "{{count}} masalah harus selesai pada hari berikutnya ({{days}})" - mail_body_reminder: "{{count}} masalah yang ditugaskan pada anda harus selesai dalam {{days}} hari kedepan:" - mail_subject_wiki_content_added: "'{{id}}' halaman wiki sudah ditambahkan" - mail_body_wiki_content_added: "The '{{id}}' halaman wiki sudah ditambahkan oleh {{author}}." - mail_subject_wiki_content_updated: "'{{id}}' halaman wiki sudah diperbarui" - mail_body_wiki_content_updated: "The '{{id}}' halaman wiki sudah diperbarui oleh {{author}}." + mail_subject_account_activation_request: "Permintaan aktivasi akun %{value} " + mail_body_account_activation_request: "Pengguna baru (%{value}) sudan didaftarkan. Akun tersebut menunggu persetujuan anda:" + mail_subject_reminder: "%{count} masalah harus selesai pada hari berikutnya (%{days})" + mail_body_reminder: "%{count} masalah yang ditugaskan pada anda harus selesai dalam %{days} hari kedepan:" + mail_subject_wiki_content_added: "'%{id}' halaman wiki sudah ditambahkan" + mail_body_wiki_content_added: "The '%{id}' halaman wiki sudah ditambahkan oleh %{author}." + mail_subject_wiki_content_updated: "'%{id}' halaman wiki sudah diperbarui" + mail_body_wiki_content_updated: "The '%{id}' halaman wiki sudah diperbarui oleh %{author}." gui_validation_error: 1 kesalahan - gui_validation_error_plural: "{{count}} kesalahan" + gui_validation_error_plural: "%{count} kesalahan" field_name: Nama @@ -251,7 +258,8 @@ field_attr_lastname: Atribut nama belakang field_attr_mail: Atribut email field_onthefly: Pembuatan pengguna seketika - field_done_ratio: % Selesai + field_start_date: Mulai + field_done_ratio: "% Selesai" field_auth_source: Mode otentikasi field_hide_mail: Sembunyikan email saya field_comments: Komentar @@ -307,7 +315,6 @@ setting_cross_project_issue_relations: Perbolehkan kaitan masalah proyek berbeda setting_issue_list_default_columns: Kolom default ditampilkan di daftar masalah setting_repositories_encodings: Repositories encodings - setting_commit_logs_encoding: Commit messages encoding setting_emails_footer: Footer untuk email setting_protocol: Protokol setting_per_page_options: Pilihan obyek per halaman @@ -398,14 +405,14 @@ label_x_projects: zero: tidak ada proyek one: 1 proyek - other: "{{count}} proyek" + other: "%{count} proyek" label_project_all: Semua Proyek label_project_latest: Proyek terakhir label_issue: Masalah label_issue_new: Masalah baru label_issue_plural: Masalah label_issue_view_all: tampilkan semua masalah - label_issues_by: "Masalah ditambahkan oleh {{value}}" + label_issues_by: "Masalah ditambahkan oleh %{value}" label_issue_added: Masalah ditambahan label_issue_updated: Masalah diperbarui label_document: Dokumen @@ -454,7 +461,7 @@ label_registered_on: Terdaftar pada label_activity: Kegiatan label_overall_activity: Kegiatan umum - label_user_activity: "kegiatan {{value}}" + label_user_activity: "kegiatan %{value}" label_new: Baru label_logged_as: Login sebagai label_environment: Lingkungan @@ -463,7 +470,7 @@ label_auth_source_new: Mode otentikasi baru label_auth_source_plural: Mode Otentikasi label_subproject_plural: Subproyek - label_and_its_subprojects: "{{value}} dan subproyeknya" + label_and_its_subprojects: "%{value} dan subproyeknya" label_min_max_length: Panjang Min - Maks label_list: Daftar label_date: Tanggal @@ -474,8 +481,8 @@ label_text: Long text label_attribute: Atribut label_attribute_plural: Atribut - label_download: "{{count}} Unduhan" - label_download_plural: "{{count}} Unduhan" + label_download: "%{count} Unduhan" + label_download_plural: "%{count} Unduhan" label_no_data: Tidak ada data untuk ditampilkan label_change_status: Status perubahan label_history: Riwayat @@ -507,17 +514,17 @@ label_closed_issues: selesai label_closed_issues_plural: selesai label_x_open_issues_abbr_on_total: - zero: 0 belum selesai / {{total}} - one: 1 belum selesai / {{total}} - other: "{{count}} terbuka / {{total}}" + zero: 0 belum selesai / %{total} + one: 1 belum selesai / %{total} + other: "%{count} terbuka / %{total}" label_x_open_issues_abbr: zero: 0 belum selesai one: 1 belum selesai - other: "{{count}} belum selesai" + other: "%{count} belum selesai" label_x_closed_issues_abbr: zero: 0 selesai one: 1 selesai - other: "{{count}} selesai" + other: "%{count} selesai" label_total: Total label_permissions: Perijinan label_current_status: Status sekarang @@ -535,7 +542,7 @@ label_months_from: dari bulan label_gantt: Gantt label_internal: Internal - label_last_changes: "{{count}} perubahan terakhir" + label_last_changes: "%{count} perubahan terakhir" label_change_view_all: Tampilkan semua perubahan label_personalize_page: Personalkan halaman ini label_comment: Komentar @@ -543,7 +550,7 @@ label_x_comments: zero: tak ada komentar one: 1 komentar - other: "{{count}} komentar" + other: "%{count} komentar" label_comment_add: Tambahkan komentar label_comment_added: Komentar ditambahkan label_comment_delete: Hapus komentar @@ -564,7 +571,7 @@ label_yesterday: kemarin label_this_week: minggu ini label_last_week: minggu lalu - label_last_n_days: "{{count}} hari terakhir" + label_last_n_days: "%{count} hari terakhir" label_this_month: bulan ini label_last_month: bulan lalu label_this_year: this year @@ -578,8 +585,8 @@ label_repository: Repositori label_repository_plural: Repositori label_browse: Jelajah - label_modification: "{{count}} perubahan" - label_modification_plural: "{{count}} perubahan" + label_modification: "%{count} perubahan" + label_modification_plural: "%{count} perubahan" label_branch: Cabang label_tag: Tag label_revision: Revisi @@ -600,8 +607,8 @@ label_sort_lower: Ke bawah label_sort_lowest: Ke paling bawah label_roadmap: Rencana kerja - label_roadmap_due_in: "Harus selesai dalam {{value}}" - label_roadmap_overdue: "{{value}} terlambat" + label_roadmap_due_in: "Harus selesai dalam %{value}" + label_roadmap_overdue: "%{value} terlambat" label_roadmap_no_issues: Tak ada masalah pada versi ini label_search: Cari label_result_plural: Hasil @@ -619,8 +626,8 @@ label_changes_details: Rincian semua perubahan label_issue_tracking: Pelacak masalah label_spent_time: Waktu terpakai - label_f_hour: "{{value}} jam" - label_f_hour_plural: "{{value}} jam" + label_f_hour: "%{value} jam" + label_f_hour_plural: "%{value} jam" label_time_tracking: Pelacak waktu label_change_plural: Perubahan label_statistics: Statistik @@ -669,13 +676,13 @@ label_date_from: Dari label_date_to: Sampai label_language_based: Berdasarkan bahasa pengguna - label_sort_by: "Urut berdasarkan {{value}}" + label_sort_by: "Urut berdasarkan %{value}" label_send_test_email: Kirim email percobaan - label_feeds_access_key_created_on: "RSS access key dibuat {{value}} yang lalu" + label_feeds_access_key_created_on: "RSS access key dibuat %{value} yang lalu" label_module_plural: Modul - label_added_time_by: "Ditambahkan oleh {{author}} {{age}} yang lalu" - label_updated_time_by: "Diperbarui oleh {{author}} {{age}} yang lalu" - label_updated_time: "Diperbarui oleh {{value}} yang lalu" + label_added_time_by: "Ditambahkan oleh %{author} %{age} yang lalu" + label_updated_time_by: "Diperbarui oleh %{author} %{age} yang lalu" + label_updated_time: "Diperbarui oleh %{value} yang lalu" label_jump_to_a_project: Pilih proyek... label_file_plural: Berkas label_changeset_plural: Set perubahan @@ -693,7 +700,7 @@ label_registration_activation_by_email: aktivasi akun melalui email label_registration_manual_activation: aktivasi akun secara manual label_registration_automatic_activation: aktivasi akun secara otomatis - label_display_per_page: "Per halaman: {{value}}" + label_display_per_page: "Per halaman: %{value}" label_age: Umur label_change_properties: Rincian perubahan label_general: Umum @@ -716,7 +723,7 @@ label_sort: Urut label_ascending: Menaik label_descending: Menurun - label_date_from_to: Dari {{start}} sampai {{end}} + label_date_from_to: Dari %{start} sampai %{end} label_wiki_content_added: Halaman wiki ditambahkan label_wiki_content_updated: Halaman wiki diperbarui label_group: Kelompok @@ -787,52 +794,52 @@ text_regexp_info: mis. ^[A-Z0-9]+$ text_min_max_length_info: 0 berarti tidak ada pembatasan text_project_destroy_confirmation: Apakah anda benar-benar akan menghapus proyek ini beserta data terkait ? - text_subprojects_destroy_warning: "Subproyek: {{value}} juga akan dihapus." + text_subprojects_destroy_warning: "Subproyek: %{value} juga akan dihapus." text_workflow_edit: Pilih peran dan pelacak untuk menyunting alur kerja text_are_you_sure: Anda yakin ? - text_journal_changed: "{{label}} berubah dari {{old}} menjadi {{new}}" - text_journal_set_to: "{{label}} di set ke {{value}}" - text_journal_deleted: "{{label}} dihapus ({{old}})" - text_journal_added: "{{label}} {{value}} ditambahkan" + text_journal_changed: "%{label} berubah dari %{old} menjadi %{new}" + text_journal_set_to: "%{label} di set ke %{value}" + text_journal_deleted: "%{label} dihapus (%{old})" + text_journal_added: "%{label} %{value} ditambahkan" text_tip_issue_begin_day: tugas dimulai hari itu text_tip_issue_end_day: tugas berakhir hari itu text_tip_issue_begin_end_day: tugas dimulai dan berakhir hari itu text_project_identifier_info: 'Yang diijinkan hanya huruf kecil (a-z), angka dan tanda minus.
    Sekali disimpan, pengenal tidak bisa diubah.' - text_caracters_maximum: "maximum {{count}} karakter." - text_caracters_minimum: "Setidaknya harus sepanjang {{count}} karakter." - text_length_between: "Panjang diantara {{min}} dan {{max}} karakter." + text_caracters_maximum: "maximum %{count} karakter." + text_caracters_minimum: "Setidaknya harus sepanjang %{count} karakter." + text_length_between: "Panjang diantara %{min} dan %{max} karakter." text_tracker_no_workflow: Tidak ada alur kerja untuk pelacak ini text_unallowed_characters: Karakter tidak diperbolehkan text_comma_separated: Beberapa nilai diperbolehkan (dipisahkan koma). text_issues_ref_in_commit_messages: Mereferensikan dan membetulkan masalah pada pesan komit - text_issue_added: "Masalah {{id}} sudah dilaporkan oleh {{author}}." - text_issue_updated: "Masalah {{id}} sudah diperbarui oleh {{author}}." + text_issue_added: "Masalah %{id} sudah dilaporkan oleh %{author}." + text_issue_updated: "Masalah %{id} sudah diperbarui oleh %{author}." text_wiki_destroy_confirmation: Apakah anda benar-benar akan menghapus wiki ini beserta semua isinya ? - text_issue_category_destroy_question: "Beberapa masalah ({{count}}) ditugaskan pada kategori ini. Apa yang anda lakukan ?" + text_issue_category_destroy_question: "Beberapa masalah (%{count}) ditugaskan pada kategori ini. Apa yang anda lakukan ?" text_issue_category_destroy_assignments: Hapus kategori penugasan text_issue_category_reassign_to: Tugaskan kembali masalah untuk kategori ini text_user_mail_option: "Untuk proyek yang tidak dipilih, anda hanya akan menerima notifikasi hal-hal yang anda pantau atau anda terlibat di dalamnya (misalnya masalah yang anda tulis atau ditugaskan pada anda)." text_no_configuration_data: "Peran, pelacak, status masalah dan alur kerja belum dikonfigur.\nSangat disarankan untuk memuat konfigurasi default. Anda akan bisa mengubahnya setelah konfigurasi dimuat." text_load_default_configuration: Muat konfigurasi default - text_status_changed_by_changeset: "Diterapkan di set perubahan {{value}}." + text_status_changed_by_changeset: "Diterapkan di set perubahan %{value}." text_issues_destroy_confirmation: 'Apakah anda yakin untuk menghapus masalah terpilih ?' text_select_project_modules: 'Pilih modul untuk diaktifkan pada proyek ini:' text_default_administrator_account_changed: Akun administrator default sudah berubah text_file_repository_writable: Direktori yang bisa ditulisi untuk lampiran text_plugin_assets_writable: Direktori yang bisa ditulisi untuk plugin asset text_rmagick_available: RMagick tersedia (optional) - text_destroy_time_entries_question: "{{hours}} jam sudah dilaporkan pada masalah yang akan anda hapus. Apa yang akan anda lakukan ?" + text_destroy_time_entries_question: "%{hours} jam sudah dilaporkan pada masalah yang akan anda hapus. Apa yang akan anda lakukan ?" text_destroy_time_entries: Hapus jam yang terlapor text_assign_time_entries_to_project: Tugaskan jam terlapor pada proyek text_reassign_time_entries: 'Tugaskan kembali jam terlapor pada masalah ini:' - text_user_wrote: "{{value}} menulis:" - text_enumeration_destroy_question: "{{count}} obyek ditugaskan untuk nilai ini." + 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' - text_wiki_page_destroy_question: "Halaman ini mempunyai {{descendants}} halaman anak dan turunannya. Apa yang akan anda lakukan ?" + text_wiki_page_destroy_question: "Halaman ini mempunyai %{descendants} halaman anak dan turunannya. Apa yang akan anda lakukan ?" text_wiki_page_nullify_children: "Biarkan halaman anak sebagai halaman teratas (root)" text_wiki_page_destroy_children: "Hapus halaman anak dan semua turunannya" text_wiki_page_reassign_children: "Tujukan halaman anak ke halaman induk yang ini" @@ -868,13 +875,13 @@ setting_issue_done_ratio: Calculate the issue done ratio with label_api_access_key: API access key text_line_separated: Multiple values allowed (one line for each value). - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} permission_view_issues: View Issues setting_issue_done_ratio_issue_status: Use the issue status error_issue_done_ratios_not_updated: Issue done ratios not updated. label_display_used_statuses_only: Only display statuses that are used by this tracker error_workflow_copy_target: Please select target tracker(s) and role(s) - label_api_access_key_created_on: API access key created {{value}} ago + label_api_access_key_created_on: API access key created %{value} ago label_feeds_access_key: RSS access key notice_api_access_key_reseted: Your API access key was reset. setting_rest_api_enabled: Enable REST web service @@ -906,12 +913,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -919,7 +926,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -930,8 +937,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Commit messages encoding + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/it.yml.svn-base --- a/config/locales/.svn/text-base/it.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/it.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,6 +1,7 @@ # Italian translations for Ruby on Rails # by Claudio Poli (masterkain@gmail.com) # by Diego Pierotto (ita.translations@tiscali.it) +# by Emidio Stani (emidiostani@gmail.com) it: direction: ltr @@ -15,7 +16,10 @@ abbr_day_names: [Dom, Lun, Mar, Mer, Gio, Ven, Sab] month_names: [~, Gennaio, Febbraio, Marzo, Aprile, Maggio, Giugno, Luglio, Agosto, Settembre, Ottobre, Novembre, Dicembre] abbr_month_names: [~, Gen, Feb, Mar, Apr, Mag, Giu, Lug, Ago, Set, Ott, Nov, Dic] - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -37,37 +41,37 @@ half_a_minute: "mezzo minuto" less_than_x_seconds: one: "meno di un secondo" - other: "meno di {{count}} secondi" + other: "meno di %{count} secondi" x_seconds: one: "1 secondo" - other: "{{count}} secondi" + other: "%{count} secondi" less_than_x_minutes: one: "meno di un minuto" - other: "meno di {{count}} minuti" + other: "meno di %{count} minuti" x_minutes: one: "1 minuto" - other: "{{count}} minuti" + other: "%{count} minuti" about_x_hours: one: "circa un'ora" - other: "circa {{count}} ore" + other: "circa %{count} ore" x_days: one: "1 giorno" - other: "{{count}} giorni" + other: "%{count} giorni" about_x_months: one: "circa un mese" - other: "circa {{count}} mesi" + other: "circa %{count} mesi" x_months: one: "1 mese" - other: "{{count}} mesi" + other: "%{count} mesi" about_x_years: one: "circa un anno" - other: "circa {{count}} anni" + other: "circa %{count} anni" over_x_years: one: "oltre un anno" - other: "oltre {{count}} anni" + other: "oltre %{count} anni" almost_x_years: one: "quasi 1 anno" - other: "quasi {{count}} anni" + other: "quasi %{count} anni" number: format: @@ -100,8 +104,8 @@ errors: template: header: - one: "Non posso salvare questo {{model}}: 1 errore" - other: "Non posso salvare questo {{model}}: {{count}} errori." + one: "Non posso salvare questo %{model}: 1 errore" + other: "Non posso salvare questo %{model}: %{count} errori." body: "Per favore ricontrolla i seguenti campi:" messages: inclusion: "non è incluso nella lista" @@ -111,22 +115,22 @@ accepted: "deve essere accettata" empty: "non può essere vuoto" blank: "non può essere lasciato in bianco" - too_long: "è troppo lungo (il massimo è {{count}} lettere)" - too_short: "è troppo corto (il minimo è {{count}} lettere)" - wrong_length: "è della lunghezza sbagliata (deve essere di {{count}} lettere)" + too_long: "è troppo lungo (il massimo è %{count} lettere)" + too_short: "è troppo corto (il minimo è %{count} lettere)" + wrong_length: "è della lunghezza sbagliata (deve essere di %{count} lettere)" taken: "è già in uso" not_a_number: "non è un numero" - greater_than: "deve essere superiore a {{count}}" - greater_than_or_equal_to: "deve essere superiore o uguale a {{count}}" - equal_to: "deve essere uguale a {{count}}" - less_than: "deve essere meno di {{count}}" - less_than_or_equal_to: "deve essere meno o uguale a {{count}}" + greater_than: "deve essere superiore a %{count}" + greater_than_or_equal_to: "deve essere superiore o uguale a %{count}" + equal_to: "deve essere uguale a %{count}" + less_than: "deve essere meno di %{count}" + less_than_or_equal_to: "deve essere meno o uguale a %{count}" odd: "deve essere dispari" even: "deve essere pari" greater_than_start_date: "deve essere maggiore della data di partenza" not_same_project: "non appartiene allo stesso progetto" circular_dependency: "Questa relazione creerebbe una dipendenza circolare" - 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: "Una segnalazione non può essere collegata a una delle sue discendenti" actionview_instancetag_blank_option: Scegli @@ -135,17 +139,17 @@ general_text_no: 'no' general_text_yes: 'sì' general_lang_name: 'Italiano' - general_csv_separator: ',' - general_csv_decimal_separator: '.' + general_csv_separator: ';' + general_csv_decimal_separator: ',' general_csv_encoding: ISO-8859-1 - general_pdf_encoding: ISO-8859-1 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' - notice_account_updated: L'utente è stata aggiornato. + notice_account_updated: L'utente è stato aggiornato. notice_account_invalid_creditentials: Nome utente o password non validi. notice_account_password_updated: La password è stata aggiornata. notice_account_wrong_password: Password errata - notice_account_register_done: L'utente è stata creato. + notice_account_register_done: L'utente è stato creato. notice_account_unknown_email: Utente sconosciuto. notice_can_t_change_password: Questo utente utilizza un metodo di autenticazione esterno. Impossibile cambiare la password. notice_account_lost_email_sent: Ti è stata spedita una email con le istruzioni per cambiare la password. @@ -157,20 +161,20 @@ notice_file_not_found: La pagina desiderata non esiste o è stata rimossa. notice_locking_conflict: Le informazioni sono state modificate da un altro utente. notice_not_authorized: Non sei autorizzato ad accedere a questa pagina. - notice_email_sent: "Una email è stata spedita a {{value}}" - notice_email_error: "Si è verificato un errore durante l'invio di una email ({{value}})" + notice_email_sent: "Una email è stata spedita a %{value}" + notice_email_error: "Si è verificato un errore durante l'invio di una email (%{value})" notice_feeds_access_key_reseted: La tua chiave di accesso RSS è stata reimpostata. error_scm_not_found: "La risorsa e/o la versione non esistono nel repository." - error_scm_command_failed: "Si è verificato un errore durante l'accesso al repository: {{value}}" + error_scm_command_failed: "Si è verificato un errore durante l'accesso al repository: %{value}" - mail_subject_lost_password: "Password {{value}}" + mail_subject_lost_password: "Password %{value}" mail_body_lost_password: 'Per cambiare la password, usa il seguente collegamento:' - mail_subject_register: "Attivazione utente {{value}}" + mail_subject_register: "Attivazione utente %{value}" mail_body_register: "Per attivare l'utente, usa il seguente collegamento:" gui_validation_error: 1 errore - gui_validation_error_plural: "{{count}} errori" + gui_validation_error_plural: "%{count} errori" field_name: Nome field_description: Descrizione @@ -232,7 +236,8 @@ field_attr_lastname: Attributo cognome field_attr_mail: Attributo email field_onthefly: Creazione utente "al volo" - field_done_ratio: % completato + field_start_date: Inizio + field_done_ratio: "% completato" field_auth_source: Modalità di autenticazione field_hide_mail: Nascondi il mio indirizzo email field_comments: Commento @@ -281,7 +286,7 @@ label_x_projects: zero: nessun progetto one: 1 progetto - other: "{{count}} progetti" + other: "%{count} progetti" label_project_all: Tutti i progetti label_project_latest: Ultimi progetti registrati label_issue: Segnalazione @@ -348,8 +353,8 @@ label_text: Testo esteso label_attribute: Attributo label_attribute_plural: Attributi - label_download: "{{count}} Download" - label_download_plural: "{{count}} Download" + label_download: "%{count} Download" + label_download_plural: "%{count} Download" label_no_data: Nessun dato disponibile label_change_status: Cambia stato label_history: Cronologia @@ -378,17 +383,17 @@ label_closed_issues: chiusa label_closed_issues_plural: chiuse label_x_open_issues_abbr_on_total: - zero: 0 aperte / {{total}} - one: 1 aperta / {{total}} - other: "{{count}} aperte / {{total}}" + zero: 0 aperte / %{total} + one: 1 aperta / %{total} + other: "%{count} aperte / %{total}" label_x_open_issues_abbr: zero: 0 aperte one: 1 aperta - other: "{{count}} aperte" + other: "%{count} aperte" label_x_closed_issues_abbr: zero: 0 chiuse one: 1 chiusa - other: "{{count}} chiuse" + other: "%{count} chiuse" label_total: Totale label_permissions: Permessi label_current_status: Stato attuale @@ -405,7 +410,7 @@ label_months_from: mesi da label_gantt: Gantt label_internal: Interno - label_last_changes: "ultime {{count}} modifiche" + label_last_changes: "ultime %{count} modifiche" label_change_view_all: Tutte le modifiche label_personalize_page: Personalizza la pagina label_comment: Commento @@ -413,7 +418,7 @@ label_x_comments: zero: nessun commento one: 1 commento - other: "{{count}} commenti" + other: "%{count} commenti" label_comment_add: Aggiungi un commento label_comment_added: Commento aggiunto label_comment_delete: Elimina commenti @@ -437,8 +442,8 @@ label_day_plural: giorni label_repository: Repository label_browse: Sfoglia - label_modification: "{{count}} modifica" - label_modification_plural: "{{count}} modifiche" + label_modification: "%{count} modifica" + label_modification_plural: "%{count} modifiche" label_revision: Versione label_revision_plural: Versioni label_added: aggiunto @@ -453,15 +458,15 @@ label_sort_lower: Giù label_sort_lowest: Sposta in fondo label_roadmap: Roadmap - label_roadmap_due_in: "Da ultimare in {{value}}" - label_roadmap_overdue: "{{value}} di ritardo" + label_roadmap_due_in: "Da ultimare in %{value}" + label_roadmap_overdue: "%{value} di ritardo" label_roadmap_no_issues: Nessuna segnalazione per questa versione label_search: Ricerca label_result_plural: Risultati label_all_words: Tutte le parole label_wiki: Wiki label_wiki_edit: Modifica wiki - label_wiki_edit_plural: Modfiche wiki + label_wiki_edit_plural: Modifiche wiki label_wiki_page: Pagina Wiki label_wiki_page_plural: Pagine wiki label_index_by_title: Ordina per titolo @@ -472,8 +477,8 @@ label_changes_details: Particolari di tutti i cambiamenti label_issue_tracking: Tracking delle segnalazioni label_spent_time: Tempo impiegato - label_f_hour: "{{value}} ora" - label_f_hour_plural: "{{value}} ore" + label_f_hour: "%{value} ora" + label_f_hour_plural: "%{value} ore" label_time_tracking: Tracking del tempo label_change_plural: Modifiche label_statistics: Statistiche @@ -520,12 +525,12 @@ label_date_from: Da label_date_to: A label_language_based: Basato sul linguaggio - label_sort_by: "Ordina per {{value}}" + label_sort_by: "Ordina per %{value}" label_send_test_email: Invia una email di prova - label_feeds_access_key_created_on: "chiave di accesso RSS creata {{value}} fa" + label_feeds_access_key_created_on: "chiave di accesso RSS creata %{value} fa" label_module_plural: Moduli - label_added_time_by: "Aggiunto da {{author}} {{age}} fa" - label_updated_time: "Aggiornato {{value}} fa" + label_added_time_by: "Aggiunto da %{author} %{age} fa" + label_updated_time: "Aggiornato %{value} fa" label_jump_to_a_project: Vai al progetto... button_login: Entra @@ -575,16 +580,16 @@ text_tip_issue_end_day: attività che terminano in questa giornata text_tip_issue_begin_end_day: attività che iniziano e terminano in questa giornata text_project_identifier_info: "Lettere minuscole (a-z), numeri e trattini permessi.
    Una volta salvato, l'identificativo non può essere modificato." - text_caracters_maximum: "massimo {{count}} caratteri." - text_length_between: "Lunghezza compresa tra {{min}} e {{max}} caratteri." + text_caracters_maximum: "massimo %{count} caratteri." + text_length_between: "Lunghezza compresa tra %{min} e %{max} caratteri." text_tracker_no_workflow: Nessun workflow definito per questo tracker text_unallowed_characters: Caratteri non permessi text_comma_separated: Valori multipli permessi (separati da virgole). text_issues_ref_in_commit_messages: Segnalazioni di riferimento e chiusura nei messaggi di commit - text_issue_added: "E' stata segnalata l'anomalia {{id}} da {{author}}." - text_issue_updated: "L'anomalia {{id}} è stata aggiornata da {{author}}." + text_issue_added: "E' stata segnalata l'anomalia %{id} da %{author}." + text_issue_updated: "L'anomalia %{id} è stata aggiornata da %{author}." text_wiki_destroy_confirmation: Sicuro di voler eliminare questo wiki e tutti i suoi contenuti? - text_issue_category_destroy_question: "Alcune segnalazioni ({{count}}) risultano assegnate a questa categoria. Cosa vuoi fare ?" + text_issue_category_destroy_question: "Alcune segnalazioni (%{count}) risultano assegnate a questa categoria. Cosa vuoi fare ?" text_issue_category_destroy_assignments: Rimuovi le assegnazioni a questa categoria text_issue_category_reassign_to: Riassegna segnalazioni a questa categoria @@ -622,7 +627,7 @@ notice_no_issue_selected: "Nessuna segnalazione selezionata! Seleziona le segnalazioni che intendi modificare." label_bulk_edit_selected_issues: Modifica massiva delle segnalazioni selezionate label_no_change_option: (Nessuna modifica) - notice_failed_to_save_issues: "Impossibile salvare {{count}} segnalazioni su {{total}} selezionate: {{ids}}." + notice_failed_to_save_issues: "Impossibile salvare %{count} segnalazioni su %{total} selezionate: %{ids}." label_theme: Tema label_default: Predefinito label_search_titles_only: Cerca solo nei titoli @@ -634,37 +639,37 @@ setting_emails_footer: Piè di pagina email label_float: Decimale button_copy: Copia - mail_body_account_information_external: "Puoi utilizzare il tuo account {{value}} per accedere al sistema." + mail_body_account_information_external: "Puoi utilizzare il tuo account %{value} per accedere al sistema." mail_body_account_information: Le informazioni riguardanti il tuo account setting_protocol: Protocollo label_user_mail_no_self_notified: "Non voglio notifiche riguardanti modifiche da me apportate" setting_time_format: Formato ora label_registration_activation_by_email: attivazione account via email - mail_subject_account_activation_request: "{{value}} richiesta attivazione account" - mail_body_account_activation_request: "Un nuovo utente ({{value}}) ha effettuato la registrazione. Il suo account è in attesa di abilitazione da parte tua:" + mail_subject_account_activation_request: "%{value} richiesta attivazione account" + mail_body_account_activation_request: "Un nuovo utente (%{value}) ha effettuato la registrazione. Il suo account è in attesa di abilitazione da parte tua:" label_registration_automatic_activation: attivazione account automatica label_registration_manual_activation: attivazione account manuale notice_account_pending: "Il tuo account è stato creato ed è in attesa di attivazione da parte dell'amministratore." field_time_zone: Fuso orario - text_caracters_minimum: "Deve essere lungo almeno {{count}} caratteri." + text_caracters_minimum: "Deve essere lungo almeno %{count} caratteri." setting_bcc_recipients: Destinatari in copia nascosta (bcc) button_annotate: Annota - label_issues_by: "Segnalazioni di {{value}}" + label_issues_by: "Segnalazioni di %{value}" field_searchable: Ricercabile - label_display_per_page: "Per pagina: {{value}}" + label_display_per_page: "Per pagina: %{value}" setting_per_page_options: Opzioni oggetti per pagina label_age: Età notice_default_data_loaded: Configurazione predefinita caricata con successo. text_load_default_configuration: Carica la configurazione predefinita text_no_configuration_data: "Ruoli, tracker, stati delle segnalazioni e workflow non sono stati ancora configurati.\nE' vivamente consigliato caricare la configurazione predefinita. Potrai modificarla una volta caricata." - error_can_t_load_default_data: "Non è stato possibile caricare la configurazione predefinita : {{value}}" + error_can_t_load_default_data: "Non è stato possibile caricare la configurazione predefinita : %{value}" button_update: Aggiorna label_change_properties: Modifica le proprietà label_general: Generale label_repository_plural: Repository label_associated_revisions: Revisioni associate setting_user_format: Formato visualizzazione utenti - text_status_changed_by_changeset: "Applicata nel changeset {{value}}." + text_status_changed_by_changeset: "Applicata nel changeset %{value}." label_more: Altro text_issues_destroy_confirmation: 'Sei sicuro di voler eliminare le segnalazioni selezionate?' label_scm: SCM @@ -691,7 +696,7 @@ label_ldap_authentication: Autenticazione LDAP label_downloads_abbr: D/L label_this_month: questo mese - label_last_n_days: "ultimi {{count}} giorni" + label_last_n_days: "ultimi %{count} giorni" label_all_time: sempre label_this_year: quest'anno label_date_range: Intervallo di date @@ -700,7 +705,7 @@ label_last_month: ultimo mese label_add_another_file: Aggiungi un altro file label_optional_description: Descrizione opzionale - text_destroy_time_entries_question: "{{hours}} ore risultano spese sulle segnalazioni che stai per eliminare. Cosa vuoi fare ?" + text_destroy_time_entries_question: "%{hours} ore risultano spese sulle segnalazioni che stai per eliminare. Cosa vuoi fare ?" error_issue_not_found_in_project: 'La segnalazione non è stata trovata o non appartiene al progetto' text_assign_time_entries_to_project: Assegna le ore segnalate al progetto text_destroy_time_entries: Elimina le ore segnalate @@ -715,23 +720,22 @@ setting_default_projects_public: I nuovi progetti sono pubblici in modo predefinito error_scm_annotate: "L'oggetto non esiste o non può essere annotato." label_planning: Pianificazione - text_subprojects_destroy_warning: "Anche i suoi sottoprogetti: {{value}} verranno eliminati." - label_and_its_subprojects: "{{value}} ed i suoi sottoprogetti" - mail_body_reminder: "{{count}} segnalazioni che ti sono state assegnate scadranno nei prossimi {{days}} giorni:" - mail_subject_reminder: "{{count}} segnalazioni in scadenza nei prossimi {{days}} giorni" - text_user_wrote: "{{value}} ha scritto:" + text_subprojects_destroy_warning: "Anche i suoi sottoprogetti: %{value} verranno eliminati." + label_and_its_subprojects: "%{value} ed i suoi sottoprogetti" + mail_body_reminder: "%{count} segnalazioni che ti sono state assegnate scadranno nei prossimi %{days} giorni:" + mail_subject_reminder: "%{count} segnalazioni in scadenza nei prossimi %{days} giorni" + text_user_wrote: "%{value} ha scritto:" label_duplicated_by: duplicato da setting_enabled_scm: SCM abilitato text_enumeration_category_reassign_to: 'Riassegnale a questo valore:' - text_enumeration_destroy_question: "{{count}} oggetti hanno un assegnamento su questo valore." + text_enumeration_destroy_question: "%{count} oggetti hanno un assegnamento su questo valore." label_incoming_emails: Email in arrivo 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 button_quote: Quota setting_sequential_project_identifiers: Genera progetti con identificativi in sequenza notice_unable_delete_version: Impossibile eliminare la versione @@ -789,12 +793,12 @@ text_repository_usernames_mapping: "Seleziona per aggiornare la corrispondenza tra gli utenti Redmine e quelli presenti nel log del repository.\nGli utenti Redmine e repository con lo stesso note utente o email sono mappati automaticamente." permission_edit_own_messages: Modifica propri messaggi permission_delete_own_messages: Elimina propri messaggi - label_user_activity: "attività di {{value}}" - label_updated_time_by: "Aggiornato da {{author}} {{age}} fa" + label_user_activity: "attività di %{value}" + label_updated_time_by: "Aggiornato da %{author} %{age} fa" text_diff_truncated: '... Le differenze sono state troncate perchè superano il limite massimo visualizzabile.' setting_diff_max_lines_displayed: Limite massimo di differenze (linee) mostrate text_plugin_assets_writable: Directory attività dei plugins scrivibile - warning_attachments_not_saved: "{{count}} file non possono essere salvati." + warning_attachments_not_saved: "%{count} file non possono essere salvati." button_create_and_continue: Crea e continua text_custom_field_possible_values_info: 'Un valore per ogni riga' label_display: Mostra @@ -809,21 +813,21 @@ label_descending: Discendente label_sort: Ordina label_ascending: Ascendente - label_date_from_to: Da {{start}} a {{end}} + label_date_from_to: Da %{start} a %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: Questa pagina ha {{descendants}} pagine figlie. Cosa ne vuoi fare? + text_wiki_page_destroy_question: Questa pagina ha %{descendants} pagine figlie. Cosa ne vuoi fare? text_wiki_page_reassign_children: Riassegna le pagine figlie al padre di questa pagina text_wiki_page_nullify_children: Mantieni le pagine figlie come pagine radice text_wiki_page_destroy_children: Elimina le pagine figlie e tutta la discendenza setting_password_min_length: Lunghezza minima password field_group_by: Raggruppa risultati per - mail_subject_wiki_content_updated: "La pagina wiki '{{id}}' è stata aggiornata" + mail_subject_wiki_content_updated: "La pagina wiki '%{id}' è stata aggiornata" label_wiki_content_added: Aggiunta pagina al wiki - mail_subject_wiki_content_added: "La pagina '{{id}}' è stata aggiunta al wiki" - mail_body_wiki_content_added: La pagina '{{id}}' è stata aggiunta al wiki da {{author}}. + mail_subject_wiki_content_added: "La pagina '%{id}' è stata aggiunta al wiki" + mail_body_wiki_content_added: La pagina '%{id}' è stata aggiunta al wiki da %{author}. label_wiki_content_updated: Aggiornata pagina wiki - mail_body_wiki_content_updated: La pagina '{{id}}' wiki è stata aggiornata da{{author}}. + mail_body_wiki_content_updated: La pagina '%{id}' wiki è stata aggiornata da%{author}. permission_add_project: Crea progetto setting_new_project_user_role_id: Ruolo assegnato agli utenti non amministratori che creano un progetto label_view_all_revisions: Mostra tutte le revisioni @@ -831,14 +835,14 @@ label_branch: Branch error_no_tracker_in_project: Nessun tracker è associato a questo progetto. Per favore verifica le impostazioni del Progetto. error_no_default_issue_status: Nessuno stato predefinito delle segnalazioni è configurato. Per favore verifica le impostazioni (Vai in "Amministrazione -> Stati segnalazioni"). - text_journal_changed: "{{label}} modificata da {{old}} a {{new}}" - text_journal_set_to: "{{label}} impostata a {{value}}" - text_journal_deleted: "{{label}} eliminata ({{old}})" + text_journal_changed: "%{label} modificata da %{old} a %{new}" + text_journal_set_to: "%{label} impostata a %{value}" + text_journal_deleted: "%{label} eliminata (%{old})" label_group_plural: Gruppi label_group: Gruppo label_group_new: Nuovo gruppo label_time_entry_plural: Tempo impiegato - text_journal_added: "{{value}} {{label}} aggiunto" + text_journal_added: "%{value} %{label} aggiunto" field_active: Attivo enumeration_system_activity: Attività di sistema permission_delete_issue_watchers: Elimina osservatori @@ -873,9 +877,9 @@ setting_start_of_week: Avvia calendari il permission_view_issues: Mostra segnalazioni label_display_used_statuses_only: Mostra solo stati che vengono usati per questo tracker - label_revision_id: Revisione {{value}} + label_revision_id: Revisione %{value} label_api_access_key: Chiave di accesso API - label_api_access_key_created_on: Chiave di accesso API creata {{value}} fa + label_api_access_key_created_on: Chiave di accesso API creata %{value} fa label_feeds_access_key: Chiave di accesso RSS notice_api_access_key_reseted: La chiave di accesso API è stata reimpostata. setting_rest_api_enabled: Abilita il servizio web REST @@ -902,32 +906,74 @@ label_subtask_plural: Sottoattività label_project_copy_notifications: Invia notifiche email durante la copia del progetto error_can_not_delete_custom_field: Impossibile eliminare il campo personalizzato - error_unable_to_connect: Impossibile connettersi ({{value}}) + error_unable_to_connect: Impossibile connettersi (%{value}) error_can_not_remove_role: Questo ruolo è in uso e non può essere eliminato. error_can_not_delete_tracker: Questo tracker contiene segnalazioni e non può essere eliminato. field_principal: Principale label_my_page_block: La mia pagina di blocco - notice_failed_to_save_members: "Impossibile salvare il membro(i): {{errors}}." + notice_failed_to_save_members: "Impossibile salvare il membro(i): %{errors}." text_zoom_out: Riduci ingrandimento text_zoom_in: Aumenta ingrandimento notice_unable_delete_time_entry: Impossibile eliminare il valore time log. label_overall_spent_time: Totale tempo impiegato - field_time_entries: Log time + field_time_entries: Tempo di collegamento 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. - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header + project_module_calendar: Calendario + button_edit_associated_wikipage: "Modifica la pagina wiki associata: %{page_title}" + text_are_you_sure_with_children: Eliminare la segnalazione e tutte le discendenti? + field_text: Campo di testo + label_user_mail_option_only_owner: Solo se io sono il proprietario + setting_default_notification_option: Opzione di notifica predefinita + label_user_mail_option_only_my_events: Solo se sono un osservatore o sono coinvolto + label_user_mail_option_only_assigned: Solo quando mi assegnano attività + label_user_mail_option_none: Nessun evento + field_member_of_group: Gruppo dell'assegnatario + field_assigned_to_role: Ruolo dell'assegnatario + notice_not_authorized_archived_project: Il progetto a cui stai accedendo è stato archiviato. + label_principal_search: "Cerca utente o gruppo:" + label_user_search: "Cerca utente:" + field_visible: Visibile + setting_emails_header: Intestazione email + setting_commit_logtime_activity_id: Attività per il tempo di collegamento + text_time_logged_by_changeset: Usato nel changeset %{value}. + 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Codifica dei messaggi di commit + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/ja.yml.svn-base --- a/config/locales/.svn/text-base/ja.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/ja.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,4 +1,4 @@ -# Japanese translations for Ruby on Rails +# Japanese translations for Ruby on Rails # by Akira Matsuda (ronnie@dio.jp) # AR error messages are basically taken from Ruby-GetText-Package. Thanks to Masao Mutoh. @@ -12,15 +12,18 @@ default: "%Y/%m/%d" short: "%m/%d" long: "%Y年%m月%d日(%a)" - + day_names: [日曜日, 月曜日, 火曜日, 水曜日, 木曜日, 金曜日, 土曜日] abbr_day_names: [日, 月, 火, 水, 木, 金, 土] - + # Don't forget the nil at the beginning; there's no such thing as a 0th month month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月] abbr_month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月] # Used in date_select and datime_select. - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -30,43 +33,43 @@ long: "%Y年%m月%d日(%a) %H時%M分%S秒 %Z" am: "午前" pm: "午後" - + datetime: distance_in_words: half_a_minute: "30秒前後" less_than_x_seconds: one: "1秒以内" - other: "{{count}}秒以内" + other: "%{count}秒以内" x_seconds: one: "1秒" - other: "{{count}}秒" + other: "%{count}秒" less_than_x_minutes: one: "1分以内" - other: "{{count}}分以内" + other: "%{count}分以内" x_minutes: one: "1分" - other: "{{count}}分" + other: "%{count}分" about_x_hours: one: "約1時間" - other: "約{{count}}時間" + other: "約%{count}時間" x_days: one: "1日" - other: "{{count}}日" + other: "%{count}日" about_x_months: one: "約1ヶ月" - other: "約{{count}}ヶ月" + other: "約%{count}ヶ月" x_months: one: "1ヶ月" - other: "{{count}}ヶ月" + other: "%{count}ヶ月" about_x_years: one: "約1年" - other: "約{{count}}年" + other: "約%{count}年" over_x_years: one: "1年以上" - other: "{{count}}年以上" + other: "%{count}年以上" almost_x_years: one: "ほぼ1年" - other: "ほぼ{{count}}年" + other: "ほぼ%{count}年" number: format: @@ -105,19 +108,18 @@ gb: "GB" tb: "TB" - # Used in array.to_sentence. support: array: sentence_connector: "及び" skip_last_comma: true - + activerecord: errors: template: header: - one: "{{model}} にエラーが発生しました。" - other: "{{model}} に {{count}} つのエラーが発生しました。" + one: "%{model} にエラーが発生しました。" + other: "%{model} に %{count} つのエラーが発生しました。" body: "次の項目を確認してください。" messages: @@ -128,17 +130,17 @@ accepted: "を受諾してください。" empty: "を入力してください。" blank: "を入力してください。" - too_long: "は{{count}}文字以内で入力してください。" - too_short: "は{{count}}文字以上で入力してください。" - wrong_length: "は{{count}}文字で入力してください。" + 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}}以下の値にしてください。" + 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: "を開始日より後にしてください" @@ -147,7 +149,7 @@ cant_link_an_issue_with_a_descendant: "指定したチケットとは親子関係になっているため関連づけられません" actionview_instancetag_blank_option: 選んでください - + general_text_No: 'いいえ' general_text_Yes: 'はい' general_text_no: 'いいえ' @@ -156,9 +158,17 @@ general_csv_separator: ',' general_csv_decimal_separator: '.' general_csv_encoding: CP932 + ## Redmine 1.2.0 現在、この値によって、pdfの出力のフォントを切り替えています。 + ## CRuby では CP932 にしてください。 + ## JRuby 1.6.2 (ruby-1.8.7-p330) では、CP932 ですと + ## Iconv::InvalidEncoding例外が発生します。 + ## JRuby では、SJIS か Shift_JIS にしてください。 + ## ご存知の通り、CP932 と SJIS は別物ですが、 + ## そこまでの検証はしていません。 + # general_pdf_encoding: SJIS general_pdf_encoding: CP932 general_first_day_of_week: '7' - + notice_account_updated: アカウントが更新されました。 notice_account_invalid_creditentials: ユーザ名もしくはパスワードが無効 notice_account_password_updated: パスワードが更新されました。 @@ -176,29 +186,30 @@ notice_locking_conflict: 別のユーザがデータを更新しています。 notice_not_authorized: このページにアクセスするには認証が必要です。 notice_not_authorized_archived_project: プロジェクトは書庫に保存されています。 - notice_email_sent: "{{value}} 宛にメールを送信しました。" - notice_email_error: "メール送信中にエラーが発生しました ({{value}})" + 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: "{{total}}件のうち{{count}}件のチケットが保存できませんでした: {{ids}}." - notice_failed_to_save_members: "メンバーの保存に失敗しました: {{errors}}." + notice_failed_to_save_issues: "%{total}件のうち%{count}件のチケットが保存できませんでした: %{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: チケットの進捗が更新されました。 - - error_can_t_load_default_data: "デフォルト設定がロードできませんでした: {{value}}" + notice_gantt_chart_truncated: ガントチャートは、最大表示項目数(%{max})を超えたたため切り捨てられました。 + + error_can_t_load_default_data: "デフォルト設定がロードできませんでした: %{value}" error_scm_not_found: リポジトリに、エントリ/リビジョンが存在しません。 - error_scm_command_failed: "リポジトリへアクセスしようとしてエラーになりました: {{value}}" + error_scm_command_failed: "リポジトリへアクセスしようとしてエラーになりました: %{value}" error_scm_annotate: "エントリが存在しない、もしくはアノテートできません。" error_issue_not_found_in_project: 'チケットが見つかりません、もしくはこのプロジェクトに属していません' error_unable_delete_issue_status: "チケットのステータスを削除できませんでした。" error_no_tracker_in_project: 'このプロジェクトにはトラッカーが登録されていません。プロジェクト設定を確認してください。' error_no_default_issue_status: 'デフォルトのチケットステータスが定義されていません。設定を確認してください(管理→チケットのステータス)。' error_can_not_delete_custom_field: 'カスタムフィールドを削除できません。' - error_unable_to_connect: "接続できません。 ({{value}})" + error_unable_to_connect: "接続できません。 (%{value})" error_can_not_remove_role: 'このロールは使用されています。削除できません。' error_can_not_reopen_issue_on_closed_version: '終了したバージョンにひも付けされたチケットの再オープンはできません。' error_can_not_archive_project: このプロジェクトは書庫に保存できません @@ -206,27 +217,27 @@ error_workflow_copy_source: 'コピー元となるトラッカーまたはロールを選択してください' error_workflow_copy_target: 'コピー先となるトラッカーとロールを選択してください' error_can_not_delete_tracker: 'このトラッカーは使用されています。削除できません。' - - warning_attachments_not_saved: "{{count}}個の添付ファイルが保存できませんでした。" - - mail_subject_lost_password: "{{value}} パスワード再発行" + + warning_attachments_not_saved: "%{count}個の添付ファイルが保存できませんでした。" + + mail_subject_lost_password: "%{value} パスワード再発行" mail_body_lost_password: 'パスワードを変更するには、以下のリンクをクリックしてください:' - mail_subject_register: "{{value}} アカウント登録の確認" + mail_subject_register: "%{value} アカウント登録の確認" mail_body_register: 'アカウント登録を完了するには、以下のアドレスをクリックしてください:' - mail_body_account_information_external: "{{value}} アカウントを使ってにログインできます。" + 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: "{{author}} によってWikiページ {{id}} が追加されました。" - mail_subject_wiki_content_updated: "Wikiページ {{id}} が更新されました" - mail_body_wiki_content_updated: "{{author}} によってWikiページ {{id}} が更新されました。" - + 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: "%{author} によってWikiページ %{id} が追加されました。" + mail_subject_wiki_content_updated: "Wikiページ %{id} が更新されました" + mail_body_wiki_content_updated: "%{author} によってWikiページ %{id} が更新されました。" + gui_validation_error: 1件のエラー - gui_validation_error_plural: "{{count}}件のエラー" - + gui_validation_error_plural: "%{count}件のエラー" + field_name: 名称 field_description: 説明 field_summary: サマリー @@ -288,6 +299,7 @@ field_attr_lastname: 苗字属性 field_attr_mail: メール属性 field_onthefly: あわせてユーザを作成 + field_start_date: 開始日 field_done_ratio: 進捗 % field_auth_source: 認証方式 field_hide_mail: メールアドレスを隠す @@ -322,7 +334,15 @@ field_member_of_group: 担当者のグループ field_assigned_to_role: 担当者のロール field_text: テキスト - + field_visible: 表示 + field_warn_on_leaving_unsaved: データを保存せずにページから移動するときに警告 + field_commit_logs_encoding: コミットメッセージのエンコーディング + field_scm_path_encoding: パスのエンコーディング + field_path_to_repository: リポジトリのパス + field_root_directory: ルートディレクトリ + field_cvsroot: CVSROOT + field_cvs_module: モジュール + setting_app_title: アプリケーションのタイトル setting_app_subtitle: アプリケーションのサブタイトル setting_welcome_text: ウェルカムメッセージ @@ -350,7 +370,7 @@ 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: ページ毎の表示件数 @@ -377,7 +397,10 @@ setting_start_of_week: 週の開始曜日 setting_rest_api_enabled: RESTによるWebサービスを有効にする 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: プロジェクトの編集 @@ -433,7 +456,7 @@ permission_delete_messages: メッセージの削除 permission_delete_own_messages: 自身が記入したメッセージの削除 permission_manage_subtasks: 子チケットの管理 - + project_module_issue_tracking: チケットトラッキング project_module_time_tracking: 時間トラッキング project_module_news: ニュース @@ -444,7 +467,7 @@ project_module_boards: フォーラム project_module_gantt: ガントチャート project_module_calendar: カレンダー - + label_user: ユーザ label_user_plural: ユーザ label_user_new: 新しいユーザ @@ -456,14 +479,14 @@ label_x_projects: zero: プロジェクトはありません one: 1プロジェクト - other: "{{count}}プロジェクト" + 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_view_all: すべてのチケットを見る + label_issues_by: "%{value} 別のチケット" label_issue_added: チケットが追加されました label_issue_updated: チケットが更新されました label_document: 文書 @@ -512,8 +535,8 @@ label_last_login: 最近の接続 label_registered_on: 登録日 label_activity: 活動 - label_overall_activity: 全ての活動 - label_user_activity: "{{value}} の活動" + label_overall_activity: すべての活動 + label_user_activity: "%{value} の活動" label_new: 新しく作成 label_logged_as: ログイン中: label_environment: 環境 @@ -523,7 +546,7 @@ label_auth_source_plural: 認証方式 label_subproject_plural: サブプロジェクト label_subproject_new: 新しいサブプロジェクト - label_and_its_subprojects: "{{value}} とサブプロジェクト" + label_and_its_subprojects: "%{value} とサブプロジェクト" label_min_max_length: 最小値 - 最大値の長さ label_list: リストから選択 label_date: 日付 @@ -534,8 +557,8 @@ label_text: 長いテキスト label_attribute: 属性 label_attribute_plural: 属性 - label_download: "{{count}}ダウンロード" - label_download_plural: "{{count}}ダウンロード" + label_download: "%{count}ダウンロード" + label_download_plural: "%{count}ダウンロード" label_no_data: 表示するデータがありません label_change_status: ステータスの変更 label_history: 履歴 @@ -550,8 +573,9 @@ label_news_new: ニュースを追加 label_news_plural: ニュース label_news_latest: 最新ニュース - label_news_view_all: 全てのニュースを見る + label_news_view_all: すべてのニュースを見る label_news_added: ニュースが追加されました + label_news_comment_added: ニュースにコメントが追加されました label_settings: 設定 label_overview: 概要 label_version: バージョン @@ -567,22 +591,22 @@ label_closed_issues: 完了 label_closed_issues_plural: 完了 label_x_open_issues_abbr_on_total: - zero: 0件未完了 / 全{{total}}件 - one: 1件未完了 / 全{{total}}件 - other: "{{count}}件未完了 / 全{{total}}件" + zero: 0件未完了 / 全%{total}件 + one: 1件未完了 / 全%{total}件 + other: "%{count}件未完了 / 全%{total}件" label_x_open_issues_abbr: zero: 0件未完了 one: 1件未完了 - other: "{{count}}件未完了" + other: "%{count}件未完了" label_x_closed_issues_abbr: zero: 0件完了 one: 1件完了 - other: "{{count}}件完了" + other: "%{count}件完了" label_total: 合計 label_permissions: 権限 label_current_status: 現在のステータス label_new_statuses_allowed: ステータスの移行先 - label_all: 全て + label_all: すべて label_none: なし label_nobody: 無記名 label_next: 次 @@ -595,21 +619,22 @@ label_months_from: ヶ月分 label_gantt: ガントチャート label_internal: 内部 - label_last_changes: "最新の変更 {{count}}件" - label_change_view_all: 全ての変更を見る + label_last_changes: "最新の変更 %{count}件" + label_change_view_all: すべての変更を見る label_personalize_page: このページをパーソナライズする label_comment: コメント label_comment_plural: コメント label_x_comments: zero: コメントがありません one: 1コメント - other: "{{count}}コメント" + other: "%{count}コメント" label_comment_add: コメント追加 label_comment_added: 追加されたコメント label_comment_delete: コメント削除 label_query: カスタムクエリ label_query_plural: カスタムクエリ label_query_new: 新しいクエリ + label_my_queries: マイカスタムクエリ label_filter_add: フィルタ追加 label_filter_plural: フィルタ label_equals: 等しい @@ -622,13 +647,13 @@ label_today: 今日 label_all_time: 全期間 label_yesterday: 昨日 - label_this_week: この週 + label_this_week: 今週 label_last_week: 先週 - label_last_n_days: "最後の{{count}}日間" + label_last_n_days: "直近%{count}日間" label_this_month: 今月 label_last_month: 先月 label_this_year: 今年 - label_date_range: 日付の範囲 + label_date_range: 期間 label_less_than_ago: が今日より○日前以降 label_more_than_ago: が今日より○日前以前 label_ago: 日前 @@ -638,13 +663,13 @@ label_repository: リポジトリ label_repository_plural: リポジトリ label_browse: ブラウズ - label_modification: "{{count}}点の変更" - label_modification_plural: "{{count}}点の変更" + label_modification: "%{count}点の変更" + label_modification_plural: "%{count}点の変更" label_branch: ブランチ label_tag: タグ label_revision: リビジョン label_revision_plural: リビジョン - label_revision_id: リビジョン {{value}} + label_revision_id: リビジョン %{value} label_associated_revisions: 関係しているリビジョン label_added: 追加 label_modified: 変更 @@ -654,15 +679,15 @@ label_latest_revision: 最新リビジョン label_latest_revision_plural: 最新リビジョン label_view_revisions: リビジョンを見る - label_view_all_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_due_in: "期日まで %{value}" + label_roadmap_overdue: "%{value} 遅れ" label_roadmap_no_issues: このバージョンに関するチケットはありません label_search: 検索 label_result_plural: 結果 @@ -680,9 +705,9 @@ label_changes_details: 全変更の詳細 label_issue_tracking: チケットトラッキング label_spent_time: 作業時間の記録 - label_overall_spent_time: 全ての作業時間の記録 - label_f_hour: "{{value}}時間" - label_f_hour_plural: "{{value}}時間" + label_overall_spent_time: すべての作業時間の記録 + label_f_hour: "%{value}時間" + label_f_hour_plural: "%{value}時間" label_time_tracking: 時間トラッキング label_change_plural: 変更 label_statistics: 統計 @@ -733,15 +758,15 @@ label_date_from: "日付指定: " label_date_to: から label_language_based: 既定の言語の設定に従う - label_sort_by: "並び替え {{value}}" + 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_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_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: 更新履歴 @@ -751,8 +776,8 @@ label_theme: テーマ label_default: 既定 label_search_titles_only: タイトルのみ - label_user_mail_option_all: "参加しているプロジェクトの全ての通知" - label_user_mail_option_selected: "選択したプロジェクトの全ての通知..." + 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: "自分が担当している事柄のみ" @@ -761,7 +786,7 @@ label_registration_activation_by_email: メールでアカウントを有効化 label_registration_manual_activation: 手動でアカウントを有効化 label_registration_automatic_activation: 自動でアカウントを有効化 - label_display_per_page: "1ページに: {{value}}" + label_display_per_page: "1ページに: %{value}" label_age: 年齢 label_change_properties: プロパティの変更 label_general: 全般 @@ -784,7 +809,7 @@ label_sort: ソート条件 label_ascending: 昇順 label_descending: 降順 - label_date_from_to: "{{start}}から{{end}}まで" + label_date_from_to: "%{start}から%{end}まで" label_wiki_content_added: Wikiページが追加されました label_wiki_content_updated: Wikiページが更新されました label_group: グループ @@ -803,21 +828,26 @@ 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_api_access_key_created_on: "APIアクセスキーは%{value}前に作成されました" label_subtask_plural: 子チケット label_project_copy_notifications: コピーしたチケットのメール通知を送信する - + label_principal_search: "ユーザまたはグループの検索:" + label_user_search: "ユーザの検索:" + label_git_report_last_commit: ファイルとディレクトリの最新コミットを表示する + button_login: ログイン button_submit: 変更 button_save: 保存 - button_check_all: 全てにチェックをつける - button_uncheck_all: 全てのチェックを外す + button_check_all: すべてにチェックをつける + button_uncheck_all: すべてのチェックを外す + button_expand_all: 展開 + button_collapse_all: 折りたたみ button_delete: 削除 button_create: 作成 button_create_and_continue: 連続作成 button_test: テスト button_edit: 編集 - button_edit_associated_wikipage: "関連するWikiページを編集: {{page_title}}" + button_edit_associated_wikipage: "関連するWikiページを編集: %{page_title}" button_add: 追加 button_change: 変更 button_apply: 適用 @@ -861,66 +891,76 @@ 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_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_are_you_sure_with_children: チケットとその子チケットすべてを削除しますか? + text_journal_changed: "%{label} を %{old} から %{new} に変更" + text_journal_changed_no_detail: "%{label} を更新" + 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)と数字とダッシュ(-)が使えます。
    一度保存すると、識別子は変更できません。' - text_caracters_maximum: "最大{{count}}文字です。" - text_caracters_minimum: "最低{{count}}文字の長さが必要です" - text_length_between: "長さは{{min}}から{{max}}文字までです。" + 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: (1行ごとに書くことで)複数の値を設定できます。 text_issues_ref_in_commit_messages: コミットメッセージ内でチケットの参照/修正 - text_issue_added: "チケット {{id}} が {{author}} によって報告されました。" - text_issue_updated: "チケット {{id}} が {{author}} によって更新されました。" - text_wiki_destroy_confirmation: 本当にこのwikiとその内容の全てを削除しますか? - text_issue_category_destroy_question: "{{count}}件のチケットがこのカテゴリに割り当てられています。" + text_issue_added: "チケット %{id} が %{author} によって報告されました。" + text_issue_updated: "チケット %{id} が %{author} によって更新されました。" + text_wiki_destroy_confirmation: 本当にこのwikiとその内容のすべてを削除しますか? + 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_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: Plugin assetsディレクトリに書き込み可能 text_rmagick_available: RMagickが使用可能 (オプション) - text_destroy_time_entries_question: このチケットの{{hours}}時間分の作業記録の扱いを選択してください。 + 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_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個ずつ記述してください。' - text_wiki_page_destroy_question: "この親ページの配下に{{descendants}}ページの子孫ページがあります。" + 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_own_membership_delete_confirmation: "一部またはすべての権限を自分自身から剥奪しようとしているため、このプロジェクトを編集できなくなる可能性があります。\n本当に続けますか?" text_zoom_in: 拡大 text_zoom_out: 縮小 - + text_warn_on_leaving_unsaved: このページから移動すると、保存されていないデータが失われます。 + text_scm_path_encoding_note: "デフォルト: UTF-8" + text_git_repository_note: "Bare、かつ、ローカルリポジトリ (例: /gitrepo, c:\gitrepo)" + text_mercurial_repository_note: "ローカルリポジトリ (例: /hgrepo, c:\hgrepo)" + text_scm_command: コマンド + text_scm_command_version: バージョン + text_scm_config: バージョン管理システムのコマンドをconfig/configuration.ymlで設定できます。設定後、Redmineを再起動してください。 + text_scm_command_not_available: バージョン管理システムのコマンドが利用できません。管理画面にて設定を確認してください。 + default_role_manager: 管理者 default_role_developer: 開発者 default_role_reporter: 報告者 @@ -947,8 +987,22 @@ enumeration_doc_categories: 文書カテゴリ enumeration_activities: 作業分類 (時間トラッキング) enumeration_system_activity: システム作業分類 - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header + label_additional_workflow_transitions_for_assignee: チケット担当者に追加で許可する遷移 + label_additional_workflow_transitions_for_author: チケット作成者に追加で許可する遷移 + label_bulk_edit_selected_time_entries: 作業時間の一括編集 + text_time_entries_destroy_confirmation: 本当に選択した作業時間を削除しますか? + + label_role_anonymous: Anonymous + label_role_non_member: Non member + + label_issue_note_added: 注記が追加されました + label_issue_status_updated: ステータスが更新されました + label_issue_priority_updated: 優先度が更新されました + label_issues_visibility_own: 作成者か担当者であるチケット + field_issues_visibility: 表示できるチケット + label_issues_visibility_all: すべてのチケット + permission_set_own_issues_private: 自分のチケットをプライベートに設定 + field_is_private: プライベート + permission_set_issues_private: チケットをプライベートに設定 + label_issues_visibility_public: プライベートチケット以外 + text_issues_destroy_descendants_confirmation: %{count}個の子チケットも削除されます。 diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/ko.yml.svn-base --- a/config/locales/.svn/text-base/ko.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/ko.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -21,7 +21,10 @@ month_names: [~, 1월, 2월, 3월, 4월, 5월, 6월, 7월, 8월, 9월, 10월, 11월, 12월] abbr_month_names: [~, 1월, 2월, 3월, 4월, 5월, 6월, 7월, 8월, 9월, 10월, 11월, 12월] # Used in date_select and datime_select. - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -37,37 +40,37 @@ half_a_minute: "30초" less_than_x_seconds: one: "일초 이하" - other: "{{count}}초 이하" + other: "%{count}초 이하" x_seconds: one: "일초" - other: "{{count}}초" + other: "%{count}초" less_than_x_minutes: one: "일분 이하" - other: "{{count}}분 이하" + other: "%{count}분 이하" x_minutes: one: "일분" - other: "{{count}}분" + other: "%{count}분" about_x_hours: one: "약 한시간" - other: "약 {{count}}시간" + other: "약 %{count}시간" x_days: one: "하루" - other: "{{count}}일" + other: "%{count}일" about_x_months: one: "약 한달" - other: "약 {{count}}달" + other: "약 %{count}달" x_months: one: "한달" - other: "{{count}}달" + other: "%{count}달" about_x_years: one: "약 일년" - other: "약 {{count}}년" + other: "약 %{count}년" over_x_years: one: "일년 이상" - other: "{{count}}년 이상" + other: "%{count}년 이상" almost_x_years: one: "약 1년" - other: "약 {{count}}년" + other: "약 %{count}년" prompts: year: "년" month: "월" @@ -145,8 +148,8 @@ errors: template: header: - one: "한개의 오류가 발생해 {{model}}을(를) 저장하지 않았습니다." - other: "{{count}}개의 오류가 발생해 {{model}}을(를) 저장하지 않았습니다." + one: "한개의 오류가 발생해 %{model}을(를) 저장하지 않았습니다." + other: "%{count}개의 오류가 발생해 %{model}을(를) 저장하지 않았습니다." # The variable :count is also available body: "다음 항목에 문제가 발견했습니다:" @@ -158,16 +161,16 @@ accepted: "은 인정되어야 합니다" empty: "은 길이가 0이어서는 안됩니다." blank: "은 빈 값이어서는 안 됩니다" - too_long: "은 너무 깁니다 (최대 {{count}}자 까지)" - too_short: "은 너무 짧습니다 (최소 {{count}}자 까지)" - wrong_length: "은 길이가 틀렸습니다 ({{count}}자이어야 합니다.)" + too_long: "은 너무 깁니다 (최대 %{count}자 까지)" + too_short: "은 너무 짧습니다 (최소 %{count}자 까지)" + wrong_length: "은 길이가 틀렸습니다 (%{count}자이어야 합니다.)" taken: "은 이미 선택된 겁니다" not_a_number: "은 숫자가 아닙니다" - greater_than: "은 {{count}}보다 커야 합니다." - greater_than_or_equal_to: "은 {{count}}보다 크거나 같아야 합니다" - equal_to: "은 {{count}}(와)과 같아야 합니다" - less_than: "은 {{count}}보다 작어야 합니다" - less_than_or_equal_to: "은 {{count}}과 같거나 이하을 요구합니다" + 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: "는 시작날짜보다 커야 합니다" @@ -204,40 +207,40 @@ notice_file_not_found: 요청하신 페이지는 삭제되었거나 옮겨졌습니다. notice_locking_conflict: 다른 사용자에 의해서 데이터가 변경되었습니다. notice_not_authorized: 이 페이지에 접근할 권한이 없습니다. - notice_email_sent: "{{value}}님에게 메일이 발송되었습니다." - notice_email_error: "메일을 전송하는 과정에 오류가 발생했습니다. ({{value}})" + notice_email_sent: "%{value}님에게 메일이 발송되었습니다." + notice_email_error: "메일을 전송하는 과정에 오류가 발생했습니다. (%{value})" notice_feeds_access_key_reseted: RSS에 접근가능한 열쇠(key)가 생성되었습니다. - notice_failed_to_save_issues: "저장에 실패하였습니다: 실패 {{count}}(선택 {{total}}): {{ids}}." + notice_failed_to_save_issues: "저장에 실패하였습니다: 실패 %{count}(선택 %{total}): %{ids}." notice_no_issue_selected: "일감이 선택되지 않았습니다. 수정하기 원하는 일감을 선택하세요" notice_account_pending: "계정이 만들어졌으며 관리자 승인 대기중입니다." notice_default_data_loaded: 기본값을 성공적으로 읽어들였습니다. notice_unable_delete_version: 삭제할 수 없는 버전입니다. - error_can_t_load_default_data: "기본값을 읽어들일 수 없습니다.: {{value}}" + error_can_t_load_default_data: "기본값을 읽어들일 수 없습니다.: %{value}" error_scm_not_found: 항목이나 리비젼이 저장소에 존재하지 않습니다. - error_scm_command_failed: "저장소에 접근하는 도중에 오류가 발생하였습니다.: {{value}}" + error_scm_command_failed: "저장소에 접근하는 도중에 오류가 발생하였습니다.: %{value}" error_scm_annotate: "항목이 없거나 행별 이력을 볼 수 없습니다." error_issue_not_found_in_project: '일감이 없거나 이 프로젝트의 것이 아닙니다.' - warning_attachments_not_saved: "{{count}}개 파일을 저장할 수 없습니다." + warning_attachments_not_saved: "%{count}개 파일을 저장할 수 없습니다." - mail_subject_lost_password: "{{value}} 비밀번호" + mail_subject_lost_password: "%{value} 비밀번호" mail_body_lost_password: '비밀번호를 변경하려면 다음 링크를 클릭하세요.' - mail_subject_register: "{{value}} 계정 활성화" + mail_subject_register: "%{value} 계정 활성화" mail_body_register: '계정을 활성화하려면 링크를 클릭하세요.:' - mail_body_account_information_external: "로그인할 때 {{value}} 계정을 사용하실 수 있습니다." + mail_body_account_information_external: "로그인할 때 %{value} 계정을 사용하실 수 있습니다." mail_body_account_information: 계정 정보 - mail_subject_account_activation_request: "{{value}} 계정 활성화 요청" - mail_body_account_activation_request: "새 사용자({{value}})가 등록되었습니다. 관리자님의 승인을 기다리고 있습니다.:" - mail_body_reminder: "당신이 맡고 있는 일감 {{count}}개의 완료 기한이 {{days}}일 후 입니다." - mail_subject_reminder: "내일이 만기인 일감 {{count}}개 ({{days}})" - mail_subject_wiki_content_added: "위키페이지 '{{id}}'이(가) 추가되었습니다." - mail_subject_wiki_content_updated: "'위키페이지 {{id}}'이(가) 수정되었습니다." - mail_body_wiki_content_added: "{{author}}이(가) 위키페이지 '{{id}}'을(를) 추가하였습니다." - mail_body_wiki_content_updated: "{{author}}이(가) 위키페이지 '{{id}}'을(를) 수정하였습니다." + mail_subject_account_activation_request: "%{value} 계정 활성화 요청" + mail_body_account_activation_request: "새 사용자(%{value})가 등록되었습니다. 관리자님의 승인을 기다리고 있습니다.:" + mail_body_reminder: "당신이 맡고 있는 일감 %{count}개의 완료 기한이 %{days}일 후 입니다." + mail_subject_reminder: "내일이 만기인 일감 %{count}개 (%{days})" + mail_subject_wiki_content_added: "위키페이지 '%{id}'이(가) 추가되었습니다." + mail_subject_wiki_content_updated: "'위키페이지 %{id}'이(가) 수정되었습니다." + mail_body_wiki_content_added: "%{author}이(가) 위키페이지 '%{id}'을(를) 추가하였습니다." + mail_body_wiki_content_updated: "%{author}이(가) 위키페이지 '%{id}'을(를) 수정하였습니다." gui_validation_error: 에러 - gui_validation_error_plural: "{{count}}개 에러" + gui_validation_error_plural: "%{count}개 에러" field_name: 이름 field_description: 설명 @@ -299,6 +302,7 @@ field_attr_lastname: 성 속성 field_attr_mail: 메일 속성 field_onthefly: 동적 사용자 생성 + field_start_date: 시작시간 field_done_ratio: 진척도 field_auth_source: 인증 공급자 field_hide_mail: 메일 주소 숨기기 @@ -354,7 +358,6 @@ setting_cross_project_issue_relations: 다른 프로젝트의 일감과 연결하는 것을 허용 setting_issue_list_default_columns: 일감 목록에 표시할 항목 setting_repositories_encodings: 저장소 인코딩 - setting_commit_logs_encoding: 제출(commit) 기록 인코딩 setting_emails_footer: 메일 꼬리 setting_protocol: 프로토콜 setting_per_page_options: 목록에서, 한 페이지에 표시할 행 @@ -441,14 +444,14 @@ label_x_projects: zero: 없음 one: "한 프로젝트" - other: "{{count}}개 프로젝트" + 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_issues_by: "%{value}별 일감" label_issue_added: 일감 추가 label_issue_updated: 일감 수정 label_document: 문서 @@ -497,7 +500,7 @@ label_registered_on: 등록시각 label_activity: 작업내역 label_overall_activity: 전체 작업내역 - label_user_activity: "{{value}}의 작업내역" + label_user_activity: "%{value}의 작업내역" label_new: 새로 만들기 label_logged_as: '로그인계정:' label_environment: 환경 @@ -506,7 +509,7 @@ label_auth_source_new: 새 인증 공급자 label_auth_source_plural: 인증 공급자 label_subproject_plural: 하위 프로젝트 - label_and_its_subprojects: "{{value}}와 하위 프로젝트들" + label_and_its_subprojects: "%{value}와 하위 프로젝트들" label_min_max_length: 최소 - 최대 길이 label_list: 목록 label_date: 날짜 @@ -517,8 +520,8 @@ label_text: 텍스트 label_attribute: 속성 label_attribute_plural: 속성 - label_download: "{{count}}회 다운로드" - label_download_plural: "{{count}}회 다운로드" + label_download: "%{count}회 다운로드" + label_download_plural: "%{count}회 다운로드" label_no_data: 표시할 데이터가 없습니다. label_change_status: 상태 변경 label_history: 이력 @@ -549,17 +552,17 @@ label_closed_issues: 완료됨 label_closed_issues_plural: 완료됨 label_x_open_issues_abbr_on_total: - zero: "총 {{total}} 건 모두 완료" - one: "한 건 진행 중 / 총 {{total}} 건 중 " - other: "{{count}} 건 진행 중 / 총 {{total}} 건" + zero: "총 %{total} 건 모두 완료" + one: "한 건 진행 중 / 총 %{total} 건 중 " + other: "%{count} 건 진행 중 / 총 %{total} 건" label_x_open_issues_abbr: zero: 모두 완료 one: 한 건 진행 중 - other: "{{count}} 건 진행 중" + other: "%{count} 건 진행 중" label_x_closed_issues_abbr: zero: 모두 미완료 one: 한 건 완료 - other: "{{count}} 건 완료" + other: "%{count} 건 완료" label_total: 합계 label_permissions: 권한 label_current_status: 일감 상태 @@ -577,7 +580,7 @@ label_months_from: 개월 동안 | 다음부터 label_gantt: Gantt 챠트 label_internal: 내부 - label_last_changes: "최근 {{count}}개의 변경사항" + label_last_changes: "최근 %{count}개의 변경사항" label_change_view_all: 모든 변경 내역 보기 label_personalize_page: 입맛대로 구성하기 label_comment: 댓글 @@ -585,7 +588,7 @@ label_x_comments: zero: 댓글 없음 one: 한 개의 댓글 - other: "{{count}} 개의 댓글" + other: "%{count} 개의 댓글" label_comment_add: 댓글 추가 label_comment_added: 댓글이 추가되었습니다. label_comment_delete: 댓글 삭제 @@ -606,7 +609,7 @@ label_yesterday: 어제 label_this_week: 이번주 label_last_week: 지난 주 - label_last_n_days: "지난 {{count}} 일" + label_last_n_days: "지난 %{count} 일" label_this_month: 이번 달 label_last_month: 지난 달 label_this_year: 올해 @@ -620,8 +623,8 @@ label_repository: 저장소 label_repository_plural: 저장소 label_browse: 저장소 둘러보기 - label_modification: "{{count}} 변경" - label_modification_plural: "{{count}} 변경" + label_modification: "%{count} 변경" + label_modification_plural: "%{count} 변경" label_revision: 개정판 label_revision_plural: 개정판 label_associated_revisions: 관련된 개정판들 @@ -639,8 +642,8 @@ label_sort_lower: 아래로 label_sort_lowest: 맨 아래로 label_roadmap: 로드맵 - label_roadmap_due_in: "기한 {{value}}" - label_roadmap_overdue: "{{value}} 지연" + label_roadmap_due_in: "기한 %{value}" + label_roadmap_overdue: "%{value} 지연" label_roadmap_no_issues: 이 버전에 해당하는 일감 없음 label_search: 검색 label_result_plural: 결과 @@ -658,8 +661,8 @@ label_changes_details: 모든 상세 변경 내역 label_issue_tracking: 일감 추적 label_spent_time: 소요 시간 - label_f_hour: "{{value}} 시간" - label_f_hour_plural: "{{value}} 시간" + label_f_hour: "%{value} 시간" + label_f_hour_plural: "%{value} 시간" label_time_tracking: 시간추적 label_change_plural: 변경사항들 label_statistics: 통계 @@ -708,13 +711,13 @@ label_date_from: '기간:' label_date_to: ' ~ ' label_language_based: 언어설정에 따름 - label_sort_by: "{{value}}(으)로 정렬" + label_sort_by: "%{value}(으)로 정렬" label_send_test_email: 테스트 메일 보내기 - label_feeds_access_key_created_on: "피드 접근 키가 {{value}} 이전에 생성되었습니다." + label_feeds_access_key_created_on: "피드 접근 키가 %{value} 이전에 생성되었습니다." label_module_plural: 모듈 - label_added_time_by: "{{author}}이(가) {{age}} 전에 추가함" - label_updated_time_by: "{{author}}이(가) {{age}} 전에 변경" - label_updated_time: "{{value}} 전에 수정됨" + 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: 변경묶음 @@ -730,7 +733,7 @@ label_registration_activation_by_email: 메일로 계정을 활성화하기 label_registration_automatic_activation: 자동 계정 활성화 label_registration_manual_activation: 수동 계정 활성화 - label_display_per_page: "페이지당 줄수: {{value}}" + label_display_per_page: "페이지당 줄수: %{value}" label_age: 마지막 수정일 label_change_properties: 속성 변경 label_general: 일반 @@ -753,7 +756,7 @@ label_sort: 정렬 label_ascending: 오름차순 label_descending: 내림차순 - label_date_from_to: "{{start}}부터 {{end}}까지" + label_date_from_to: "%{start}부터 %{end}까지" label_wiki_content_added: 위키페이지 추가 label_wiki_content_updated: 위키페이지 수정 @@ -805,48 +808,48 @@ text_regexp_info: 예) ^[A-Z0-9]+$ text_min_max_length_info: 0 는 제한이 없음을 의미함 text_project_destroy_confirmation: 이 프로젝트를 삭제하고 모든 데이터를 지우시겠습니까? - text_subprojects_destroy_warning: "하위 프로젝트({{value}})이(가) 자동으로 지워질 것입니다." + text_subprojects_destroy_warning: "하위 프로젝트(%{value})이(가) 자동으로 지워질 것입니다." text_workflow_edit: 업무흐름 수정하려면 역할과 일감유형을 선택하세요. text_are_you_sure: 계속 진행 하시겠습니까? text_tip_issue_begin_day: 오늘 시작하는 업무(task) text_tip_issue_end_day: 오늘 종료하는 업무(task) text_tip_issue_begin_end_day: 오늘 시작하고 종료하는 업무(task) text_project_identifier_info: '영문 소문자(a-z) 및 숫자, 대쉬(-) 가능.
    저장된후에는 식별자 변경 불가능.' - text_caracters_maximum: "최대 {{count}} 글자 가능" - text_caracters_minimum: "최소한 {{count}} 글자 이상이어야 합니다." - text_length_between: "{{min}} 에서 {{max}} 글자" + text_caracters_maximum: "최대 %{count} 글자 가능" + text_caracters_minimum: "최소한 %{count} 글자 이상이어야 합니다." + text_length_between: "%{min} 에서 %{max} 글자" text_tracker_no_workflow: 이 일감 유형에는 업무흐름이 정의되지 않았습니다. text_unallowed_characters: 허용되지 않는 문자열 text_comma_separated: "구분자','를 이용해서 여러 개의 값을 입력할 수 있습니다." text_issues_ref_in_commit_messages: 제출 메시지에서 일감을 참조하거나 해결하기 - text_issue_added: "{{author}}이(가) 일감 {{id}}을(를) 보고하였습니다." - text_issue_updated: "{{author}}이(가) 일감 {{id}}을(를) 수정하였습니다." + text_issue_added: "%{author}이(가) 일감 %{id}을(를) 보고하였습니다." + text_issue_updated: "%{author}이(가) 일감 %{id}을(를) 수정하였습니다." text_wiki_destroy_confirmation: 이 위키와 모든 내용을 지우시겠습니까? - text_issue_category_destroy_question: "일부 일감들({{count}}개)이 이 범주에 지정되어 있습니다. 어떻게 하시겠습니까?" + 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_status_changed_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_question: 삭제하려는 일감에 %{hours} 시간이 보고되어 있습니다. 어떻게 하시겠습니까? text_destroy_time_entries: 보고된 시간을 삭제하기 text_assign_time_entries_to_project: 보고된 시간을 프로젝트에 할당하기 text_reassign_time_entries: '이 알림에 보고된 시간을 재할당하기:' - text_user_wrote: "{{value}}의 덧글:" + 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_enumeration_destroy_question: "%{count} 개의 일감이 이 값을 사용하고 있습니다." + text_email_delivery_not_configured: "이메일 전달이 설정되지 않았습니다. 그래서 알림이 비활성화되었습니다.\n SMTP서버를 config/configuration.yml에서 설정하고 어플리케이션을 다시 시작하십시오. 그러면 동작합니다." text_repository_usernames_mapping: "저장소 로그에서 발견된 각 사용자에 레드마인 사용자를 업데이트할때 선택합니다.\n레드마인과 저장소의 이름이나 이메일이 같은 사용자가 자동으로 연결됩니다." text_diff_truncated: '... 이 차이점은 표시할 수 있는 최대 줄수를 초과해서 이 차이점은 잘렸습니다.' text_custom_field_possible_values_info: '각 값 당 한 줄' - text_wiki_page_destroy_question: 이 페이지는 {{descendants}} 개의 하위 페이지와 관련 내용이 있습니다. 이 내용을 어떻게 하시겠습니까? + text_wiki_page_destroy_question: 이 페이지는 %{descendants} 개의 하위 페이지와 관련 내용이 있습니다. 이 내용을 어떻게 하시겠습니까? text_wiki_page_nullify_children: 하위 페이지를 최상위 페이지 아래로 지정 text_wiki_page_destroy_children: 모든 하위 페이지와 관련 내용을 삭제 text_wiki_page_reassign_children: 하위 페이지를 이 페이지 아래로 지정 @@ -883,14 +886,14 @@ 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}})" + 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}}이(가) 추가되었습니다." + text_journal_added: "%{label}에 %{value}이(가) 추가되었습니다." field_active: 사용중 enumeration_system_activity: 시스템 작업 permission_delete_issue_watchers: 일감지킴이 지우기 @@ -925,9 +928,9 @@ setting_start_of_week: 달력 시작 요일 permission_view_issues: 일감 보기 label_display_used_statuses_only: 이 일감유형에서 사용되는 상태만 보여주기 - label_revision_id: 개정판 {{value}} + label_revision_id: 개정판 %{value} label_api_access_key: API 접근키 - label_api_access_key_created_on: API 접근키가 {{value}} 전에 생성되었습니다. + label_api_access_key_created_on: API 접근키가 %{value} 전에 생성되었습니다. label_feeds_access_key: RSS 접근키 notice_api_access_key_reseted: API 접근키가 초기화되었습니다. setting_rest_api_enabled: REST 웹서비스 활성화 @@ -954,12 +957,12 @@ label_subtask_plural: 하위 일감 label_project_copy_notifications: 프로젝트 복사 중에 이메일 알림 보내기 error_can_not_delete_custom_field: 사용자 정의 필드를 삭제할 수 없습니다. - error_unable_to_connect: 연결할 수 없습니다(({{value}}) + error_unable_to_connect: 연결할 수 없습니다((%{value}) error_can_not_remove_role: 이 역할은 현재 사용 중이이서 삭제할 수 없습니다. - error_can_not_delete_tracker: 이 유형의 일감들이 있에서 삭제할 수 없습니다. + error_can_not_delete_tracker: 이 유형의 일감들이 있어서 삭제할 수 없습니다. field_principal: 신원 label_my_page_block: 내 페이지 출력화면 - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + notice_failed_to_save_members: "%{errors}:구성원을 저장 중 실패하였습니다" text_zoom_out: 더 작게 text_zoom_in: 더 크게 notice_unable_delete_time_entry: 시간 기록 항목을 삭제할 수 없습니다. @@ -967,19 +970,61 @@ field_time_entries: 기록된 시간 project_module_gantt: Gantt 챠트 project_module_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. - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header + button_edit_associated_wikipage: "연관된 위키 페이지 %{page_title} 수정" + text_are_you_sure_with_children: 일감과 모든 하위 일감들을 삭제하시겠습니까? + field_text: 텍스트 영역 + label_user_mail_option_only_owner: 내가 저자인 사항만 + setting_default_notification_option: 기본 알림 옵션 + label_user_mail_option_only_my_events: 내가 지켜보거나 속해있는 사항만 + label_user_mail_option_only_assigned: 내에게 할당된 사항만 + label_user_mail_option_none: 알림 없음 + field_member_of_group: 할당된 사람의 그룹 + field_assigned_to_role: 할당된 사람의 역할 + notice_not_authorized_archived_project: 접근하려는 프로젝트는 이미 잠금보관되어 있습니다. + label_principal_search: "사용자 및 그룹 찾기:" + label_user_search: "사용자 찾기::" + field_visible: 보이기 + setting_emails_header: 이메일 헤더 + setting_commit_logtime_activity_id: 기록된 시간에 적용할 작업분류 + text_time_logged_by_changeset: "변경묶음 %{value}에서 적용되었습니다." + 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: 제출(commit) 기록 인코딩 + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/lt.yml.svn-base --- a/config/locales/.svn/text-base/lt.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/lt.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -22,7 +22,10 @@ month_names: [~, sausio, vasario, kovo, balandžio, gegužės, birželio, liepos, rugpjūčio, rugsėjo, spalio, lapkričio, gruodžio] abbr_month_names: [~, Sau, Vas, Kov, Bal, Geg, Bir, Lie, Rgp, Rgs, Spa, Lap, Grd] # Used in date_select and datime_select. - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -37,42 +40,42 @@ distance_in_words: half_a_minute: "pusė minutės" less_than_x_seconds: - one: "mažiau nei {{count}} sekundė" - few: "mažiau nei {{count}} sekundžių" - many: "mažiau nei {{count}} sekundžių" - other: "mažiau nei {{count}} sekundės" + one: "mažiau nei %{count} sekundė" + few: "mažiau nei %{count} sekundžių" + many: "mažiau nei %{count} sekundžių" + other: "mažiau nei %{count} sekundės" x_seconds: - one: "{{count}} sekundė" - few: "{{count}} sekundžių" - many: "{{count}} sekundžių" - other: "{{count}} sekundės" + one: "%{count} sekundė" + few: "%{count} sekundžių" + many: "%{count} sekundžių" + other: "%{count} sekundės" less_than_x_minutes: one: "mažiau nei minutė" - other: "mažiau nei {{count}} minutės" + other: "mažiau nei %{count} minutės" x_minutes: one: "1 minutė" - other: "{{count}} minutės" + other: "%{count} minutės" about_x_hours: one: "apie 1 valanda" - other: "apie {{count}} valandų" + other: "apie %{count} valandų" x_days: one: "1 diena" - other: "{{count}} dienų" + other: "%{count} dienų" about_x_months: one: "apie 1 mėnuo" - other: "apie {{count}} mėnesiai" + other: "apie %{count} mėnesiai" x_months: one: "1 mėnuo" - other: "{{count}} mėnesiai" + other: "%{count} mėnesiai" about_x_years: one: "apie 1 metai" - other: "apie {{count}} metų" + other: "apie %{count} metų" over_x_years: one: "virš 1 metų" - other: "virš {{count}} metų" + other: "virš %{count} metų" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" prompts: year: "Metai" month: "Mėnuo" @@ -137,10 +140,10 @@ errors: template: header: - one: "Išsaugant objektą {{model}} rasta {{count}} klaida" - few: "Išsaugant objektą {{model}} rasta {{count}} klaidų" - many: "Išsaugant objektą {{model}} rasta {{count}} klaidų" - other: "Išsaugant objektą {{model}} rastos {{count}} klaidos" + one: "Išsaugant objektą %{model} rasta %{count} klaida" + few: "Išsaugant objektą %{model} rasta %{count} klaidų" + many: "Išsaugant objektą %{model} rasta %{count} klaidų" + other: "Išsaugant objektą %{model} rastos %{count} klaidos" body: "Šiuose laukuose yra klaidų:" messages: @@ -152,28 +155,28 @@ empty: "negali būti tuščias" blank: "negali būti tuščias" too_long: - one: "per ilgas (daugiausiai {{count}} simbolius)" - few: "per ilgas (daugiausiai {{count}} simboliu)" - many: "per ilgas (daugiausiai {{count}} simboliu)" - other: "per ilgas (daugiausiai {{count}} simboliai)" + one: "per ilgas (daugiausiai %{count} simbolius)" + few: "per ilgas (daugiausiai %{count} simboliu)" + many: "per ilgas (daugiausiai %{count} simboliu)" + other: "per ilgas (daugiausiai %{count} simboliai)" too_short: - one: "per trumpas (mažiausiai {{count}} simbolius)" - few: "per trumpas (mažiausiai {{count}} simboliu)" - many: "per trumpas (mažiausiai {{count}} simboliu)" - other: "per trumpas (mažiausiai {{count}} simboliai)" + one: "per trumpas (mažiausiai %{count} simbolius)" + few: "per trumpas (mažiausiai %{count} simboliu)" + many: "per trumpas (mažiausiai %{count} simboliu)" + other: "per trumpas (mažiausiai %{count} simboliai)" wrong_length: - one: "neteisingo ilgio (turi būti lygiai {{count}} simbolius)" - few: "neteisingo ilgio (turi būti lygiai {{count}} simboliu)" - many: "neteisingo ilgio (turi būti lygiai {{count}} simboliu)" - other: "neteisingo ilgio (turi būti lygiai {{count}} simboliai)" + one: "neteisingo ilgio (turi būti lygiai %{count} simbolius)" + few: "neteisingo ilgio (turi būti lygiai %{count} simboliu)" + many: "neteisingo ilgio (turi būti lygiai %{count} simboliu)" + other: "neteisingo ilgio (turi būti lygiai %{count} simboliai)" taken: "jau užimtas" not_a_number: "ne skaičius" not_a_date: "is not a valid date" - greater_than: "turi būti didesnis už {{count}}" - greater_than_or_equal_to: "turi būti didesnis arba lygus {{count}}" - equal_to: "turi būti lygus {{count}}" - less_than: "turi būti mažesnis už {{count}}" - less_than_or_equal_to: "turi būti mažesnis arba lygus {{count}}" + greater_than: "turi būti didesnis už %{count}" + greater_than_or_equal_to: "turi būti didesnis arba lygus %{count}" + equal_to: "turi būti lygus %{count}" + less_than: "turi būti mažesnis už %{count}" + less_than_or_equal_to: "turi būti mažesnis arba lygus %{count}" odd: "turi būti nelyginis" even: "turi būti lyginis" greater_than_start_date: "turi būti didesnė negu pradžios data" @@ -210,18 +213,18 @@ notice_file_not_found: Puslapis, į kurį ketinate įeiti, neegzistuoja arba yra pašalintas. notice_locking_conflict: Duomenys atnaujinti kito vartotojo. notice_not_authorized: Jūs neturite teisių gauti prieigą prie šio puslapio. - notice_email_sent: "Laiškas išsiųstas {{value}}" - notice_email_error: "Laiško siuntimo metu įvyko klaida ({{value}})" + notice_email_sent: "Laiškas išsiųstas %{value}" + notice_email_error: "Laiško siuntimo metu įvyko klaida (%{value})" notice_feeds_access_key_reseted: Jūsų RSS raktas buvo atnaujintas. - notice_failed_to_save_issues: "Nepavyko išsaugoti {{count}} problemos(ų) iš {{total}} pasirinkto: {{ids}}." + notice_failed_to_save_issues: "Nepavyko išsaugoti %{count} problemos(ų) iš %{total} pasirinkto: %{ids}." notice_no_issue_selected: "Nepasirinkta nė viena problema! Prašom pažymėti problemą, kurią norite redaguoti." notice_account_pending: "Jūsų paskyra buvo sukurta ir dabar laukiama administratoriaus patvirtinimo." notice_default_data_loaded: Numatytoji konfiguracija sėkmingai užkrauta. notice_unable_delete_version: Neįmanoma panaikinti versiją - error_can_t_load_default_data: "Numatytoji konfiguracija negali būti užkrauta: {{value}}" + error_can_t_load_default_data: "Numatytoji konfiguracija negali būti užkrauta: %{value}" error_scm_not_found: "Duomenys ir/ar pakeitimai saugykloje(repozitorojoje) neegzistuoja." - error_scm_command_failed: "Įvyko klaida jungiantis prie saugyklos: {{value}}" + error_scm_command_failed: "Įvyko klaida jungiantis prie saugyklos: %{value}" error_scm_annotate: "Įrašas neegzistuoja arba negalima jo atvaizduoti." error_issue_not_found_in_project: 'Darbas nerastas arba nesurištas su šiuo projektu' error_no_tracker_in_project: No tracker is associated to this project. Please check the Project settings. @@ -229,25 +232,25 @@ error_can_not_reopen_issue_on_closed_version: Uždarytai versijai priskirtas darbas negali būti atnaujintas. error_can_not_archive_project: Šio projekto negalima suarchyvuoti - warning_attachments_not_saved: "{{count}} byla(ų) negali būti išsaugota." + warning_attachments_not_saved: "%{count} byla(ų) negali būti išsaugota." - mail_subject_lost_password: "Jūsų {{value}} slaptažodis" + mail_subject_lost_password: "Jūsų %{value} slaptažodis" mail_body_lost_password: 'Norėdami pakeisti slaptažodį, spauskite nuorodą:' - mail_subject_register: "Jūsų {{value}} paskyros aktyvavimas" + mail_subject_register: "Jūsų %{value} paskyros aktyvavimas" mail_body_register: 'Norėdami aktyvuoti paskyrą, spauskite nuorodą:' - mail_body_account_information_external: "Jūs galite naudoti Jūsų {{value}} paskyrą, norėdami prisijungti." + mail_body_account_information_external: "Jūs galite naudoti Jūsų %{value} paskyrą, norėdami prisijungti." mail_body_account_information: Informacija apie Jūsų paskyrą - mail_subject_account_activation_request: "{{value}} paskyros aktyvavimo prašymas" - mail_body_account_activation_request: "Užsiregistravo naujas vartotojas ({{value}}). Jo paskyra laukia jūsų patvirtinimo:" - mail_subject_reminder: "{{count}} darbas(ai) po kelių {{days}} dienų" - mail_body_reminder: "{{count}} darbas(ai), kurie yra jums priskirti, baigiasi po {{days}} dienų(os):" - mail_subject_wiki_content_added: "'{{id}}' pridėtas wiki puslapis" - mail_body_wiki_content_added: "The '{{id}}' wiki puslapi pridėjo {{author}}." - mail_subject_wiki_content_updated: "'{{id}}' atnaujintas wiki puslapis" - mail_body_wiki_content_updated: "The '{{id}}' wiki puslapį atnaujino {{author}}." + mail_subject_account_activation_request: "%{value} paskyros aktyvavimo prašymas" + mail_body_account_activation_request: "Užsiregistravo naujas vartotojas (%{value}). Jo paskyra laukia jūsų patvirtinimo:" + mail_subject_reminder: "%{count} darbas(ai) po kelių %{days} dienų" + mail_body_reminder: "%{count} darbas(ai), kurie yra jums priskirti, baigiasi po %{days} dienų(os):" + mail_subject_wiki_content_added: "'%{id}' pridėtas wiki puslapis" + mail_body_wiki_content_added: "The '%{id}' wiki puslapi pridėjo %{author}." + mail_subject_wiki_content_updated: "'%{id}' atnaujintas wiki puslapis" + mail_body_wiki_content_updated: "The '%{id}' wiki puslapį atnaujino %{author}." gui_validation_error: 1 klaida - gui_validation_error_plural: "{{count}} klaidų(os)" + gui_validation_error_plural: "%{count} klaidų(os)" field_name: Pavadinimas field_description: Aprašas @@ -310,7 +313,8 @@ field_attr_lastname: Pavardės priskiria field_attr_mail: Elektroninio pašto požymis field_onthefly: Automatinis vartotojų registravimas - field_done_ratio: % atlikta + field_start_date: Pradėti + field_done_ratio: "% atlikta" field_auth_source: Autentiškumo nustatymo būdas field_hide_mail: Paslėpkite mano elektroninio pašto adresą field_comments: Komentaras @@ -367,7 +371,6 @@ setting_cross_project_issue_relations: Leisti tarprojektinius darbų ryšius setting_issue_list_default_columns: Numatytosios skiltys darbų sąraše setting_repositories_encodings: Saugyklos koduotė - setting_commit_logs_encoding: Commit pranešimų koduotė setting_emails_footer: elektroninio pašto puslapinė poraštė setting_protocol: Protokolas setting_per_page_options: Įrašų puslapyje nustatimas @@ -458,14 +461,14 @@ label_x_projects: zero: nėra projektų one: 1 projektas - other: "{{count}} projektų" + other: "%{count} projektų" label_project_all: Visi Projektai label_project_latest: Paskutiniai projektai label_issue: Darbas label_issue_new: Naujas darbas label_issue_plural: Darbai label_issue_view_all: Peržiūrėti visus darbus - label_issues_by: "Darbai pagal {{value}}" + label_issues_by: "Darbai pagal %{value}" label_issue_added: Darbas pridėtas label_issue_updated: Darbas atnaujintas label_document: Dokumentas @@ -513,7 +516,7 @@ label_registered_on: Užregistruota label_activity: Veikla label_overall_activity: Visa veikla - label_user_activity: "{{value}}o veiksmai" + label_user_activity: "%{value}o veiksmai" label_new: Naujas label_logged_as: Prisijungęs kaip label_environment: Aplinka @@ -522,7 +525,7 @@ label_auth_source_new: Naujas autentiškumo nustatymo būdas label_auth_source_plural: Autentiškumo nustatymo būdai label_subproject_plural: Subprojektai - label_and_its_subprojects: "{{value}} projektas ir jo subprojektai" + label_and_its_subprojects: "%{value} projektas ir jo subprojektai" label_min_max_length: Min - Maks ilgis label_list: Sąrašas label_date: Data @@ -533,8 +536,8 @@ label_text: Ilgas tekstas label_attribute: Požymis label_attribute_plural: Požymiai - label_download: "{{count}} persiuntimas" - label_download_plural: "{{count}} persiuntimai" + label_download: "%{count} persiuntimas" + label_download_plural: "%{count} persiuntimai" label_no_data: Nėra ką atvaizduoti label_change_status: Pakeitimo būsena label_history: Istorija @@ -566,17 +569,17 @@ label_closed_issues: uždaryta label_closed_issues_plural: uždaryti label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{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" + other: "%{count} open" label_x_closed_issues_abbr: zero: 0 uždarytu one: 1 uždarytas - other: "{{count}} uždarytu" + other: "%{count} uždarytu" label_total: Bendra suma label_permissions: Leidimai label_current_status: Einamoji būsena @@ -594,7 +597,7 @@ label_months_from: mėnesiai nuo label_gantt: Gantt label_internal: Vidinis - label_last_changes: "paskutiniai {{count}}, pokyčiai" + label_last_changes: "paskutiniai %{count}, pokyčiai" label_change_view_all: Peržiūrėti visus pakeitimus label_personalize_page: Suasmeninti šį puslapį label_comment: Komentaras @@ -602,7 +605,7 @@ label_x_comments: zero: nėra komentarų one: 1 komentaras - other: "{{count}} komentarų" + other: "%{count} komentarų" label_comment_add: Pridėkite komentarą label_comment_added: Komentaras pridėtas label_comment_delete: Pašalinkite komentarus @@ -621,7 +624,7 @@ label_yesterday: vakar label_this_week: šią savaitę label_last_week: paskutinė savaitė - label_last_n_days: "paskutinių {{count}} dienų" + label_last_n_days: "paskutinių %{count} dienų" label_this_month: šis menuo label_last_month: paskutinis menuo label_this_year: šiemet @@ -635,8 +638,8 @@ label_repository: Saugykla label_repository_plural: Saugyklos label_browse: Naršyti - label_modification: "{{count}} pakeitimas" - label_modification_plural: "{{count}} pakeitimai" + label_modification: "%{count} pakeitimas" + label_modification_plural: "%{count} pakeitimai" label_revision: Revizija label_revision_plural: Revizijos label_associated_revisions: susijusios revizijos @@ -654,8 +657,8 @@ label_sort_lower: Perkelti žemyn label_sort_lowest: Perkelti į apačią label_roadmap: Veiklos grafikas - label_roadmap_due_in: "Baigiasi po {{value}}" - label_roadmap_overdue: "{{value}} vėluojama" + label_roadmap_due_in: "Baigiasi po %{value}" + label_roadmap_overdue: "%{value} vėluojama" label_roadmap_no_issues: Jokio darbo šiai versijai nėra label_search: Ieškoti label_result_plural: Rezultatai @@ -673,8 +676,8 @@ label_changes_details: Visų pakeitimų detalės label_issue_tracking: Darbų sekimas label_spent_time: Dirbtas laikas - label_f_hour: "{{value}} valanda" - label_f_hour_plural: "{{value}} valandų" + label_f_hour: "%{value} valanda" + label_f_hour_plural: "%{value} valandų" label_time_tracking: Laiko sekimas label_change_plural: Pakeitimai label_statistics: Statistika @@ -723,13 +726,13 @@ label_date_from: Nuo label_date_to: Iki label_language_based: Pagrįsta vartotojo kalba - label_sort_by: "Rūšiuoti pagal {{value}}" + label_sort_by: "Rūšiuoti pagal %{value}" label_send_test_email: Nusiųsti bandomąjį elektroninį laišką - label_feeds_access_key_created_on: "RSS prieigos raktas sukurtas prieš {{value}}" + label_feeds_access_key_created_on: "RSS prieigos raktas sukurtas prieš %{value}" label_module_plural: Moduliai - label_added_time_by: "Pridėjo {{author}} prieš {{age}}" - label_updated_time_by: "Atnaujino {{author}} {{age}} atgal" - label_updated_time: "Atnaujinta prieš {{value}}" + label_added_time_by: "Pridėjo %{author} prieš %{age}" + label_updated_time_by: "Atnaujino %{author} %{age} atgal" + label_updated_time: "Atnaujinta prieš %{value}" label_jump_to_a_project: Šuolis į projektą... label_file_plural: Bylos label_changeset_plural: Changesets @@ -745,7 +748,7 @@ label_registration_activation_by_email: "paskyros aktyvacija per e-paštą" label_registration_manual_activation: "rankinė paskyros aktyvacija" label_registration_automatic_activation: "automatinė paskyros aktyvacija" - label_display_per_page: "{{value}} įrašų puslapyje" + label_display_per_page: "%{value} įrašų puslapyje" label_age: Amžius label_change_properties: Pakeisti nustatymus label_general: Bendri @@ -769,7 +772,7 @@ label_descending: Descending label_sort: Rūšiuoti label_ascending: Ascending - label_date_from_to: From {{start}} to {{end}} + label_date_from_to: From %{start} to %{end} label_greater_or_equal: ">=" label_less_or_equal: <= label_wiki_content_added: Wiki puslapis pridėtas @@ -843,52 +846,52 @@ text_regexp_info: pvz. ^[A-Z0-9]+$ text_min_max_length_info: 0 reiškia jokių apribojimų text_project_destroy_confirmation: Ar esate įsitikinęs, kad jūs norite pašalinti šį projektą ir visus susijusius duomenis? - text_subprojects_destroy_warning: "Šis(ie) subprojektas(ai): {{value}} taip pat bus ištrintas(i)." + text_subprojects_destroy_warning: "Šis(ie) subprojektas(ai): %{value} taip pat bus ištrintas(i)." text_workflow_edit: Išrinkite vaidmenį ir pėdsekį, kad redaguotumėte darbų eigą text_are_you_sure: Ar esate įsitikinęs? - text_journal_changed: "{{label}} pakeista iš {{old}} į {{new}}" - text_journal_set_to: "{{label}} pakeista į {{value}}" - text_journal_deleted: "{{label}} ištrintas ({{old}})" - text_journal_added: "{{label}} {{value}} pridėtas" + text_journal_changed: "%{label} pakeista iš %{old} į %{new}" + text_journal_set_to: "%{label} pakeista į %{value}" + text_journal_deleted: "%{label} ištrintas (%{old})" + text_journal_added: "%{label} %{value} pridėtas" text_tip_issue_begin_day: užduotis, prasidedanti šią dieną text_tip_issue_end_day: užduotis, pasibaigianti šią dieną text_tip_issue_begin_end_day: užduotis, prasidedanti ir pasibaigianti šią dieną text_project_identifier_info: 'Mažosios raidės (a-z), skaičiai ir brūkšniai galimi.
    Išsaugojus, identifikuotojas negali būti keičiamas.' - text_caracters_maximum: "{{count}} simbolių maksimumas." - text_caracters_minimum: "Turi būti mažiausiai {{count}} simbolių ilgio." - text_length_between: "Ilgis tarp {{min}} ir {{max}} simbolių." + text_caracters_maximum: "%{count} simbolių maksimumas." + text_caracters_minimum: "Turi būti mažiausiai %{count} simbolių ilgio." + text_length_between: "Ilgis tarp %{min} ir %{max} simbolių." text_tracker_no_workflow: Jokia darbų eiga neapibrėžta šiam pėdsekiui text_unallowed_characters: Neleistini simboliai text_comma_separated: Leistinos kelios reikšmės (atskirtos kableliu). text_issues_ref_in_commit_messages: Darbų pavedimų(commit) nurodymas ir fiksavimas pranešimuose - text_issue_added: "Darbas {{id}} buvo praneštas (by {{author}})." - text_issue_updated: "Darbas {{id}} buvo atnaujintas (by {{author}})." + text_issue_added: "Darbas %{id} buvo praneštas (by %{author})." + text_issue_updated: "Darbas %{id} buvo atnaujintas (by %{author})." text_wiki_destroy_confirmation: Ar esate įsitikinęs, kad jūs norite pašalinti wiki ir visą jos turinį? - text_issue_category_destroy_question: "Kai kurie darbai ({{count}}) yra paskirti šiai kategorijai. Ką jūs norite daryti?" + text_issue_category_destroy_question: "Kai kurie darbai (%{count}) yra paskirti šiai kategorijai. Ką jūs norite daryti?" text_issue_category_destroy_assignments: Pašalinti kategorijos užduotis text_issue_category_reassign_to: Iš naujo priskirti darbus šiai kategorijai text_user_mail_option: "neišrinktiems projektams, jūs tiktai gausite pranešimus apie įvykius, kuriuos jūs stebite, arba į kuriuos esate įtrauktas (pvz. darbai, jūs esate autorius ar įgaliotinis)." text_no_configuration_data: "Vaidmenys, pėdsekiai, darbų būsenos ir darbų eiga dar nebuvo konfigūruoti.\nGriežtai rekomenduojam užkrauti numatytąją(default)konfiguraciją. Užkrovus, galėsite ją modifikuoti." text_load_default_configuration: Užkrauti numatytąj konfiguraciją - text_status_changed_by_changeset: "Pakeista {{value}} revizijoje." + text_status_changed_by_changeset: "Pakeista %{value} revizijoje." text_issues_destroy_confirmation: 'Ar jūs tikrai norite sunaikinti pažymėtą(us) darbą(us)?' text_select_project_modules: 'Parinkite modulius, kuriuos norite naudoti šiame projekte:' text_default_administrator_account_changed: Administratoriaus numatyta paskyra pakeista text_file_repository_writable: Į rinkmenu saugyklą galima saugoti (RW) text_plugin_assets_writable: Įskiepių 'assets' katalogas įrašomas text_rmagick_available: RMagick pasiekiamas (pasirinktinai) - text_destroy_time_entries_question: Naikinamam darbui priskirta {{hours}} valandų. Ką jūs noryte su jomis daryti? + text_destroy_time_entries_question: Naikinamam darbui priskirta %{hours} valandų. Ką jūs noryte su jomis daryti? text_destroy_time_entries: Ištrinti paskelbtas valandas text_assign_time_entries_to_project: Priskirti valandas prie projekto text_reassign_time_entries: 'Priskirti paskelbtas valandas šiam darbui:' - text_user_wrote: "{{value}} parašė:" - text_enumeration_destroy_question: "{{count}} objektai priskirti šiai reikšmei." + 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' - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? + text_wiki_page_destroy_question: This page has %{descendants} child page(s) and descendant(s). What do you want to do? text_wiki_page_reassign_children: Priskirkite iš naujo 'child' puslapius šiam puslapiui text_wiki_page_nullify_children: Laikyti child puslapius as root puslapius text_wiki_page_destroy_children: Pašalinti child puslapius ir jų sekinius @@ -933,9 +936,9 @@ label_update_issue_done_ratios: Update issue done ratios permission_view_issues: View Issues label_display_used_statuses_only: Only display statuses that are used by this tracker - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_api_access_key: API access key - label_api_access_key_created_on: API access key created {{value}} ago + label_api_access_key_created_on: API access key created %{value} ago label_feeds_access_key: RSS access key notice_api_access_key_reseted: Your API access key was reset. setting_rest_api_enabled: Enable REST web service @@ -962,12 +965,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -975,7 +978,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -986,8 +989,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Commit pranešimų koduotė + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/lv.yml.svn-base --- a/config/locales/.svn/text-base/lv.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/lv.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -13,7 +13,10 @@ month_names: [~, Janvāris, Februāris, Marts, Aprīlis , Maijs, Jūnijs, Jūlijs, Augusts, Septembris, Oktobris, Novembris, Decembris] abbr_month_names: [~, Jan, Feb, Mar, Apr, Mai, Jūn, Jūl, Aug, Sep, Okt, Nov, Dec] - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -29,37 +32,37 @@ half_a_minute: "pus minūte" less_than_x_seconds: one: "mazāk kā 1 sekunde" - other: "mazāk kā {{count}} sekundes" + other: "mazāk kā %{count} sekundes" x_seconds: one: "1 sekunde" - other: "{{count}} sekundes" + other: "%{count} sekundes" less_than_x_minutes: one: "mazāk kā minūte" - other: "mazāk kā {{count}} minūtes" + other: "mazāk kā %{count} minūtes" x_minutes: one: "1 minūte" - other: "{{count}} minūtes" + other: "%{count} minūtes" about_x_hours: one: "aptuveni 1 stunda" - other: "aptuveni {{count}} stundas" + other: "aptuveni %{count} stundas" x_days: one: "1 diena" - other: "{{count}} dienas" + other: "%{count} dienas" about_x_months: one: "aptuveni 1 mēnesis" - other: "aptuveni {{count}} mēneši" + other: "aptuveni %{count} mēneši" x_months: one: "1 mēnesis" - other: "{{count}} mēneši" + other: "%{count} mēneši" about_x_years: one: "aptuveni 1 gads" - other: "aptuveni {{count}} gadi" + other: "aptuveni %{count} gadi" over_x_years: one: "ilgāk par 1 gadu" - other: "ilgāk par {{count}} gadiem" + other: "ilgāk par %{count} gadiem" almost_x_years: one: "gandrīz 1 gadu" - other: "gandrīz {{count}} gadus" + other: "gandrīz %{count} gadus" number: format: @@ -89,6 +92,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "nav iekļauts sarakstā" exclusion: "ir rezervēts" @@ -97,17 +104,17 @@ accepted: "jābūt akceptētam" empty: "nevar būt tukšs" blank: "nevar būt neaizpildīts" - too_long: "ir pārāk gara(š) (maksimālais garums ir {{count}} simboli)" - too_short: "ir pārāk īsa(s) (minimālais garums ir {{count}} simboli)" - wrong_length: "ir nepareiza garuma (vajadzētu būt {{count}} simboli)" + too_long: "ir pārāk gara(š) (maksimālais garums ir %{count} simboli)" + too_short: "ir pārāk īsa(s) (minimālais garums ir %{count} simboli)" + wrong_length: "ir nepareiza garuma (vajadzētu būt %{count} simboli)" taken: "eksistē" not_a_number: "nav skaitlis" not_a_date: "nav derīgs datums" - greater_than: "jābūt lielākam par {{count}}" - greater_than_or_equal_to: "jābūt lielākam vai vienādam ar {{count}}" - equal_to: "jābūt vienādam ar {{count}}" - less_than: "jābūt mazākam kā {{count}}" - less_than_or_equal_to: "jābūt mazākam vai vienādam ar {{count}}" + greater_than: "jābūt lielākam par %{count}" + greater_than_or_equal_to: "jābūt lielākam vai vienādam ar %{count}" + equal_to: "jābūt vienādam ar %{count}" + less_than: "jābūt mazākam kā %{count}" + less_than_or_equal_to: "jābūt mazākam vai vienādam ar %{count}" odd: "jāatšķirās" even: "jāsakrīt" greater_than_start_date: "jābūt vēlākam par sākuma datumu" @@ -144,20 +151,20 @@ notice_file_not_found: Lapa, ko Jūs mēģināt atvērt, neeksistē vai ir pārvietota. notice_locking_conflict: Datus ir atjaunojis cits lietotājs. notice_not_authorized: Jums nav tiesību piekļūt šai lapai. - notice_email_sent: "E-pasts tika nosūtīts uz {{value}}" - notice_email_error: "Kļūda sūtot e-pastu ({{value}})" + notice_email_sent: "E-pasts tika nosūtīts uz %{value}" + notice_email_error: "Kļūda sūtot e-pastu (%{value})" notice_feeds_access_key_reseted: Jūsu RSS pieejas atslēga tika iestatīta sākuma stāvoklī. notice_api_access_key_reseted: Jūsu API pieejas atslēga tika iestatīta sākuma stāvoklī. - notice_failed_to_save_issues: "Neizdevās saglabāt {{count}} uzdevumu(us) no {{total}} izvēlēti: {{ids}}." + notice_failed_to_save_issues: "Neizdevās saglabāt %{count} uzdevumu(us) no %{total} izvēlēti: %{ids}." notice_no_issue_selected: "Nav izvēlēts uzdevums! Lūdzu, atzīmējiet uzdevumus, kurus vēlaties rediģēt!" notice_account_pending: "Jūsu konts tika izveidots un šobrīd gaida administratora apstiprinājumu." notice_default_data_loaded: Noklusētā konfigurācija tika veiksmīgi ielādēta. notice_unable_delete_version: Neizdevās dzēst versiju. notice_issue_done_ratios_updated: Uzdevuma izpildes koeficients atjaunots. - error_can_t_load_default_data: "Nevar ielādēt noklusētos konfigurācijas datus: {{value}}" + error_can_t_load_default_data: "Nevar ielādēt noklusētos konfigurācijas datus: %{value}" error_scm_not_found: "Ieraksts vai versija nebija repozitorijā." - error_scm_command_failed: "Mēģinot piekļūt repozitorijam, notika kļūda: {{value}}" + error_scm_command_failed: "Mēģinot piekļūt repozitorijam, notika kļūda: %{value}" error_scm_annotate: "Ieraksts neeksistē vai tam nevar tikt pievienots paskaidrojums." error_issue_not_found_in_project: 'Uzdevums netika atrasts vai nepieder šim projektam.' error_no_tracker_in_project: 'Neviens trakeris nav saistīts ar šo projektu. Pārbaudiet projekta iestatījumus.' @@ -168,25 +175,25 @@ error_workflow_copy_source: 'Lūdzu izvēlieties avota trakeri vai lomu' error_workflow_copy_target: 'Lūdzu izvēlēties mērķa trakeri(us) un lomu(as)' - warning_attachments_not_saved: "{{count}} datnes netika saglabātas." + warning_attachments_not_saved: "%{count} datnes netika saglabātas." - mail_subject_lost_password: "Jūsu {{value}} parole" + mail_subject_lost_password: "Jūsu %{value} parole" mail_body_lost_password: 'Lai mainītu paroli, spiediet uz šīs saites:' - mail_subject_register: "Jūsu {{value}} konta aktivizācija" + mail_subject_register: "Jūsu %{value} konta aktivizācija" mail_body_register: 'Lai izveidotu kontu, spiediet uz šīs saites:' - mail_body_account_information_external: "Varat izmantot Jūsu {{value}} kontu, lai pieslēgtos." + mail_body_account_information_external: "Varat izmantot Jūsu %{value} kontu, lai pieslēgtos." mail_body_account_information: Jūsu konta informācija - mail_subject_account_activation_request: "{{value}} konta aktivizācijas pieprasījums" - mail_body_account_activation_request: "Jauns lietotājs ({{value}}) ir reģistrēts. Lietotāja konts gaida Jūsu apstiprinājumu:" - mail_subject_reminder: "{{count}} uzdevums(i) sagaidāms(i) tuvākajās {{days}} dienās" - mail_body_reminder: "{{count}} uzdevums(i), kurš(i) ir nozīmēts(i) Jums, sagaidāms(i) tuvākajās {{days}} dienās:" - mail_subject_wiki_content_added: "'{{id}}' Wiki lapa pievienota" - mail_body_wiki_content_added: "The '{{id}}' Wiki lapu pievienojis {{author}}." - mail_subject_wiki_content_updated: "'{{id}}' Wiki lapa atjaunota" - mail_body_wiki_content_updated: "The '{{id}}' Wiki lapu atjaunojis {{author}}." + mail_subject_account_activation_request: "%{value} konta aktivizācijas pieprasījums" + mail_body_account_activation_request: "Jauns lietotājs (%{value}) ir reģistrēts. Lietotāja konts gaida Jūsu apstiprinājumu:" + mail_subject_reminder: "%{count} uzdevums(i) sagaidāms(i) tuvākajās %{days} dienās" + mail_body_reminder: "%{count} uzdevums(i), kurš(i) ir nozīmēts(i) Jums, sagaidāms(i) tuvākajās %{days} dienās:" + mail_subject_wiki_content_added: "'%{id}' Wiki lapa pievienota" + mail_body_wiki_content_added: "The '%{id}' Wiki lapu pievienojis %{author}." + mail_subject_wiki_content_updated: "'%{id}' Wiki lapa atjaunota" + mail_body_wiki_content_updated: "The '%{id}' Wiki lapu atjaunojis %{author}." gui_validation_error: 1 kļūda - gui_validation_error_plural: "{{count}} kļūdas" + gui_validation_error_plural: "%{count} kļūdas" field_name: Nosaukums field_description: Apraksts @@ -248,7 +255,8 @@ field_attr_lastname: Uzvārda atribūts field_attr_mail: "E-pasta atribūts" field_onthefly: "Lietotāja izveidošana on-the-fly" - field_done_ratio: % padarīti + field_start_date: Sākuma datums + field_done_ratio: "% padarīti" field_auth_source: Pilnvarošanas režīms field_hide_mail: "Paslēpt manu e-pasta adresi" field_comments: Komentārs @@ -304,7 +312,6 @@ setting_cross_project_issue_relations: "Atļaut starp-projektu uzdevumu relācijas" setting_issue_list_default_columns: Noklusēti rādītās kolonnas uzdevumu sarakstā setting_repositories_encodings: Repozitoriju kodējumi - setting_commit_logs_encoding: Kodēt ziņojumus setting_emails_footer: "E-pastu kājene" setting_protocol: Protokols setting_per_page_options: Objekti vienā lapā @@ -406,14 +413,14 @@ label_x_projects: zero: nav projektu one: 1 projekts - other: "{{count}} projekti" + other: "%{count} projekti" label_project_all: Visi projekti label_project_latest: Jaunākie projekti label_issue: Uzdevums label_issue_new: Jauns uzdevums label_issue_plural: Uzdevumi label_issue_view_all: Skatīt visus uzdevumus - label_issues_by: "Kārtot pēc {{value}}" + label_issues_by: "Kārtot pēc %{value}" label_issue_added: Uzdevums pievienots label_issue_updated: Uzdevums atjaunots label_document: Dokuments @@ -462,7 +469,7 @@ label_registered_on: Reģistrējies label_activity: Aktivitāte label_overall_activity: Kopējās aktivitātes - label_user_activity: "Lietotāja {{value}} aktivitātes" + label_user_activity: "Lietotāja %{value} aktivitātes" label_new: Jauns label_logged_as: Pieslēdzies kā label_environment: Vide @@ -472,7 +479,7 @@ label_auth_source_plural: Pilnvarošanas režīmi label_subproject_plural: Apakšprojekti label_subproject_new: Jauns apakšprojekts - label_and_its_subprojects: "{{value}} un tā apakšprojekti" + label_and_its_subprojects: "%{value} un tā apakšprojekti" label_min_max_length: Minimālais - Maksimālais garums label_list: Saraksts label_date: Datums @@ -483,8 +490,8 @@ label_text: Garš teksts label_attribute: Atribūts label_attribute_plural: Atribūti - label_download: "{{count}} Lejupielāde" - label_download_plural: "{{count}} Lejupielādes" + label_download: "%{count} Lejupielāde" + label_download_plural: "%{count} Lejupielādes" label_no_data: Nav datu, ko parādīt label_change_status: Mainīt statusu label_history: Vēsture @@ -516,17 +523,17 @@ label_closed_issues: slēgts label_closed_issues_plural: slēgti label_x_open_issues_abbr_on_total: - zero: 0 atvērti / {{total}} - one: 1 atvērts / {{total}} - other: "{{count}} atvērti / {{total}}" + zero: 0 atvērti / %{total} + one: 1 atvērts / %{total} + other: "%{count} atvērti / %{total}" label_x_open_issues_abbr: zero: 0 atvērti one: 1 atvērts - other: "{{count}} atvērti" + other: "%{count} atvērti" label_x_closed_issues_abbr: zero: 0 slēgti one: 1 slēgts - other: "{{count}} slēgti" + other: "%{count} slēgti" label_total: Kopā label_permissions: Atļaujas label_current_status: Pašreizējais statuss @@ -544,7 +551,7 @@ label_months_from: mēneši no label_gantt: Ganta diagramma label_internal: Iekšējais - label_last_changes: "pēdējās {{count}} izmaiņas" + label_last_changes: "pēdējās %{count} izmaiņas" label_change_view_all: Skatīt visas izmaiņas label_personalize_page: Pielāgot šo lapu label_comment: Komentārs @@ -552,7 +559,7 @@ label_x_comments: zero: nav komentāru one: 1 komentārs - other: "{{count}} komentāri" + other: "%{count} komentāri" label_comment_add: Pievienot komentāru label_comment_added: Komentārs pievienots label_comment_delete: Dzēst komentārus @@ -573,7 +580,7 @@ label_yesterday: vakar label_this_week: šonedēļ label_last_week: pagājušo šonedēļ - label_last_n_days: "pēdējās {{count}} dienas" + label_last_n_days: "pēdējās %{count} dienas" label_this_month: šomēnes label_last_month: pagājušo mēnes label_this_year: šogad @@ -587,13 +594,13 @@ label_repository: Repozitorijs label_repository_plural: Repozitoriji label_browse: Pārlūkot - label_modification: "{{count}} izmaiņa" - label_modification_plural: "{{count}} izmaiņas" + label_modification: "%{count} izmaiņa" + label_modification_plural: "%{count} izmaiņas" label_branch: Zars label_tag: Birka label_revision: Revīzija label_revision_plural: Revīzijas - label_revision_id: "Revīzija {{value}}" + label_revision_id: "Revīzija %{value}" label_associated_revisions: Saistītās revīzijas label_added: pievienots label_modified: modificēts @@ -610,8 +617,8 @@ label_sort_lower: Pārvietot uz leju label_sort_lowest: Pārvietot vienu soli uz leju label_roadmap: Ceļvedis - label_roadmap_due_in: "Sagaidāms pēc {{value}}" - label_roadmap_overdue: "nokavēts {{value}}" + label_roadmap_due_in: "Sagaidāms pēc %{value}" + label_roadmap_overdue: "nokavēts %{value}" label_roadmap_no_issues: Šai versijai nav uzdevumu label_search: Meklēt label_result_plural: Rezultāti @@ -629,8 +636,8 @@ label_changes_details: Visu izmaiņu detaļas label_issue_tracking: Uzdevumu uzskaite label_spent_time: Pavadītais laiks - label_f_hour: "{{value}} stunda" - label_f_hour_plural: "{{value}} stundas" + label_f_hour: "%{value} stunda" + label_f_hour_plural: "%{value} stundas" label_time_tracking: Laika uzskaite label_change_plural: Izmaiņas label_statistics: Statistika @@ -681,15 +688,15 @@ label_date_from: No label_date_to: Kam label_language_based: Izmantot lietotāja valodu - label_sort_by: "Kārtot pēc {{value}}" + label_sort_by: "Kārtot pēc %{value}" label_send_test_email: "Sūtīt testa e-pastu" label_feeds_access_key: RSS piekļuves atslēga label_missing_feeds_access_key: Trūkst RSS piekļuves atslēgas - label_feeds_access_key_created_on: "RSS piekļuves atslēga izveidota pirms {{value}}" + label_feeds_access_key_created_on: "RSS piekļuves atslēga izveidota pirms %{value}" label_module_plural: Moduļi - label_added_time_by: "Pievienojis {{author}} pirms {{age}}" - label_updated_time_by: "Atjaunojis {{author}} pirms {{age}}" - label_updated_time: "Atjaunots pirms {{value}}" + label_added_time_by: "Pievienojis %{author} pirms %{age}" + label_updated_time_by: "Atjaunojis %{author} pirms %{age}" + label_updated_time: "Atjaunots pirms %{value}" label_jump_to_a_project: Pāriet uz projektu... label_file_plural: Datnes label_changeset_plural: Izmaiņu kopumi @@ -705,7 +712,7 @@ label_registration_activation_by_email: "konta aktivizācija caur e-pastu" label_registration_manual_activation: manuālā konta aktivizācija label_registration_automatic_activation: automātiskā konta aktivizācija - label_display_per_page: "Rādīt vienā lapā: {{value}}" + label_display_per_page: "Rādīt vienā lapā: %{value}" label_age: Vecums label_change_properties: Mainīt atribūtus label_general: Galvenais @@ -728,7 +735,7 @@ label_sort: Kārtot label_ascending: Augoši label_descending: Dilstoši - label_date_from_to: "No {{start}} līdz {{end}}" + label_date_from_to: "No %{start} līdz %{end}" label_wiki_content_added: Wiki lapa pievienota label_wiki_content_updated: Wiki lapa atjaunota label_group: Grupa @@ -747,7 +754,7 @@ label_display_used_statuses_only: "Rādīt tikai statusus, ko lieto šis trakeris" label_api_access_key: API pieejas atslēga label_missing_api_access_key: Trūkst API pieejas atslēga - label_api_access_key_created_on: "API pieejas atslēga izveidota pirms {{value}}" + label_api_access_key_created_on: "API pieejas atslēga izveidota pirms %{value}" button_login: Pieslēgties button_submit: Nosūtīt @@ -807,53 +814,53 @@ text_regexp_info: "piem. ^[A-Z0-9]+$" text_min_max_length_info: "0 nozīmē, ka nav ierobežojumu" text_project_destroy_confirmation: "Vai tiešām vēlaties dzēst šo projektu un ar to saistītos datus?" - text_subprojects_destroy_warning: "Tā apakšprojekts(i): {{value}} arī tiks dzēsts(i)." + text_subprojects_destroy_warning: "Tā apakšprojekts(i): %{value} arī tiks dzēsts(i)." text_workflow_edit: Lai labotu darba plūsmu, izvēlieties lomu un trakeri text_are_you_sure: "Vai esat pārliecināts?" - text_journal_changed: "{{label}} mainīts no {{old}} uz {{new}}" - text_journal_set_to: "{{label}} iestatīts uz {{value}}" - text_journal_deleted: "{{label}} dzēsts ({{old}})" - text_journal_added: "{{label}} {{value}} pievienots" + text_journal_changed: "%{label} mainīts no %{old} uz %{new}" + text_journal_set_to: "%{label} iestatīts uz %{value}" + text_journal_deleted: "%{label} dzēsts (%{old})" + text_journal_added: "%{label} %{value} pievienots" text_tip_issue_begin_day: uzdevums sākas šodien text_tip_issue_end_day: uzdevums beidzas šodien text_tip_issue_begin_end_day: uzdevums sākas un beidzas šodien text_project_identifier_info: 'Tikai mazie burti (a-z), cipari un domuzīmes ir atļauti.
    Kad saglabāts, identifikators nevar tikt mainīts.' - text_caracters_maximum: "{{count}} simboli maksimāli." - text_caracters_minimum: "Jābūt vismaz {{count}} simbolu garumā." - text_length_between: "Garums starp {{min}} un {{max}} simboliem." + text_caracters_maximum: "%{count} simboli maksimāli." + text_caracters_minimum: "Jābūt vismaz %{count} simbolu garumā." + text_length_between: "Garums starp %{min} un %{max} simboliem." text_tracker_no_workflow: Šim trakerim nav definēta darba plūsma text_unallowed_characters: Neatļauti simboli text_comma_separated: "Atļautas vairākas vērtības (atdalīt ar komatu)." text_line_separated: "Atļautas vairākas vērtības (rakstīt katru savā rindā)." text_issues_ref_in_commit_messages: "Izmaiņu salīdzināšana izejot no ziņojumiem" - text_issue_added: "Uzdevumu {{id}} pievienojis {{author}}." - text_issue_updated: "Uzdevumu {{id}} atjaunojis {{author}}." + text_issue_added: "Uzdevumu %{id} pievienojis %{author}." + text_issue_updated: "Uzdevumu %{id} atjaunojis %{author}." text_wiki_destroy_confirmation: "Vai esat drošs, ka vēlaties dzēst šo wiki un visu tās saturu?" - text_issue_category_destroy_question: "Daži uzdevumi ({{count}}) ir nozīmēti šai kategorijai. Ko Jūs vēlaties darīt?" + text_issue_category_destroy_question: "Daži uzdevumi (%{count}) ir nozīmēti šai kategorijai. Ko Jūs vēlaties darīt?" text_issue_category_destroy_assignments: Dzēst kategoriju nozīmējumus text_issue_category_reassign_to: Nozīmēt uzdevumus šai kategorijai text_user_mail_option: "No neizvēlētajiem projektiem Jūs saņemsiet ziņojumus e-pastā tikai par notikumiem, kuriem Jūs sekojat vai kuros esat iesaistīts." text_no_configuration_data: "Lomas, trakeri, uzdevumu statusi un darba plūsmas vēl nav konfigurētas.\nĻoti ieteicams ielādēt noklusēto konfigurāciju. Pēc ielādēšanas to būs iespējams modificēt." text_load_default_configuration: Ielādēt noklusēto konfigurāciju - text_status_changed_by_changeset: "Apstiprināts izmaiņu kopumā {{value}}." + text_status_changed_by_changeset: "Apstiprināts izmaiņu kopumā %{value}." text_issues_destroy_confirmation: 'Vai tiešām vēlaties dzēst izvēlēto uzdevumu(us)?' text_select_project_modules: 'Izvēlieties moduļus šim projektam:' text_default_administrator_account_changed: Noklusētais administratora konts mainīts text_file_repository_writable: Pielikumu direktorijā atļauts rakstīt text_plugin_assets_writable: Spraudņu kataloga direktorijā atļauts rakstīt text_rmagick_available: "RMagick pieejams (neobligāts)" - text_destroy_time_entries_question: "{{hours}} stundas tika ziņotas par uzdevumu, ko vēlaties dzēst. Ko darīt?" + text_destroy_time_entries_question: "%{hours} stundas tika ziņotas par uzdevumu, ko vēlaties dzēst. Ko darīt?" text_destroy_time_entries: Dzēst ziņotās stundas text_assign_time_entries_to_project: Piešķirt ziņotās stundas projektam text_reassign_time_entries: 'Piešķirt ziņotās stundas uzdevumam:' - text_user_wrote: "{{value}} rakstīja:" - text_enumeration_destroy_question: "{{count}} objekti ir piešķirti šai vērtībai." + 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ā' - text_wiki_page_destroy_question: "Šij lapai ir {{descendants}} apakšlapa(as) un pēcnācēji. Ko darīt?" + text_wiki_page_destroy_question: "Šij lapai ir %{descendants} apakšlapa(as) un pēcnācēji. Ko darīt?" text_wiki_page_nullify_children: "Paturēt apakšlapas kā pamatlapas" text_wiki_page_destroy_children: "Dzēst apakšlapas un visus pēcnācējus" text_wiki_page_reassign_children: "Piešķirt apakšlapas šai lapai" @@ -889,7 +896,7 @@ 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}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. field_parent_issue: Parent task error_unable_delete_issue_status: Unable to delete issue status @@ -898,7 +905,7 @@ label_project_copy_notifications: Send email notifications during the project copy field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -906,7 +913,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -916,9 +923,51 @@ 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. - field_start_date: Start date + 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 + 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Kodēt ziņojumus + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/mk.yml.svn-base --- a/config/locales/.svn/text-base/mk.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/mk.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -17,7 +17,10 @@ month_names: [~, јануари, февруари, март, април, мај, јуни, јули, август, септември, октомври, ноември, декември] abbr_month_names: [~, јан, фев, мар, апр, мај, јун, јул, авг, сеп, окт, ное, дек] # Used in date_select and datime_select. - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -33,37 +36,37 @@ half_a_minute: "пола минута" less_than_x_seconds: one: "помалку од 1 секунда" - other: "помалку од {{count}} секунди" + other: "помалку од %{count} секунди" x_seconds: one: "1 секунда" - other: "{{count}} секунди" + other: "%{count} секунди" less_than_x_minutes: one: "помалку од 1 минута" - other: "помалку од {{count}} минути" + other: "помалку од %{count} минути" x_minutes: one: "1 минута" - other: "{{count}} минути" + other: "%{count} минути" about_x_hours: one: "околу 1 час" - other: "околу {{count}} часа" + other: "околу %{count} часа" x_days: one: "1 ден" - other: "{{count}} дена" + other: "%{count} дена" about_x_months: one: "околу 1 месец" - other: "околу {{count}} месеци" + other: "околу %{count} месеци" x_months: one: "1 месец" - other: "{{count}} месеци" + other: "%{count} месеци" about_x_years: one: "околу 1 година" - other: "околу {{count}} години" + other: "околу %{count} години" over_x_years: one: "преку 1 година" - other: "преку {{count}} години" + other: "преку %{count} години" almost_x_years: one: "скоро 1 година" - other: "скоро {{count}} години" + other: "скоро %{count} години" number: # Default format for numbers @@ -95,6 +98,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "не е вклучено во листата" exclusion: "е резервирано" @@ -103,17 +110,17 @@ accepted: "мора да е прифатено" empty: "неможе да е празно" blank: "неможе да е празно" - too_long: "е предолго (макс. {{count}} знаци)" - too_short: "е прекратко (мин. {{count}} знаци)" - wrong_length: "е погрешна должина (треба да е {{count}} знаци)" + 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}}" + 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: "мора да е поголема од почетната дата" @@ -150,12 +157,12 @@ 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 authorized to access this page. - notice_email_sent: "Е-порака е пратена на {{value}}" - notice_email_error: "Се случи грешка при праќање на е-пораката ({{value}})" + notice_email_sent: "Е-порака е пратена на %{value}" + notice_email_error: "Се случи грешка при праќање на е-пораката (%{value})" notice_feeds_access_key_reseted: Вашиот RSS клуч за пристап е reset. notice_api_access_key_reseted: Вашиот API клуч за пристап е reset. - notice_failed_to_save_issues: "Failed to save {{count}} issue(s) on {{total}} selected: {{ids}}." - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + notice_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}." + notice_failed_to_save_members: "Failed to save member(s): %{errors}." 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. @@ -163,9 +170,9 @@ notice_unable_delete_time_entry: Unable to delete time log entry. notice_issue_done_ratios_updated: Issue done ratios updated. - error_can_t_load_default_data: "Default configuration could not be loaded: {{value}}" + 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_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.' @@ -179,26 +186,26 @@ error_workflow_copy_source: 'Please select a source tracker or role' error_workflow_copy_target: 'Please select target tracker(s) and role(s)' error_unable_delete_issue_status: 'Unable to delete issue status' - error_unable_to_connect: "Unable to connect ({{value}})" - warning_attachments_not_saved: "{{count}} file(s) could not be saved." + error_unable_to_connect: "Unable to connect (%{value})" + warning_attachments_not_saved: "%{count} file(s) could not be saved." - mail_subject_lost_password: "Вашата {{value}} лозинка" + mail_subject_lost_password: "Вашата %{value} лозинка" mail_body_lost_password: 'To change your password, click on the following link:' - mail_subject_register: "Your {{value}} account activation" + 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_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: "Нов корисник ({{value}}) е регистриран. 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}}." + mail_subject_account_activation_request: "%{value} account activation request" + mail_body_account_activation_request: "Нов корисник (%{value}) е регистриран. 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 грешка - gui_validation_error_plural: "{{count}} грешки" + gui_validation_error_plural: "%{count} грешки" field_name: Име field_description: Опис @@ -261,7 +268,8 @@ field_attr_lastname: Lastname attribute field_attr_mail: Email attribute field_onthefly: Моментално (On-the-fly) креирање на корисници - field_done_ratio: % Завршено + field_start_date: Почеток + field_done_ratio: "% Завршено" field_auth_source: Режим на автентикација field_hide_mail: Криј ја мојата адреса на е-пошта field_comments: Коментар @@ -319,7 +327,6 @@ setting_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: Протокол setting_per_page_options: Objects per page options @@ -424,14 +431,14 @@ label_x_projects: zero: нема проекти one: 1 проект - other: "{{count}} проекти" + 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_issues_by: "Задачи по %{value}" label_issue_added: Задачата е додадена label_issue_updated: Задачата е ажурирана label_document: Документ @@ -481,7 +488,7 @@ label_registered_on: Регистриран на label_activity: Активност label_overall_activity: Севкупна активност - label_user_activity: "Активност на {{value}}" + label_user_activity: "Активност на %{value}" label_new: Нова label_logged_as: Најавени сте како label_environment: Опкружување @@ -491,7 +498,7 @@ label_auth_source_plural: Режими на автентикација label_subproject_plural: Подпроекти label_subproject_new: Нов подпроект - label_and_its_subprojects: "{{value}} и неговите подпроекти" + label_and_its_subprojects: "%{value} и неговите подпроекти" label_min_max_length: Мин. - Макс. должина label_list: Листа label_date: Дата @@ -502,8 +509,8 @@ label_text: Долг текст label_attribute: Атрибут label_attribute_plural: Атрибути - label_download: "{{count}} превземање" - label_download_plural: "{{count}} превземања" + label_download: "%{count} превземање" + label_download_plural: "%{count} превземања" label_no_data: Нема податоци за прикажување label_change_status: Промени статус label_history: Историја @@ -535,17 +542,17 @@ label_closed_issues: затворена label_closed_issues_plural: затворени label_x_open_issues_abbr_on_total: - zero: 0 отворени / {{total}} - one: 1 отворена / {{total}} - other: "{{count}} отворени / {{total}}" + zero: 0 отворени / %{total} + one: 1 отворена / %{total} + other: "%{count} отворени / %{total}" label_x_open_issues_abbr: zero: 0 отворени one: 1 отворена - other: "{{count}} отворени" + other: "%{count} отворени" label_x_closed_issues_abbr: zero: 0 затворени one: 1 затворена - other: "{{count}} затворени" + other: "%{count} затворени" label_total: Вкупно label_permissions: Овластувања label_current_status: Моментален статус @@ -563,7 +570,7 @@ label_months_from: месеци од label_gantt: Gantt label_internal: Internal - label_last_changes: "последни {{count}} промени" + label_last_changes: "последни %{count} промени" label_change_view_all: Прегледај ги сите промени label_personalize_page: Прилагоди ја странава label_comment: Коментар @@ -571,7 +578,7 @@ label_x_comments: zero: нема коментари one: 1 коментар - other: "{{count}} коментари" + other: "%{count} коментари" label_comment_add: Додади коментар label_comment_added: Коментарот е додаден label_comment_delete: Избриши коментари @@ -592,7 +599,7 @@ label_yesterday: вчера label_this_week: оваа недела label_last_week: минатата недела - label_last_n_days: "последните {{count}} дена" + label_last_n_days: "последните %{count} дена" label_this_month: овој месец label_last_month: минатиот месец label_this_year: оваа година @@ -606,13 +613,13 @@ label_repository: Складиште label_repository_plural: Складишта label_browse: Прелистувај - label_modification: "{{count}} промени" - label_modification_plural: "{{count}} промени" + label_modification: "%{count} промени" + label_modification_plural: "%{count} промени" label_branch: Гранка label_tag: Tag label_revision: Ревизија label_revision_plural: Ревизии - label_revision_id: "Ревизија {{value}}" + label_revision_id: "Ревизија %{value}" label_associated_revisions: Associated revisions label_added: added label_modified: modified @@ -629,8 +636,8 @@ label_sort_lower: Премести надоле label_sort_lowest: Премести најдоле label_roadmap: Roadmap - label_roadmap_due_in: "Due in {{value}}" - label_roadmap_overdue: "Касни {{value}}" + label_roadmap_due_in: "Due in %{value}" + label_roadmap_overdue: "Касни %{value}" label_roadmap_no_issues: Нема задачи за оваа верзија label_search: Барај label_result_plural: Резултати @@ -649,8 +656,8 @@ label_issue_tracking: Следење на задачи label_spent_time: Потрошено време label_overall_spent_time: Вкупно потрошено време - label_f_hour: "{{value}} час" - label_f_hour_plural: "{{value}} часа" + label_f_hour: "%{value} час" + label_f_hour_plural: "%{value} часа" label_time_tracking: Следење на време label_change_plural: Промени label_statistics: Статистики @@ -701,15 +708,15 @@ label_date_from: Од label_date_to: До label_language_based: Според јазикот на корисникот - label_sort_by: "Подреди според {{value}}" + 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_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_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: Changesets @@ -725,7 +732,7 @@ label_registration_activation_by_email: активација на профил преку е-пошта label_registration_manual_activation: мануелна активација на профил label_registration_automatic_activation: автоматска активација на профил - label_display_per_page: "По страна: {{value}}" + label_display_per_page: "По страна: %{value}" label_age: Age label_change_properties: Change properties label_general: Општо @@ -748,7 +755,7 @@ label_sort: Подреди label_ascending: Растечки label_descending: Опаѓачки - label_date_from_to: Од {{start}} до {{end}} + label_date_from_to: Од %{start} до %{end} label_wiki_content_added: Вики страница додадена label_wiki_content_updated: Вики страница ажурирана label_group: Група @@ -767,7 +774,7 @@ label_display_used_statuses_only: Only display statuses that are used by this tracker label_api_access_key: API клуч за пристап label_missing_api_access_key: Недостига API клуч за пристап - label_api_access_key_created_on: "API клучот за пристап е креиран пред {{value}}" + label_api_access_key_created_on: "API клучот за пристап е креиран пред %{value}" label_profile: Профил label_subtask_plural: Подзадачи label_project_copy_notifications: Праќај известувања по е-пошта при копирање на проект @@ -830,53 +837,53 @@ text_regexp_info: eg. ^[A-Z0-9]+$ text_min_max_length_info: 0 значи без ограничување text_project_destroy_confirmation: Дали сте сигурни дека сакате да го избришете проектот и сите поврзани податоци? - text_subprojects_destroy_warning: "Неговите подпроекти: {{value}} исто така ќе бидат избришани." + text_subprojects_destroy_warning: "Неговите подпроекти: %{value} исто така ќе бидат избришани." text_workflow_edit: Select a role and a tracker to edit the workflow text_are_you_sure: Дали сте сигурни? - text_journal_changed: "{{label}} променето од {{old}} во {{new}}" - text_journal_set_to: "{{label}} set to {{value}}" - text_journal_deleted: "{{label}} избришан ({{old}})" - text_journal_added: "{{label}} {{value}} додаден" + text_journal_changed: "%{label} променето од %{old} во %{new}" + text_journal_set_to: "%{label} set to %{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), бројки и dashes се дозволени
    По зачувувањето, идентификаторот неможе да се смени.' - text_caracters_maximum: "{{count}} знаци максимум." - text_caracters_minimum: "Мора да е најмалку {{count}} знаци долго." - text_length_between: "Должина помеѓу {{min}} и {{max}} знаци." + text_caracters_maximum: "%{count} знаци максимум." + text_caracters_minimum: "Мора да е најмалку %{count} знаци долго." + text_length_between: "Должина помеѓу %{min} и %{max} знаци." text_tracker_no_workflow: No workflow defined for this tracker text_unallowed_characters: Недозволени знаци text_comma_separated: Дозволени се повеќе вредности (разделени со запирка). text_line_separated: Дозволени се повеќе вредности (една линија за секоја вредност). text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages - text_issue_added: "Задачата {{id}} е пријавена од {{author}}." - text_issue_updated: "Задачата {{id}} е ажурирана од {{author}}." + text_issue_added: "Задачата %{id} е пријавена од %{author}." + text_issue_updated: "Задачата %{id} е ажурирана од %{author}." text_wiki_destroy_confirmation: Дали сте сигурни дека сакате да го избришете ова вики и целата негова содржина? - text_issue_category_destroy_question: "Некои задачи ({{count}}) се доделени на оваа категорија. Што сакате да правите?" + text_issue_category_destroy_question: "Некои задачи (%{count}) се доделени на оваа категорија. Што сакате да правите?" text_issue_category_destroy_assignments: Remove category assignments text_issue_category_reassign_to: Додели ги задачите на оваа категорија 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_status_changed_by_changeset: "Applied in changeset %{value}." text_issues_destroy_confirmation: 'Дали сте сигурни дека сакате да ги избришете избраните задачи?' text_select_project_modules: 'Изберете модули за овој проект:' text_default_administrator_account_changed: Default administrator account changed text_file_repository_writable: Во папката за прилози може да се запишува text_plugin_assets_writable: Во папката за додатоци може да се запишува text_rmagick_available: RMagick available (незадолжително) - 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_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: Додели ги пријавените часови на проектот text_reassign_time_entries: 'Reassign reported hours to this issue:' - text_user_wrote: "{{value}} напиша:" - text_enumeration_destroy_question: "{{count}} objects are assigned to this value." + 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' - text_wiki_page_destroy_question: "This page has {{descendants}} child page(s) and descendant(s). What do you want to do?" + 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" @@ -911,7 +918,7 @@ enumeration_activities: Активности (следење на време) enumeration_system_activity: Системска активност - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -921,9 +928,51 @@ 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. - field_start_date: Start date + 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 + 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Commit messages encoding + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/mn.yml.svn-base --- a/config/locales/.svn/text-base/mn.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/mn.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -16,7 +16,10 @@ month_names: [~, 1-р сар, 2-р сар, 3-р сар, 4-р сар, 5-р сар, 6-р сар, 7-р сар, 8-р сар, 9-р сар, 10-р сар, 11-р сар, 12-р сар] abbr_month_names: [~, 1сар, 2сар, 3сар, 4сар, 5сар, 6сар, 7сар, 8сар, 9сар, 10сар, 11сар, 12сар] # Used in date_select and datime_select. - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -32,37 +35,37 @@ half_a_minute: "хагас минут" less_than_x_seconds: one: "секунд орчим" - other: "{{count}} секундээс бага хугацаа" + other: "%{count} секундээс бага хугацаа" x_seconds: one: "1 секунд" - other: "{{count}} секунд" + other: "%{count} секунд" less_than_x_minutes: one: "минутаас бага хугацаа" - other: "{{count}} минутаас бага хугацаа" + other: "%{count} минутаас бага хугацаа" x_minutes: one: "1 минут" - other: "{{count}} минут" + other: "%{count} минут" about_x_hours: one: "1 цаг орчим" - other: "ойролцоогоор {{count}} цаг" + other: "ойролцоогоор %{count} цаг" x_days: one: "1 өдөр" - other: "{{count}} өдөр" + other: "%{count} өдөр" about_x_months: one: "1 сар орчим" - other: "ойролцоогоор {{count}} сар" + other: "ойролцоогоор %{count} сар" x_months: one: "1 сар" - other: "{{count}} сар" + other: "%{count} сар" about_x_years: one: "ойролцоогоор 1 жил" - other: "ойролцоогоор {{count}} жил" + other: "ойролцоогоор %{count} жил" over_x_years: one: "1 жилээс их" - other: "{{count}} жилээс их" + other: "%{count} жилээс их" almost_x_years: one: "бараг 1 жил" - other: "бараг {{count}} жил" + other: "бараг %{count} жил" number: format: @@ -93,6 +96,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "жагсаалтад заагдаагүй байна" exclusion: "нөөцлөгдсөн" @@ -101,17 +108,17 @@ accepted: "хүлээж авах ёстой" empty: "хоосон байж болохгүй" blank: "бланк байж болохгүй" - too_long: "дэндүү урт байна (хамгийн ихдээ {{count}} тэмдэгт)" - too_short: "дэндүү богино байна (хамгийн багадаа {{count}} тэмдэгт)" - wrong_length: "буруу урттай байна (заавал {{count}} тэмдэгт)" + too_long: "дэндүү урт байна (хамгийн ихдээ %{count} тэмдэгт)" + too_short: "дэндүү богино байна (хамгийн багадаа %{count} тэмдэгт)" + wrong_length: "буруу урттай байна (заавал %{count} тэмдэгт)" taken: "аль хэдийнэ авсан байна" not_a_number: "тоо биш байна" not_a_date: "зөв огноо биш байна" - 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}}" + 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: "заавал сондгой" even: "заавал тэгш" greater_than_start_date: "must be greater than start date" @@ -148,20 +155,20 @@ notice_file_not_found: Таны үзэх гэсэн хуудас байхгүй юмуу устгагдсан байна. notice_locking_conflict: Өгөгдлийг өөр хүн өөрчилсөн байна. notice_not_authorized: Танд энэ хуудсыг үзэх эрх байхгүй байна. - notice_email_sent: "{{value}} - руу мэйл илгээлээ" - notice_email_error: "Мэйл илгээхэд алдаа гарлаа ({{value}})" + notice_email_sent: "%{value} - руу мэйл илгээлээ" + notice_email_error: "Мэйл илгээхэд алдаа гарлаа (%{value})" notice_feeds_access_key_reseted: Таны RSS хандалтын түлхүүрийг дахин эхлүүллээ. notice_api_access_key_reseted: Your API access key was reset. - notice_failed_to_save_issues: "{{total}} асуудал сонгогдсоноос {{count}} асуудлыг нь хадгалахад алдаа гарлаа: {{ids}}." + notice_failed_to_save_issues: "%{total} асуудал сонгогдсоноос %{count} асуудлыг нь хадгалахад алдаа гарлаа: %{ids}." notice_no_issue_selected: "Ямар ч асуудал сонгогдоогүй байна! Засварлах асуудлуудаа сонгоно уу." notice_account_pending: "Таны дансыг үүсгэж дууслаа, администратор баталгаажуулах хүртэл хүлээнэ үү." notice_default_data_loaded: Стандарт тохиргоог амжилттай ачааллаа. notice_unable_delete_version: Хувилбарыг устгах боломжгүй. notice_issue_done_ratios_updated: Issue done ratios updated. - error_can_t_load_default_data: "Стандарт тохиргоог ачаалж чадсангүй: {{value}}" + error_can_t_load_default_data: "Стандарт тохиргоог ачаалж чадсангүй: %{value}" error_scm_not_found: "Repository дотор тухайн бичлэг эсвэл хувилбарыг олсонгүй." - error_scm_command_failed: "Repository-д хандахад алдаа гарлаа: {{value}}" + error_scm_command_failed: "Repository-д хандахад алдаа гарлаа: %{value}" error_scm_annotate: "Бичлэг байхгүй байна, эсвэл бичлэгт тайлбар хавсаргаж болохгүй." error_issue_not_found_in_project: 'Сонгосон асуудал энэ төсөлд хамаардаггүй юм уу эсвэл системд байхгүй байна.' error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.' @@ -172,25 +179,25 @@ 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) файлыг хадгалж чадсангүй." + warning_attachments_not_saved: "%{count} file(s) файлыг хадгалж чадсангүй." - mail_subject_lost_password: "Таны {{value}} нууц үг" + mail_subject_lost_password: "Таны %{value} нууц үг" mail_body_lost_password: 'Нууц үгээ өөрчлөхийн тулд доорх холбоос дээр дарна уу:' - mail_subject_register: "Таны {{value}} дансыг идэвхжүүлэх" + mail_subject_register: "Таны %{value} дансыг идэвхжүүлэх" mail_body_register: 'Дансаа идэвхжүүлэхийн тулд доорх холбоос дээр дарна уу:' - mail_body_account_information_external: "Та өөрийнхөө {{value}} дансыг ашиглаж холбогдож болно." + 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}}' 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}}." + 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}' 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 алдаа - gui_validation_error_plural: "{{count}} алдаа" + gui_validation_error_plural: "%{count} алдаа" field_name: Нэр field_description: Тайлбар @@ -252,7 +259,8 @@ field_attr_lastname: Овог аттрибут field_attr_mail: Имэйл аттрибут field_onthefly: Хүссэн үедээ хэрэглэгч үүсгэх - field_done_ratio: %% Гүйцэтгэсэн + field_start_date: Эхлэл + field_done_ratio: "%% Гүйцэтгэсэн" field_auth_source: Нэвтрэх арга field_hide_mail: Миний имэйл хаягийг нуу field_comments: Тайлбар @@ -308,7 +316,6 @@ setting_cross_project_issue_relations: Төсөл хооронд асуудал хамааруулахыг зөвшөөрөх setting_issue_list_default_columns: Асуудлуудыг харуулах стандарт баганууд setting_repositories_encodings: Репозиторийн энкодинг - setting_commit_logs_encoding: Коммит хийх үед харуулах текстүүдийн энкодинг setting_emails_footer: Имэйлүүдийн хөл хэсэг setting_protocol: Протокол setting_per_page_options: Нэг хуудсанд байх обьектуудын тохиргоо @@ -410,14 +417,14 @@ label_x_projects: zero: төсөл байхгүй one: 1 төсөл - other: "{{count}} төслүүд" + 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_issues_by: "%{value} - н асуудлууд" label_issue_added: Асуудал нэмэгдлээ label_issue_updated: Асуудал өөрчлөгдлөө label_document: Бичиг баримт @@ -466,7 +473,7 @@ label_registered_on: Бүртгүүлсэн огноо label_activity: Үйл ажиллагаа label_overall_activity: Ерөнхий үйл ажиллагаа - label_user_activity: "{{value}}-ийн үйл ажиллагаа" + label_user_activity: "%{value}-ийн үйл ажиллагаа" label_new: Шинэ label_logged_as: Холбогдсон нэр label_environment: Орчин @@ -476,7 +483,7 @@ label_auth_source_plural: Нэвтрэх аргууд label_subproject_plural: Дэд төслүүд label_subproject_new: Шинэ дэд төсөл - label_and_its_subprojects: "{{value}} болон холбогдох дэд төслүүд" + label_and_its_subprojects: "%{value} болон холбогдох дэд төслүүд" label_min_max_length: Дээд - Доод урт label_list: Жагсаалт label_date: Огноо @@ -487,8 +494,8 @@ label_text: Урт текст label_attribute: Аттрибут label_attribute_plural: Аттрибутууд - label_download: "{{count}} Татаж авсан зүйл" - label_download_plural: "{{count}} Татаж авсан зүйлс" + label_download: "%{count} Татаж авсан зүйл" + label_download_plural: "%{count} Татаж авсан зүйлс" label_no_data: Үзүүлэх өгөгдөл байхгүй байна label_change_status: Төлвийг өөрчлөх label_history: Түүх @@ -521,17 +528,17 @@ label_closed_issues: хаалттай label_closed_issues_plural: хаалттай label_x_open_issues_abbr_on_total: - zero: 0 нээлттэй / {{total}} - one: 1 нээлттэй / {{total}} - other: "{{count}} нээлттэй / {{total}}" + zero: 0 нээлттэй / %{total} + one: 1 нээлттэй / %{total} + other: "%{count} нээлттэй / %{total}" label_x_open_issues_abbr: zero: 0 нээлттэй one: 1 нээлттэй - other: "{{count}} нээлттэй" + other: "%{count} нээлттэй" label_x_closed_issues_abbr: zero: 0 хаалттай one: 1 хаалттай - other: "{{count}} хаалттай" + other: "%{count} хаалттай" label_total: Нийт label_permissions: Зөвшөөрлүүд label_current_status: Одоогийн төлөв @@ -549,7 +556,7 @@ label_months_from: Саруудыг хаанаас label_gantt: Гант диаграм label_internal: Дотоод - label_last_changes: "сүүлийн {{count}} өөрчлөлтүүд" + label_last_changes: "сүүлийн %{count} өөрчлөлтүүд" label_change_view_all: Бүх өөрчлөлтүүдийг харах label_personalize_page: Энэ хуудсыг өөрт зориулан өөрчлөх label_comment: Тайлбар @@ -557,7 +564,7 @@ label_x_comments: zero: сэтгэгдэл байхгүй one: 1 сэтгэгдэлтэй - other: "{{count}} сэтгэгдэлтэй" + other: "%{count} сэтгэгдэлтэй" label_comment_add: Тайлбар нэмэх label_comment_added: Тайлбар нэмэгдлээ label_comment_delete: Тайлбарууд устгах @@ -578,7 +585,7 @@ label_yesterday: өчигдөр label_this_week: энэ долоо хоног label_last_week: өнгөрсөн долоо хоног - label_last_n_days: "сүүлийн {{count}} өдрүүд" + label_last_n_days: "сүүлийн %{count} өдрүүд" label_this_month: энэ сар label_last_month: сүүлийн сар label_this_year: энэ жил @@ -592,13 +599,13 @@ label_repository: Репозитори label_repository_plural: Репозиторууд label_browse: Үзэх - label_modification: "{{count}} өөрчлөлт" - label_modification_plural: "{{count}} өөрчлөлтүүд" + label_modification: "%{count} өөрчлөлт" + label_modification_plural: "%{count} өөрчлөлтүүд" label_branch: Салбар label_tag: Шошго label_revision: Хувилбар label_revision_plural: Хувилбарууд - label_revision_id: "{{value}} Хувилбар" + label_revision_id: "%{value} Хувилбар" label_associated_revisions: Хамааралтай хувилбарууд label_added: нэмэгдсэн label_modified: өөрчлөгдсөн @@ -615,8 +622,8 @@ label_sort_lower: Доош нь label_sort_lowest: Хамгийн доор label_roadmap: Хөтөч - label_roadmap_due_in: "{{value}} дотор дуусгах" - label_roadmap_overdue: "{{value}} оройтсон" + label_roadmap_due_in: "%{value} дотор дуусгах" + label_roadmap_overdue: "%{value} оройтсон" label_roadmap_no_issues: Энэ хувилбарт асуудал байхгүй байна label_search: Хайх label_result_plural: Үр дүн @@ -634,8 +641,8 @@ label_changes_details: Бүх өөрчлөлтүүдийн дэлгэрэнгүй label_issue_tracking: Асуудал хянах label_spent_time: Зарцуулсан хугацаа - label_f_hour: "{{value}} цаг" - label_f_hour_plural: "{{value}} цаг" + label_f_hour: "%{value} цаг" + label_f_hour_plural: "%{value} цаг" label_time_tracking: Хугацааг хянах label_change_plural: Өөрчлөлтүүд label_statistics: Статистик @@ -686,15 +693,15 @@ label_date_from: Хэзээнээс label_date_to: Хэдий хүртэл label_language_based: Хэрэглэгчийн хэлнас шалтгаалан - label_sort_by: "{{value}} талбараар нь эрэмбэлэх" + 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_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_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: Өөрчлөлтүүд @@ -710,7 +717,7 @@ label_registration_activation_by_email: дансыг имэйлээр идэвхжүүлэх label_registration_manual_activation: дансыг гараар идэвхжүүлэх label_registration_automatic_activation: дансыг автоматаар идэвхжүүлэх - label_display_per_page: 'Нэг хуудсанд: {{value}}' + label_display_per_page: 'Нэг хуудсанд: %{value}' label_age: Нас label_change_properties: Тохиргоог өөрчлөх label_general: Ерөнхий @@ -733,7 +740,7 @@ label_sort: Sort label_ascending: Ascending label_descending: Descending - label_date_from_to: From {{start}} to {{end}} + 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 @@ -752,7 +759,7 @@ 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" + label_api_access_key_created_on: "API access key created %{value} ago" button_login: Нэвтрэх button_submit: Илгээх @@ -812,53 +819,53 @@ text_regexp_info: eg. ^[A-Z0-9]+$ text_min_max_length_info: 0 гэвэл ямар ч хязгааргүй гэсэн үг text_project_destroy_confirmation: Та энэ төсөл болоод бусад мэдээллийг нь үнэхээр устгамаар байна уу ? - text_subprojects_destroy_warning: "Уг төслийн дэд төслүүд : {{value}} нь бас устгагдах болно." + text_subprojects_destroy_warning: "Уг төслийн дэд төслүүд : %{value} нь бас устгагдах болно." text_workflow_edit: Ажлын дарааллыг өөрчлөхийн тулд хандалтын эрх болон асуудлын чиглэлийг сонгоно уу text_are_you_sure: Та итгэлтэй байна уу ? - text_journal_changed: "{{label}} {{old}} байсан нь {{new}} болов" - text_journal_set_to: "{{label}} {{value}} болгож өөрчиллөө" - text_journal_deleted: "{{label}} устсан ({{old}})" - text_journal_added: "{{label}} {{value}} нэмэгдсэн" + 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), тоо and дундуур зураас ашиглаж болно.
    Нэгэнт хадгалсан хойно, төслийн глобал нэрийг өөрлчөх боломжгүй.' - text_caracters_maximum: "дээд тал нь {{count}} үсэг." - text_caracters_minimum: "Хамгийн багадаа ядаж {{count}} тэмдэгт байх." - text_length_between: "Урт нь багадаа {{min}}, ихдээ {{max}} тэмдэгт." + 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: Multiple values allowed (one line for each value). text_issues_ref_in_commit_messages: Коммитийн зурвасуудад хамааруулсан болон байнгын асуудлууд - text_issue_added: "Асуудал {{id}} - ийг хэрэглэгч {{author}} мэдэгдсэн байна." - text_issue_updated: "Асуудал {{id}} - ийг хэрэглэгч {{author}} өөрчилсөн байна." + text_issue_added: "Асуудал %{id} - ийг хэрэглэгч %{author} мэдэгдсэн байна." + text_issue_updated: "Асуудал %{id} - ийг хэрэглэгч %{author} өөрчилсөн байна." text_wiki_destroy_confirmation: Та энэ вики болон холбогдох бүх мэдээллийг үнэхээр устгамаар байна уу ? - text_issue_category_destroy_question: "Энэ ангилалд зарим асуудлууд ({{count}}) орсон байна. Та яах вэ ?" + 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_status_changed_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_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_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' - text_wiki_page_destroy_question: "This page has {{descendants}} child page(s) and descendant(s). What do you want to do?" + 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" @@ -899,12 +906,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -912,7 +919,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -922,9 +929,51 @@ 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. - field_start_date: Start date + 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 + 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Коммит хийх үед харуулах текстүүдийн энкодинг + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/nl.yml.svn-base --- a/config/locales/.svn/text-base/nl.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/nl.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -5,25 +5,28 @@ # 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" + default: "%d-%m-%Y" + short: "%e %b" + long: "%d %B, %Y" - day_names: [Zondag, Maandag, Dinsdag, Woensdag, Donderdag, Vrijdag, Zaterdag] - abbr_day_names: [Zo, Ma, Di, Woe, Do, Vr, Zat] + day_names: [zondag, maandag, dinsdag, woensdag, donderdag, vrijdag, zaterdag] + abbr_day_names: [zo, ma, di, wo, do, vr, za] # Don't forget the nil at the beginning; there's no such thing as a 0th month - month_names: [~, Januari, Februari, Maart, April, Mei, Juni, Juli, Augustus, September, Oktober, November, December] - abbr_month_names: [~, Jan, Feb, Mar, Apr, Mei, Jun, Jul, Aug, Sep, Okt, Nov, Dec] + month_names: [~, januari, februari, maart, april, mei, juni, juli, augustus, september, oktober, november, december] + abbr_month_names: [~, jan, feb, mar, apr, mei, jun, jul, aug, sep, okt, nov, dec] # Used in date_select and datime_select. - order: [ :year, :month, :day ] + order: + - :day + - :month + - :year time: formats: default: "%a, %d %b %Y %H:%M:%S %z" time: "%H:%M" - short: "%d %b %H:%M" - long: "%B %d, %Y %H:%M" + short: "%e %b %H:%M" + long: "%d %B, %Y %H:%M" am: "am" pm: "pm" @@ -32,37 +35,37 @@ half_a_minute: "halve minuut" less_than_x_seconds: one: "minder dan een seconde" - other: "mindera dan {{count}} seconden" + other: "minder dan %{count} seconden" x_seconds: one: "1 seconde" - other: "{{count}} seconden" + other: "%{count} seconden" less_than_x_minutes: one: "minder dan een minuut" - other: "minder dan {{count}} minuten" + other: "minder dan %{count} minuten" x_minutes: one: "1 minuut" - other: "{{count}} minuten" + other: "%{count} minuten" about_x_hours: one: "ongeveer 1 uur" - other: "ongeveer {{count}} uren" + other: "ongeveer %{count} uren" x_days: one: "1 dag" - other: "{{count}} dagen" + other: "%{count} dagen" about_x_months: one: "ongeveer 1 maand" - other: "ongeveer {{count}} maanden" + other: "ongeveer %{count} maanden" x_months: one: "1 maand" - other: "{{count}} maanden" + other: "%{count} maanden" about_x_years: one: "ongeveer 1 jaar" - other: "ongeveer {{count}} jaren" + other: "ongeveer %{count} jaar" over_x_years: - one: "over 1 jaar" - other: "over {{count}} jaren" + one: "meer dan 1 jaar" + other: "meer dan %{count} jaar" almost_x_years: - one: "almost 1 year" - other: "almost {{count}} years" + one: "bijna 1 jaar" + other: "bijna %{count} jaar" number: format: @@ -92,6 +95,10 @@ activerecord: errors: + template: + header: + one: "Door een fout kon dit %{model} niet worden opgeslagen" + other: "Door %{count} fouten kon dit %{model} niet worden opgeslagen" messages: inclusion: "staat niet in de lijst" exclusion: "is gereserveerd" @@ -106,11 +113,11 @@ taken: "is al in gebruik" not_a_number: "is geen getal" not_a_date: "is geen valide datum" - greater_than: "moet groter zijn dan {{count}}" - greater_than_or_equal_to: "moet groter zijn of gelijk zijn aan {{count}}" - equal_to: "moet gelijk zijn aan {{count}}" - less_than: "moet minder zijn dan {{count}}" - less_than_or_equal_to: "moet minder dan of gelijk zijn aan {{count}}" + greater_than: "moet groter zijn dan %{count}" + greater_than_or_equal_to: "moet groter zijn of gelijk zijn aan %{count}" + equal_to: "moet gelijk zijn aan %{count}" + less_than: "moet minder zijn dan %{count}" + less_than_or_equal_to: "moet minder dan of gelijk zijn aan %{count}" odd: "moet oneven zijn" even: "moet even zijn" greater_than_start_date: "moet na de startdatum liggen" @@ -139,7 +146,7 @@ button_edit: Bewerk button_list: Lijst button_lock: Sluit - button_log_time: Log tijd + button_log_time: Registreer tijd button_login: Inloggen button_move: Verplaatsen button_quote: Citaat @@ -182,10 +189,10 @@ enumeration_activities: Activiteiten (tijdtracking) enumeration_doc_categories: Documentcategorieën enumeration_issue_priorities: Issueprioriteiten - error_can_t_load_default_data: "De standaard configuratie kon niet worden geladen: {{value}}" + error_can_t_load_default_data: "De standaard configuratie kon niet worden geladen: %{value}" error_issue_not_found_in_project: 'Deze issue is niet gevonden of behoort niet toe tot dit project.' error_scm_annotate: "Er kan geen commentaar toegevoegd worden." - error_scm_command_failed: "Er trad een fout op tijdens de poging om verbinding te maken met de repository: {{value}}" + error_scm_command_failed: "Er trad een fout op tijdens de poging om verbinding te maken met de repository: %{value}" error_scm_not_found: "Deze ingang of revisie bestaat niet in de repository." field_account: Account field_activity: Activiteit @@ -207,7 +214,7 @@ field_default_value: Standaardwaarde field_delay: Vertraging field_description: Beschrijving - field_done_ratio: % Gereed + field_done_ratio: "% Gereed" field_downloads: Downloads field_due_date: Verwachte datum gereed field_effective_date: Datum @@ -256,6 +263,7 @@ field_role: Rol field_searchable: Doorzoekbaar field_spent_on: Datum + field_start_date: Startdatum field_start_page: Startpagina field_status: Status field_subject: Onderwerp @@ -270,30 +278,30 @@ field_user: Gebruiker field_value: Waarde field_version: Versie - general_csv_decimal_separator: '.' + general_csv_decimal_separator: ',' general_csv_encoding: ISO-8859-1 - general_csv_separator: ',' + general_csv_separator: ';' general_first_day_of_week: '7' general_lang_name: 'Nederlands' - general_pdf_encoding: ISO-8859-1 + general_pdf_encoding: UTF-8 general_text_No: 'Nee' general_text_Yes: 'Ja' general_text_no: 'nee' general_text_yes: 'ja' gui_validation_error: 1 fout - gui_validation_error_plural: "{{count}} fouten" + gui_validation_error_plural: "%{count} fouten" label_activity: Activiteit label_add_another_file: Ander bestand toevoegen label_add_note: Voeg een notitie toe label_added: toegevoegd - label_added_time_by: "Toegevoegd door {{author}} {{age}} geleden" + label_added_time_by: "Toegevoegd door %{author} %{age} geleden" label_administration: Administratie label_age: Leeftijd label_ago: dagen geleden label_all: alle label_all_time: alles label_all_words: Alle woorden - label_and_its_subprojects: "{{value}} en zijn subprojecten." + label_and_its_subprojects: "%{value} en zijn subprojecten." label_applied_status: Toegekende status label_assigned_to_me_issues: Aan mij toegewezen issues label_associated_revisions: Geassociëerde revisies @@ -326,17 +334,17 @@ label_closed_issues: gesloten label_closed_issues_plural: gesloten label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{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" + other: "%{count} open" label_x_closed_issues_abbr: zero: 0 closed one: 1 closed - other: "{{count}} closed" + other: "%{count} closed" label_comment: Commentaar label_comment_add: Voeg commentaar toe label_comment_added: Commentaar toegevoegd @@ -345,7 +353,7 @@ label_x_comments: zero: no comments one: 1 comment - other: "{{count}} comments" + other: "%{count} comments" label_commits_per_author: Commits per auteur label_commits_per_month: Commits per maand label_confirmation: Bevestiging @@ -369,13 +377,13 @@ label_diff_inline: inline label_diff_side_by_side: naast elkaar label_disabled: uitgeschakeld - label_display_per_page: "Per pagina: {{value}}" + label_display_per_page: "Per pagina: %{value}" label_document: Document label_document_added: Document toegevoegd label_document_new: Nieuw document label_document_plural: Documenten - label_download: "{{count}} Download" - label_download_plural: "{{count}} Downloads" + label_download: "%{count} Download" + label_download_plural: "%{count} Downloads" label_downloads_abbr: D/L label_duplicated_by: gedupliceerd door label_duplicates: dupliceert @@ -387,10 +395,10 @@ label_equals: is gelijk label_example: Voorbeeld label_export_to: Exporteer naar - label_f_hour: "{{value}} uur" - label_f_hour_plural: "{{value}} uren" + label_f_hour: "%{value} uur" + label_f_hour_plural: "%{value} uren" label_feed_plural: Feeds - label_feeds_access_key_created_on: "RSS toegangssleutel {{value}} geleden gemaakt." + label_feeds_access_key_created_on: "RSS toegangssleutel %{value} geleden gemaakt." label_file_added: Bericht toegevoegd label_file_plural: Bestanden label_filter_add: Voeg filter toe @@ -427,13 +435,13 @@ label_issue_updated: Issue bijgewerkt label_issue_view_all: Bekijk alle issues label_issue_watchers: Monitoren - label_issues_by: "Issues door {{value}}" + label_issues_by: "Issues door %{value}" label_jump_to_a_project: Ga naar een project... label_language_based: Taal gebaseerd - label_last_changes: "laatste {{count}} wijzigingen" + label_last_changes: "laatste %{count} wijzigingen" label_last_login: Laatste bezoek label_last_month: laatste maand - label_last_n_days: "{{count}} dagen geleden" + label_last_n_days: "%{count} dagen geleden" label_last_week: vorige week label_latest_revision: Meest recente revisie label_latest_revision_plural: Meest recente revisies @@ -454,8 +462,8 @@ label_message_plural: Berichten label_message_posted: Bericht toegevoegd label_min_max_length: Min-max lengte - label_modification: "{{count}} wijziging" - label_modification_plural: "{{count}} wijzigingen" + label_modification: "%{count} wijziging" + label_modification_plural: "%{count} wijzigingen" label_modified: gewijzigd label_module_plural: Modules label_month: Maand @@ -506,11 +514,11 @@ label_x_projects: zero: no projects one: 1 project - other: "{{count}} projects" + other: "%{count} projects" label_public_projects: Publieke projecten - label_query: Eigen zoekvraag - label_query_new: Nieuwe zoekvraag - label_query_plural: Eigen zoekvragen + label_query: Eigen zoekopdracht + label_query_new: Nieuwe zoekopdracht + label_query_plural: Eigen zoekopdrachten label_read: Lees... label_register: Registreer label_registered_on: Geregistreerd op @@ -533,9 +541,9 @@ label_revision: Revisie label_revision_plural: Revisies label_roadmap: Roadmap - label_roadmap_due_in: "Voldaan in {{value}}" + label_roadmap_due_in: "Voldaan in %{value}" label_roadmap_no_issues: Geen issues voor deze versie - label_roadmap_overdue: "{{value}} over tijd" + label_roadmap_overdue: "%{value} over tijd" label_role: Rol label_role_and_permissions: Rollen en permissies label_role_new: Nieuwe rol @@ -547,7 +555,7 @@ label_send_test_email: Stuur een test e-mail label_settings: Instellingen label_show_completed_versions: Toon afgeronde versies - label_sort_by: "Sorteer op {{value}}" + label_sort_by: "Sorteer op %{value}" label_sort_higher: Verplaats naar boven label_sort_highest: Verplaats naar begin label_sort_lower: Verplaats naar beneden @@ -571,12 +579,12 @@ label_tracker: Tracker label_tracker_new: Nieuwe tracker label_tracker_plural: Trackers - label_updated_time: "{{value}} geleden bijgewerkt" - label_updated_time_by: "{{age}} geleden bijgewerkt door {{author}}" + label_updated_time: "%{value} geleden bijgewerkt" + label_updated_time_by: "%{age} geleden bijgewerkt door %{author}" label_used_by: Gebruikt door label_user: Gebruiker - label_user_activity: "{{value}}'s activiteit" - label_user_mail_no_self_notified: "Ik wil niet op de hoogte gehouden worden van wijzigingen die ik zelf maak." + label_user_activity: "%{value}'s activiteit" + label_user_mail_no_self_notified: Ik wil niet op de hoogte gehouden worden van mijn eigen wijzigingen label_user_mail_option_all: "Bij elk gebeurtenis in al mijn projecten..." label_user_mail_option_selected: "Enkel bij elke gebeurtenis op het geselecteerde project..." label_user_new: Nieuwe gebruiker @@ -596,16 +604,16 @@ label_workflow: Workflow label_year: Jaar label_yesterday: gisteren - mail_body_account_activation_request: "Een nieuwe gebruiker ({{value}}) is geregistreerd. Zijn account wacht op uw akkoord:" + mail_body_account_activation_request: "Een nieuwe gebruiker (%{value}) is geregistreerd. Zijn account wacht op uw akkoord:" mail_body_account_information: Uw account gegevens - mail_body_account_information_external: "U kunt uw account ({{value}}) gebruiken om in te loggen." + mail_body_account_information_external: "U kunt uw account (%{value}) gebruiken om in te loggen." mail_body_lost_password: 'Gebruik de volgende link om uw wachtwoord te wijzigen:' mail_body_register: 'Gebruik de volgende link om uw account te activeren:' - mail_body_reminder: "{{count}} issue(s) die aan u toegewezen zijn en voldaan moeten zijn in de komende {{days}} dagen:" - mail_subject_account_activation_request: "{{value}} accountactivatieverzoek" - mail_subject_lost_password: "uw {{value}} wachtwoord" - mail_subject_register: "uw {{value}} accountactivatie" - mail_subject_reminder: "{{count}} issue(s) die voldaan moeten zijn in de komende {{days}} dagen." + mail_body_reminder: "%{count} issue(s) die aan u toegewezen zijn en voldaan moeten zijn in de komende %{days} dagen:" + mail_subject_account_activation_request: "%{value} accountactivatieverzoek" + mail_subject_lost_password: "uw %{value} wachtwoord" + mail_subject_register: "uw %{value} accountactivatie" + mail_subject_reminder: "%{count} issue(s) die voldaan moeten zijn in de komende %{days} dagen." notice_account_activated: uw account is geactiveerd. u kunt nu inloggen. notice_account_invalid_creditentials: Incorrecte gebruikersnaam of wachtwoord notice_account_lost_email_sent: Er is een e-mail naar u verstuurd met instructies over het kiezen van een nieuw wachtwoord. @@ -617,9 +625,9 @@ notice_account_wrong_password: Incorrect wachtwoord notice_can_t_change_password: Dit account gebruikt een externe bron voor authenticatie. Het is niet mogelijk om het wachtwoord te veranderen. notice_default_data_loaded: Standaard configuratie succesvol geladen. - notice_email_error: "Er is een fout opgetreden tijdens het versturen van ({{value}})" - notice_email_sent: "Een e-mail werd verstuurd naar {{value}}" - notice_failed_to_save_issues: "Fout bij bewaren van {{count}} issue(s) ({{total}} geselecteerd): {{ids}}." + notice_email_error: "Er is een fout opgetreden tijdens het versturen van (%{value})" + notice_email_sent: "Een e-mail werd verstuurd naar %{value}" + notice_failed_to_save_issues: "Fout bij bewaren van %{count} issue(s) (%{total} geselecteerd): %{ids}." notice_feeds_access_key_reseted: Je RSS toegangssleutel werd gereset. notice_file_not_found: De pagina die u probeerde te benaderen bestaat niet of is verwijderd. notice_locking_conflict: De gegevens zijn gewijzigd door een andere gebruiker. @@ -694,7 +702,6 @@ setting_autologin: Automatisch inloggen setting_bcc_recipients: Blind carbon copy ontvangers (bcc) setting_commit_fix_keywords: Gefixeerde trefwoorden - setting_commit_logs_encoding: Encodering van commit berichten setting_commit_ref_keywords: Refererende trefwoorden setting_cross_project_issue_relations: Sta crossproject issuerelaties toe setting_date_format: Datumformaat @@ -713,7 +720,7 @@ setting_mail_from: Afzender e-mail adres setting_mail_handler_api_enabled: Schakel WS in voor inkomende mail. setting_mail_handler_api_key: API sleutel - setting_per_page_options: Objects per pagina-opties + setting_per_page_options: Aantal objecten per pagina (opties) setting_plain_text_mail: platte tekst (geen HTML) setting_protocol: Protocol setting_repositories_encodings: Repositories coderingen @@ -730,25 +737,25 @@ status_registered: geregistreerd text_are_you_sure: Weet u het zeker? text_assign_time_entries_to_project: Gerapporteerde uren toevoegen aan dit project - text_caracters_maximum: "{{count}} van maximum aantal tekens." - text_caracters_minimum: "Moet minstens {{count}} karakters lang zijn." + text_caracters_maximum: "%{count} van maximum aantal tekens." + text_caracters_minimum: "Moet minstens %{count} karakters lang zijn." text_comma_separated: Meerdere waarden toegestaan (kommagescheiden). text_default_administrator_account_changed: Standaard beheerderaccount gewijzigd 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_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. Mededelingen 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_enumeration_destroy_question: "%{count} objecten zijn toegewezen aan deze waarde." text_file_repository_writable: Bestandsrepository beschrijfbaar - text_issue_added: "Issue {{id}} is gerapporteerd (door {{author}})." + text_issue_added: "Issue %{id} is gerapporteerd (door %{author})." text_issue_category_destroy_assignments: Verwijder toewijzingen aan deze categorie - text_issue_category_destroy_question: "Er zijn issues ({{count}}) aan deze categorie toegewezen. Wat wilt u hiermee doen ?" + text_issue_category_destroy_question: "Er zijn issues (%{count}) aan deze categorie toegewezen. Wat wilt u hiermee doen ?" text_issue_category_reassign_to: Issues opnieuw toewijzen aan deze categorie - text_issue_updated: "Issue {{id}} is gewijzigd (door {{author}})." + text_issue_updated: "Issue %{id} is gewijzigd (door %{author})." text_issues_destroy_confirmation: 'Weet u zeker dat u deze issue(s) wil verwijderen?' text_issues_ref_in_commit_messages: Opzoeken en aanpassen van issues in commitberichten - text_length_between: "Lengte tussen {{min}} en {{max}} tekens." + text_length_between: "Lengte tussen %{min} en %{max} tekens." text_load_default_configuration: Laad de standaardconfiguratie text_min_max_length_info: 0 betekent geen restrictie text_no_configuration_data: "Rollen, trackers, issue statussen en workflows zijn nog niet geconfigureerd.\nHet is ten zeerste aangeraden om de standaard configuratie in te laden. U kunt deze aanpassen nadat deze is ingeladen." @@ -761,18 +768,18 @@ text_rmagick_available: RMagick beschikbaar (optioneel) text_select_mail_notifications: Selecteer acties waarvoor mededelingen via mail moeten worden verstuurd. text_select_project_modules: 'Selecteer de modules die u wilt gebruiken voor dit project:' - text_status_changed_by_changeset: "Toegepast in changeset {{value}}." - text_subprojects_destroy_warning: "De subprojecten: {{value}} zullen ook verwijderd worden." + text_status_changed_by_changeset: "Toegepast in changeset %{value}." + text_subprojects_destroy_warning: "De subprojecten: %{value} zullen ook verwijderd worden." text_tip_issue_begin_day: issue die op deze dag begint text_tip_issue_begin_end_day: issue die op deze dag begint en eindigt text_tip_issue_end_day: issue die op deze dag eindigt text_tracker_no_workflow: Geen workflow gedefinieerd voor deze tracker text_unallowed_characters: Niet toegestane tekens - text_user_mail_option: "Bij niet-geselecteerde projecten zult u enkel notificaties ontvangen voor issues die u monitort of waar u bij betrokken bent (als auteur of toegewezen persoon)." - text_user_wrote: "{{value}} schreef:" + text_user_mail_option: "Bij niet-geselecteerde projecten zult u enkel mededelingen ontvangen voor issues die u monitort of waar u bij betrokken bent (als auteur of toegewezen persoon)." + text_user_wrote: "%{value} schreef:" text_wiki_destroy_confirmation: Weet u zeker dat u deze wiki en zijn inhoud wenst te verwijderen? text_workflow_edit: Selecteer een rol en een tracker om de workflow te wijzigen - warning_attachments_not_saved: "{{count}} bestand(en) konden niet opgeslagen worden." + warning_attachments_not_saved: "%{count} bestand(en) konden niet opgeslagen worden." button_create_and_continue: Maak en ga verder text_custom_field_possible_values_info: 'Per lijn een waarde' label_display: Toon @@ -787,21 +794,21 @@ label_descending: Aflopend label_sort: Sorteer label_ascending: Oplopend - label_date_from_to: Van {{start}} tot {{end}} + label_date_from_to: Van %{start} tot %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: Deze pagina heeft {{descendants}} subpagina's en onderliggende pagina's?. Wil wil je ermee doen? + text_wiki_page_destroy_question: Deze pagina heeft %{descendants} subpagina's en onderliggende pagina's?. Wat wilt u hiermee doen? text_wiki_page_reassign_children: Alle subpagina's toewijzen aan deze hoofdpagina text_wiki_page_nullify_children: Behoud subpagina's als hoofdpagina's text_wiki_page_destroy_children: Verwijder alle subpagina's en onderliggende pagina's setting_password_min_length: Minimum wachtwoord lengte field_group_by: Groepeer resultaten per - mail_subject_wiki_content_updated: "'{{id}}' wiki pagina is bijgewerkt" + mail_subject_wiki_content_updated: "'%{id}' wiki pagina is bijgewerkt" label_wiki_content_added: Wiki pagina toegevoegd - mail_subject_wiki_content_added: "'{{id}}' wiki pagina is toegevoegd" - mail_body_wiki_content_added: The '{{id}}' wiki pagina is toegevoegd door {{author}}. + mail_subject_wiki_content_added: "'%{id}' wiki pagina is toegevoegd" + mail_body_wiki_content_added: De '%{id}' wiki pagina is toegevoegd door %{author}. label_wiki_content_updated: Wiki pagina bijgewerkt - mail_body_wiki_content_updated: The '{{id}}' wiki pagina is bijgewerkt door {{author}}. + mail_body_wiki_content_updated: De '%{id}' wiki pagina is bijgewerkt door %{author}. permission_add_project: Maak project setting_new_project_user_role_id: Rol van gebruiker die een project maakt label_view_all_revisions: Bekijk alle revisies @@ -809,14 +816,14 @@ label_branch: Branch error_no_tracker_in_project: Geen tracker is geassocieerd met dit project. Check de project instellingen. error_no_default_issue_status: Geen standaard issue status ingesteld. Check de configuratie (Ga naar "Administratie -> Issue statussen"). - text_journal_changed: "{{label}} gewijzigd van {{old}} naar {{new}}" - text_journal_set_to: "{{label}} gewijzigd naar {{value}}" - text_journal_deleted: "{{label}} verwijderd ({{old}})" + text_journal_changed: "%{label} gewijzigd van %{old} naar %{new}" + text_journal_set_to: "%{label} gewijzigd naar %{value}" + text_journal_deleted: "%{label} verwijderd (%{old})" label_group_plural: Groepen label_group: Groep label_group_new: Nieuwe groep label_time_entry_plural: Bestede tijd - text_journal_added: "{{label}} {{value}} toegevoegd" + text_journal_added: "%{label} %{value} toegevoegd" field_active: Actief enumeration_system_activity: Systeem Activiteit permission_delete_issue_watchers: Verwijder volgers @@ -851,9 +858,9 @@ setting_start_of_week: Week begint op permission_view_issues: Bekijk Issues label_display_used_statuses_only: Laat alleen statussen zien die gebruikt worden door deze tracker - label_revision_id: Revisie {{value}} + label_revision_id: Revisie %{value} label_api_access_key: API access key - label_api_access_key_created_on: API access key gemaakt {{value}} geleden + label_api_access_key_created_on: API access key gemaakt %{value} geleden label_feeds_access_key: RSS access key notice_api_access_key_reseted: Uw API access key was gereset. setting_rest_api_enabled: Activeer REST web service @@ -880,32 +887,74 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Stuur email notificaties voor de project kopie error_can_not_delete_custom_field: Verwijderen niet mogelijk van custom field - error_unable_to_connect: Geen connectie ({{value}}) + error_unable_to_connect: Geen connectie (%{value}) error_can_not_remove_role: Deze rol is in gebruik en kan niet worden verwijderd. error_can_not_delete_tracker: Deze tracker bevat nog issues en kan niet worden verwijderd. field_principal: Principal label_my_page_block: Mijn pagina block - notice_failed_to_save_members: "Niet gelukt om lid/leden op te slaan: {{errors}}." + notice_failed_to_save_members: "Niet gelukt om lid/leden op te slaan: %{errors}." text_zoom_out: Zoom uit text_zoom_in: Zoom in notice_unable_delete_time_entry: Verwijderen niet mogelijk van tijd log invoer. label_overall_spent_time: Totaal bestede tijd - field_time_entries: Log tijd + field_time_entries: Registreer tijd project_module_gantt: Gantt project_module_calendar: Kalender - 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 + button_edit_associated_wikipage: "Bewerk bijbehorende wiki pagina: %{page_title}" + text_are_you_sure_with_children: Verwijder issue en alle onderliggende issues? + field_text: Tekst veld + label_user_mail_option_only_owner: Alleen voor dingen waarvan ik de auteur ben + setting_default_notification_option: Standaard instelling voor mededelingen + label_user_mail_option_only_my_events: Alleen voor dingen die ik volg of bij betrokken ben + label_user_mail_option_only_assigned: Alleen voor dingen die aan mij zijn toegewezen + label_user_mail_option_none: Bij geen enkele gebeurtenis 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. - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible + notice_not_authorized_archived_project: Het project dat u wilt bezoeken is gearchiveerd. + label_principal_search: "Zoek naar gebruiker of groep:" + label_user_search: "Zoek naar gebruiker:" + field_visible: Zichtbaar setting_emails_header: Emails header + setting_commit_logtime_activity_id: Standaard activiteit voor tijdregistratie + text_time_logged_by_changeset: Toegepast in changeset %{value}. + setting_commit_logtime_enabled: Activeer tijdregistratie + notice_gantt_chart_truncated: De gantt chart is ingekort omdat het meer objecten bevat dan kan worden weergegeven, (%{max}) + setting_gantt_items_limit: Max. aantal objecten op gantt chart + field_warn_on_leaving_unsaved: Waarschuw me wanneer ik een pagina verlaat waarvan de tekst niet opgeslagen is + text_warn_on_leaving_unsaved: De huidige pagina bevat tekst die niet is opgeslagen en dit zal verloren gaan als u deze pagina nu verlaat. + label_my_queries: Mijn aangepaste zoekopdrachten + text_journal_changed_no_detail: "%{label} updated" + label_news_comment_added: Commentaar toegevoegd aan een nieuwsitem + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Encodering van commit berichten + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/no.yml.svn-base --- a/config/locales/.svn/text-base/no.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/no.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -13,7 +13,10 @@ abbr_day_names: [søn, man, tir, ons, tor, fre, lør] month_names: [~, januar, februar, mars, april, mai, juni, juli, august, september, oktober, november, desember] abbr_month_names: [~, jan, feb, mar, apr, mai, jun, jul, aug, sep, okt, nov, des] - order: [:day, :month, :year] + order: + - :day + - :month + - :year time: formats: default: "%A, %e. %B %Y, %H:%M" @@ -27,37 +30,37 @@ half_a_minute: "et halvt minutt" less_than_x_seconds: one: "mindre enn 1 sekund" - other: "mindre enn {{count}} sekunder" + other: "mindre enn %{count} sekunder" x_seconds: one: "1 sekund" - other: "{{count}} sekunder" + other: "%{count} sekunder" less_than_x_minutes: one: "mindre enn 1 minutt" - other: "mindre enn {{count}} minutter" + other: "mindre enn %{count} minutter" x_minutes: one: "1 minutt" - other: "{{count}} minutter" + other: "%{count} minutter" about_x_hours: one: "rundt 1 time" - other: "rundt {{count}} timer" + other: "rundt %{count} timer" x_days: one: "1 dag" - other: "{{count}} dager" + other: "%{count} dager" about_x_months: one: "rundt 1 måned" - other: "rundt {{count}} måneder" + other: "rundt %{count} måneder" x_months: one: "1 måned" - other: "{{count}} måneder" + other: "%{count} måneder" about_x_years: one: "rundt 1 år" - other: "rundt {{count}} år" + other: "rundt %{count} år" over_x_years: one: "over 1 år" - other: "over {{count}} år" + other: "over %{count} år" almost_x_years: one: "nesten 1 år" - other: "nesten {{count}} år" + other: "nesten %{count} år" number: format: precision: 2 @@ -86,7 +89,7 @@ activerecord: errors: template: - header: "kunne ikke lagre {{model}} på grunn av {{count}} feil." + header: "kunne ikke lagre %{model} på grunn av %{count} feil." body: "det oppstod problemer i følgende felt:" messages: inclusion: "er ikke inkludert i listen" @@ -96,16 +99,16 @@ accepted: "må være akseptert" empty: "kan ikke være tom" blank: "kan ikke være blank" - too_long: "er for lang (maksimum {{count}} tegn)" - too_short: "er for kort (minimum {{count}} tegn)" - wrong_length: "er av feil lengde (maksimum {{count}} tegn)" + too_long: "er for lang (maksimum %{count} tegn)" + too_short: "er for kort (minimum %{count} tegn)" + wrong_length: "er av feil lengde (maksimum %{count} tegn)" taken: "er allerede i bruk" not_a_number: "er ikke et tall" - greater_than: "må være større enn {{count}}" - greater_than_or_equal_to: "må være større enn eller lik {{count}}" - equal_to: "må være lik {{count}}" - less_than: "må være mindre enn {{count}}" - less_than_or_equal_to: "må være mindre enn eller lik {{count}}" + greater_than: "må være større enn %{count}" + greater_than_or_equal_to: "må være større enn eller lik %{count}" + equal_to: "må være lik %{count}" + less_than: "må være mindre enn %{count}" + less_than_or_equal_to: "må være mindre enn eller lik %{count}" odd: "må være oddetall" even: "må være partall" greater_than_start_date: "må være større enn startdato" @@ -124,7 +127,7 @@ general_csv_separator: ',' general_csv_decimal_separator: '.' general_csv_encoding: ISO-8859-1 - general_pdf_encoding: ISO-8859-1 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' notice_account_updated: Kontoen er oppdatert. @@ -143,33 +146,33 @@ notice_file_not_found: Siden du forsøkte å vise eksisterer ikke, eller er slettet. notice_locking_conflict: Data har blitt oppdatert av en annen bruker. notice_not_authorized: Du har ikke adgang til denne siden. - notice_email_sent: "En e-post er sendt til {{value}}" - notice_email_error: "En feil oppstod under sending av e-post ({{value}})" + notice_email_sent: "En e-post er sendt til %{value}" + notice_email_error: "En feil oppstod under sending av e-post (%{value})" notice_feeds_access_key_reseted: Din RSS-tilgangsnøkkel er nullstilt. - notice_failed_to_save_issues: "Lykkes ikke å lagre {{count}} sak(er) på {{total}} valgt: {{ids}}." + notice_failed_to_save_issues: "Lykkes ikke å lagre %{count} sak(er) på %{total} valgt: %{ids}." notice_no_issue_selected: "Ingen sak valgt! Vennligst merk sakene du vil endre." notice_account_pending: "Din konto ble opprettet og avventer nå administrativ godkjenning." notice_default_data_loaded: Standardkonfigurasjonen lastet inn. - error_can_t_load_default_data: "Standardkonfigurasjonen kunne ikke lastes inn: {{value}}" + error_can_t_load_default_data: "Standardkonfigurasjonen kunne ikke lastes inn: %{value}" error_scm_not_found: "Elementet og/eller revisjonen eksisterer ikke i depoet." - error_scm_command_failed: "En feil oppstod under tilkobling til depoet: {{value}}" + error_scm_command_failed: "En feil oppstod under tilkobling til depoet: %{value}" error_scm_annotate: "Elementet eksisterer ikke, eller kan ikke noteres." error_issue_not_found_in_project: 'Saken eksisterer ikke, eller hører ikke til dette prosjektet' - mail_subject_lost_password: "Ditt {{value}} passord" + mail_subject_lost_password: "Ditt %{value} passord" mail_body_lost_password: 'Klikk følgende lenke for å endre ditt passord:' - mail_subject_register: "{{value}} kontoaktivering" + mail_subject_register: "%{value} kontoaktivering" mail_body_register: 'Klikk følgende lenke for å aktivere din konto:' - mail_body_account_information_external: "Du kan bruke din {{value}}-konto for å logge inn." + mail_body_account_information_external: "Du kan bruke din %{value}-konto for å logge inn." mail_body_account_information: Informasjon om din konto - mail_subject_account_activation_request: "{{value}} kontoaktivering" - mail_body_account_activation_request: "En ny bruker ({{value}}) er registrert, og avventer din godkjenning:" - mail_subject_reminder: "{{count}} sak(er) har frist de kommende {{days}} dagene" - mail_body_reminder: "{{count}} sak(er) som er tildelt deg har frist de kommende {{days}} dager:" + mail_subject_account_activation_request: "%{value} kontoaktivering" + mail_body_account_activation_request: "En ny bruker (%{value}) er registrert, og avventer din godkjenning:" + mail_subject_reminder: "%{count} sak(er) har frist de kommende %{days} dagene" + mail_body_reminder: "%{count} sak(er) som er tildelt deg har frist de kommende %{days} dager:" gui_validation_error: 1 feil - gui_validation_error_plural: "{{count}} feil" + gui_validation_error_plural: "%{count} feil" field_name: Navn field_description: Beskrivelse @@ -231,7 +234,8 @@ field_attr_lastname: Etternavnsattributt field_attr_mail: E-post-attributt field_onthefly: On-the-fly brukeropprettelse - field_done_ratio: % Ferdig + field_start_date: Start + field_done_ratio: "% Ferdig" field_auth_source: Autentifikasjonsmodus field_hide_mail: Skjul min e-post-adresse field_comments: Kommentarer @@ -305,14 +309,14 @@ label_x_projects: zero: ingen prosjekter one: 1 prosjekt - other: "{{count}} prosjekter" + other: "%{count} prosjekter" label_project_all: Alle prosjekter label_project_latest: Siste prosjekter label_issue: Sak label_issue_new: Ny sak label_issue_plural: Saker label_issue_view_all: Vis alle saker - label_issues_by: "Saker etter {{value}}" + label_issues_by: "Saker etter %{value}" label_issue_added: Sak lagt til label_issue_updated: Sak oppdatert label_document: Dokument @@ -368,7 +372,7 @@ label_auth_source_new: Ny autentifikasjonmodus label_auth_source_plural: Autentifikasjonsmoduser label_subproject_plural: Underprosjekter - label_and_its_subprojects: "{{value}} og dets underprosjekter" + label_and_its_subprojects: "%{value} og dets underprosjekter" label_min_max_length: Min.-maks. lengde label_list: Liste label_date: Dato @@ -379,8 +383,8 @@ label_text: Lang tekst label_attribute: Attributt label_attribute_plural: Attributter - label_download: "{{count}} Nedlasting" - label_download_plural: "{{count}} Nedlastinger" + label_download: "%{count} Nedlasting" + label_download_plural: "%{count} Nedlastinger" label_no_data: Ingen data å vise label_change_status: Endre status label_history: Historikk @@ -411,17 +415,17 @@ label_closed_issues: lukket label_closed_issues_plural: lukkede label_x_open_issues_abbr_on_total: - zero: 0 åpne / {{total}} - one: 1 åpen / {{total}} - other: "{{count}} åpne / {{total}}" + zero: 0 åpne / %{total} + one: 1 åpen / %{total} + other: "%{count} åpne / %{total}" label_x_open_issues_abbr: zero: 0 åpne one: 1 åpen - other: "{{count}} åpne" + other: "%{count} åpne" label_x_closed_issues_abbr: zero: 0 lukka one: 1 lukka - other: "{{count}} lukka" + other: "%{count} lukka" label_total: Totalt label_permissions: Godkjenninger label_current_status: Nåværende status @@ -439,7 +443,7 @@ label_months_from: måneder fra label_gantt: Gantt label_internal: Intern - label_last_changes: "siste {{count}} endringer" + label_last_changes: "siste %{count} endringer" label_change_view_all: Vis alle endringer label_personalize_page: Tilpass denne siden label_comment: Kommentar @@ -447,7 +451,7 @@ label_x_comments: zero: no kommentarer one: 1 kommentar - other: "{{count}} kommentarer" + other: "%{count} kommentarer" label_comment_add: Legg til kommentar label_comment_added: Kommentar lagt til label_comment_delete: Slett kommentar @@ -466,7 +470,7 @@ label_yesterday: i går label_this_week: denne uken label_last_week: sist uke - label_last_n_days: "siste {{count}} dager" + label_last_n_days: "siste %{count} dager" label_this_month: denne måneden label_last_month: siste måned label_this_year: dette året @@ -480,8 +484,8 @@ label_repository: Depot label_repository_plural: Depoter label_browse: Utforsk - label_modification: "{{count}} endring" - label_modification_plural: "{{count}} endringer" + label_modification: "%{count} endring" + label_modification_plural: "%{count} endringer" label_revision: Revisjon label_revision_plural: Revisjoner label_associated_revisions: Assosierte revisjoner @@ -497,8 +501,8 @@ label_sort_lower: Flytt ned label_sort_lowest: Flytt til bunnen label_roadmap: Veikart - label_roadmap_due_in: "Frist om {{value}}" - label_roadmap_overdue: "{{value}} over fristen" + label_roadmap_due_in: "Frist om %{value}" + label_roadmap_overdue: "%{value} over fristen" label_roadmap_no_issues: Ingen saker for denne versjonen label_search: Søk label_result_plural: Resultater @@ -516,8 +520,8 @@ label_changes_details: Detaljer om alle endringer label_issue_tracking: Sakssporing label_spent_time: Brukt tid - label_f_hour: "{{value}} time" - label_f_hour_plural: "{{value}} timer" + label_f_hour: "%{value} time" + label_f_hour_plural: "%{value} timer" label_time_tracking: Tidssporing label_change_plural: Endringer label_statistics: Statistikk @@ -566,12 +570,12 @@ label_date_from: Fra label_date_to: Til label_language_based: Basert på brukerens språk - label_sort_by: "Sorter etter {{value}}" + label_sort_by: "Sorter etter %{value}" label_send_test_email: Send en e-post-test - label_feeds_access_key_created_on: "RSS tilgangsnøkkel opprettet for {{value}} siden" + label_feeds_access_key_created_on: "RSS tilgangsnøkkel opprettet for %{value} siden" label_module_plural: Moduler - label_added_time_by: "Lagt til av {{author}} for {{age}} siden" - label_updated_time: "Oppdatert for {{value}} siden" + label_added_time_by: "Lagt til av %{author} for %{age} siden" + label_updated_time: "Oppdatert for %{value} siden" label_jump_to_a_project: Gå til et prosjekt... label_file_plural: Filer label_changeset_plural: Endringssett @@ -587,7 +591,7 @@ label_registration_activation_by_email: kontoaktivering pr. e-post label_registration_manual_activation: manuell kontoaktivering label_registration_automatic_activation: automatisk kontoaktivering - label_display_per_page: "Pr. side: {{value}}" + label_display_per_page: "Pr. side: %{value}" label_age: Alder label_change_properties: Endre egenskaper label_general: Generell @@ -649,40 +653,40 @@ text_regexp_info: eg. ^[A-Z0-9]+$ text_min_max_length_info: 0 betyr ingen begrensning text_project_destroy_confirmation: Er du sikker på at du vil slette dette prosjekter og alle relatert data ? - text_subprojects_destroy_warning: "Underprojekt(ene): {{value}} vil også bli slettet." + text_subprojects_destroy_warning: "Underprojekt(ene): %{value} vil også bli slettet." text_workflow_edit: Velg en rolle og en sakstype for å endre arbeidsflyten text_are_you_sure: Er du sikker ? text_tip_issue_begin_day: oppgaven starter denne dagen text_tip_issue_end_day: oppgaven avsluttes denne dagen text_tip_issue_begin_end_day: oppgaven starter og avsluttes denne dagen text_project_identifier_info: 'Små bokstaver (a-z), nummer og bindestrek tillatt.
    Identifikatoren kan ikke endres etter den er lagret.' - text_caracters_maximum: "{{count}} tegn maksimum." - text_caracters_minimum: "Må være minst {{count}} tegn langt." - text_length_between: "Lengde mellom {{min}} og {{max}} tegn." + text_caracters_maximum: "%{count} tegn maksimum." + text_caracters_minimum: "Må være minst %{count} tegn langt." + text_length_between: "Lengde mellom %{min} og %{max} tegn." text_tracker_no_workflow: Ingen arbeidsflyt definert for denne sakstypen text_unallowed_characters: Ugyldige tegn text_comma_separated: Flere verdier tillat (kommaseparert). text_issues_ref_in_commit_messages: Referering og retting av saker i innsendingsmelding - text_issue_added: "Issue {{id}} has been reported by {{author}}." - text_issue_updated: "Issue {{id}} has been updated by {{author}}." + text_issue_added: "Issue %{id} has been reported by %{author}." + text_issue_updated: "Issue %{id} has been updated by %{author}." text_wiki_destroy_confirmation: Er du sikker på at du vil slette denne wikien og alt innholdet ? - text_issue_category_destroy_question: "Noen saker ({{count}}) er lagt til i denne kategorien. Hva vil du gjøre ?" + text_issue_category_destroy_question: "Noen saker (%{count}) er lagt til i denne kategorien. Hva vil du gjøre ?" text_issue_category_destroy_assignments: Fjern bruk av kategorier text_issue_category_reassign_to: Overfør sakene til denne kategorien text_user_mail_option: "For ikke-valgte prosjekter vil du bare motta varsling om ting du overvåker eller er involveret i (eks. saker du er forfatter av eller er tildelt)." text_no_configuration_data: "Roller, arbeidsflyt, sakstyper og -statuser er ikke konfigurert enda.\nDet anbefales sterkt å laste inn standardkonfigurasjonen. Du vil kunne endre denne etter den er innlastet." text_load_default_configuration: Last inn standardkonfigurasjonen - text_status_changed_by_changeset: "Brukt i endringssett {{value}}." + text_status_changed_by_changeset: "Brukt i endringssett %{value}." text_issues_destroy_confirmation: 'Er du sikker på at du vil slette valgte sak(er) ?' text_select_project_modules: 'Velg moduler du vil aktivere for dette prosjektet:' text_default_administrator_account_changed: Standard administrator-konto er endret text_file_repository_writable: Fil-arkivet er skrivbart text_rmagick_available: RMagick er tilgjengelig (valgfritt) - text_destroy_time_entries_question: "{{hours}} timer er ført på sakene du er i ferd med å slette. Hva vil du gjøre ?" + text_destroy_time_entries_question: "%{hours} timer er ført på sakene du er i ferd med å slette. Hva vil du gjøre ?" text_destroy_time_entries: Slett førte timer text_assign_time_entries_to_project: Overfør førte timer til prosjektet text_reassign_time_entries: 'Overfør førte timer til denne saken:' - text_user_wrote: "{{value}} skrev:" + text_user_wrote: "%{value} skrev:" default_role_manager: Leder default_role_developer: Utvikler @@ -710,15 +714,14 @@ enumeration_doc_categories: Dokument-kategorier enumeration_activities: Aktiviteter (tidssporing) text_enumeration_category_reassign_to: 'Endre dem til denne verdien:' - text_enumeration_destroy_question: "{{count}} objekter er endret til denne verdien." + text_enumeration_destroy_question: "%{count} objekter er endret til denne verdien." label_incoming_emails: Innkommende e-post 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 button_quote: Sitat setting_sequential_project_identifiers: Generer sekvensielle prosjekt-IDer notice_unable_delete_version: Kan ikke slette versjonen @@ -776,12 +779,12 @@ 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: Edit own messages permission_delete_own_messages: Delete own messages - label_user_activity: "{{value}}'s activity" - label_updated_time_by: "Updated by {{author}} {{age}} ago" + label_user_activity: "%{value}'s activity" + label_updated_time_by: "Updated by %{author} %{age} ago" text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' setting_diff_max_lines_displayed: Max number of diff lines displayed text_plugin_assets_writable: Plugin assets directory writable - warning_attachments_not_saved: "{{count}} file(s) could not be saved." + warning_attachments_not_saved: "%{count} file(s) could not be saved." button_create_and_continue: Create and continue text_custom_field_possible_values_info: 'One line for each value' label_display: Display @@ -796,21 +799,21 @@ label_descending: Descending label_sort: Sort label_ascending: Ascending - label_date_from_to: From {{start}} to {{end}} + label_date_from_to: From %{start} to %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? + text_wiki_page_destroy_question: This page has %{descendants} child page(s) and descendant(s). What do you want to do? text_wiki_page_reassign_children: Reassign child pages to this parent page text_wiki_page_nullify_children: Keep child pages as root pages text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated" label_wiki_content_added: Wiki page added - 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_added: "'%{id}' wiki page has been added" + mail_body_wiki_content_added: The '%{id}' wiki page has been added by %{author}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '%{id}' wiki page has been updated by %{author}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -818,14 +821,14 @@ label_branch: Branch 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"). - 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_changed: "%{label} changed from %{old} to %{new}" + text_journal_set_to: "%{label} set to %{value}" + text_journal_deleted: "%{label} deleted (%{old})" label_group_plural: Groups label_group: Group label_group_new: New group label_time_entry_plural: Spent time - text_journal_added: "{{label}} {{value}} added" + text_journal_added: "%{label} %{value} added" field_active: Active enumeration_system_activity: System Activity permission_delete_issue_watchers: Delete watchers @@ -860,9 +863,9 @@ setting_start_of_week: Start calendars on permission_view_issues: View Issues label_display_used_statuses_only: Only display statuses that are used by this tracker - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_api_access_key: API access key - label_api_access_key_created_on: API access key created {{value}} ago + label_api_access_key_created_on: API access key created %{value} ago label_feeds_access_key: RSS access key notice_api_access_key_reseted: Your API access key was reset. setting_rest_api_enabled: Enable REST web service @@ -889,12 +892,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -902,7 +905,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -913,8 +916,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Tegnkoding for innsendingsmeldinger + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/pl.yml.svn-base --- a/config/locales/.svn/text-base/pl.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/pl.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -45,7 +45,10 @@ month_names: [~, Styczeń, Luty, Marzec, Kwiecień, Maj, Czerwiec, Lipiec, Sierpień, Wrzesień, Październik, Listopad, Grudzień] abbr_month_names: [~, sty, lut, mar, kwi, maj, cze, lip, sie, wrz, paź, lis, gru] - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -61,50 +64,50 @@ half_a_minute: "pół minuty" less_than_x_seconds: one: "mniej niż sekundę" - few: "mniej niż {{count}} sekundy" - other: "mniej niż {{count}} sekund" + few: "mniej niż %{count} sekundy" + other: "mniej niż %{count} sekund" x_seconds: one: "sekundę" - few: "{{count}} sekundy" - other: "{{count}} sekund" + few: "%{count} sekundy" + other: "%{count} sekund" less_than_x_minutes: one: "mniej niż minutę" - few: "mniej niż {{count}} minuty" - other: "mniej niż {{count}} minut" + few: "mniej niż %{count} minuty" + other: "mniej niż %{count} minut" x_minutes: one: "minutę" - few: "{{count}} minuty" - other: "{{count}} minut" + few: "%{count} minuty" + other: "%{count} minut" about_x_hours: one: "około godziny" - other: "około {{count}} godzin" + other: "około %{count} godzin" x_days: one: "1 dzień" - other: "{{count}} dni" + other: "%{count} dni" about_x_months: one: "około miesiąca" - other: "około {{count}} miesięcy" + other: "około %{count} miesięcy" x_months: one: "1 miesiąc" - few: "{{count}} miesiące" - other: "{{count}} miesięcy" + few: "%{count} miesiące" + other: "%{count} miesięcy" about_x_years: one: "około roku" - other: "około {{count}} lat" + other: "około %{count} lat" over_x_years: one: "ponad rok" - few: "ponad {{count}} lata" - other: "ponad {{count}} lat" + few: "ponad %{count} lata" + other: "ponad %{count} lat" almost_x_years: one: "prawie rok" - other: "prawie {{count}} lata" + other: "prawie %{count} lata" activerecord: errors: template: header: - one: "{{model}} nie został zachowany z powodu jednego błędu" - other: "{{model}} nie został zachowany z powodu {{count}} błędów" + one: "%{model} nie został zachowany z powodu jednego błędu" + other: "%{model} nie został zachowany z powodu %{count} błędów" body: "Błędy dotyczą następujących pól:" messages: inclusion: "nie znajduje się na liście dopuszczalnych wartości" @@ -114,16 +117,16 @@ accepted: "musi być zaakceptowane" empty: "nie może być puste" blank: "nie może być puste" - too_long: "jest za długie (maksymalnie {{count}} znaków)" - too_short: "jest za krótkie (minimalnie {{count}} znaków)" - wrong_length: "jest nieprawidłowej długości (powinna wynosić {{count}} znaków)" + too_long: "jest za długie (maksymalnie %{count} znaków)" + too_short: "jest za krótkie (minimalnie %{count} znaków)" + wrong_length: "jest nieprawidłowej długości (powinna wynosić %{count} znaków)" taken: "jest już zajęte" not_a_number: "nie jest liczbą" - greater_than: "musi być większe niż {{count}}" - greater_than_or_equal_to: "musi być większe lub równe {{count}}" - equal_to: "musi być równe {{count}}" - less_than: "musi być mniejsze niż {{count}}" - less_than_or_equal_to: "musi być mniejsze lub równe {{count}}" + greater_than: "musi być większe niż %{count}" + greater_than_or_equal_to: "musi być większe lub równe %{count}" + equal_to: "musi być równe %{count}" + less_than: "musi być mniejsze niż %{count}" + less_than_or_equal_to: "musi być mniejsze lub równe %{count}" odd: "musi być nieparzyste" even: "musi być parzyste" greater_than_start_date: "musi być większe niż początkowa data" @@ -203,10 +206,10 @@ enumeration_activities: Działania (śledzenie czasu) enumeration_doc_categories: Kategorie dokumentów enumeration_issue_priorities: Priorytety zagadnień - error_can_t_load_default_data: "Domyślna konfiguracja nie może być załadowana: {{value}}" + error_can_t_load_default_data: "Domyślna konfiguracja nie może być załadowana: %{value}" error_issue_not_found_in_project: 'Zaganienie nie zostało znalezione lub nie należy do tego projektu' error_scm_annotate: "Wpis nie istnieje lub nie można do niego dodawać adnotacji." - error_scm_command_failed: "Wystąpił błąd przy próbie dostępu do repozytorium: {{value}}" + error_scm_command_failed: "Wystąpił błąd przy próbie dostępu do repozytorium: %{value}" error_scm_not_found: "Obiekt lub wersja nie zostały znalezione w repozytorium." field_account: Konto field_activity: Aktywność @@ -228,7 +231,7 @@ field_default_value: Domyślny field_delay: Opóźnienie field_description: Opis - field_done_ratio: % Wykonane + field_done_ratio: "% Wykonane" field_downloads: Pobrań field_due_date: Data oddania field_effective_date: Data @@ -277,6 +280,7 @@ field_role: Rola field_searchable: Przeszukiwalne field_spent_on: Data + field_start_date: Start field_start_page: Strona startowa field_status: Status field_subject: Temat @@ -293,9 +297,9 @@ field_version: Wersja field_vf_personnel: Personel field_vf_watcher: Obserwator - general_csv_decimal_separator: '.' + general_csv_decimal_separator: ',' general_csv_encoding: UTF-8 - general_csv_separator: ',' + general_csv_separator: ';' general_first_day_of_week: '1' general_lang_name: 'Polski' general_pdf_encoding: UTF-8 @@ -304,21 +308,21 @@ general_text_no: 'nie' general_text_yes: 'tak' gui_validation_error: 1 błąd - gui_validation_error_plural234: "{{count}} błędy" - gui_validation_error_plural5: "{{count}} błędów" - gui_validation_error_plural: "{{count}} błędów" + gui_validation_error_plural234: "%{count} błędy" + gui_validation_error_plural5: "%{count} błędów" + gui_validation_error_plural: "%{count} błędów" label_activity: Aktywność label_add_another_file: Dodaj kolejny plik label_add_note: Dodaj notatkę label_added: dodane - label_added_time_by: "Dodane przez {{author}} {{age}} temu" + label_added_time_by: "Dodane przez %{author} %{age} temu" label_administration: Administracja label_age: Wiek label_ago: dni temu label_all: wszystko label_all_time: cały czas label_all_words: Wszystkie słowa - label_and_its_subprojects: "{{value}} i podprojekty" + label_and_its_subprojects: "%{value} i podprojekty" label_applied_status: Stosowany status label_assigned_to_me_issues: Zagadnienia przypisane do mnie label_associated_revisions: Skojarzone rewizje @@ -333,7 +337,7 @@ label_auth_source_plural: Tryby identyfikacji label_authentication: Identyfikacja label_blocked_by: zablokowane przez - label_blocks: blokady + label_blocks: blokuje label_board: Forum label_board_new: Nowe forum label_board_plural: Fora @@ -353,17 +357,17 @@ label_closed_issues_plural5: zamknięte label_closed_issues_plural: zamknięte label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{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" + other: "%{count} open" label_x_closed_issues_abbr: zero: 0 closed one: 1 closed - other: "{{count}} closed" + other: "%{count} closed" label_comment: Komentarz label_comment_add: Dodaj komentarz label_comment_added: Komentarz dodany @@ -374,7 +378,7 @@ label_x_comments: zero: no comments one: 1 comment - other: "{{count}} comments" + other: "%{count} comments" label_commits_per_author: Zatwierdzenia według autorów label_commits_per_month: Zatwierdzenia według miesięcy label_confirmation: Potwierdzenie @@ -398,18 +402,18 @@ label_diff_inline: w linii label_diff_side_by_side: obok siebie label_disabled: zablokowany - label_display_per_page: "Na stronę: {{value}}" + label_display_per_page: "Na stronę: %{value}" label_document: Dokument label_document_added: Dodano dokument label_document_new: Nowy dokument label_document_plural: Dokumenty - label_download: "{{count}} Pobranie" - label_download_plural234: "{{count}} Pobrania" - label_download_plural5: "{{count}} Pobrań" - label_download_plural: "{{count}} Pobrania" + label_download: "%{count} Pobranie" + label_download_plural234: "%{count} Pobrania" + label_download_plural5: "%{count} Pobrań" + label_download_plural: "%{count} Pobrania" label_downloads_abbr: Pobieranie label_duplicated_by: zduplikowane przez - label_duplicates: duplikaty + label_duplicates: duplikuje label_end_to_end: koniec do końca label_end_to_start: koniec do początku label_enumeration_new: Nowa wartość @@ -418,10 +422,10 @@ label_equals: równa się label_example: Przykład label_export_to: Eksportuj do - label_f_hour: "{{value}} godzina" - label_f_hour_plural: "{{value}} godzin" + label_f_hour: "%{value} godzina" + label_f_hour_plural: "%{value} godzin" label_feed_plural: Ilość RSS - label_feeds_access_key_created_on: "Klucz dostępu RSS stworzony {{value}} dni temu" + label_feeds_access_key_created_on: "Klucz dostępu RSS stworzony %{value} dni temu" label_file_added: Dodano plik label_file_plural: Pliki label_filter_add: Dodaj filtr @@ -458,13 +462,13 @@ label_issue_updated: Uaktualniono zagadnienie label_issue_view_all: Zobacz wszystkie zagadnienia label_issue_watchers: Obserwatorzy - label_issues_by: "Zagadnienia wprowadzone przez {{value}}" + label_issues_by: "Zagadnienia wprowadzone przez %{value}" label_jump_to_a_project: Skocz do projektu... label_language_based: Na podstawie języka - label_last_changes: "ostatnie {{count}} zmian" + label_last_changes: "ostatnie %{count} zmian" label_last_login: Ostatnie połączenie label_last_month: ostatni miesiąc - label_last_n_days: "ostatnie {{count}} dni" + label_last_n_days: "ostatnie %{count} dni" label_last_week: ostatni tydzień label_latest_revision: Najnowsza rewizja label_latest_revision_plural: Najnowsze rewizje @@ -485,10 +489,10 @@ label_message_plural: Wiadomości label_message_posted: Dodano wiadomość label_min_max_length: Min - Maks długość - label_modification: "{{count}} modyfikacja" - label_modification_plural234: "{{count}} modyfikacje" - label_modification_plural5: "{{count}} modyfikacji" - label_modification_plural: "{{count}} modyfikacje" + label_modification: "%{count} modyfikacja" + label_modification_plural234: "%{count} modyfikacje" + label_modification_plural5: "%{count} modyfikacji" + label_modification_plural: "%{count} modyfikacje" label_modified: zmodyfikowane label_module_plural: Moduły label_month: Miesiąc @@ -543,7 +547,7 @@ label_x_projects: zero: brak projektów one: jeden projekt - other: "{{count}} projektów" + other: "%{count} projektów" label_public_projects: Projekty publiczne label_query: Kwerenda label_query_new: Nowa kwerenda @@ -572,7 +576,7 @@ label_roadmap: Mapa label_roadmap_due_in: W czasie label_roadmap_no_issues: Brak zagadnień do tej wersji - label_roadmap_overdue: "{{value}} spóźnienia" + label_roadmap_overdue: "%{value} spóźnienia" label_role: Rola label_role_and_permissions: Role i Uprawnienia label_role_new: Nowa rola @@ -584,7 +588,7 @@ label_send_test_email: Wyślij próbny email label_settings: Ustawienia label_show_completed_versions: Pokaż kompletne wersje - label_sort_by: "Sortuj po {{value}}" + label_sort_by: "Sortuj po %{value}" label_sort_higher: Do góry label_sort_highest: Przesuń na górę label_sort_lower: Do dołu @@ -608,7 +612,7 @@ label_tracker: Typ zagadnienia label_tracker_new: Nowy typ zagadnienia label_tracker_plural: Typy zagadnień - label_updated_time: "Zaktualizowane {{value}} temu" + label_updated_time: "Zaktualizowane %{value} temu" label_used_by: Używane przez label_user: Użytkownik label_user_mail_no_self_notified: "Nie chcę powiadomień o zmianach, które sam wprowadzam." @@ -631,16 +635,16 @@ label_workflow: Przepływ label_year: Rok label_yesterday: wczoraj - mail_body_account_activation_request: "Zarejestrowano nowego użytkownika: ({{value}}). Konto oczekuje na twoje zatwierdzenie:" + mail_body_account_activation_request: "Zarejestrowano nowego użytkownika: (%{value}). Konto oczekuje na twoje zatwierdzenie:" mail_body_account_information: Twoje konto - mail_body_account_information_external: "Możesz użyć twojego {{value}} konta do zalogowania." + mail_body_account_information_external: "Możesz użyć twojego %{value} konta do zalogowania." mail_body_lost_password: 'W celu zmiany swojego hasła użyj poniższego odnośnika:' mail_body_register: 'W celu aktywacji Twojego konta, użyj poniższego odnośnika:' - mail_body_reminder: "Wykaz przypisanych do Ciebie zagadnień, których termin wypada w ciągu następnych {{count}} dni" - mail_subject_account_activation_request: "Zapytanie aktywacyjne konta {{value}}" - mail_subject_lost_password: "Twoje hasło do {{value}}" - mail_subject_register: "Aktywacja konta w {{value}}" - mail_subject_reminder: "Uwaga na terminy, masz zagadnienia do obsłużenia w ciągu następnych {{count}} dni! ({{days}})" + mail_body_reminder: "Wykaz przypisanych do Ciebie zagadnień, których termin wypada w ciągu następnych %{count} dni" + mail_subject_account_activation_request: "Zapytanie aktywacyjne konta %{value}" + mail_subject_lost_password: "Twoje hasło do %{value}" + mail_subject_register: "Aktywacja konta w %{value}" + mail_subject_reminder: "Uwaga na terminy, masz zagadnienia do obsłużenia w ciągu następnych %{count} dni! (%{days})" notice_account_activated: Twoje konto zostało aktywowane. Możesz się zalogować. notice_account_invalid_creditentials: Zły użytkownik lub hasło notice_account_lost_email_sent: Email z instrukcjami zmiany hasła został wysłany do Ciebie. @@ -652,9 +656,9 @@ notice_account_wrong_password: Złe hasło notice_can_t_change_password: To konto ma zewnętrzne źródło identyfikacji. Nie możesz zmienić hasła. notice_default_data_loaded: Domyślna konfiguracja została pomyślnie załadowana. - notice_email_error: "Wystąpił błąd w trakcie wysyłania maila ({{value}})" - notice_email_sent: "Email został wysłany do {{value}}" - notice_failed_to_save_issues: "Błąd podczas zapisu zagadnień {{count}} z {{total}} zaznaczonych: {{ids}}." + notice_email_error: "Wystąpił błąd w trakcie wysyłania maila (%{value})" + notice_email_sent: "Email został wysłany do %{value}" + notice_failed_to_save_issues: "Błąd podczas zapisu zagadnień %{count} z %{total} zaznaczonych: %{ids}." notice_feeds_access_key_reseted: Twój klucz dostępu RSS został zrestetowany. notice_file_not_found: Strona do której próbujesz się dostać nie istnieje lub została usunięta. notice_locking_conflict: Dane poprawione przez innego użytkownika. @@ -729,7 +733,6 @@ setting_autologin: Auto logowanie setting_bcc_recipients: Odbiorcy kopii tajnej (kt/bcc) setting_commit_fix_keywords: Słowa zmieniające status - setting_commit_logs_encoding: Kodowanie komentarzy zatwierdzeń setting_commit_ref_keywords: Słowa tworzące powiązania setting_cross_project_issue_relations: Zezwól na powiązania zagadnień między projektami setting_date_format: Format daty @@ -764,24 +767,24 @@ status_registered: zarejestrowany text_are_you_sure: Jesteś pewien ? text_assign_time_entries_to_project: Przypisz wpisy dziennika do projektu - text_caracters_maximum: "{{count}} znaków maksymalnie." - text_caracters_minimum: "Musi być nie krótsze niż {{count}} znaków." + text_caracters_maximum: "%{count} znaków maksymalnie." + text_caracters_minimum: "Musi być nie krótsze niż %{count} znaków." text_comma_separated: Wielokrotne wartości dozwolone (rozdzielone przecinkami). 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_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/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_enumeration_destroy_question: "%{count} obiektów jest przypisana do tej wartości." text_file_repository_writable: Zapisywalne repozytorium plików - text_issue_added: "Zagadnienie {{id}} zostało wprowadzone (by {{author}})." + text_issue_added: "Zagadnienie %{id} zostało wprowadzone (by %{author})." text_issue_category_destroy_assignments: Usuń przydziały kategorii - text_issue_category_destroy_question: "Zagadnienia ({{count}}) są przypisane do tej kategorii. Co chcesz zrobić?" + text_issue_category_destroy_question: "Zagadnienia (%{count}) są przypisane do tej kategorii. Co chcesz zrobić?" text_issue_category_reassign_to: Przydziel zagadnienie do tej kategorii - text_issue_updated: "Zagadnienie {{id}} zostało zaktualizowane (by {{author}})." + text_issue_updated: "Zagadnienie %{id} zostało zaktualizowane (by %{author})." text_issues_destroy_confirmation: 'Czy jestes pewien, że chcesz usunąć wskazane zagadnienia?' text_issues_ref_in_commit_messages: Odwołania do zagadnień w komentarzach zatwierdzeń - text_length_between: "Długość pomiędzy {{min}} i {{max}} znaków." + text_length_between: "Długość pomiędzy %{min} i %{max} znaków." text_load_default_configuration: Załaduj domyślną konfigurację text_min_max_length_info: 0 oznacza brak restrykcji text_no_configuration_data: "Role użytkowników, typy zagadnień, statusy zagadnień oraz przepływ pracy nie zostały jeszcze skonfigurowane.\nJest wysoce rekomendowane by załadować domyślną konfigurację. Po załadowaniu będzie możliwość edycji tych danych." @@ -793,24 +796,24 @@ text_rmagick_available: RMagick dostępne (opcjonalnie) text_select_mail_notifications: Zaznacz czynności przy których użytkownik powinien być powiadomiony mailem. text_select_project_modules: 'Wybierz moduły do aktywacji w tym projekcie:' - text_status_changed_by_changeset: "Zastosowane w zmianach {{value}}." - text_subprojects_destroy_warning: "Podprojekt(y): {{value}} zostaną także usunięte." + text_status_changed_by_changeset: "Zastosowane w zmianach %{value}." + text_subprojects_destroy_warning: "Podprojekt(y): %{value} zostaną także usunięte." text_tip_issue_begin_day: zadanie zaczynające się dzisiaj text_tip_issue_begin_end_day: zadanie zaczynające i kończące się dzisiaj text_tip_issue_end_day: zadanie kończące się dzisiaj text_tracker_no_workflow: Brak przepływu zdefiniowanego dla tego typu zagadnienia text_unallowed_characters: Niedozwolone znaki text_user_mail_option: "W przypadku niezaznaczonych projektów, będziesz otrzymywał powiadomienia tylko na temat zagadnień, które obserwujesz, lub w których bierzesz udział (np. jesteś autorem lub adresatem)." - text_user_wrote: "{{value}} napisał:" + text_user_wrote: "%{value} napisał:" text_wiki_destroy_confirmation: Jesteś pewien, że chcesz usunąć to wiki i całą jego zawartość ? text_workflow_edit: Zaznacz rolę i typ zagadnienia do edycji przepływu - label_user_activity: "Aktywność: {{value}}" - label_updated_time_by: "Uaktualnione przez {{author}} {{age}} temu" + label_user_activity: "Aktywność: %{value}" + label_updated_time_by: "Uaktualnione przez %{author} %{age} temu" text_diff_truncated: '... Ten plik różnic został przycięty ponieważ jest zbyt długi.' setting_diff_max_lines_displayed: Maksymalna liczba linii różnicy do pokazania text_plugin_assets_writable: Zapisywalny katalog zasobów wtyczek - warning_attachments_not_saved: "{{count}} załącznik(ów) nie zostało zapisanych." + warning_attachments_not_saved: "%{count} załącznik(ów) nie zostało zapisanych." field_editable: Edytowalne label_display: Wygląd button_create_and_continue: Stwórz i dodaj kolejne @@ -825,21 +828,21 @@ label_descending: Malejąco label_sort: Sortuj label_ascending: Rosnąco - label_date_from_to: Od {{start}} do {{end}} + label_date_from_to: Od %{start} do %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: Ta strona posiada podstrony ({{descendants}}). Co chcesz zrobić? + text_wiki_page_destroy_question: Ta strona posiada podstrony (%{descendants}). Co chcesz zrobić? text_wiki_page_reassign_children: Podepnij je do strony nadrzędnej względem usuwanej text_wiki_page_nullify_children: Przesuń je na szczyt hierarchii text_wiki_page_destroy_children: Usuń wszystkie podstrony setting_password_min_length: Minimalna długość hasła field_group_by: Grupuj wyniki wg - mail_subject_wiki_content_updated: "Strona wiki '{{id}}' została uaktualniona" + mail_subject_wiki_content_updated: "Strona wiki '%{id}' została uaktualniona" label_wiki_content_added: Dodano stronę wiki - mail_subject_wiki_content_added: "Strona wiki '{{id}}' została dodana" - mail_body_wiki_content_added: Strona wiki '{{id}}' została dodana przez {{author}}. + mail_subject_wiki_content_added: "Strona wiki '%{id}' została dodana" + mail_body_wiki_content_added: Strona wiki '%{id}' została dodana przez %{author}. label_wiki_content_updated: Uaktualniono stronę wiki - mail_body_wiki_content_updated: Strona wiki '{{id}}' została uaktualniona przez {{author}}. + mail_body_wiki_content_updated: Strona wiki '%{id}' została uaktualniona przez %{author}. permission_add_project: Tworzenie projektu setting_new_project_user_role_id: Rola nadawana twórcom projektów, którzy nie posiadają uprawnień administatora label_view_all_revisions: Pokaż wszystkie rewizje @@ -847,14 +850,14 @@ label_branch: Gałąź error_no_tracker_in_project: Projekt nie posiada powiązanych typów zagadnień. Sprawdź ustawienia projektu. error_no_default_issue_status: Nie zdefiniowano domyślnego statusu zagadnień. Sprawdź konfigurację (Przejdź do "Administracja -> Statusy zagadnień). - text_journal_changed: "Zmieniono {{label}} z {{old}} na {{new}}" - text_journal_set_to: "Ustawiono {{label}} na {{value}}" - text_journal_deleted: "Usunięto {{label}} ({{old}})" + text_journal_changed: "Zmieniono %{label} z %{old} na %{new}" + text_journal_set_to: "Ustawiono %{label} na %{value}" + text_journal_deleted: "Usunięto %{label} (%{old})" label_group_plural: Grupy label_group: Grupa label_group_new: Nowa grupa label_time_entry_plural: Przepracowany czas - text_journal_added: "Dodano {{label}} {{value}}" + text_journal_added: "Dodano %{label} %{value}" field_active: Aktywne enumeration_system_activity: Aktywność Systemowa button_copy_and_follow: Kopiuj i przejdź do kopii zagadnienia @@ -863,12 +866,12 @@ button_show: Pokaż error_can_not_archive_project: Ten projekt nie może zostać zarchiwizowany error_can_not_reopen_issue_on_closed_version: Zagadnienie przydzielone do zakończonej wersji nie może zostać ponownie otwarte - error_issue_done_ratios_not_updated: % wykonania zagadnienia nie został uaktualniony. + error_issue_done_ratios_not_updated: "% wykonania zagadnienia nie został uaktualniony." error_workflow_copy_source: Proszę wybrać źródłowy typ zagadnienia lub rolę error_workflow_copy_target: Proszę wybrać docelowe typ(y) zagadnień i rolę(e) field_sharing: Współdzielenie label_api_access_key: Klucz dostępu do API - label_api_access_key_created_on: Klucz dostępu do API został utworzony {{value}} temu + label_api_access_key_created_on: Klucz dostępu do API został utworzony %{value} temu label_close_versions: Zamknij ukończone wersje label_copy_same_as_target: Jak cel label_copy_source: Źródło @@ -877,7 +880,7 @@ label_feeds_access_key: Klucz dostępu do RSS label_missing_api_access_key: Brakuje klucza dostępu do API label_missing_feeds_access_key: Brakuje klucza dostępu do RSS - label_revision_id: Rewizja {{value}} + label_revision_id: Rewizja %{value} label_subproject_new: Nowy podprojekt label_update_issue_done_ratios: Uaktualnij % wykonania label_user_anonymous: Anonimowy @@ -894,7 +897,7 @@ setting_default_projects_modules: Domyślnie włączone moduły dla nowo tworzonych projektów setting_gravatar_default: Domyślny obraz Gravatar setting_issue_done_ratio: Obliczaj postęp realizacji zagadnień za pomocą - setting_issue_done_ratio_issue_field: % Wykonania zagadnienia + setting_issue_done_ratio_issue_field: "% Wykonania zagadnienia" setting_issue_done_ratio_issue_status: Statusu zagadnienia setting_mail_handler_body_delimiters: Przycinaj e-maile po jednej z tych linii setting_rest_api_enabled: Uaktywnij usługę sieciową REST @@ -919,12 +922,12 @@ label_subtask_plural: Podzagadnienia label_project_copy_notifications: Wyślij powiadomienia mailowe przy kopiowaniu projektu error_can_not_delete_custom_field: Nie można usunąć tego pola - error_unable_to_connect: Nie można połączyć ({{value}}) + error_unable_to_connect: Nie można połączyć (%{value}) error_can_not_remove_role: Ta rola przypisana jest niektórym użytkownikom i nie może zostać usunięta. error_can_not_delete_tracker: Ten typ przypisany jest do części zagadnień i nie może zostać usunięty. field_principal: Przełożony label_my_page_block: Elementy - notice_failed_to_save_members: "Nie można zapisać uczestników: {{errors}}." + notice_failed_to_save_members: "Nie można zapisać uczestników: %{errors}." text_zoom_out: Zmniejsz czcionkę text_zoom_in: Powiększ czcionkę notice_unable_delete_time_entry: Nie można usunąć wpisu z dziennika. @@ -932,7 +935,7 @@ field_time_entries: Dziennik project_module_gantt: Diagram Gantta project_module_calendar: Kalendarz - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -943,8 +946,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Kodowanie komentarzy zatwierdzeń + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/pt-BR.yml.svn-base --- a/config/locales/.svn/text-base/pt-BR.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/pt-BR.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -12,7 +12,10 @@ abbr_day_names: [Dom, Seg, Ter, Qua, Qui, Sex, Sáb] month_names: [~, Janeiro, Fevereiro, Março, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro] abbr_month_names: [~, Jan, Fev, Mar, Abr, Mai, Jun, Jul, Ago, Set, Out, Nov, Dez] - order: [:day,:month,:year] + order: + - :day + - :month + - :year time: formats: @@ -33,46 +36,46 @@ half_a_minute: 'meio minuto' less_than_x_seconds: one: 'menos de 1 segundo' - other: 'menos de {{count}} segundos' + other: 'menos de %{count} segundos' x_seconds: one: '1 segundo' - other: '{{count}} segundos' + other: '%{count} segundos' less_than_x_minutes: one: 'menos de um minuto' - other: 'menos de {{count}} minutos' + other: 'menos de %{count} minutos' x_minutes: one: '1 minuto' - other: '{{count}} minutos' + other: '%{count} minutos' about_x_hours: one: 'aproximadamente 1 hora' - other: 'aproximadamente {{count}} horas' + other: 'aproximadamente %{count} horas' x_days: one: '1 dia' - other: '{{count}} dias' + other: '%{count} dias' about_x_months: one: 'aproximadamente 1 mês' - other: 'aproximadamente {{count}} meses' + other: 'aproximadamente %{count} meses' x_months: one: '1 mês' - other: '{{count}} meses' + other: '%{count} meses' about_x_years: one: 'aproximadamente 1 ano' - other: 'aproximadamente {{count}} anos' + other: 'aproximadamente %{count} anos' over_x_years: one: 'mais de 1 ano' - other: 'mais de {{count}} anos' + other: 'mais de %{count} anos' almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" # numeros number: @@ -118,7 +121,7 @@ template: header: one: "model não pode ser salvo: 1 erro" - other: "model não pode ser salvo: {{count}} erros." + other: "model não pode ser salvo: %{count} erros." body: "Por favor, verifique os seguintes campos:" messages: inclusion: "não está incluso na lista" @@ -128,16 +131,16 @@ accepted: "precisa ser aceito" empty: "não pode ficar vazio" blank: "não pode ficar vazio" - too_long: "é muito longo (máximo: {{count}} caracteres)" - too_short: "é muito curto (mínimon: {{count}} caracteres)" - wrong_length: "deve ter {{count}} caracteres" + too_long: "é muito longo (máximo: %{count} caracteres)" + too_short: "é muito curto (mínimon: %{count} caracteres)" + wrong_length: "deve ter %{count} caracteres" taken: "não está disponível" not_a_number: "não é um número" - greater_than: "precisa ser maior do que {{count}}" - greater_than_or_equal_to: "precisa ser maior ou igual a {{count}}" - equal_to: "precisa ser igual a {{count}}" - less_than: "precisa ser menor do que {{count}}" - less_than_or_equal_to: "precisa ser menor ou igual a {{count}}" + greater_than: "precisa ser maior do que %{count}" + greater_than_or_equal_to: "precisa ser maior ou igual a %{count}" + equal_to: "precisa ser igual a %{count}" + less_than: "precisa ser menor do que %{count}" + less_than_or_equal_to: "precisa ser menor ou igual a %{count}" odd: "precisa ser ímpar" even: "precisa ser par" greater_than_start_date: "deve ser maior que a data inicial" @@ -155,7 +158,7 @@ general_csv_separator: ';' general_csv_decimal_separator: ',' general_csv_encoding: ISO-8859-1 - general_pdf_encoding: ISO-8859-1 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' notice_account_updated: Conta atualizada com sucesso. @@ -174,35 +177,35 @@ notice_file_not_found: A página que você está tentando acessar não existe ou foi excluída. notice_locking_conflict: Os dados foram atualizados por outro usuário. notice_not_authorized: Você não está autorizado a acessar esta página. - notice_email_sent: "Um e-mail foi enviado para {{value}}" - notice_email_error: "Ocorreu um erro ao enviar o e-mail ({{value}})" + notice_email_sent: "Um e-mail foi enviado para %{value}" + notice_email_error: "Ocorreu um erro ao enviar o e-mail (%{value})" notice_feeds_access_key_reseted: Sua chave RSS foi reconfigurada. - notice_failed_to_save_issues: "Problema ao salvar {{count}} tarefa(s) de {{total}} selecionadas: {{ids}}." + notice_failed_to_save_issues: "Problema ao salvar %{count} tarefa(s) de %{total} selecionadas: %{ids}." notice_no_issue_selected: "Nenhuma tarefa selecionada! Por favor, marque as tarefas que você deseja editar." notice_account_pending: "Sua conta foi criada e está aguardando aprovação do administrador." notice_default_data_loaded: Configuração padrão carregada com sucesso. - error_can_t_load_default_data: "A configuração padrão não pode ser carregada: {{value}}" + error_can_t_load_default_data: "A configuração padrão não pode ser carregada: %{value}" error_scm_not_found: "A entrada e/ou a revisão não existe no repositório." - error_scm_command_failed: "Ocorreu um erro ao tentar acessar o repositório: {{value}}" + error_scm_command_failed: "Ocorreu um erro ao tentar acessar o repositório: %{value}" error_scm_annotate: "Esta entrada não existe ou não pode ser anotada." error_issue_not_found_in_project: 'A tarefa não foi encontrada ou não pertence a este projeto' error_no_tracker_in_project: 'Não há um tipo de tarefa associado a este projeto. Favor verificar as configurações do projeto.' error_no_default_issue_status: 'A situação padrão para tarefa não está definida. Favor verificar sua configuração (Vá em "Administração -> Situação da tarefa").' - mail_subject_lost_password: "Sua senha do {{value}}." + mail_subject_lost_password: "Sua senha do %{value}." mail_body_lost_password: 'Para mudar sua senha, clique no link abaixo:' - mail_subject_register: "Ativação de conta do {{value}}." + mail_subject_register: "Ativação de conta do %{value}." mail_body_register: 'Para ativar sua conta, clique no link abaixo:' - mail_body_account_information_external: "Você pode usar sua conta do {{value}} para entrar." + mail_body_account_information_external: "Você pode usar sua conta do %{value} para entrar." mail_body_account_information: Informações sobre sua conta - mail_subject_account_activation_request: "{{value}} - Requisição de ativação de conta" - mail_body_account_activation_request: "Um novo usuário ({{value}}) se registrou. A conta está aguardando sua aprovação:" - mail_subject_reminder: "{{count}} tarefa(s) com data prevista para os próximos {{days}} dias" - mail_body_reminder: "{{count}} tarefa(s) para você com data prevista para os próximos {{days}} dias:" + mail_subject_account_activation_request: "%{value} - Requisição de ativação de conta" + mail_body_account_activation_request: "Um novo usuário (%{value}) se registrou. A conta está aguardando sua aprovação:" + mail_subject_reminder: "%{count} tarefa(s) com data prevista para os próximos %{days} dias" + mail_body_reminder: "%{count} tarefa(s) para você com data prevista para os próximos %{days} dias:" gui_validation_error: 1 erro - gui_validation_error_plural: "{{count}} erros" + gui_validation_error_plural: "%{count} erros" field_name: Nome field_description: Descrição @@ -264,7 +267,8 @@ field_attr_lastname: Atributo para sobrenome field_attr_mail: Atributo para e-mail field_onthefly: Criar usuários dinamicamente ("on-the-fly") - field_done_ratio: % Terminado + field_start_date: Início + field_done_ratio: "% Terminado" field_auth_source: Modo de autenticação field_hide_mail: Ocultar meu e-mail field_comments: Comentário @@ -313,8 +317,7 @@ setting_cross_project_issue_relations: Permitir relacionar tarefas entre projetos setting_issue_list_default_columns: Colunas padrão visíveis na lista de tarefas setting_repositories_encodings: Codificação dos repositórios - setting_commit_logs_encoding: Codificação das mensagens de commit - setting_emails_footer: Rodapé dos e-mails + setting_emails_footer: Rodapé do e-mail setting_protocol: Protocolo setting_per_page_options: Número de itens exibidos por página setting_user_format: Formato de exibição de nome de usuário @@ -343,16 +346,19 @@ label_x_projects: zero: nenhum projeto one: 1 projeto - other: "{{count}} projetos" + other: "%{count} projetos" label_project_all: Todos os projetos label_project_latest: Últimos projetos label_issue: Tarefa label_issue_new: Nova tarefa label_issue_plural: Tarefas label_issue_view_all: Ver todas as tarefas - label_issues_by: "Tarefas por {{value}}" + label_issues_by: "Tarefas por %{value}" label_issue_added: Tarefa adicionada label_issue_updated: Tarefa atualizada + label_issue_note_added: Nota adicionada + label_issue_status_updated: Situação atualizada + label_issue_priority_updated: Prioridade atualizada label_document: Documento label_document_new: Novo documento label_document_plural: Documentos @@ -406,7 +412,7 @@ label_auth_source_new: Novo modo de autenticação label_auth_source_plural: Modos de autenticação label_subproject_plural: Sub-projetos - label_and_its_subprojects: "{{value}} e seus sub-projetos" + label_and_its_subprojects: "%{value} e seus sub-projetos" label_min_max_length: Tamanho mín-máx label_list: Lista label_date: Data @@ -417,8 +423,8 @@ label_text: Texto longo label_attribute: Atributo label_attribute_plural: Atributos - label_download: "{{count}} Download" - label_download_plural: "{{count}} Downloads" + label_download: "%{count} Download" + label_download_plural: "%{count} Downloads" label_no_data: Nenhuma informação disponível label_change_status: Alterar situação label_history: Histórico @@ -449,17 +455,17 @@ label_closed_issues: Fechada label_closed_issues_plural: Fechadas label_x_open_issues_abbr_on_total: - zero: 0 aberta / {{total}} - one: 1 aberta / {{total}} - other: "{{count}} abertas / {{total}}" + zero: 0 aberta / %{total} + one: 1 aberta / %{total} + other: "%{count} abertas / %{total}" label_x_open_issues_abbr: zero: 0 aberta one: 1 aberta - other: "{{count}} abertas" + other: "%{count} abertas" label_x_closed_issues_abbr: zero: 0 fechada one: 1 fechada - other: "{{count}} fechadas" + other: "%{count} fechadas" label_total: Total label_permissions: Permissões label_current_status: Situação atual @@ -477,7 +483,7 @@ label_months_from: meses a partir de label_gantt: Gantt label_internal: Interno - label_last_changes: "últimas {{count}} alterações" + label_last_changes: "últimas %{count} alterações" label_change_view_all: Mostrar todas as alterações label_personalize_page: Personalizar esta página label_comment: Comentário @@ -485,7 +491,7 @@ label_x_comments: zero: nenhum comentário one: 1 comentário - other: "{{count}} comentários" + other: "%{count} comentários" label_comment_add: Adicionar comentário label_comment_added: Comentário adicionado label_comment_delete: Excluir comentário @@ -504,7 +510,7 @@ label_yesterday: ontem label_this_week: esta semana label_last_week: última semana - label_last_n_days: "últimos {{count}} dias" + label_last_n_days: "últimos %{count} dias" label_this_month: este mês label_last_month: último mês label_this_year: este ano @@ -518,8 +524,8 @@ label_repository: Repositório label_repository_plural: Repositórios label_browse: Procurar - label_modification: "{{count}} alteração" - label_modification_plural: "{{count}} alterações" + label_modification: "%{count} alteração" + label_modification_plural: "%{count} alterações" label_revision: Revisão label_revision_plural: Revisões label_associated_revisions: Revisões associadas @@ -535,8 +541,8 @@ label_sort_lower: Mover para baixo label_sort_lowest: Mover para o fim label_roadmap: Planejamento - label_roadmap_due_in: "Previsto para {{value}}" - label_roadmap_overdue: "{{value}} atrasado" + label_roadmap_due_in: "Previsto para %{value}" + label_roadmap_overdue: "%{value} atrasado" label_roadmap_no_issues: Sem tarefas para esta versão label_search: Busca label_result_plural: Resultados @@ -554,9 +560,9 @@ label_changes_details: Detalhes de todas as alterações label_issue_tracking: Tarefas label_spent_time: Tempo gasto - label_f_hour: "{{value}} hora" - label_f_hour_plural: "{{value}} horas" - label_time_tracking: Controle de horas + label_f_hour: "%{value} hora" + label_f_hour_plural: "%{value} horas" + label_time_tracking: Registro de horas label_change_plural: Alterações label_statistics: Estatísticas label_commits_per_month: Commits por mês @@ -604,12 +610,12 @@ label_date_from: De label_date_to: Para label_language_based: Com base no idioma do usuário - label_sort_by: "Ordenar por {{value}}" + label_sort_by: "Ordenar por %{value}" label_send_test_email: Enviar um e-mail de teste - label_feeds_access_key_created_on: "chave de acesso RSS criada {{value}} atrás" + label_feeds_access_key_created_on: "chave de acesso RSS criada %{value} atrás" label_module_plural: Módulos - label_added_time_by: "Adicionado por {{author}} {{age}} atrás" - label_updated_time: "Atualizado {{value}} atrás" + label_added_time_by: "Adicionado por %{author} %{age} atrás" + label_updated_time: "Atualizado %{value} atrás" label_jump_to_a_project: Ir para o projeto... label_file_plural: Arquivos label_changeset_plural: Changesets @@ -625,7 +631,7 @@ label_registration_activation_by_email: ativação de conta por e-mail label_registration_manual_activation: ativação manual de conta label_registration_automatic_activation: ativação automática de conta - label_display_per_page: "Por página: {{value}}" + label_display_per_page: "Por página: %{value}" label_age: Idade label_change_properties: Alterar propriedades label_general: Geral @@ -691,43 +697,43 @@ text_regexp_info: ex. ^[A-Z0-9]+$ text_min_max_length_info: 0 = sem restrição text_project_destroy_confirmation: Você tem certeza que deseja excluir este projeto e todos os dados relacionados? - text_subprojects_destroy_warning: "Seu(s) subprojeto(s): {{value}} também serão excluídos." + text_subprojects_destroy_warning: "Seu(s) subprojeto(s): %{value} também serão excluídos." text_workflow_edit: Selecione um papel e um tipo de tarefa para editar o fluxo de trabalho text_are_you_sure: Você tem certeza? text_tip_issue_begin_day: tarefa inicia neste dia text_tip_issue_end_day: tarefa termina neste dia text_tip_issue_begin_end_day: tarefa inicia e termina neste dia text_project_identifier_info: 'Letras minúsculas (a-z), números e hífens permitidos.
    Uma vez salvo, o identificador não poderá ser alterado.' - text_caracters_maximum: "máximo {{count}} caracteres" - text_caracters_minimum: "deve ter ao menos {{count}} caracteres." - text_length_between: "deve ter entre {{min}} e {{max}} caracteres." + text_caracters_maximum: "máximo %{count} caracteres" + text_caracters_minimum: "deve ter ao menos %{count} caracteres." + text_length_between: "deve ter entre %{min} e %{max} caracteres." text_tracker_no_workflow: Sem fluxo de trabalho definido para este tipo. text_unallowed_characters: Caracteres não permitidos text_comma_separated: Múltiplos valores são permitidos (separados por vírgula). text_issues_ref_in_commit_messages: Referenciando tarefas nas mensagens de commit - text_issue_added: "Tarefa {{id}} incluída (por {{author}})." - text_issue_updated: "Tarefa {{id}} alterada (por {{author}})." + text_issue_added: "Tarefa %{id} incluída (por %{author})." + text_issue_updated: "Tarefa %{id} alterada (por %{author})." text_wiki_destroy_confirmation: Você tem certeza que deseja excluir este wiki e TODO o seu conteúdo? - text_issue_category_destroy_question: "Algumas tarefas ({{count}}) estão atribuídas a esta categoria. O que você deseja fazer?" + text_issue_category_destroy_question: "Algumas tarefas (%{count}) estão atribuídas a esta categoria. O que você deseja fazer?" text_issue_category_destroy_assignments: Remover atribuições da categoria text_issue_category_reassign_to: Redefinir tarefas para esta categoria text_user_mail_option: "Para projetos (não selecionados), você somente receberá notificações sobre o que você está observando ou está envolvido (ex. tarefas das quais você é o autor ou que estão atribuídas a você)" text_no_configuration_data: "Os Papéis, tipos de tarefas, situação de tarefas e fluxos de trabalho não foram configurados ainda.\nÉ altamente recomendado carregar as configurações padrão. Você poderá modificar estas configurações assim que carregadas." text_load_default_configuration: Carregar a configuração padrão - text_status_changed_by_changeset: "Aplicado no changeset {{value}}." + text_status_changed_by_changeset: "Aplicado no changeset %{value}." text_issues_destroy_confirmation: 'Você tem certeza que deseja excluir a(s) tarefa(s) selecionada(s)?' text_select_project_modules: 'Selecione módulos para habilitar para este projeto:' text_default_administrator_account_changed: Conta padrão do administrador alterada text_file_repository_writable: Repositório com permissão de escrita text_rmagick_available: RMagick disponível (opcional) - text_destroy_time_entries_question: "{{hours}} horas de trabalho foram registradas nas tarefas que você está excluindo. O que você deseja fazer?" + text_destroy_time_entries_question: "%{hours} horas de trabalho foram registradas nas tarefas que você está excluindo. O que você deseja fazer?" text_destroy_time_entries: Excluir horas de trabalho text_assign_time_entries_to_project: Atribuir estas horas de trabalho para outro projeto text_reassign_time_entries: 'Atribuir horas reportadas para esta tarefa:' - text_user_wrote: "{{value}} escreveu:" - text_enumeration_destroy_question: "{{count}} objetos estão atribuídos a este valor." + 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 @@ -753,7 +759,7 @@ enumeration_issue_priorities: Prioridade das tarefas enumeration_doc_categories: Categorias de documento - enumeration_activities: Atividades (time tracking) + enumeration_activities: Atividades (registro de horas) notice_unable_delete_version: Não foi possível excluir a versão label_renamed: renomeado label_copied: copiado @@ -809,12 +815,12 @@ text_repository_usernames_mapping: "Seleciona ou atualiza os usuários do Redmine mapeando para cada usuário encontrado no log do repositório.\nUsuários com o mesmo login ou e-mail no Redmine e no repositório serão mapeados automaticamente." permission_edit_own_messages: Editar próprias mensagens permission_delete_own_messages: Excluir próprias mensagens - label_user_activity: "Atividade de {{value}}" - label_updated_time_by: "Atualizado por {{author}} há {{age}}" + label_user_activity: "Atividade de %{value}" + label_updated_time_by: "Atualizado por %{author} há %{age}" text_diff_truncated: '... Este diff foi truncado porque excede o tamanho máximo que pode ser exibido.' setting_diff_max_lines_displayed: Número máximo de linhas exibidas no diff text_plugin_assets_writable: Diretório de plugins gravável - warning_attachments_not_saved: "{{count}} arquivo(s) não puderam ser salvo(s)." + warning_attachments_not_saved: "%{count} arquivo(s) não puderam ser salvo(s)." button_create_and_continue: Criar e continuar text_custom_field_possible_values_info: 'Uma linha para cada valor' label_display: Exibição @@ -829,34 +835,34 @@ label_descending: Descendente label_sort: Ordenar label_ascending: Ascendente - label_date_from_to: De {{start}} até {{end}} + label_date_from_to: De %{start} até %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: Esta página tem {{descendants}} página(s) filha(s) e descendente(s). O que você quer fazer? + text_wiki_page_destroy_question: Esta página tem %{descendants} página(s) filha(s) e descendente(s). O que você quer fazer? text_wiki_page_reassign_children: Reatribuir páginas filhas para esta página pai text_wiki_page_nullify_children: Manter as páginas filhas como páginas raízes text_wiki_page_destroy_children: Excluir páginas filhas e todas suas descendentes setting_password_min_length: Comprimento mínimo para senhas field_group_by: Agrupar por - mail_subject_wiki_content_updated: "A página wiki '{{id}}' foi atualizada" + mail_subject_wiki_content_updated: "A página wiki '%{id}' foi atualizada" label_wiki_content_added: Página wiki adicionada - mail_subject_wiki_content_added: "A página wiki '{{id}}' foi adicionada" - mail_body_wiki_content_added: A página wiki '{{id}}' foi adicionada por {{author}}. + mail_subject_wiki_content_added: "A página wiki '%{id}' foi adicionada" + mail_body_wiki_content_added: A página wiki '%{id}' foi adicionada por %{author}. label_wiki_content_updated: Página wiki atualizada - mail_body_wiki_content_updated: A página wiki '{{id}}' foi atualizada por {{author}}. + mail_body_wiki_content_updated: A página wiki '%{id}' foi atualizada por %{author}. permission_add_project: Criar projeto setting_new_project_user_role_id: Papel atribuído a um usuário não-administrador que cria um projeto label_view_all_revisions: Ver todas as revisões label_tag: Etiqueta label_branch: Ramo - text_journal_changed: "{{label}} alterado de {{old}} para {{new}}" - text_journal_set_to: "{{label}} ajustado para {{value}}" - text_journal_deleted: "{{label}} excluído ({{old}})" + text_journal_changed: "%{label} alterado de %{old} para %{new}" + text_journal_set_to: "%{label} ajustado para %{value}" + text_journal_deleted: "%{label} excluído (%{old})" label_group_plural: Grupos label_group: Grupo label_group_new: Novo grupo label_time_entry_plural: Tempos gastos - text_journal_added: "{{label}} {{value}} adicionado" + text_journal_added: "%{label} %{value} adicionado" field_active: Ativo enumeration_system_activity: Atividade do sistema permission_delete_issue_watchers: Excluir observadores @@ -892,10 +898,10 @@ field_watcher: Observador permission_view_issues: Ver tarefas label_display_used_statuses_only: Somente exibir situações que são usadas por este tipo de tarefa - label_revision_id: Revisão {{value}} + label_revision_id: Revisão %{value} label_api_access_key: Chave de acesso a API button_show: Exibir - label_api_access_key_created_on: Chave de acesso a API criado a {{value}} atrás + label_api_access_key_created_on: Chave de acesso a API criado a %{value} atrás label_feeds_access_key: Chave de acesso ao RSS notice_api_access_key_reseted: Sua chave de acesso a API foi redefinida. setting_rest_api_enabled: Habilitar REST web service @@ -922,32 +928,72 @@ label_subtask_plural: Subtarefas label_project_copy_notifications: Enviar notificações por e-mail ao copiar projeto error_can_not_delete_custom_field: Não foi possível excluir o campo personalizado - error_unable_to_connect: Não foi possível conectar ({{value}}) + error_unable_to_connect: Não foi possível conectar (%{value}) error_can_not_remove_role: Este papel está em uso e não pode ser excluído. error_can_not_delete_tracker: Este tipo de tarefa está atribuído a alguma(s) tarefa(s) e não pode ser excluído. field_principal: Principal label_my_page_block: Meu bloco de página - notice_failed_to_save_members: "Falha ao gravar membro(s): {{errors}}." + notice_failed_to_save_members: "Falha ao gravar membro(s): %{errors}." text_zoom_out: Afastar zoom text_zoom_in: Aproximar zoom notice_unable_delete_time_entry: Não foi possível excluir a entrada no registro de horas trabalhadas. label_overall_spent_time: Tempo gasto geral - field_time_entries: Log time + field_time_entries: Registro de horas project_module_gantt: Gantt project_module_calendar: Calendário - button_edit_associated_wikipage: "Editar página wiki relacionada: {{page_title}}" + button_edit_associated_wikipage: "Editar página wiki relacionada: %{page_title}" text_are_you_sure_with_children: Excluir a tarefa e suas subtarefas? field_text: Campo de texto label_user_mail_option_only_owner: Somente para as coisas que eu criei setting_default_notification_option: Opção padrão de notificação label_user_mail_option_only_my_events: Somente para as coisas que eu esteja observando ou esteja envolvido label_user_mail_option_only_assigned: Somente para as coisas que estejam atribuídas a mim - 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. - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header + label_user_mail_option_none: Sem eventos + field_member_of_group: Grupo do responsável + field_assigned_to_role: Papel do responsável + notice_not_authorized_archived_project: O projeto que você está tentando acessar foi arquivado. + label_principal_search: "Pesquisar por usuários ou grupos:" + label_user_search: "Pesquisar por usuário:" + field_visible: Visível + setting_emails_header: Cabeçalho do e-mail + setting_commit_logtime_activity_id: Atividade para registrar horas + text_time_logged_by_changeset: Aplicado no changeset %{value}. + setting_commit_logtime_enabled: Habilitar registro de horas + notice_gantt_chart_truncated: O gráfico foi cortado por exceder o tamanho máximo de linhas que podem ser exibidas (%{max}) + setting_gantt_items_limit: Número máximo de itens exibidos no gráfico gatt + field_warn_on_leaving_unsaved: Alertar-me ao sarir de uma página sem salvar o texto + text_warn_on_leaving_unsaved: A página atual contem texto que não foi salvo e será perdido se você sair desta página. + label_my_queries: Minhas consultas personalizadas + text_journal_changed_no_detail: "%{label} atualizado(a)" + label_news_comment_added: Notícia recebeu um comentário + button_expand_all: Expandir tudo + button_collapse_all: Recolher tudo + label_additional_workflow_transitions_for_assignee: Transições adicionais permitidas quando o usuário é o responsável pela tarefa + label_additional_workflow_transitions_for_author: Transições adicionais permitidas quando o usuário é o autor + + label_bulk_edit_selected_time_entries: Alteração em massa do registro de horas + text_time_entries_destroy_confirmation: Tem certeza que quer excluir o(s) registro(s) de horas selecionado(s)? + label_role_anonymous: Anônimo + label_role_non_member: Não Membro + label_issues_visibility_own: Tarefas criadas ou atribuídas ao usuário + field_issues_visibility: Visibilidade das tarefas + label_issues_visibility_all: Todas as tarefas + permission_set_own_issues_private: Alterar as próprias tarefas para públicas ou privadas + field_is_private: Privado + permission_set_issues_private: Alterar tarefas para públicas ou privadas + label_issues_visibility_public: Todas as tarefas não privadas + text_issues_destroy_descendants_confirmation: Isto também irá excluir %{count} subtarefa(s). + field_commit_logs_encoding: Codificação das mensagens de commit + field_scm_path_encoding: Codificação do caminho + text_scm_path_encoding_note: "Padrão: UTF-8" + field_path_to_repository: Caminho para o repositório + field_root_directory: Diretório raiz + field_cvs_module: Módulo + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: "repositório local (ex.: /hgrepo, c:\hgrepo)" + text_scm_command: Comando + text_scm_command_version: Versão + label_git_report_last_commit: Relatar última alteração para arquivos e diretórios + text_scm_config: Você pode configurar seus comandos de versionamento em config/configurations.yml. Por favor reinicie a aplicação após alterá-lo. + text_scm_command_not_available: Comando de versionamento não disponível. Por favor verifique as configurações no painel de administração. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/pt.yml.svn-base --- a/config/locales/.svn/text-base/pt.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/pt.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,5 +1,6 @@ # Portuguese localization for Ruby on Rails # by Ricardo Otero +# by Alberto Ferreira pt: support: array: @@ -17,7 +18,10 @@ abbr_day_names: [Dom, Seg, Ter, Qua, Qui, Sex, Sáb] month_names: [~, Janeiro, Fevereiro, Março, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro] abbr_month_names: [~, Jan, Fev, Mar, Abr, Mai, Jun, Jul, Ago, Set, Out, Nov, Dez] - order: [:day, :month, :year] + order: + - :day + - :month + - :year time: formats: @@ -33,37 +37,37 @@ half_a_minute: "meio minuto" less_than_x_seconds: one: "menos de 1 segundo" - other: "menos de {{count}} segundos" + other: "menos de %{count} segundos" x_seconds: one: "1 segundo" - other: "{{count}} segundos" + other: "%{count} segundos" less_than_x_minutes: one: "menos de um minuto" - other: "menos de {{count}} minutos" + other: "menos de %{count} minutos" x_minutes: one: "1 minuto" - other: "{{count}} minutos" + other: "%{count} minutos" about_x_hours: one: "aproximadamente 1 hora" - other: "aproximadamente {{count}} horas" + other: "aproximadamente %{count} horas" x_days: one: "1 dia" - other: "{{count}} dias" + other: "%{count} dias" about_x_months: one: "aproximadamente 1 mês" - other: "aproximadamente {{count}} meses" + other: "aproximadamente %{count} meses" x_months: one: "1 mês" - other: "{{count}} meses" + other: "%{count} meses" about_x_years: one: "aproximadamente 1 ano" - other: "aproximadamente {{count}} anos" + other: "aproximadamente %{count} anos" over_x_years: one: "mais de 1 ano" - other: "mais de {{count}} anos" + other: "mais de %{count} anos" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" number: format: @@ -102,8 +106,8 @@ errors: template: header: - one: "Não foi possível guardar {{model}}: 1 erro" - other: "Não foi possível guardar {{model}}: {{count}} erros" + one: "Não foi possível guardar %{model}: 1 erro" + other: "Não foi possível guardar %{model}: %{count} erros" body: "Por favor, verifique os seguintes campos:" messages: inclusion: "não está incluído na lista" @@ -113,16 +117,16 @@ accepted: "precisa de ser aceite" empty: "não pode estar em branco" blank: "não pode estar em branco" - too_long: "tem demasiados caracteres (máximo: {{count}} caracteres)" - too_short: "tem poucos caracteres (mínimo: {{count}} caracteres)" - wrong_length: "não é do tamanho correcto (necessita de ter {{count}} caracteres)" + too_long: "tem demasiados caracteres (máximo: %{count} caracteres)" + too_short: "tem poucos caracteres (mínimo: %{count} caracteres)" + wrong_length: "não é do tamanho correcto (necessita de ter %{count} caracteres)" taken: "não está disponível" not_a_number: "não é um número" - greater_than: "tem de ser maior do que {{count}}" - greater_than_or_equal_to: "tem de ser maior ou igual a {{count}}" - equal_to: "tem de ser igual a {{count}}" - less_than: "tem de ser menor do que {{count}}" - less_than_or_equal_to: "tem de ser menor ou igual a {{count}}" + greater_than: "tem de ser maior do que %{count}" + greater_than_or_equal_to: "tem de ser maior ou igual a %{count}" + equal_to: "tem de ser igual a %{count}" + less_than: "tem de ser menor do que %{count}" + less_than_or_equal_to: "tem de ser menor ou igual a %{count}" odd: "tem de ser ímpar" even: "tem de ser par" greater_than_start_date: "deve ser maior que a data inicial" @@ -141,7 +145,7 @@ general_csv_separator: ';' general_csv_decimal_separator: ',' general_csv_encoding: ISO-8859-15 - general_pdf_encoding: ISO-8859-15 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' notice_account_updated: A conta foi actualizada com sucesso. @@ -160,34 +164,34 @@ notice_file_not_found: A página que está a tentar aceder não existe ou foi removida. notice_locking_conflict: Os dados foram actualizados por outro utilizador. notice_not_authorized: Não está autorizado a visualizar esta página. - notice_email_sent: "Foi enviado um e-mail para {{value}}" - notice_email_error: "Ocorreu um erro ao enviar o e-mail ({{value}})" + notice_email_sent: "Foi enviado um e-mail para %{value}" + notice_email_error: "Ocorreu um erro ao enviar o e-mail (%{value})" notice_feeds_access_key_reseted: A sua chave de RSS foi inicializada. - notice_failed_to_save_issues: "Não foi possível guardar {{count}} tarefa(s) das {{total}} seleccionadas: {{ids}}." + notice_failed_to_save_issues: "Não foi possível guardar %{count} tarefa(s) das %{total} seleccionadas: %{ids}." notice_no_issue_selected: "Nenhuma tarefa seleccionada! Por favor, seleccione as tarefas que quer editar." notice_account_pending: "A sua conta foi criada e está agora à espera de aprovação do administrador." notice_default_data_loaded: Configuração padrão carregada com sucesso. notice_unable_delete_version: Não foi possível apagar a versão. - error_can_t_load_default_data: "Não foi possível carregar a configuração padrão: {{value}}" + error_can_t_load_default_data: "Não foi possível carregar a configuração padrão: %{value}" error_scm_not_found: "A entrada ou revisão não foi encontrada no repositório." - error_scm_command_failed: "Ocorreu um erro ao tentar aceder ao repositório: {{value}}" + error_scm_command_failed: "Ocorreu um erro ao tentar aceder ao repositório: %{value}" error_scm_annotate: "A entrada não existe ou não pode ser anotada." error_issue_not_found_in_project: 'A tarefa não foi encontrada ou não pertence a este projecto.' - mail_subject_lost_password: "Palavra-chave de {{value}}" + mail_subject_lost_password: "Palavra-chave de %{value}" mail_body_lost_password: 'Para mudar a sua palavra-chave, clique na ligação abaixo:' - mail_subject_register: "Activação de conta de {{value}}" + mail_subject_register: "Activação de conta de %{value}" mail_body_register: 'Para activar a sua conta, clique na ligação abaixo:' - mail_body_account_information_external: "Pode utilizar a conta {{value}} para autenticar-se." + mail_body_account_information_external: "Pode utilizar a conta %{value} para autenticar-se." mail_body_account_information: Informação da sua conta - mail_subject_account_activation_request: "Pedido de activação da conta {{value}}" - mail_body_account_activation_request: "Um novo utilizador ({{value}}) registou-se. A sua conta está à espera de aprovação:" - mail_subject_reminder: "{{count}} tarefa(s) para entregar nos próximos {{days}} dias" - mail_body_reminder: "{{count}} tarefa(s) que estão atribuídas a si estão agendadas para estarem completas nos próximos {{days}} dias:" + mail_subject_account_activation_request: "Pedido de activação da conta %{value}" + mail_body_account_activation_request: "Um novo utilizador (%{value}) registou-se. A sua conta está à espera de aprovação:" + mail_subject_reminder: "%{count} tarefa(s) para entregar nos próximos %{days} dias" + mail_body_reminder: "%{count} tarefa(s) que estão atribuídas a si estão agendadas para estarem completas nos próximos %{days} dias:" gui_validation_error: 1 erro - gui_validation_error_plural: "{{count}} erros" + gui_validation_error_plural: "%{count} erros" field_name: Nome field_description: Descrição @@ -228,7 +232,7 @@ field_homepage: Página field_is_public: Público field_parent: Sub-projecto de - field_is_in_roadmap: Tarefas mostradas no roadmap + field_is_in_roadmap: Tarefas mostradas no mapa de planificação field_login: Nome de utilizador field_mail_notification: Notificações por e-mail field_admin: Administrador @@ -248,8 +252,9 @@ field_attr_firstname: Atributo nome próprio field_attr_lastname: Atributo último nome field_attr_mail: Atributo e-mail - field_onthefly: Criação de utilizadores na hora - field_done_ratio: % Completo + field_onthefly: Criação imediata de utilizadores + field_start_date: Início + field_done_ratio: "% Completo" field_auth_source: Modo de autenticação field_hide_mail: Esconder endereço de e-mail field_comments: Comentário @@ -263,7 +268,7 @@ field_is_filter: Usado como filtro field_issue_to: Tarefa relacionada field_delay: Atraso - field_assignable: As tarefas podem ser associados a esta função + field_assignable: As tarefas podem ser associadas a esta função field_redirect_existing_links: Redireccionar ligações existentes field_estimated_hours: Tempo estimado field_column_names: Colunas @@ -298,7 +303,6 @@ setting_cross_project_issue_relations: Permitir relações entre tarefas de projectos diferentes setting_issue_list_default_columns: Colunas na lista de tarefas por omissão setting_repositories_encodings: Encodings dos repositórios - setting_commit_logs_encoding: Encoding das mensagens de commit setting_emails_footer: Rodapé do e-mails setting_protocol: Protocolo setting_per_page_options: Opções de objectos por página @@ -328,14 +332,14 @@ label_x_projects: zero: no projects one: 1 project - other: "{{count}} projects" + other: "%{count} projects" label_project_all: Todos os projectos label_project_latest: Últimos projectos label_issue: Tarefa label_issue_new: Nova tarefa label_issue_plural: Tarefas label_issue_view_all: Ver todas as tarefas - label_issues_by: "Tarefas por {{value}}" + label_issues_by: "Tarefas por %{value}" label_issue_added: Tarefa adicionada label_issue_updated: Tarefa actualizada label_document: Documento @@ -391,7 +395,7 @@ label_auth_source_new: Novo modo de autenticação label_auth_source_plural: Modos de autenticação label_subproject_plural: Sub-projectos - label_and_its_subprojects: "{{value}} e sub-projectos" + label_and_its_subprojects: "%{value} e sub-projectos" label_min_max_length: Tamanho mínimo-máximo label_list: Lista label_date: Data @@ -402,8 +406,8 @@ label_text: Texto longo label_attribute: Atributo label_attribute_plural: Atributos - label_download: "{{count}} Download" - label_download_plural: "{{count}} Downloads" + label_download: "%{count} Download" + label_download_plural: "%{count} Downloads" label_no_data: Sem dados para mostrar label_change_status: Mudar estado label_history: Histórico @@ -434,17 +438,17 @@ label_closed_issues: fechado label_closed_issues_plural: fechados label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{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" + other: "%{count} open" label_x_closed_issues_abbr: zero: 0 closed one: 1 closed - other: "{{count}} closed" + other: "%{count} closed" label_total: Total label_permissions: Permissões label_current_status: Estado actual @@ -462,7 +466,7 @@ label_months_from: meses de label_gantt: Gantt label_internal: Interno - label_last_changes: "últimas {{count}} alterações" + label_last_changes: "últimas %{count} alterações" label_change_view_all: Ver todas as alterações label_personalize_page: Personalizar esta página label_comment: Comentário @@ -470,7 +474,7 @@ label_x_comments: zero: no comments one: 1 comment - other: "{{count}} comments" + other: "%{count} comments" label_comment_add: Adicionar comentário label_comment_added: Comentário adicionado label_comment_delete: Apagar comentários @@ -489,7 +493,7 @@ label_yesterday: ontem label_this_week: esta semana label_last_week: semana passada - label_last_n_days: "últimos {{count}} dias" + label_last_n_days: "últimos %{count} dias" label_this_month: este mês label_last_month: mês passado label_this_year: este ano @@ -503,8 +507,8 @@ label_repository: Repositório label_repository_plural: Repositórios label_browse: Navegar - label_modification: "{{count}} alteração" - label_modification_plural: "{{count}} alterações" + label_modification: "%{count} alteração" + label_modification_plural: "%{count} alterações" label_revision: Revisão label_revision_plural: Revisões label_associated_revisions: Revisões associadas @@ -521,9 +525,9 @@ label_sort_higher: Mover para cima label_sort_lower: Mover para baixo label_sort_lowest: Mover para o fim - label_roadmap: Roadmap - label_roadmap_due_in: "Termina em {{value}}" - label_roadmap_overdue: "Atrasado {{value}}" + label_roadmap: Planificação + label_roadmap_due_in: "Termina em %{value}" + label_roadmap_overdue: "Atrasado %{value}" label_roadmap_no_issues: Sem tarefas para esta versão label_search: Procurar label_result_plural: Resultados @@ -541,8 +545,8 @@ label_changes_details: Detalhes de todas as mudanças label_issue_tracking: Tarefas label_spent_time: Tempo gasto - label_f_hour: "{{value}} hora" - label_f_hour_plural: "{{value}} horas" + label_f_hour: "%{value} hora" + label_f_hour_plural: "%{value} horas" label_time_tracking: Registo de tempo label_change_plural: Mudanças label_statistics: Estatísticas @@ -591,12 +595,12 @@ label_date_from: De label_date_to: Para label_language_based: Baseado na língua do utilizador - label_sort_by: "Ordenar por {{value}}" + label_sort_by: "Ordenar por %{value}" label_send_test_email: enviar um e-mail de teste - label_feeds_access_key_created_on: "Chave RSS criada há {{value}} atrás" + label_feeds_access_key_created_on: "Chave RSS criada há %{value} atrás" label_module_plural: Módulos - label_added_time_by: "Adicionado por {{author}} há {{age}} atrás" - label_updated_time: "Alterado há {{value}} atrás" + label_added_time_by: "Adicionado por %{author} há %{age} atrás" + label_updated_time: "Alterado há %{value} atrás" label_jump_to_a_project: Ir para o projecto... label_file_plural: Ficheiros label_changeset_plural: Changesets @@ -612,7 +616,7 @@ label_registration_activation_by_email: Activação da conta por e-mail label_registration_manual_activation: Activação manual da conta label_registration_automatic_activation: Activação automática da conta - label_display_per_page: "Por página: {{value}}" + label_display_per_page: "Por página: %{value}" label_age: Idade label_change_properties: Mudar propriedades label_general: Geral @@ -678,43 +682,43 @@ text_regexp_info: ex. ^[A-Z0-9]+$ text_min_max_length_info: 0 siginifica sem restrição text_project_destroy_confirmation: Tem a certeza que deseja apagar o projecto e todos os dados relacionados? - text_subprojects_destroy_warning: "O(s) seu(s) sub-projecto(s): {{value}} também será/serão apagado(s)." + text_subprojects_destroy_warning: "O(s) seu(s) sub-projecto(s): %{value} também será/serão apagado(s)." text_workflow_edit: Seleccione uma função e um tipo de tarefa para editar o fluxo de trabalho text_are_you_sure: Tem a certeza? text_tip_issue_begin_day: tarefa a começar neste dia text_tip_issue_end_day: tarefa a acabar neste dia text_tip_issue_begin_end_day: tarefa a começar e acabar neste dia text_project_identifier_info: 'Apenas são permitidos letras minúsculas (a-z), números e hífens.
    Uma vez guardado, o identificador não poderá ser alterado.' - text_caracters_maximum: "máximo {{count}} caracteres." - text_caracters_minimum: "Deve ter pelo menos {{count}} caracteres." - text_length_between: "Deve ter entre {{min}} e {{max}} caracteres." + text_caracters_maximum: "máximo %{count} caracteres." + text_caracters_minimum: "Deve ter pelo menos %{count} caracteres." + text_length_between: "Deve ter entre %{min} e %{max} caracteres." text_tracker_no_workflow: Sem fluxo de trabalho definido para este tipo de tarefa. text_unallowed_characters: Caracteres não permitidos text_comma_separated: Permitidos múltiplos valores (separados por vírgula). text_issues_ref_in_commit_messages: Referenciando e fechando tarefas em mensagens de commit - text_issue_added: "Tarefa {{id}} foi criada por {{author}}." - text_issue_updated: "Tarefa {{id}} foi actualizada por {{author}}." + text_issue_added: "Tarefa %{id} foi criada por %{author}." + text_issue_updated: "Tarefa %{id} foi actualizada por %{author}." text_wiki_destroy_confirmation: Tem a certeza que deseja apagar este wiki e todo o seu conteúdo? - text_issue_category_destroy_question: "Algumas tarefas ({{count}}) estão atribuídas a esta categoria. O que quer fazer?" + text_issue_category_destroy_question: "Algumas tarefas (%{count}) estão atribuídas a esta categoria. O que quer fazer?" text_issue_category_destroy_assignments: Remover as atribuições à categoria text_issue_category_reassign_to: Re-atribuir as tarefas para esta categoria text_user_mail_option: "Para projectos não seleccionados, apenas receberá notificações acerca de coisas que está a observar ou está envolvido (ex. tarefas das quais foi o criador ou lhes foram atribuídas)." text_no_configuration_data: "Perfis, tipos de tarefas, estados das tarefas e workflows ainda não foram configurados.\nÉ extremamente recomendado carregar as configurações padrão. Será capaz de as modificar depois de estarem carregadas." text_load_default_configuration: Carregar as configurações padrão - text_status_changed_by_changeset: "Aplicado no changeset {{value}}." + text_status_changed_by_changeset: "Aplicado no changeset %{value}." text_issues_destroy_confirmation: 'Tem a certeza que deseja apagar a(s) tarefa(s) seleccionada(s)?' text_select_project_modules: 'Seleccione os módulos a activar para este projecto:' text_default_administrator_account_changed: Conta default de administrador alterada. text_file_repository_writable: Repositório de ficheiros com permissões de escrita text_rmagick_available: RMagick disponível (opcional) - text_destroy_time_entries_question: "{{hours}} horas de trabalho foram atribuídas a estas tarefas que vai apagar. O que deseja fazer?" + text_destroy_time_entries_question: "%{hours} horas de trabalho foram atribuídas a estas tarefas que vai apagar. O que deseja fazer?" text_destroy_time_entries: Apagar as horas text_assign_time_entries_to_project: Atribuir as horas ao projecto text_reassign_time_entries: 'Re-atribuir as horas para esta tarefa:' - text_user_wrote: "{{value}} escreveu:" - text_enumeration_destroy_question: "{{count}} objectos estão atribuídos a este valor." + 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 @@ -793,12 +797,12 @@ text_repository_usernames_mapping: "Seleccionar ou actualizar o utilizador de Redmine mapeado a cada nome de utilizador encontrado no repositório.\nUtilizadores com o mesmo nome de utilizador ou email no Redmine e no repositório são mapeados automaticamente." permission_edit_own_messages: Editar as próprias mensagens permission_delete_own_messages: Apagar as próprias mensagens - label_user_activity: "Actividade de {{value}}" - label_updated_time_by: "Actualizado por {{author}} há {{age}}" + label_user_activity: "Actividade de %{value}" + label_updated_time_by: "Actualizado por %{author} há %{age}" text_diff_truncated: '... Este diff foi truncado porque excede o tamanho máximo que pode ser mostrado.' setting_diff_max_lines_displayed: Número máximo de linhas de diff mostradas text_plugin_assets_writable: Escrita na pasta de activos dos módulos de extensão possível - warning_attachments_not_saved: "Não foi possível gravar {{count}} ficheiro(s) ." + warning_attachments_not_saved: "Não foi possível gravar %{count} ficheiro(s) ." button_create_and_continue: Criar e continuar text_custom_field_possible_values_info: 'Uma linha para cada valor' label_display: Mostrar @@ -813,21 +817,21 @@ label_descending: Descendente label_sort: Ordenar label_ascending: Ascendente - label_date_from_to: De {{start}} a {{end}} + label_date_from_to: De %{start} a %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: Esta página tem {{descendants}} página(s) subordinada(s) e descendente(s). O que deseja fazer? + text_wiki_page_destroy_question: Esta página tem %{descendants} página(s) subordinada(s) e descendente(s). O que deseja fazer? text_wiki_page_reassign_children: Reatribuir páginas subordinadas a esta página principal text_wiki_page_nullify_children: Manter páginas subordinadas como páginas raíz text_wiki_page_destroy_children: Apagar as páginas subordinadas e todos os seus descendentes setting_password_min_length: Tamanho mínimo de palavra-chave field_group_by: Agrupar resultados por - mail_subject_wiki_content_updated: "A página Wiki '{{id}}' foi actualizada" + mail_subject_wiki_content_updated: "A página Wiki '%{id}' foi actualizada" label_wiki_content_added: Página Wiki adicionada - mail_subject_wiki_content_added: "A página Wiki '{{id}}' foi adicionada" - mail_body_wiki_content_added: A página Wiki '{{id}}' foi adicionada por {{author}}. + mail_subject_wiki_content_added: "A página Wiki '%{id}' foi adicionada" + mail_body_wiki_content_added: A página Wiki '%{id}' foi adicionada por %{author}. label_wiki_content_updated: Página Wiki actualizada - mail_body_wiki_content_updated: A página Wiki '{{id}}' foi actualizada por {{author}}. + mail_body_wiki_content_updated: A página Wiki '%{id}' foi actualizada por %{author}. permission_add_project: Criar projecto setting_new_project_user_role_id: Função atribuída a um utilizador não-administrador que cria um projecto label_view_all_revisions: Ver todas as revisões @@ -839,10 +843,10 @@ label_group: Grupo label_group_new: Novo grupo label_time_entry_plural: Tempo registado - text_journal_changed: "{{label}} alterado de {{old}} para {{new}}" - text_journal_set_to: "{{label}} configurado como {{value}}" - text_journal_deleted: "{{label}} apagou ({{old}})" - text_journal_added: "{{label}} {{value}} adicionado" + text_journal_changed: "%{label} alterado de %{old} para %{new}" + text_journal_set_to: "%{label} configurado como %{value}" + text_journal_deleted: "%{label} apagou (%{old})" + text_journal_added: "%{label} %{value} adicionado" field_active: Activo enumeration_system_activity: Actividade de sistema permission_delete_issue_watchers: Apagar observadores @@ -877,9 +881,9 @@ setting_start_of_week: Iniciar calendários a permission_view_issues: Ver tarefas label_display_used_statuses_only: Só exibir estados empregues por este tipo de tarefa - label_revision_id: Revisão {{value}} + label_revision_id: Revisão %{value} label_api_access_key: Chave de acesso API - label_api_access_key_created_on: Chave de acesso API criada há {{value}} + label_api_access_key_created_on: Chave de acesso API criada há %{value} label_feeds_access_key: Chave de acesso RSS notice_api_access_key_reseted: A sua chave de acesso API foi reinicializada. setting_rest_api_enabled: Activar serviço Web REST @@ -906,12 +910,12 @@ label_subtask_plural: Sub-tarefa label_project_copy_notifications: Enviar notificações por e-mail durante a cópia do projecto error_can_not_delete_custom_field: Não foi possível apagar o campo personalizado - error_unable_to_connect: Não foi possível ligar ({{value}}) + error_unable_to_connect: Não foi possível ligar (%{value}) error_can_not_remove_role: Esta função está actualmente em uso e não pode ser apagada. error_can_not_delete_tracker: Existem ainda tarefas nesta categoria. Não é possível apagar este tipo de tarefa. field_principal: Principal label_my_page_block: Bloco da minha página - notice_failed_to_save_members: "Erro ao guardar o(s) membro(s): {{errors}}." + notice_failed_to_save_members: "Erro ao guardar o(s) membro(s): %{errors}." text_zoom_out: Ampliar text_zoom_in: Reduzir notice_unable_delete_time_entry: Não foi possível apagar a entrada de tempo registado. @@ -919,19 +923,61 @@ field_time_entries: Tempo registado project_module_gantt: Gantt project_module_calendar: Calendário - button_edit_associated_wikipage: "Editar página Wiki associada: {{page_title}}" + button_edit_associated_wikipage: "Editar página Wiki associada: %{page_title}" text_are_you_sure_with_children: Apagar tarefa e todas as sub-tarefas? - 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. - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header + field_text: Campo de texto + label_user_mail_option_only_owner: Apenas para tarefas das quais sou proprietário + setting_default_notification_option: Opção predefinida de notificação + label_user_mail_option_only_my_events: Apenas para tarefas que observo ou em que estou envolvido + label_user_mail_option_only_assigned: Apenas para tarefas que me foram atribuídas + label_user_mail_option_none: Sem eventos + field_member_of_group: Grupo do detentor de atribuição + field_assigned_to_role: Papel do detentor de atribuição + notice_not_authorized_archived_project: O projecto a que tentou aceder foi arquivado. + label_principal_search: "Procurar utilizador ou grupo:" + label_user_search: "Procurar utilizador:" + field_visible: Visível + setting_emails_header: Cabeçalho dos e-mails + setting_commit_logtime_activity_id: Actividade para tempo registado + text_time_logged_by_changeset: Aplicado no conjunto de alterações %{value}. + setting_commit_logtime_enabled: Activar registo de tempo + notice_gantt_chart_truncated: O gráfico foi truncado porque excede o número máximo de itens visível (%{máx.}) + setting_gantt_items_limit: Número máximo de itens exibidos no gráfico 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Encoding das mensagens de commit + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/ro.yml.svn-base --- a/config/locales/.svn/text-base/ro.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/ro.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -14,7 +14,10 @@ month_names: [~, Ianuarie, Februarie, Martie, Aprilie, Mai, Iunie, Iulie, August, Septembrie, Octombrie, Noiembrie, Decembrie] abbr_month_names: [~, Ian, Feb, Mar, Apr, Mai, Iun, Iul, Aug, Sep, Oct, Noi, Dec] # Used in date_select and datime_select. - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -30,37 +33,37 @@ half_a_minute: "jumătate de minut" less_than_x_seconds: one: "mai puțin de o secundă" - other: "mai puțin de {{count}} secunde" + other: "mai puțin de %{count} secunde" x_seconds: one: "o secundă" - other: "{{count}} secunde" + other: "%{count} secunde" less_than_x_minutes: one: "mai puțin de un minut" - other: "mai puțin de {{count}} minute" + other: "mai puțin de %{count} minute" x_minutes: one: "un minut" - other: "{{count}} minute" + other: "%{count} minute" about_x_hours: one: "aproximativ o oră" - other: "aproximativ {{count}} ore" + other: "aproximativ %{count} ore" x_days: one: "o zi" - other: "{{count}} zile" + other: "%{count} zile" about_x_months: one: "aproximativ o lună" - other: "aproximativ {{count}} luni" + other: "aproximativ %{count} luni" x_months: one: "o luna" - other: "{{count}} luni" + other: "%{count} luni" about_x_years: one: "aproximativ un an" - other: "aproximativ {{count}} ani" + other: "aproximativ %{count} ani" over_x_years: one: "peste un an" - other: "peste {{count}} ani" + other: "peste %{count} ani" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" number: human: @@ -86,6 +89,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "nu este inclus în listă" exclusion: "este rezervat" @@ -100,11 +107,11 @@ taken: "a fost luat deja" not_a_number: "nu este un număr" not_a_date: "nu este o dată validă" - greater_than: "trebuie să fie mai mare de {{count}}" - greater_than_or_equal_to: "trebuie să fie mai mare sau egal cu {{count}}" + greater_than: "trebuie să fie mai mare de %{count}" + greater_than_or_equal_to: "trebuie să fie mai mare sau egal cu %{count}" equal_to: "trebuie să fie egal cu {count}}" - less_than: "trebuie să fie mai mic decat {{count}}" - less_than_or_equal_to: "trebuie să fie mai mic sau egal cu {{count}}" + less_than: "trebuie să fie mai mic decat %{count}" + less_than_or_equal_to: "trebuie să fie mai mic sau egal cu %{count}" odd: "trebuie să fie impar" even: "trebuie să fie par" greater_than_start_date: "trebuie să fie după data de început" @@ -141,36 +148,36 @@ notice_file_not_found: Pagina pe care doriți să o accesați nu există sau a fost ștearsă. notice_locking_conflict: Datele au fost actualizate de alt utilizator. notice_not_authorized: Nu sunteți autorizat sa accesați această pagină. - notice_email_sent: "S-a trimis un email către {{value}}" - notice_email_error: "A intervenit o eroare la trimiterea de email ({{value}})" + notice_email_sent: "S-a trimis un email către %{value}" + notice_email_error: "A intervenit o eroare la trimiterea de email (%{value})" notice_feeds_access_key_reseted: Cheia de acces RSS a fost resetată. - notice_failed_to_save_issues: "Nu s-au putut salva {{count}} tichete din cele {{total}} selectate: {{ids}}." + notice_failed_to_save_issues: "Nu s-au putut salva %{count} tichete din cele %{total} selectate: %{ids}." notice_no_issue_selected: "Niciun tichet selectat! Vă rugăm să selectați tichetele pe care doriți să le editați." notice_account_pending: "Contul dumneavoastră a fost creat și așteaptă aprobarea administratorului." notice_default_data_loaded: S-a încărcat configurația implicită. notice_unable_delete_version: Nu se poate șterge versiunea. - error_can_t_load_default_data: "Nu s-a putut încărca configurația implicită: {{value}}" + error_can_t_load_default_data: "Nu s-a putut încărca configurația implicită: %{value}" error_scm_not_found: "Nu s-a găsit articolul sau revizia în depozit." - error_scm_command_failed: "A intervenit o eroare la accesarea depozitului: {{value}}" + error_scm_command_failed: "A intervenit o eroare la accesarea depozitului: %{value}" error_scm_annotate: "Nu există sau nu poate fi adnotată." error_issue_not_found_in_project: 'Tichetul nu a fost găsit sau nu aparține acestui proiect' - warning_attachments_not_saved: "Nu s-au putut salva {{count}} fișiere." + warning_attachments_not_saved: "Nu s-au putut salva %{count} fișiere." - mail_subject_lost_password: "Parola dumneavoastră: {{value}}" + mail_subject_lost_password: "Parola dumneavoastră: %{value}" mail_body_lost_password: 'Pentru a schimba parola, accesați:' - mail_subject_register: "Activarea contului {{value}}" + mail_subject_register: "Activarea contului %{value}" mail_body_register: 'Pentru activarea contului, accesați:' mail_body_account_information_external: "Puteți folosi contul „{value}}” pentru a vă autentifica." mail_body_account_information: Informații despre contul dumneavoastră - mail_subject_account_activation_request: "Cerere de activare a contului {{value}}" - mail_body_account_activation_request: "S-a înregistrat un utilizator nou ({{value}}). Contul așteaptă aprobarea dumneavoastră:" - mail_subject_reminder: "{{count}} tichete trebuie rezolvate în următoarele {{days}} zile" - mail_body_reminder: "{{count}} tichete atribuite dumneavoastră trebuie rezolvate în următoarele {{days}} zile:" + mail_subject_account_activation_request: "Cerere de activare a contului %{value}" + mail_body_account_activation_request: "S-a înregistrat un utilizator nou (%{value}). Contul așteaptă aprobarea dumneavoastră:" + mail_subject_reminder: "%{count} tichete trebuie rezolvate în următoarele %{days} zile" + mail_body_reminder: "%{count} tichete atribuite dumneavoastră trebuie rezolvate în următoarele %{days} zile:" gui_validation_error: o eroare - gui_validation_error_plural: "{{count}} erori" + gui_validation_error_plural: "%{count} erori" field_name: Nume field_description: Descriere @@ -232,6 +239,7 @@ field_attr_lastname: Atribut nume field_attr_mail: Atribut email field_onthefly: Creare utilizator pe loc + field_start_date: Data începerii field_done_ratio: Realizat (%) field_auth_source: Mod autentificare field_hide_mail: Nu se afișează adresa de email @@ -286,7 +294,6 @@ setting_cross_project_issue_relations: Permite legături de tichete între proiecte setting_issue_list_default_columns: Coloane implicite afișate în lista de tichete setting_repositories_encodings: Codare pentru depozit - setting_commit_logs_encoding: Codare pentru mesaje setting_emails_footer: Subsol email setting_protocol: Protocol setting_per_page_options: Număr de obiecte pe pagină @@ -370,14 +377,14 @@ label_x_projects: zero: niciun proiect one: un proiect - other: "{{count}} proiecte" + other: "%{count} proiecte" label_project_all: Toate proiectele label_project_latest: Proiecte noi label_issue: Tichet label_issue_new: Tichet nou label_issue_plural: Tichete label_issue_view_all: Afișează toate tichetele - label_issues_by: "Sortează după {{value}}" + label_issues_by: "Sortează după %{value}" label_issue_added: Adaugat label_issue_updated: Actualizat label_document: Document @@ -426,7 +433,7 @@ label_registered_on: Înregistrat la label_activity: Activitate label_overall_activity: Activitate - vedere de ansamblu - label_user_activity: "Activitate {{value}}" + label_user_activity: "Activitate %{value}" label_new: Nou label_logged_as: Autentificat ca label_environment: Mediu @@ -435,7 +442,7 @@ label_auth_source_new: Nou label_auth_source_plural: Moduri de autentificare label_subproject_plural: Sub-proiecte - label_and_its_subprojects: "{{value}} și sub-proiecte" + label_and_its_subprojects: "%{value} și sub-proiecte" label_min_max_length: lungime min - max label_list: Listă label_date: Dată @@ -446,8 +453,8 @@ label_text: Text lung label_attribute: Atribut label_attribute_plural: Atribute - label_download: "{{count}} descărcare" - label_download_plural: "{{count}} descărcări" + label_download: "%{count} descărcare" + label_download_plural: "%{count} descărcări" label_no_data: Nu există date de afișat label_change_status: Schimbă starea label_history: Istoric @@ -478,17 +485,17 @@ label_closed_issues: închis label_closed_issues_plural: închise label_x_open_issues_abbr_on_total: - zero: 0 deschise / {{total}} - one: 1 deschis / {{total}} - other: "{{count}} deschise / {{total}}" + zero: 0 deschise / %{total} + one: 1 deschis / %{total} + other: "%{count} deschise / %{total}" label_x_open_issues_abbr: zero: 0 deschise one: 1 deschis - other: "{{count}} deschise" + other: "%{count} deschise" label_x_closed_issues_abbr: zero: 0 închise one: 1 închis - other: "{{count}} închise" + other: "%{count} închise" label_total: Total label_permissions: Permisiuni label_current_status: Stare curentă @@ -506,7 +513,7 @@ label_months_from: luni de la label_gantt: Gantt label_internal: Intern - label_last_changes: "ultimele {{count}} schimbări" + label_last_changes: "ultimele %{count} schimbări" label_change_view_all: Afișează toate schimbările label_personalize_page: Personalizează aceasta pagina label_comment: Comentariu @@ -514,7 +521,7 @@ label_x_comments: zero: fara comentarii one: 1 comentariu - other: "{{count}} comentarii" + other: "%{count} comentarii" label_comment_add: Adaugă un comentariu label_comment_added: Adăugat label_comment_delete: Șterge comentariul @@ -533,7 +540,7 @@ label_yesterday: ieri label_this_week: săptămâna aceasta label_last_week: săptămâna trecută - label_last_n_days: "ultimele {{count}} zile" + label_last_n_days: "ultimele %{count} zile" label_this_month: luna aceasta label_last_month: luna trecută label_this_year: anul acesta @@ -547,8 +554,8 @@ label_repository: Depozit label_repository_plural: Depozite label_browse: Afișează - label_modification: "{{count}} schimbare" - label_modification_plural: "{{count}} schimbări" + label_modification: "%{count} schimbare" + label_modification_plural: "%{count} schimbări" label_revision: Revizie label_revision_plural: Revizii label_associated_revisions: Revizii asociate @@ -566,8 +573,8 @@ label_sort_lower: În jos label_sort_lowest: Ultima label_roadmap: Planificare - label_roadmap_due_in: "De terminat în {{value}}" - label_roadmap_overdue: "Întârziat cu {{value}}" + label_roadmap_due_in: "De terminat în %{value}" + label_roadmap_overdue: "Întârziat cu %{value}" label_roadmap_no_issues: Nu există tichete pentru această versiune label_search: Caută label_result_plural: Rezultate @@ -585,8 +592,8 @@ label_changes_details: Detaliile tuturor schimbărilor label_issue_tracking: Urmărire tichete label_spent_time: Timp alocat - label_f_hour: "{{value}} oră" - label_f_hour_plural: "{{value}} ore" + label_f_hour: "%{value} oră" + label_f_hour_plural: "%{value} ore" label_time_tracking: Urmărire timp de lucru label_change_plural: Schimbări label_statistics: Statistici @@ -635,13 +642,13 @@ label_date_from: De la label_date_to: La label_language_based: Un funcție de limba de afișare a utilizatorului - label_sort_by: "Sortează după {{value}}" + label_sort_by: "Sortează după %{value}" label_send_test_email: Trimite email de test - label_feeds_access_key_created_on: "Cheie de acces creată acum {{value}}" + label_feeds_access_key_created_on: "Cheie de acces creată acum %{value}" label_module_plural: Module - label_added_time_by: "Adăugat de {{author}} acum {{age}}" - label_updated_time_by: "Actualizat de {{author}} acum {{age}}" - label_updated_time: "Actualizat acum {{value}}" + label_added_time_by: "Adăugat de %{author} acum %{age}" + label_updated_time_by: "Actualizat de %{author} acum %{age}" + label_updated_time: "Actualizat acum %{value}" label_jump_to_a_project: Alege proiectul... label_file_plural: Fișiere label_changeset_plural: Schimbări @@ -657,7 +664,7 @@ label_registration_activation_by_email: activare cont prin email label_registration_manual_activation: activare manuală a contului label_registration_automatic_activation: activare automată a contului - label_display_per_page: "pe pagină: {{value}}" + label_display_per_page: "pe pagină: %{value}" label_age: vechime label_change_properties: Schimbă proprietățile label_general: General @@ -681,7 +688,7 @@ label_sort: Sortează label_ascending: Crescător label_descending: Descrescător - label_date_from_to: De la {{start}} la {{end}} + label_date_from_to: De la %{start} la %{end} button_login: Autentificare @@ -732,44 +739,44 @@ text_regexp_info: ex. ^[A-Z0-9]+$ text_min_max_length_info: 0 înseamnă fără restricții text_project_destroy_confirmation: Sigur doriți să ștergeți proiectul și toate datele asociate? - text_subprojects_destroy_warning: "Se vor șterge și sub-proiectele: {{value}}." + text_subprojects_destroy_warning: "Se vor șterge și sub-proiectele: %{value}." text_workflow_edit: Selectați un rol și un tip de tichet pentru a edita modul de lucru text_are_you_sure: Sunteți sigur(ă)? text_tip_issue_begin_day: sarcină care începe în această zi text_tip_issue_end_day: sarcină care se termină în această zi text_tip_issue_begin_end_day: sarcină care începe și se termină în această zi text_project_identifier_info: 'Sunt permise doar litere mici (a-z), numere și cratime.
    Odată salvat, identificatorul nu mai poate fi modificat.' - text_caracters_maximum: "maxim {{count}} caractere." - text_caracters_minimum: "Trebuie să fie minim {{count}} caractere." - text_length_between: "Lungime între {{min}} și {{max}} caractere." + text_caracters_maximum: "maxim %{count} caractere." + text_caracters_minimum: "Trebuie să fie minim %{count} caractere." + text_length_between: "Lungime între %{min} și %{max} caractere." text_tracker_no_workflow: Nu sunt moduri de lucru pentru acest tip de tichet text_unallowed_characters: Caractere nepermise text_comma_separated: Sunt permise mai multe valori (separate cu virgulă). text_issues_ref_in_commit_messages: Referire la tichete și rezolvare în textul mesajului - text_issue_added: "Tichetul {{id}} a fost adăugat de {{author}}." - text_issue_updated: "Tichetul {{id}} a fost actualizat de {{author}}." + text_issue_added: "Tichetul %{id} a fost adăugat de %{author}." + text_issue_updated: "Tichetul %{id} a fost actualizat de %{author}." text_wiki_destroy_confirmation: Sigur doriți ștergerea Wiki și a conținutului asociat? - text_issue_category_destroy_question: "Această categorie conține ({{count}}) tichete. Ce doriți să faceți?" + text_issue_category_destroy_question: "Această categorie conține (%{count}) tichete. Ce doriți să faceți?" text_issue_category_destroy_assignments: Șterge apartenența la categorie. text_issue_category_reassign_to: Atribuie tichetele la această categorie text_user_mail_option: "Pentru proiectele care nu sunt selectate, veți primi notificări doar pentru ceea ce urmăriți sau în ce sunteți implicat (ex: tichete create de dumneavoastră sau care vă sunt atribuite)." text_no_configuration_data: "Nu s-au configurat încă rolurile, stările tichetelor și modurile de lucru.\nEste recomandat să încărcați configurația implicită. O veți putea modifica ulterior." text_load_default_configuration: Încarcă configurația implicită - text_status_changed_by_changeset: "Aplicat în setul {{value}}." + text_status_changed_by_changeset: "Aplicat în setul %{value}." text_issues_destroy_confirmation: 'Sigur doriți să ștergeți tichetele selectate?' text_select_project_modules: 'Selectați modulele active pentru acest proiect:' text_default_administrator_account_changed: S-a schimbat contul administratorului implicit text_file_repository_writable: Se poate scrie în directorul de atașamente text_plugin_assets_writable: Se poate scrie în directorul de plugin-uri text_rmagick_available: Este disponibil RMagick (opțional) - text_destroy_time_entries_question: "{{hours}} ore sunt înregistrate la tichetele pe care doriți să le ștergeți. Ce doriți sa faceți?" + text_destroy_time_entries_question: "%{hours} ore sunt înregistrate la tichetele pe care doriți să le ștergeți. Ce doriți sa faceți?" text_destroy_time_entries: Șterge orele înregistrate text_assign_time_entries_to_project: Atribuie orele la proiect text_reassign_time_entries: 'Atribuie orele înregistrate la tichetul:' - text_user_wrote: "{{value}} a scris:" - text_enumeration_destroy_question: "Această valoare are {{count}} obiecte." + 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' @@ -801,18 +808,18 @@ enumeration_activities: Activități (timp de lucru) label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: Această pagină are {{descendants}} pagini anterioare și descendenți. Ce doriți să faceți? + text_wiki_page_destroy_question: Această pagină are %{descendants} pagini anterioare și descendenți. Ce doriți să faceți? text_wiki_page_reassign_children: Atribuie paginile la această pagină text_wiki_page_nullify_children: Menține paginile ca și pagini inițiale (root) text_wiki_page_destroy_children: Șterge paginile și descendenții setting_password_min_length: Lungime minimă parolă field_group_by: Grupează după - mail_subject_wiki_content_updated: "Pagina wiki '{{id}}' a fost actualizată" + mail_subject_wiki_content_updated: "Pagina wiki '%{id}' a fost actualizată" label_wiki_content_added: Adăugat - mail_subject_wiki_content_added: "Pagina wiki '{{id}}' a fost adăugată" - mail_body_wiki_content_added: Pagina wiki '{{id}}' a fost adăugată de {{author}}. + mail_subject_wiki_content_added: "Pagina wiki '%{id}' a fost adăugată" + mail_body_wiki_content_added: Pagina wiki '%{id}' a fost adăugată de %{author}. label_wiki_content_updated: Actualizat - mail_body_wiki_content_updated: Pagina wiki '{{id}}' a fost actualizată de {{author}}. + mail_body_wiki_content_updated: Pagina wiki '%{id}' a fost actualizată de %{author}. permission_add_project: Crează proiect setting_new_project_user_role_id: Rol atribuit utilizatorului non-admin care crează un proiect. label_view_all_revisions: Arată toate reviziile @@ -820,14 +827,14 @@ label_branch: Branch error_no_tracker_in_project: Nu există un tracker asociat cu proiectul. Verificați vă rog setările proiectului. error_no_default_issue_status: Nu există un status implicit al tichetelor. Verificați vă rog configurația (Mergeți la "Administrare -> Stări tichete"). - text_journal_changed: "{{label}} schimbat din {{old}} în {{new}}" - text_journal_set_to: "{{label}} setat ca {{value}}" - text_journal_deleted: "{{label}} șters ({{old}})" + text_journal_changed: "%{label} schimbat din %{old} în %{new}" + text_journal_set_to: "%{label} setat ca %{value}" + text_journal_deleted: "%{label} șters (%{old})" label_group_plural: Grupuri label_group: Grup label_group_new: Grup nou label_time_entry_plural: Timp alocat - text_journal_added: "{{label}} {{value}} added" + text_journal_added: "%{label} %{value} added" field_active: Active enumeration_system_activity: System Activity permission_delete_issue_watchers: Delete watchers @@ -862,9 +869,9 @@ setting_start_of_week: Start calendars on permission_view_issues: View Issues label_display_used_statuses_only: Only display statuses that are used by this tracker - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_api_access_key: API access key - label_api_access_key_created_on: API access key created {{value}} ago + label_api_access_key_created_on: API access key created %{value} ago label_feeds_access_key: RSS access key notice_api_access_key_reseted: Your API access key was reset. setting_rest_api_enabled: Enable REST web service @@ -891,12 +898,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -904,7 +911,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -915,8 +922,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Codare pentru mesaje + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/ru.yml.svn-base --- a/config/locales/.svn/text-base/ru.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/ru.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -28,7 +28,10 @@ abbr_month_names: [~, янв., февр., марта, апр., мая, июня, июля, авг., сент., окт., нояб., дек.] standalone_abbr_month_names: [~, янв., февр., март, апр., май, июнь, июль, авг., сент., окт., нояб., дек.] - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -89,60 +92,60 @@ distance_in_words: half_a_minute: "меньше минуты" less_than_x_seconds: - one: "меньше {{count}} секунды" - few: "меньше {{count}} секунд" - many: "меньше {{count}} секунд" - other: "меньше {{count}} секунды" + one: "меньше %{count} секунды" + few: "меньше %{count} секунд" + many: "меньше %{count} секунд" + other: "меньше %{count} секунды" x_seconds: - one: "{{count}} секунда" - few: "{{count}} секунды" - many: "{{count}} секунд" - other: "{{count}} секунды" + one: "%{count} секунда" + few: "%{count} секунды" + many: "%{count} секунд" + other: "%{count} секунды" less_than_x_minutes: - one: "меньше {{count}} минуты" - few: "меньше {{count}} минут" - many: "меньше {{count}} минут" - other: "меньше {{count}} минуты" + one: "меньше %{count} минуты" + few: "меньше %{count} минут" + many: "меньше %{count} минут" + other: "меньше %{count} минуты" x_minutes: - one: "{{count}} минуту" - few: "{{count}} минуты" - many: "{{count}} минут" - other: "{{count}} минуты" + one: "%{count} минуту" + few: "%{count} минуты" + many: "%{count} минут" + other: "%{count} минуты" about_x_hours: - one: "около {{count}} часа" - few: "около {{count}} часов" - many: "около {{count}} часов" - other: "около {{count}} часа" + one: "около %{count} часа" + few: "около %{count} часов" + many: "около %{count} часов" + other: "около %{count} часа" x_days: - one: "{{count}} день" - few: "{{count}} дня" - many: "{{count}} дней" - other: "{{count}} дня" + one: "%{count} день" + few: "%{count} дня" + many: "%{count} дней" + other: "%{count} дня" about_x_months: - one: "около {{count}} месяца" - few: "около {{count}} месяцев" - many: "около {{count}} месяцев" - other: "около {{count}} месяца" + one: "около %{count} месяца" + few: "около %{count} месяцев" + many: "около %{count} месяцев" + other: "около %{count} месяца" x_months: - one: "{{count}} месяц" - few: "{{count}} месяца" - many: "{{count}} месяцев" - other: "{{count}} месяца" + one: "%{count} месяц" + few: "%{count} месяца" + many: "%{count} месяцев" + other: "%{count} месяца" about_x_years: - one: "около {{count}} года" - few: "около {{count}} лет" - many: "около {{count}} лет" - other: "около {{count}} лет" + one: "около %{count} года" + few: "около %{count} лет" + many: "около %{count} лет" + other: "около %{count} лет" over_x_years: - one: "больше {{count}} года" - few: "больше {{count}} лет" - many: "больше {{count}} лет" - other: "больше {{count}} лет" + one: "больше %{count} года" + few: "больше %{count} лет" + many: "больше %{count} лет" + other: "больше %{count} лет" almost_x_years: one: "почти 1 год" - few: "почти {{count}} года" - many: "почти {{count}} лет" - other: "почти {{count}} года" + few: "почти %{count} года" + many: "почти %{count} лет" + other: "почти %{count} года" prompts: year: "Год" month: "Месяц" @@ -155,10 +158,10 @@ errors: template: header: - one: "{{model}}: сохранение не удалось из-за {{count}} ошибки" - few: "{{model}}: сохранение не удалось из-за {{count}} ошибок" - many: "{{model}}: сохранение не удалось из-за {{count}} ошибок" - other: "{{model}}: сохранение не удалось из-за {{count}} ошибки" + one: "%{model}: сохранение не удалось из-за %{count} ошибки" + few: "%{model}: сохранение не удалось из-за %{count} ошибок" + many: "%{model}: сохранение не удалось из-за %{count} ошибок" + other: "%{model}: сохранение не удалось из-за %{count} ошибки" body: "Проблемы возникли со следующими полями:" @@ -171,27 +174,27 @@ empty: "не может быть пустым" blank: "не может быть пустым" too_long: - one: "слишком большой длины (не может быть больше чем {{count}} символ)" - few: "слишком большой длины (не может быть больше чем {{count}} символа)" - many: "слишком большой длины (не может быть больше чем {{count}} символов)" - other: "слишком большой длины (не может быть больше чем {{count}} символа)" + one: "слишком большой длины (не может быть больше чем %{count} символ)" + few: "слишком большой длины (не может быть больше чем %{count} символа)" + many: "слишком большой длины (не может быть больше чем %{count} символов)" + other: "слишком большой длины (не может быть больше чем %{count} символа)" too_short: - one: "недостаточной длины (не может быть меньше {{count}} символа)" - few: "недостаточной длины (не может быть меньше {{count}} символов)" - many: "недостаточной длины (не может быть меньше {{count}} символов)" - other: "недостаточной длины (не может быть меньше {{count}} символа)" + one: "недостаточной длины (не может быть меньше %{count} символа)" + few: "недостаточной длины (не может быть меньше %{count} символов)" + many: "недостаточной длины (не может быть меньше %{count} символов)" + other: "недостаточной длины (не может быть меньше %{count} символа)" wrong_length: - one: "неверной длины (может быть длиной ровно {{count}} символ)" - few: "неверной длины (может быть длиной ровно {{count}} символа)" - many: "неверной длины (может быть длиной ровно {{count}} символов)" - other: "неверной длины (может быть длиной ровно {{count}} символа)" + one: "неверной длины (может быть длиной ровно %{count} символ)" + few: "неверной длины (может быть длиной ровно %{count} символа)" + many: "неверной длины (может быть длиной ровно %{count} символов)" + other: "неверной длины (может быть длиной ровно %{count} символа)" taken: "уже существует" not_a_number: "не является числом" - greater_than: "может иметь значение большее {{count}}" - greater_than_or_equal_to: "может иметь значение большее или равное {{count}}" - equal_to: "может иметь лишь значение, равное {{count}}" - less_than: "может иметь значение меньшее чем {{count}}" - less_than_or_equal_to: "может иметь значение меньшее или равное {{count}}" + 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: "должна быть позднее даты начала" @@ -230,7 +233,7 @@ button_delete: Удалить button_download: Загрузить button_edit: Редактировать - button_edit_associated_wikipage: "Редактировать связанную wiki-страницу: {{page_title}}" + button_edit_associated_wikipage: "Редактировать связанную wiki-страницу: %{page_title}" button_list: Список button_lock: Заблокировать button_login: Вход @@ -261,7 +264,7 @@ default_issue_status_closed: Закрыта default_issue_status_feedback: Обратная связь default_issue_status_new: Новая - default_issue_status_rejected: Отказ + default_issue_status_rejected: Отклонена default_issue_status_resolved: Решена default_priority_high: Высокий default_priority_immediate: Немедленный @@ -272,7 +275,7 @@ default_role_manager: Менеджер default_role_reporter: Генератор отчетов default_tracker_bug: Ошибка - default_tracker_feature: Изменение + default_tracker_feature: Улучшение default_tracker_support: Поддержка enumeration_activities: Действия (учет времени) @@ -282,12 +285,12 @@ error_can_not_remove_role: Эта роль используется и не может быть удалена. error_can_not_delete_custom_field: Невозможно удалить настраиваемое поле error_can_not_delete_tracker: Этот трекер содержит задачи и не может быть удален. - error_can_t_load_default_data: "Конфигурация по умолчанию не была загружена: {{value}}" + error_can_t_load_default_data: "Конфигурация по умолчанию не была загружена: %{value}" error_issue_not_found_in_project: Задача не была найдена или не прикреплена к этому проекту error_scm_annotate: "Данные отсутствуют или не могут быть подписаны." - error_scm_command_failed: "Ошибка доступа к хранилищу: {{value}}" + error_scm_command_failed: "Ошибка доступа к хранилищу: %{value}" error_scm_not_found: Хранилище не содержит записи и/или исправления. - error_unable_to_connect: Невозможно подключиться ({{value}}) + error_unable_to_connect: Невозможно подключиться (%{value}) error_unable_delete_issue_status: Невозможно удалить статус задачи field_account: Учетная запись @@ -313,7 +316,6 @@ field_description: Описание field_done_ratio: Готовность в % field_downloads: Загрузки - field_start_date: Дата начала field_due_date: Дата выполнения field_editable: Редактируемый field_effective_date: Дата @@ -364,6 +366,7 @@ field_role: Роль field_searchable: Доступно для поиска field_spent_on: Дата + field_start_date: Начата field_start_page: Стартовая страница field_status: Статус field_subject: Тема @@ -382,9 +385,9 @@ field_version: Версия field_watcher: Наблюдатель - general_csv_decimal_separator: '.' + general_csv_decimal_separator: ',' general_csv_encoding: UTF-8 - general_csv_separator: ',' + general_csv_separator: ';' general_first_day_of_week: '1' general_lang_name: 'Russian (Русский)' general_pdf_encoding: UTF-8 @@ -394,13 +397,13 @@ general_text_Yes: 'Да' gui_validation_error: 1 ошибка - gui_validation_error_plural: "{{count}} ошибок" - gui_validation_error_plural2: "{{count}} ошибки" - gui_validation_error_plural5: "{{count}} ошибок" + gui_validation_error_plural: "%{count} ошибок" + gui_validation_error_plural2: "%{count} ошибки" + gui_validation_error_plural5: "%{count} ошибок" label_activity: Активность label_add_another_file: Добавить ещё один файл - label_added_time_by: "Добавил(а) {{author}} {{age}} назад" + label_added_time_by: "Добавил(а) %{author} %{age} назад" label_added: добавлено label_add_note: Добавить замечание label_administration: Администрирование @@ -409,7 +412,7 @@ label_all_time: всё время label_all_words: Все слова label_all: все - label_and_its_subprojects: "{{value}} и все подпроекты" + label_and_its_subprojects: "%{value} и все подпроекты" label_applied_status: Применимый статус label_ascending: По возрастанию label_assigned_to_me_issues: Мои задачи @@ -465,7 +468,7 @@ label_custom_field_new: Новое настраиваемое поле label_custom_field_plural: Настраиваемые поля label_date_from: С - label_date_from_to: С {{start}} по {{end}} + label_date_from_to: С %{start} по %{end} label_date_range: временной интервал label_date_to: по label_date: Дата @@ -479,15 +482,15 @@ label_diff_side_by_side: рядом label_disabled: отключено label_display: Отображение - label_display_per_page: "На страницу: {{value}}" + label_display_per_page: "На страницу: %{value}" label_document: Документ label_document_added: Добавлен документ label_document_new: Новый документ label_document_plural: Документы - label_download: "{{count}} загрузка" - label_download_plural: "{{count}} скачиваний" - label_download_plural2: "{{count}} загрузки" - label_download_plural5: "{{count}} загрузок" + label_download: "%{count} загрузка" + label_download_plural: "%{count} скачиваний" + label_download_plural2: "%{count} загрузки" + label_download_plural5: "%{count} загрузок" label_downloads_abbr: Скачиваний label_duplicated_by: дублируется label_duplicates: дублирует @@ -500,15 +503,15 @@ label_example: Пример label_export_to: Экспортировать в label_feed_plural: RSS - label_feeds_access_key_created_on: "Ключ доступа RSS создан {{value}} назад" - label_f_hour: "{{value}} час" - label_f_hour_plural: "{{value}} часов" + label_feeds_access_key_created_on: "Ключ доступа RSS создан %{value} назад" + label_f_hour: "%{value} час" + label_f_hour_plural: "%{value} часов" label_file_added: Добавлен файл label_file_plural: Файлы label_filter_add: Добавить фильтр label_filter_plural: Фильтры label_float: С плавающей точкой - label_follows: следующая + label_follows: предыдущая label_gantt: Диаграмма Ганта label_general: Общее label_generate_key: Сгенерировать ключ @@ -533,7 +536,7 @@ label_issue_category: Категория задачи label_issue_new: Новая задача label_issue_plural: Задачи - label_issues_by: "Сортировать по {{value}}" + label_issues_by: "Сортировать по %{value}" label_issue_status_new: Новый статус label_issue_status_plural: Статусы задачи label_issue_status: Статус задачи @@ -543,10 +546,10 @@ label_issue_watchers: Наблюдатели label_jump_to_a_project: Перейти к проекту... label_language_based: На основе языка - label_last_changes: "менее {{count}} изменений" + label_last_changes: "менее %{count} изменений" label_last_login: Последнее подключение label_last_month: последний месяц - label_last_n_days: "последние {{count}} дней" + label_last_n_days: "последние %{count} дней" label_last_week: последняя неделю label_latest_revision: Последняя редакция label_latest_revision_plural: Последние редакции @@ -569,10 +572,10 @@ label_message_posted: Добавлено сообщение label_me: мне label_min_max_length: Минимальная - максимальная длина - label_modification: "{{count}} изменение" - label_modification_plural: "{{count}} изменений" - label_modification_plural2: "{{count}} изменения" - label_modification_plural5: "{{count}} изменений" + label_modification: "%{count} изменение" + label_modification_plural: "%{count} изменений" + label_modification_plural2: "%{count} изменения" + label_modification_plural5: "%{count} изменений" label_modified: изменено label_module_plural: Модули label_months_from: месяцев(ца) с @@ -605,7 +608,7 @@ label_optional_description: Описание (опционально) label_options: Опции label_overall_activity: Сводная активность - label_overview: Просмотр + label_overview: Обзор label_password_lost: Восстановление пароля label_permissions_report: Отчет о правах доступа label_permissions: Права доступа @@ -614,7 +617,7 @@ label_planning: Планирование label_please_login: Пожалуйста, войдите. label_plugins: Модули - label_precedes: предыдущая + label_precedes: следующая label_preferences: Предпочтения label_preview: Предварительный просмотр label_previous: Предыдущий @@ -653,9 +656,9 @@ label_revision: Редакция label_revision_plural: Редакции label_roadmap: Оперативный план - label_roadmap_due_in: "В срок {{value}}" + label_roadmap_due_in: "В срок %{value}" label_roadmap_no_issues: Нет задач для данной версии - label_roadmap_overdue: "опоздание {{value}}" + label_roadmap_overdue: "опоздание %{value}" label_role: Роль label_role_and_permissions: Роли и права доступа label_role_new: Новая роль @@ -668,7 +671,7 @@ label_settings: Настройки label_show_completed_versions: Показывать завершенные версии label_sort: Сортировать - label_sort_by: "Сортировать по {{value}}" + label_sort_by: "Сортировать по %{value}" label_sort_higher: Вверх label_sort_highest: В начало label_sort_lower: Вниз @@ -694,11 +697,11 @@ label_tracker: Трекер label_tracker_new: Новый трекер label_tracker_plural: Трекеры - label_updated_time: "Обновлено {{value}} назад" - label_updated_time_by: "Обновлено {{author}} {{age}} назад" + label_updated_time: "Обновлено %{value} назад" + label_updated_time_by: "Обновлено %{author} %{age} назад" label_used_by: Используется label_user: Пользователь - label_user_activity: "Активность пользователя {{value}}" + label_user_activity: "Активность пользователя %{value}" label_user_mail_no_self_notified: "Не извещать об изменениях, которые я сделал сам" label_user_mail_option_all: "О всех событиях во всех моих проектах" label_user_mail_option_selected: "О всех событиях только в выбранном проекте..." @@ -723,46 +726,46 @@ label_x_closed_issues_abbr: zero: "0 закрыто" one: "1 закрыт" - few: "{{count}} закрыто" - many: "{{count}} закрыто" - other: "{{count}} закрыто" + few: "%{count} закрыто" + many: "%{count} закрыто" + other: "%{count} закрыто" label_x_comments: zero: "нет комментариев" one: "1 комментарий" - few: "{{count}} комментария" - many: "{{count}} комментариев" - other: "{{count}} комментариев" + few: "%{count} комментария" + many: "%{count} комментариев" + other: "%{count} комментариев" label_x_open_issues_abbr: zero: "0 открыто" one: "1 открыт" - few: "{{count}} открыто" - many: "{{count}} открыто" - other: "{{count}} открыто" + few: "%{count} открыто" + many: "%{count} открыто" + other: "%{count} открыто" label_x_open_issues_abbr_on_total: - zero: "0 открыто / {{total}}" - one: "1 открыт / {{total}}" - few: "{{count}} открыто / {{total}}" - many: "{{count}} открыто / {{total}}" - other: "{{count}} открыто / {{total}}" + zero: "0 открыто / %{total}" + one: "1 открыт / %{total}" + few: "%{count} открыто / %{total}" + many: "%{count} открыто / %{total}" + other: "%{count} открыто / %{total}" label_x_projects: zero: "нет проектов" one: "1 проект" - few: "{{count}} проекта" - many: "{{count}} проектов" - other: "{{count}} проектов" + few: "%{count} проекта" + many: "%{count} проектов" + other: "%{count} проектов" label_year: Год label_yesterday: вчера - mail_body_account_activation_request: "Зарегистрирован новый пользователь ({{value}}). Учетная запись ожидает Вашего утверждения:" + mail_body_account_activation_request: "Зарегистрирован новый пользователь (%{value}). Учетная запись ожидает Вашего утверждения:" mail_body_account_information: Информация о Вашей учетной записи - mail_body_account_information_external: "Вы можете использовать Вашу {{value}} учетную запись для входа." + mail_body_account_information_external: "Вы можете использовать Вашу %{value} учетную запись для входа." mail_body_lost_password: 'Для изменения пароля зайдите по следующей ссылке:' mail_body_register: 'Для активации учетной записи зайдите по следующей ссылке:' - mail_body_reminder: "{{count}} назначенных на Вас задач на следующие {{days}} дней:" - mail_subject_account_activation_request: "Запрос на активацию пользователя в системе {{value}}" - mail_subject_lost_password: "Ваш {{value}} пароль" - mail_subject_register: "Активация учетной записи {{value}}" - mail_subject_reminder: "{{count}} назначенных на Вас задач в ближайшие {{days}} дней" + mail_body_reminder: "%{count} назначенных на Вас задач на следующие %{days} дней:" + mail_subject_account_activation_request: "Запрос на активацию пользователя в системе %{value}" + mail_subject_lost_password: "Ваш %{value} пароль" + mail_subject_register: "Активация учетной записи %{value}" + mail_subject_reminder: "%{count} назначенных на Вас задач в ближайшие %{days} дней" notice_account_activated: Ваша учетная запись активирована. Вы можете войти. notice_account_invalid_creditentials: Неправильное имя пользователя или пароль @@ -775,10 +778,10 @@ notice_account_wrong_password: Неверный пароль notice_can_t_change_password: Для данной учетной записи используется источник внешней аутентификации. Невозможно изменить пароль. notice_default_data_loaded: Была загружена конфигурация по умолчанию. - notice_email_error: "Во время отправки письма произошла ошибка ({{value}})" - notice_email_sent: "Отправлено письмо {{value}}" - notice_failed_to_save_issues: "Не удалось сохранить {{count}} пункт(ов) из {{total}} выбранных: {{ids}}." - notice_failed_to_save_members: "Не удалось сохранить участника(ов): {{errors}}." + notice_email_error: "Во время отправки письма произошла ошибка (%{value})" + notice_email_sent: "Отправлено письмо %{value}" + notice_failed_to_save_issues: "Не удалось сохранить %{count} пункт(ов) из %{total} выбранных: %{ids}." + notice_failed_to_save_members: "Не удалось сохранить участника(ов): %{errors}." notice_feeds_access_key_reseted: Ваш ключ доступа RSS был перезапущен. notice_file_not_found: Страница, на которую Вы пытаетесь зайти, не существует или удалена. notice_locking_conflict: Информация обновлена другим пользователем. @@ -859,10 +862,9 @@ setting_attachment_max_size: Максимальный размер вложения setting_autofetch_changesets: Автоматически следить за изменениями хранилища setting_autologin: Автоматический вход - setting_bcc_recipients: Использовать скрытые списки (bcc) + setting_bcc_recipients: Использовать скрытые списки (BCC) setting_cache_formatted_text: Кешировать форматированный текст setting_commit_fix_keywords: Назначение ключевых слов - setting_commit_logs_encoding: Кодировка комментариев в хранилище setting_commit_ref_keywords: Ключевые слова для поиска setting_cross_project_issue_relations: Разрешить пересечение задач по проектам setting_date_format: Формат даты @@ -871,7 +873,7 @@ setting_default_projects_public: Новые проекты являются общедоступными setting_diff_max_lines_displayed: Максимальное число строк для diff setting_display_subprojects_issues: Отображение подпроектов по умолчанию - setting_emails_footer: Подстрочные примечания Email + setting_emails_footer: Подстрочные примечания письма setting_enabled_scm: Разрешенные SCM setting_feeds_limit: Ограничение количества заголовков для RSS потока setting_file_max_size_displayed: Максимальный размер текстового файла для отображения @@ -905,29 +907,29 @@ text_are_you_sure_with_children: Удалить задачу и все ее подзадачи? text_are_you_sure: Подтвердите text_assign_time_entries_to_project: Прикрепить зарегистрированное время к проекту - text_caracters_maximum: "Максимум {{count}} символов(а)." - text_caracters_minimum: "Должно быть не менее {{count}} символов." + text_caracters_maximum: "Максимум %{count} символов(а)." + text_caracters_minimum: "Должно быть не менее %{count} символов." text_comma_separated: Допустимы несколько значений (через запятую). text_custom_field_possible_values_info: 'По одному значению в каждой строке' text_default_administrator_account_changed: Учетная запись администратора по умолчанию изменена - text_destroy_time_entries_question: Вы собираетесь удалить {{hours}} часа(ов), прикрепленных за этой задачей. + 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_enumeration_destroy_question: "%{count} объект(а,ов) связаны с этим значением." text_file_repository_writable: Хранилище с доступом на запись - text_issue_added: "По задаче {{id}} был создан отчет ({{author}})." + text_issue_added: "По задаче %{id} был создан отчет (%{author})." text_issue_category_destroy_assignments: Удалить назначения категории - text_issue_category_destroy_question: "Несколько задач ({{count}}) назначено в данную категорию. Что Вы хотите предпринять?" + text_issue_category_destroy_question: "Несколько задач (%{count}) назначено в данную категорию. Что Вы хотите предпринять?" text_issue_category_reassign_to: Переназначить задачи для данной категории text_issues_destroy_confirmation: 'Вы уверены, что хотите удалить выбранные задачи?' text_issues_ref_in_commit_messages: Сопоставление и изменение статуса задач исходя из текста сообщений - text_issue_updated: "Задача {{id}} была обновлена ({{author}})." - text_journal_changed: "Параметр {{label}} изменился с {{old}} на {{new}}" - text_journal_deleted: "Значение {{old}} параметра {{label}} удалено" - text_journal_set_to: "Параметр {{label}} изменился на {{value}}" - text_length_between: "Длина между {{min}} и {{max}} символов." + text_issue_updated: "Задача %{id} была обновлена (%{author})." + text_journal_changed: "Параметр %{label} изменился с %{old} на %{new}" + text_journal_deleted: "Значение %{old} параметра %{label} удалено" + text_journal_set_to: "Параметр %{label} изменился на %{value}" + text_length_between: "Длина между %{min} и %{max} символов." text_load_default_configuration: Загрузить конфигурацию по умолчанию text_min_max_length_info: 0 означает отсутствие запретов text_no_configuration_data: "Роли, трекеры, статусы задач и оперативный план не были сконфигурированы.\nНастоятельно рекомендуется загрузить конфигурацию по-умолчанию. Вы сможете её изменить потом." @@ -940,31 +942,31 @@ text_rmagick_available: Доступно использование RMagick (опционально) text_select_mail_notifications: Выберите действия, на которые будет отсылаться уведомление на электронную почту. text_select_project_modules: 'Выберите модули, которые будут использованы в проекте:' - text_status_changed_by_changeset: "Реализовано в {{value}} редакции." - text_subprojects_destroy_warning: "Подпроекты: {{value}} также будут удалены." + text_status_changed_by_changeset: "Реализовано в %{value} редакции." + text_subprojects_destroy_warning: "Подпроекты: %{value} также будут удалены." text_tip_issue_begin_day: дата начала задачи text_tip_issue_begin_end_day: начало задачи и окончание ее в этот день text_tip_issue_end_day: дата завершения задачи text_tracker_no_workflow: Для этого трекера последовательность действий не определена text_unallowed_characters: Запрещенные символы text_user_mail_option: "Для невыбранных проектов, Вы будете получать уведомления только о том что просматриваете или в чем участвуете (например, вопросы, автором которых Вы являетесь или которые Вам назначены)." - text_user_wrote: "{{value}} писал(а):" + text_user_wrote: "%{value} писал(а):" text_wiki_destroy_confirmation: Вы уверены, что хотите удалить данную Wiki и все ее содержимое? text_workflow_edit: Выберите роль и трекер для редактирования последовательности состояний - warning_attachments_not_saved: "{{count}} файл(ов) невозможно сохранить." - text_wiki_page_destroy_question: Эта страница имеет {{descendants}} дочерних страниц и их потомков. Что вы хотите сделать? + warning_attachments_not_saved: "%{count} файл(ов) невозможно сохранить." + text_wiki_page_destroy_question: Эта страница имеет %{descendants} дочерних страниц и их потомков. Что вы хотите сделать? text_wiki_page_reassign_children: Переопределить дочерние страницы на текущую страницу text_wiki_page_nullify_children: Сделать дочерние страницы главными страницами text_wiki_page_destroy_children: Удалить дочерние страницы и всех их потомков setting_password_min_length: Минимальная длина пароля field_group_by: Группировать результаты по - mail_subject_wiki_content_updated: "Wiki-страница '{{id}}' была обновлена" + mail_subject_wiki_content_updated: "Wiki-страница '%{id}' была обновлена" label_wiki_content_added: Добавлена wiki-страница - mail_subject_wiki_content_added: "Wiki-страница '{{id}}' была добавлена" - mail_body_wiki_content_added: "{{author}} добавил(а) wiki-страницу '{{id}}'." + mail_subject_wiki_content_added: "Wiki-страница '%{id}' была добавлена" + mail_body_wiki_content_added: "%{author} добавил(а) wiki-страницу '%{id}'." label_wiki_content_updated: Обновлена wiki-страница - mail_body_wiki_content_updated: "{{author}} обновил(а) wiki-страницу '{{id}}'." + mail_body_wiki_content_updated: "%{author} обновил(а) wiki-страницу '%{id}'." permission_add_project: Создание проекта setting_new_project_user_role_id: Роль, назначаемая пользователю, создавшему проект label_view_all_revisions: Показать все ревизии @@ -976,7 +978,7 @@ label_group: Группа label_group_new: Новая группа label_time_entry_plural: Затраченное время - text_journal_added: "{{label}} {{value}} добавлен" + text_journal_added: "%{label} %{value} добавлен" field_active: Активно enumeration_system_activity: Системная активность permission_delete_issue_watchers: Удаление наблюдателей @@ -1011,10 +1013,10 @@ setting_start_of_week: День начала недели label_api_access_key: Ключ доступа к API text_line_separated: Разрешено несколько значений (по одному значению в строку). - label_revision_id: Ревизия {{value}} + label_revision_id: Ревизия %{value} permission_view_issues: Просмотр задач label_display_used_statuses_only: Отображать только те статусы, которые используются в этом трекере - label_api_access_key_created_on: Ключ доступ к API был создан {{value}} назад + label_api_access_key_created_on: Ключ доступ к API был создан %{value} назад label_feeds_access_key: Ключ доступа к RSS notice_api_access_key_reseted: Ваш ключ доступа к API был сброшен. setting_rest_api_enabled: Включить веб-сервис REST @@ -1035,13 +1037,55 @@ text_zoom_in: Приблизить notice_unable_delete_time_entry: Невозможно удалить запись журнала. label_overall_spent_time: Всего затрачено времени - label_user_mail_option_none: Нет событий field_member_of_group: Группа назначенного field_assigned_to_role: Роль назначенного notice_not_authorized_archived_project: Запрашиваемый проект был архивирован. + label_principal_search: "Найти пользователя или группу:" + label_user_search: "Найти пользователя:" + field_visible: Видимый + setting_emails_header: Заголовок письма - 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: Активность для учета времени + text_time_logged_by_changeset: Учтено в редакции %{value}. + setting_commit_logtime_enabled: Включить учет времени + notice_gantt_chart_truncated: Диаграмма будет усечена, поскольку превышено максимальное кол-во элементов, которые могут отображаться (%{max}) + setting_gantt_items_limit: Максимальное кол-во элементов отображаемых на диаграмме Ганта + field_warn_on_leaving_unsaved: Предупреждать при закратии страницы с несохраненным текстом + text_warn_on_leaving_unsaved: Текущая страница содержит несохраненный текст, который будет потерян, если вы покинете эту страницу. + label_my_queries: Мои сохраненные запросы + text_journal_changed_no_detail: "%{label} обновлено" + label_news_comment_added: Добавлен комментарий к новости + button_expand_all: Развернуть все + button_collapse_all: Свернуть все + label_additional_workflow_transitions_for_assignee: Дополнительные переходы, когда пользователь является исполнителем + label_additional_workflow_transitions_for_author: Дополнительные переходы, когда пользователь является автором + label_bulk_edit_selected_time_entries: Массовое изменение выбранных записей затраченного времени времени + text_time_entries_destroy_confirmation: Вы уверены что хотите удалить выбраные записи затраченного времени? + label_role_anonymous: Аноним + label_role_non_member: Не участник + label_issue_note_added: Примечание добавлено + label_issue_status_updated: Статус обновлен + label_issue_priority_updated: Приоритет обновлен + label_issues_visibility_own: Задачи созданные или назначенные пользователю + field_issues_visibility: Видимость задач + label_issues_visibility_all: Все задачи + permission_set_own_issues_private: Устанавливать видимость (общая/частная) для собственных задач + field_is_private: Частная + permission_set_issues_private: Устанавливать видимость (общая/частная) для задач + label_issues_visibility_public: Только общие задачи + text_issues_destroy_descendants_confirmation: Так же будет удалено %{count} задачи. + field_commit_logs_encoding: Кодировка комментариев в хранилище + field_scm_path_encoding: Кодировка пути + text_scm_path_encoding_note: "По умолчанию: UTF-8" + field_path_to_repository: Путь к репозиторию + field_root_directory: Корневую директорию + field_cvs_module: Модуль + field_cvsroot: CVSROOT + text_git_repository_note: Локальный и bare репозиторий (например, /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Локальный репозиторий (например, /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/sk.yml.svn-base --- a/config/locales/.svn/text-base/sk.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/sk.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -16,7 +16,10 @@ month_names: [~, Január, Február, Marec, Apríl, Máj, Jún, Júl, August, September, Október, November, December] abbr_month_names: [~, Jan, Feb, Mar, Apr, Máj, Jún, Júl, Aug, Sep, Okt, Nov, Dec] # Used in date_select and datime_select. - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -32,37 +35,37 @@ half_a_minute: "pol minúty" less_than_x_seconds: one: "menej ako 1 sekunda" - other: "menej ako {{count}} sekúnd" + other: "menej ako %{count} sekúnd" x_seconds: one: "1 sekunda" - other: "{{count}} sekúnd" + other: "%{count} sekúnd" less_than_x_minutes: one: "menej ako minúta" - other: "menej ako {{count}} minút" + other: "menej ako %{count} minút" x_minutes: one: "1 minuta" - other: "{{count}} minút" + other: "%{count} minút" about_x_hours: one: "okolo 1 hodiny" - other: "okolo {{count}} hodín" + other: "okolo %{count} hodín" x_days: one: "1 deň" - other: "{{count}} dní" + other: "%{count} dní" about_x_months: one: "okolo 1 mesiaca" - other: "okolo {{count}} mesiace/ov" + other: "okolo %{count} mesiace/ov" x_months: one: "1 mesiac" - other: "{{count}} mesiace/ov" + other: "%{count} mesiace/ov" about_x_years: one: "okolo 1 roka" - other: "okolo {{count}} roky/ov" + other: "okolo %{count} roky/ov" over_x_years: one: "cez 1 rok" - other: "cez {{count}} roky/ov" + other: "cez %{count} roky/ov" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" number: human: @@ -88,6 +91,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "nieje zahrnuté v zozname" exclusion: "je rezervované" @@ -102,11 +109,11 @@ taken: "je už použité" not_a_number: "nieje číslo" not_a_date: "nieje platný dátum" - greater_than: "musí byť väčšíe ako {{count}}" - greater_than_or_equal_to: "musí byť väčšie alebo rovné {{count}}" - equal_to: "musí byť rovné {{count}}" - less_than: "musí byť menej ako {{count}}" - less_than_or_equal_to: "musí byť menej alebo rovné {{count}}" + greater_than: "musí byť väčšíe ako %{count}" + greater_than_or_equal_to: "musí byť väčšie alebo rovné %{count}" + equal_to: "musí byť rovné %{count}" + less_than: "musí byť menej ako %{count}" + less_than_or_equal_to: "musí byť menej alebo rovné %{count}" odd: "musí byť nepárne" even: "musí byť párne" greater_than_start_date: "musí byť neskôr ako počiatočný dátum" @@ -146,30 +153,30 @@ notice_locking_conflict: Údaje boli zmenené iným užívateľom. notice_scm_error: Položka a/alebo revízia neexistuje v repozitári. notice_not_authorized: Nemáte dostatočné práva pre zobrazenie tejto stránky. - notice_email_sent: "Na adresu {{value}} bol odeslaný email" - notice_email_error: "Pri odosielaní emailu nastala chyba ({{value}})" + notice_email_sent: "Na adresu %{value} bol odeslaný email" + notice_email_error: "Pri odosielaní emailu nastala chyba (%{value})" notice_feeds_access_key_reseted: Váš klúč pre prístup k Atomu bol resetovaný. - notice_failed_to_save_issues: "Nastala chyba pri ukládaní {{count}} úloh na {{total}} zvolený: {{ids}}." + notice_failed_to_save_issues: "Nastala chyba pri ukládaní %{count} úloh na %{total} zvolený: %{ids}." notice_no_issue_selected: "Nebola zvolená žiadná úloha. Prosím, zvoľte úlohy, ktoré chcete upraviť" notice_account_pending: "Váš účet bol vytvorený, teraz čaká na schválenie administrátorom." notice_default_data_loaded: Výchozia konfigurácia úspešne nahraná. - error_can_t_load_default_data: "Výchozia konfigurácia nebola nahraná: {{value}}" + error_can_t_load_default_data: "Výchozia konfigurácia nebola nahraná: %{value}" error_scm_not_found: "Položka a/alebo revízia neexistuje v repozitári." - error_scm_command_failed: "Pri pokuse o prístup k repozitári došlo k chybe: {{value}}" + error_scm_command_failed: "Pri pokuse o prístup k repozitári došlo k chybe: %{value}" error_issue_not_found_in_project: 'Úloha nebola nájdená alebo nepatrí k tomuto projektu' - mail_subject_lost_password: "Vaše heslo ({{value}})" + mail_subject_lost_password: "Vaše heslo (%{value})" mail_body_lost_password: 'Pre zmenu vašeho hesla kliknite na následujúci odkaz:' - mail_subject_register: "Aktivácia účtu ({{value}})" + mail_subject_register: "Aktivácia účtu (%{value})" mail_body_register: 'Pre aktiváciu vašeho účtu kliknite na následujúci odkaz:' - mail_body_account_information_external: "Pomocou vašeho účtu {{value}} se môžete prihlásiť." + mail_body_account_information_external: "Pomocou vašeho účtu %{value} se môžete prihlásiť." mail_body_account_information: Informácie o vašom účte - mail_subject_account_activation_request: "Aktivácia {{value}} účtu" - mail_body_account_activation_request: "Bol zaregistrovaný nový uživateľ {{value}}. Aktivácia jeho účtu závisí na vašom potvrdení." + mail_subject_account_activation_request: "Aktivácia %{value} účtu" + mail_body_account_activation_request: "Bol zaregistrovaný nový uživateľ %{value}. Aktivácia jeho účtu závisí na vašom potvrdení." gui_validation_error: 1 chyba - gui_validation_error_plural: "{{count}} chyb(y)" + gui_validation_error_plural: "%{count} chyb(y)" field_name: Názov field_description: Popis @@ -231,7 +238,8 @@ field_attr_lastname: Priezvisko (atribut) field_attr_mail: Email (atribut) field_onthefly: Automatické vytváranie užívateľov - field_done_ratio: % hotovo + field_start_date: Začiatok + field_done_ratio: "% hotovo" field_auth_source: Autentifikačný mód field_hide_mail: Nezobrazovať môj email field_comments: Komentár @@ -304,14 +312,14 @@ label_x_projects: zero: žiadne projekty one: 1 projekt - other: "{{count}} projekty/ov" + other: "%{count} projekty/ov" label_project_all: Všetky projekty label_project_latest: Posledné projekty label_issue: Úloha label_issue_new: Nová úloha label_issue_plural: Úlohy label_issue_view_all: Všetky úlohy - label_issues_by: "Úlohy od užívateľa {{value}}" + label_issues_by: "Úlohy od užívateľa %{value}" label_issue_added: Úloha pridaná label_issue_updated: Úloha aktualizovaná label_document: Dokument @@ -377,8 +385,8 @@ label_text: Dlhý text label_attribute: Atribut label_attribute_plural: Atributy - label_download: "{{count}} Download" - label_download_plural: "{{count}} Downloady" + label_download: "%{count} Download" + label_download_plural: "%{count} Downloady" label_no_data: Žiadné položky label_change_status: Zmeniť stav label_history: História @@ -409,17 +417,17 @@ label_closed_issues: Uzavrený label_closed_issues_plural: Uzavrené label_x_open_issues_abbr_on_total: - zero: 0 otvorených z celkovo {{total}} - one: 1 otvorený z celkovo {{total}} - other: "{{count}} otvorené/ých z celkovo {{total}}" + zero: 0 otvorených z celkovo %{total} + one: 1 otvorený z celkovo %{total} + other: "%{count} otvorené/ých z celkovo %{total}" label_x_open_issues_abbr: zero: 0 otvorených one: 1 otvorený - other: "{{count}} otvorené/ých" + other: "%{count} otvorené/ých" label_x_closed_issues_abbr: zero: 0 zavretých one: 1 zavretý - other: "{{count}} zavreté/ých" + other: "%{count} zavreté/ých" label_total: Celkovo label_permissions: Práva label_current_status: Aktuálny stav @@ -437,7 +445,7 @@ label_months_from: mesiacov od label_gantt: Ganttov graf label_internal: Interný - label_last_changes: "posledných {{count}} zmien" + label_last_changes: "posledných %{count} zmien" label_change_view_all: Zobraziť všetky zmeny label_personalize_page: Prispôsobiť túto stránku label_comment: Komentár @@ -445,7 +453,7 @@ label_x_comments: zero: žiaden komentár one: 1 komentár - other: "{{count}} komentáre/ov" + other: "%{count} komentáre/ov" label_comment_add: Pridať komentár label_comment_added: Komentár pridaný label_comment_delete: Odstrániť komentár @@ -464,7 +472,7 @@ label_yesterday: včera label_this_week: tento týždeň label_last_week: minulý týždeň - label_last_n_days: "posledných {{count}} dní" + label_last_n_days: "posledných %{count} dní" label_this_month: tento mesiac label_last_month: minulý mesiac label_this_year: tento rok @@ -478,8 +486,8 @@ label_repository: Repozitár label_repository_plural: Repozitáre label_browse: Prechádzať - label_modification: "{{count}} zmena" - label_modification_plural: "{{count}} zmien" + label_modification: "%{count} zmena" + label_modification_plural: "%{count} zmien" label_revision: Revízia label_revision_plural: Revízií label_associated_revisions: Súvisiace verzie @@ -495,8 +503,8 @@ label_sort_lower: Presunúť dole label_sort_lowest: Presunúť na koniec label_roadmap: Plán - label_roadmap_due_in: "Zostáva {{value}}" - label_roadmap_overdue: "{{value}} neskoro" + label_roadmap_due_in: "Zostáva %{value}" + label_roadmap_overdue: "%{value} neskoro" label_roadmap_no_issues: Pre túto verziu niesú žiadne úlohy label_search: Hľadať label_result_plural: Výsledky @@ -514,8 +522,8 @@ label_changes_details: Detail všetkých zmien label_issue_tracking: Sledovanie úloh label_spent_time: Strávený čas - label_f_hour: "{{value}} hodina" - label_f_hour_plural: "{{value}} hodín" + label_f_hour: "%{value} hodina" + label_f_hour_plural: "%{value} hodín" label_time_tracking: Sledovánie času label_change_plural: Zmeny label_statistics: Štatistiky @@ -563,12 +571,12 @@ label_date_from: Od label_date_to: Do label_language_based: Podľa výchozieho jazyka - label_sort_by: "Zoradenie podľa {{value}}" + label_sort_by: "Zoradenie podľa %{value}" label_send_test_email: Poslať testovací email - label_feeds_access_key_created_on: "Prístupový klúč pre RSS bol vytvorený pred {{value}}" + label_feeds_access_key_created_on: "Prístupový klúč pre RSS bol vytvorený pred %{value}" label_module_plural: Moduly - label_added_time_by: "Pridané užívateľom {{author}} pred {{age}}" - label_updated_time: "Aktualizované pred {{value}}" + label_added_time_by: "Pridané užívateľom %{author} pred %{age}" + label_updated_time: "Aktualizované pred %{value}" label_jump_to_a_project: Zvoliť projekt... label_file_plural: Súbory label_changeset_plural: Sady zmien @@ -584,7 +592,7 @@ label_registration_activation_by_email: aktivácia účtu emailom label_registration_manual_activation: manuálna aktivácia účtu label_registration_automatic_activation: automatická aktivácia účtu - label_display_per_page: "{{value}} na stránku" + label_display_per_page: "%{value} na stránku" label_age: Vek label_change_properties: Zmeniť vlastnosti label_general: Všeobecné @@ -651,23 +659,23 @@ text_tip_issue_end_day: úloha končí v tento deň text_tip_issue_begin_end_day: úloha začína a končí v tento deň text_project_identifier_info: 'Povolené znaky sú malé písmena (a-z), čísla a pomlčka.
    Po uložení už nieje možné identifikátor zmeniť.' - text_caracters_maximum: "{{count}} znakov maximálne." - text_caracters_minimum: "Musí byť aspoň {{count}} znaky/ov dlhé." - text_length_between: "Dĺžka medzi {{min}} až {{max}} znakmi." + text_caracters_maximum: "%{count} znakov maximálne." + text_caracters_minimum: "Musí byť aspoň %{count} znaky/ov dlhé." + text_length_between: "Dĺžka medzi %{min} až %{max} znakmi." text_tracker_no_workflow: Pre tuto frontu nieje definovaný žiadný workflow text_unallowed_characters: Nepovolené znaky text_comma_separated: Je povolené viacero hodnôt (oddelené navzájom čiarkou). text_issues_ref_in_commit_messages: Odkazovať a upravovať úlohy v správach s následovnym obsahom - text_issue_added: "úloha {{id}} bola vytvorená užívateľom {{author}}." - text_issue_updated: "Úloha {{id}} byla aktualizovaná užívateľom {{author}}." + text_issue_added: "úloha %{id} bola vytvorená užívateľom %{author}." + text_issue_updated: "Úloha %{id} byla aktualizovaná užívateľom %{author}." text_wiki_destroy_confirmation: Naozaj si prajete odstrániť túto Wiki a celý jej obsah? - text_issue_category_destroy_question: "Niektoré úlohy ({{count}}) sú priradené k tejto kategórii. Čo chtete s nimi spraviť?" + text_issue_category_destroy_question: "Niektoré úlohy (%{count}) sú priradené k tejto kategórii. Čo chtete s nimi spraviť?" text_issue_category_destroy_assignments: Zrušiť priradenie ku kategórii text_issue_category_reassign_to: Priradiť úlohy do tejto kategórie text_user_mail_option: "U projektov, které neboli vybrané, budete dostávať oznamenie iba o vašich či o sledovaných položkách (napr. o položkách, ktorých ste autor, alebo ku ktorým ste priradený/á)." text_no_configuration_data: "Role, fronty, stavy úloh ani workflow neboli zatiaľ nakonfigurované.\nVelmi doporučujeme nahrať východziu konfiguráciu. Potom si môžete všetko upraviť" text_load_default_configuration: Nahrať východziu konfiguráciu - text_status_changed_by_changeset: "Aktualizované v sade zmien {{value}}." + text_status_changed_by_changeset: "Aktualizované v sade zmien %{value}." text_issues_destroy_confirmation: 'Naozaj si prajete odstrániť všetky zvolené úlohy?' text_select_project_modules: 'Aktivne moduly v tomto projekte:' text_default_administrator_account_changed: Zmenené výchozie nastavenie administrátorského účtu @@ -705,23 +713,22 @@ enumeration_activities: Aktivity (sledovanie času) error_scm_annotate: "Položka neexistuje alebo nemôže byť komentovaná." label_planning: Plánovanie - text_subprojects_destroy_warning: "Jeho podprojekt(y): {{value}} budú takisto vymazané." - label_and_its_subprojects: "{{value}} a jeho podprojekty" - mail_body_reminder: "{{count}} úloha(y), ktorá(é) je(sú) vám priradený(é), ma(jú) byť hotova(é) za {{days}} dní:" - mail_subject_reminder: "{{count}} úloha(y) ma(jú) byť hotova(é) za pár {{days}} dní" - text_user_wrote: "{{value}} napísal:" + text_subprojects_destroy_warning: "Jeho podprojekt(y): %{value} budú takisto vymazané." + label_and_its_subprojects: "%{value} a jeho podprojekty" + mail_body_reminder: "%{count} úloha(y), ktorá(é) je(sú) vám priradený(é), ma(jú) byť hotova(é) za %{days} dní:" + mail_subject_reminder: "%{count} úloha(y) ma(jú) byť hotova(é) za pár %{days} dní" + text_user_wrote: "%{value} napísal:" label_duplicated_by: duplikovaný setting_enabled_scm: Zapnúť SCM text_enumeration_category_reassign_to: 'Prenastaviť na túto hodnotu:' - text_enumeration_destroy_question: "{{count}} objekty sú nastavené na túto hodnotu." + text_enumeration_destroy_question: "%{count} objekty sú nastavené na túto hodnotu." label_incoming_emails: Príchádzajúce emaily 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 button_quote: Citácia setting_sequential_project_identifiers: Generovať sekvenčné identifikátory projektov notice_unable_delete_version: Verzia nemôže byť zmazaná @@ -779,12 +786,12 @@ permission_delete_own_messages: Mazanie vlastných správ text_repository_usernames_mapping: "Vyberte alebo upravte mapovanie medzi užívateľmi systému Redmine a užívateľskými menami nájdenými v logu repozitára.\nUžívatelia s rovnakým prihlasovacím menom alebo emailom v systéme Redmine a repozitára sú mapovaní automaticky." label_example: Príklad - label_user_activity: "Aktivita užívateľa {{value}}" - label_updated_time_by: "Aktualizované užívateľom {{author}} pred {{age}}" + label_user_activity: "Aktivita užívateľa %{value}" + label_updated_time_by: "Aktualizované užívateľom %{author} pred %{age}" text_diff_truncated: '... Tento rozdielový výpis bol skratený, pretože prekračuje maximálnu veľkosť, ktorá môže byť zobrazená.' setting_diff_max_lines_displayed: Maximálne množstvo zobrazených riadkov rozdielového výpisu text_plugin_assets_writable: Adresár pre pluginy s možnosťou zápisu - warning_attachments_not_saved: "{{count}} súbor(y) nemohol(li) byť uložené." + warning_attachments_not_saved: "%{count} súbor(y) nemohol(li) byť uložené." field_editable: Editovateľné label_display: Zobrazenie button_create_and_continue: Vytvoriť a pokračovať @@ -799,22 +806,22 @@ label_descending: Zostupné label_sort: Zoradenie label_ascending: Rastúce - label_date_from_to: Od {{start}} do {{end}} + label_date_from_to: Od %{start} do %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: Táto stránka má {{descendants}} podstránku/y a potomka/ov. Čo chcete vykonať? + text_wiki_page_destroy_question: Táto stránka má %{descendants} podstránku/y a potomka/ov. Čo chcete vykonať? text_wiki_page_reassign_children: Preradiť podstránky k tejto hlavnej stránke text_wiki_page_nullify_children: Zachovať podstránky ako hlavné stránky text_wiki_page_destroy_children: Vymazať podstránky a všetkých ich potomkov setting_password_min_length: Minimálna dĺžka hesla field_group_by: Skupinové výsledky podľa - mail_subject_wiki_content_updated: "'{{id}}' Wiki stránka bola aktualizovaná" + mail_subject_wiki_content_updated: "'%{id}' Wiki stránka bola aktualizovaná" label_wiki_content_added: Wiki stránka pridaná - mail_subject_wiki_content_added: "'{{id}}' Wiki stránka bola pridaná" - mail_body_wiki_content_added: The '{{id}}' Wiki stránka bola pridaná užívateľom {{author}}. + mail_subject_wiki_content_added: "'%{id}' Wiki stránka bola pridaná" + mail_body_wiki_content_added: The '%{id}' Wiki stránka bola pridaná užívateľom %{author}. permission_add_project: Vytvorenie projektu label_wiki_content_updated: Wiki stránka aktualizovaná - mail_body_wiki_content_updated: Wiki stránka '{{id}}' bola aktualizovaná užívateľom {{author}}. + mail_body_wiki_content_updated: Wiki stránka '%{id}' bola aktualizovaná užívateľom %{author}. setting_repositories_encodings: Kódovanie repozitára setting_new_project_user_role_id: Rola dána non-admin užívateľovi, ktorý vytvorí projekt label_view_all_revisions: Zobraziť všetkz revízie @@ -822,14 +829,14 @@ label_branch: Vetva error_no_tracker_in_project: K tomuto projektu nieje priradená žiadna fronta. Prosím skontrolujte nastavenie projektu. error_no_default_issue_status: Nieje definovaný východzí stav úlohy. Prosím skontrolujte vase nastavenie (Choďte na "Administrácia -> Stavz úloh"). - text_journal_changed: "{{label}} zmenené z {{old}} na {{new}}" - text_journal_set_to: "{{label}} nastavené na {{value}}" - text_journal_deleted: "{{label}} zmazané ({{old}})" + text_journal_changed: "%{label} zmenené z %{old} na %{new}" + text_journal_set_to: "%{label} nastavené na %{value}" + text_journal_deleted: "%{label} zmazané (%{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}} pridané" + text_journal_added: "%{label} %{value} pridané" field_active: Aktívne enumeration_system_activity: Aktivita systému permission_delete_issue_watchers: Odstrániť pozorovateľov @@ -864,9 +871,9 @@ setting_start_of_week: Štart pracovného týždňa v permission_view_issues: Zobraziť úlohy label_display_used_statuses_only: Zobraziť len stavy, ktoré sú priradené k tejto fronte - label_revision_id: Revízia {{value}} + label_revision_id: Revízia %{value} label_api_access_key: API prístupový kľúč - label_api_access_key_created_on: API prístupový kľúč vytvorený pred {{value}} + label_api_access_key_created_on: API prístupový kľúč vytvorený pred %{value} label_feeds_access_key: RSS prístupový kľúč notice_api_access_key_reseted: Váš API prístupový kľúč bol resetovaný. setting_rest_api_enabled: Zapnúť REST web službu @@ -893,12 +900,12 @@ label_subtask_plural: Podúlohy label_project_copy_notifications: Zaslať emailové upozornenie behom kopírovania projektu error_can_not_delete_custom_field: Nieje možné vymazať užívateľské pole - error_unable_to_connect: Nieje možné vymazať ({{value}}) + error_unable_to_connect: Nieje možné vymazať (%{value}) error_can_not_remove_role: Táto roľa sa používa a nemôže byť vymazaná. error_can_not_delete_tracker: Táto fronta obsahuje úlohy a nemôže byť vymazaná. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -906,7 +913,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -917,8 +924,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Kódovanie prenášaných správ + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/sl.yml.svn-base --- a/config/locales/.svn/text-base/sl.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/sl.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -16,7 +16,10 @@ 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 ] + order: + - :year + - :month + - :day time: formats: @@ -32,37 +35,37 @@ half_a_minute: "half a minute" less_than_x_seconds: one: "less than 1 second" - other: "less than {{count}} seconds" + other: "less than %{count} seconds" x_seconds: one: "1 second" - other: "{{count}} seconds" + other: "%{count} seconds" less_than_x_minutes: one: "less than a minute" - other: "less than {{count}} minutes" + other: "less than %{count} minutes" x_minutes: one: "1 minute" - other: "{{count}} minutes" + other: "%{count} minutes" about_x_hours: one: "about 1 hour" - other: "about {{count}} hours" + other: "about %{count} hours" x_days: one: "1 day" - other: "{{count}} days" + other: "%{count} days" about_x_months: one: "about 1 month" - other: "about {{count}} months" + other: "about %{count} months" x_months: one: "1 month" - other: "{{count}} months" + other: "%{count} months" about_x_years: one: "about 1 year" - other: "about {{count}} years" + other: "about %{count} years" over_x_years: one: "over 1 year" - other: "over {{count}} years" + other: "over %{count} years" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" number: format: @@ -92,6 +95,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "ni vključen na seznamu" exclusion: "je rezerviran" @@ -106,11 +113,11 @@ taken: "je že zaseden" not_a_number: "ni število" not_a_date: "ni veljaven datum" - 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}}" + 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: "mora biti kasnejši kot začeten datum" @@ -128,7 +135,7 @@ general_csv_separator: ',' general_csv_decimal_separator: '.' general_csv_encoding: UTF-8 - general_pdf_encoding: UFT-8 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' notice_account_updated: Račun je bil uspešno posodobljen. @@ -147,34 +154,34 @@ notice_file_not_found: Stran na katero se želite povezati ne obstaja ali pa je bila umaknjena. notice_locking_conflict: Drug uporabnik je posodobil podatke. notice_not_authorized: Nimate privilegijev za dostop do te strani. - notice_email_sent: "E-poštno sporočilo je bilo poslano {{value}}" - notice_email_error: "Ob pošiljanju e-sporočila je prišlo do napake ({{value}})" + notice_email_sent: "E-poštno sporočilo je bilo poslano %{value}" + notice_email_error: "Ob pošiljanju e-sporočila je prišlo do napake (%{value})" notice_feeds_access_key_reseted: Vaš RSS dostopni ključ je bil ponastavljen. - notice_failed_to_save_issues: "Neuspelo shranjevanje {{count}} zahtevka na {{total}} izbranem: {{ids}}." + notice_failed_to_save_issues: "Neuspelo shranjevanje %{count} zahtevka na %{total} izbranem: %{ids}." notice_no_issue_selected: "Izbran ni noben zahtevek! Prosimo preverite zahtevke, ki jih želite urediti." notice_account_pending: "Vaš račun je bil ustvarjen in čaka na potrditev s strani administratorja." notice_default_data_loaded: Privzete nastavitve so bile uspešno naložene. notice_unable_delete_version: Verzije ni bilo mogoče izbrisati. - error_can_t_load_default_data: "Privzetih nastavitev ni bilo mogoče naložiti: {{value}}" + error_can_t_load_default_data: "Privzetih nastavitev ni bilo mogoče naložiti: %{value}" error_scm_not_found: "Vnos ali revizija v shrambi ni bila najdena ." - error_scm_command_failed: "Med vzpostavljem povezave s shrambo je prišlo do napake: {{value}}" + error_scm_command_failed: "Med vzpostavljem povezave s shrambo je prišlo do napake: %{value}" error_scm_annotate: "Vnos ne obstaja ali pa ga ni mogoče komentirati." error_issue_not_found_in_project: 'Zahtevek ni bil najden ali pa ne pripada temu projektu' - mail_subject_lost_password: "Vaše {{value}} geslo" + mail_subject_lost_password: "Vaše %{value} geslo" mail_body_lost_password: 'Za spremembo glesla kliknite na naslednjo povezavo:' - mail_subject_register: "Aktivacija {{value}} vašega računa" + mail_subject_register: "Aktivacija %{value} vašega računa" mail_body_register: 'Za aktivacijo vašega računa kliknite na naslednjo povezavo:' - mail_body_account_information_external: "Za prijavo lahko uporabite vaš {{value}} račun." + mail_body_account_information_external: "Za prijavo lahko uporabite vaš %{value} račun." mail_body_account_information: Informacije o vašem računu - mail_subject_account_activation_request: "{{value}} zahtevek za aktivacijo računa" - mail_body_account_activation_request: "Registriral se je nov uporabnik ({{value}}). Račun čaka na vašo odobritev:" - mail_subject_reminder: "{{count}} zahtevek(zahtevki) zapadejo v naslednjih {{days}} dneh" - mail_body_reminder: "{{count}} zahtevek(zahtevki), ki so vam dodeljeni bodo zapadli v naslednjih {{days}} dneh:" + mail_subject_account_activation_request: "%{value} zahtevek za aktivacijo računa" + mail_body_account_activation_request: "Registriral se je nov uporabnik (%{value}). Račun čaka na vašo odobritev:" + mail_subject_reminder: "%{count} zahtevek(zahtevki) zapadejo v naslednjih %{days} dneh" + mail_body_reminder: "%{count} zahtevek(zahtevki), ki so vam dodeljeni bodo zapadli v naslednjih %{days} dneh:" gui_validation_error: 1 napaka - gui_validation_error_plural: "{{count}} napak" + gui_validation_error_plural: "%{count} napak" field_name: Ime field_description: Opis @@ -236,7 +243,8 @@ field_attr_lastname: Oznaka za priimek field_attr_mail: Oznaka za e-naslov field_onthefly: Sprotna izdelava uporabnikov - field_done_ratio: % Narejeno + field_start_date: Začetek + field_done_ratio: "% Narejeno" field_auth_source: Način overovljanja field_hide_mail: Skrij moj e-naslov field_comments: Komentar @@ -286,7 +294,6 @@ setting_cross_project_issue_relations: Dovoli povezave zahtevkov med različnimi projekti setting_issue_list_default_columns: Privzeti stolpci prikazani na seznamu zahtevkov setting_repositories_encodings: Kodiranje shrambe - setting_commit_logs_encoding: Kodiranje sporočil ob predaji setting_emails_footer: Noga e-sporočil setting_protocol: Protokol setting_per_page_options: Število elementov na stran @@ -367,14 +374,14 @@ label_x_projects: zero: no projects one: 1 project - other: "{{count}} projects" + other: "%{count} projects" label_project_all: Vsi projekti label_project_latest: Zadnji projekti label_issue: Zahtevek label_issue_new: Nov zahtevek label_issue_plural: Zahtevki label_issue_view_all: Poglej vse zahtevke - label_issues_by: "Zahtevki od {{value}}" + label_issues_by: "Zahtevki od %{value}" label_issue_added: Zahtevek dodan label_issue_updated: Zahtevek posodobljen label_document: Dokument @@ -422,7 +429,7 @@ label_registered_on: Registriran label_activity: Aktivnost label_overall_activity: Celotna aktivnost - label_user_activity: "Aktivnost {{value}}" + label_user_activity: "Aktivnost %{value}" label_new: Nov label_logged_as: Prijavljen(a) kot label_environment: Okolje @@ -431,7 +438,7 @@ label_auth_source_new: Nov način overovitve label_auth_source_plural: Načini overovitve label_subproject_plural: Podprojekti - label_and_its_subprojects: "{{value}} in njegovi podprojekti" + label_and_its_subprojects: "%{value} in njegovi podprojekti" label_min_max_length: Min - Max dolžina label_list: Seznam label_date: Datum @@ -442,8 +449,8 @@ label_text: Dolgo besedilo label_attribute: Lastnost label_attribute_plural: Lastnosti - label_download: "{{count}} Prenos" - label_download_plural: "{{count}} Prenosi" + label_download: "%{count} Prenos" + label_download_plural: "%{count} Prenosi" label_no_data: Ni podatkov za prikaz label_change_status: Spremeni stanje label_history: Zgodovina @@ -474,17 +481,17 @@ label_closed_issues: zapri zahtevek label_closed_issues_plural: zapri zahtevke label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{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" + other: "%{count} open" label_x_closed_issues_abbr: zero: 0 closed one: 1 closed - other: "{{count}} closed" + other: "%{count} closed" label_total: Skupaj label_permissions: Dovoljenja label_current_status: Trenutno stanje @@ -502,7 +509,7 @@ label_months_from: mesecev od label_gantt: Gantt label_internal: Notranji - label_last_changes: "zadnjih {{count}} sprememb" + label_last_changes: "zadnjih %{count} sprememb" label_change_view_all: Poglej vse spremembe label_personalize_page: Individualiziraj to stran label_comment: Komentar @@ -510,7 +517,7 @@ label_x_comments: zero: no comments one: 1 comment - other: "{{count}} comments" + other: "%{count} comments" label_comment_add: Dodaj komentar label_comment_added: Komentar dodan label_comment_delete: Izbriši komentarje @@ -529,7 +536,7 @@ label_yesterday: včeraj label_this_week: ta teden label_last_week: pretekli teden - label_last_n_days: "zadnjih {{count}} dni" + label_last_n_days: "zadnjih %{count} dni" label_this_month: ta mesec label_last_month: zadnji mesec label_this_year: to leto @@ -543,8 +550,8 @@ label_repository: Shramba label_repository_plural: Shrambe label_browse: Prebrskaj - label_modification: "{{count}} sprememba" - label_modification_plural: "{{count}} spremembe" + label_modification: "%{count} sprememba" + label_modification_plural: "%{count} spremembe" label_revision: Revizija label_revision_plural: Revizije label_associated_revisions: Povezane revizije @@ -562,8 +569,8 @@ label_sort_lower: Premakni dol label_sort_lowest: Premakni na dno label_roadmap: Načrt - label_roadmap_due_in: "Do {{value}}" - label_roadmap_overdue: "{{value}} zakasnel" + label_roadmap_due_in: "Do %{value}" + label_roadmap_overdue: "%{value} zakasnel" label_roadmap_no_issues: Ni zahtevkov za to verzijo label_search: Išči label_result_plural: Rezultati @@ -581,8 +588,8 @@ label_changes_details: Podrobnosti o vseh spremembah label_issue_tracking: Sledenje zahtevkom label_spent_time: Porabljen čas - label_f_hour: "{{value}} ura" - label_f_hour_plural: "{{value}} ur" + label_f_hour: "%{value} ura" + label_f_hour_plural: "%{value} ur" label_time_tracking: Sledenje času label_change_plural: Spremembe label_statistics: Statistika @@ -631,13 +638,13 @@ label_date_from: Do label_date_to: Do label_language_based: Glede na uporabnikov jezik - label_sort_by: "Razporedi po {{value}}" + label_sort_by: "Razporedi po %{value}" label_send_test_email: Pošlji testno e-pismo - label_feeds_access_key_created_on: "RSS dostopni ključ narejen {{value}} nazaj" + label_feeds_access_key_created_on: "RSS dostopni ključ narejen %{value} nazaj" label_module_plural: Moduli - label_added_time_by: "Dodan {{author}} {{age}} nazaj" - label_updated_time_by: "Posodobljen od {{author}} {{age}} nazaj" - label_updated_time: "Posodobljen {{value}} nazaj" + label_added_time_by: "Dodan %{author} %{age} nazaj" + label_updated_time_by: "Posodobljen od %{author} %{age} nazaj" + label_updated_time: "Posodobljen %{value} nazaj" label_jump_to_a_project: Skoči na projekt... label_file_plural: Datoteke label_changeset_plural: Zapisi sprememb @@ -653,7 +660,7 @@ label_registration_activation_by_email: aktivacija računa po e-pošti label_registration_manual_activation: ročna aktivacija računa label_registration_automatic_activation: samodejna aktivacija računa - label_display_per_page: "Na stran: {{value}}" + label_display_per_page: "Na stran: %{value}" label_age: Starost label_change_properties: Sprememba lastnosti label_general: Splošno @@ -720,43 +727,43 @@ text_regexp_info: npr. ^[A-Z0-9]+$ text_min_max_length_info: 0 pomeni brez omejitev text_project_destroy_confirmation: Ali ste prepričani da želite izbrisati izbrani projekt in vse z njim povezane podatke? - text_subprojects_destroy_warning: "Njegov(i) podprojekt(i): {{value}} bodo prav tako izbrisani." + text_subprojects_destroy_warning: "Njegov(i) podprojekt(i): %{value} bodo prav tako izbrisani." text_workflow_edit: Izberite vlogo in zahtevek za urejanje poteka dela text_are_you_sure: Ali ste prepričani? text_tip_issue_begin_day: naloga z začetkom na ta dan text_tip_issue_end_day: naloga z zaključkom na ta dan text_tip_issue_begin_end_day: naloga ki se začne in konča ta dan text_project_identifier_info: 'Dovoljene so samo male črke (a-z), številke in vezaji.
    Enkrat shranjen identifikator ne more biti spremenjen.' - text_caracters_maximum: "največ {{count}} znakov." - text_caracters_minimum: "Mora biti vsaj dolg vsaj {{count}} znakov." - text_length_between: "Dolžina med {{min}} in {{max}} znakov." + text_caracters_maximum: "največ %{count} znakov." + text_caracters_minimum: "Mora biti vsaj dolg vsaj %{count} znakov." + text_length_between: "Dolžina med %{min} in %{max} znakov." text_tracker_no_workflow: Potek dela za to vrsto zahtevka ni določen text_unallowed_characters: Nedovoljeni znaki text_comma_separated: Dovoljenih je več vrednosti (ločenih z vejico). text_issues_ref_in_commit_messages: Zahtevki sklicev in popravkov v sporočilu predaje - text_issue_added: "Zahtevek {{id}} je sporočil(a) {{author}}." - text_issue_updated: "Zahtevek {{id}} je posodobil(a) {{author}}." + text_issue_added: "Zahtevek %{id} je sporočil(a) %{author}." + text_issue_updated: "Zahtevek %{id} je posodobil(a) %{author}." text_wiki_destroy_confirmation: Ali ste prepričani da želite izbrisati ta wiki in vso njegovo vsebino? - text_issue_category_destroy_question: "Nekateri zahtevki ({{count}}) so dodeljeni tej kategoriji. Kaj želite storiti?" + text_issue_category_destroy_question: "Nekateri zahtevki (%{count}) so dodeljeni tej kategoriji. Kaj želite storiti?" text_issue_category_destroy_assignments: Odstrani naloge v kategoriji text_issue_category_reassign_to: Ponovno dodeli zahtevke tej kategoriji text_user_mail_option: "Na neizbrane projekte boste prejemali le obvestila o zadevah ki jih spremljate ali v katere ste vključeni (npr. zahtevki katerih avtor(ica) ste)" text_no_configuration_data: "Vloge, vrste zahtevkov, statusi zahtevkov in potek dela še niso bili določeni. \nZelo priporočljivo je, da naložite privzeto konfiguracijo, ki jo lahko kasneje tudi prilagodite." text_load_default_configuration: Naloži privzeto konfiguracijo - text_status_changed_by_changeset: "Dodano v zapis sprememb {{value}}." + text_status_changed_by_changeset: "Dodano v zapis sprememb %{value}." text_issues_destroy_confirmation: 'Ali ste prepričani, da želite izbrisati izbrani(e) zahtevek(ke)?' text_select_project_modules: 'Izberite module, ki jih želite omogočiti za ta projekt:' text_default_administrator_account_changed: Spremenjen privzeti administratorski račun text_file_repository_writable: Omogočeno pisanje v shrambo datotek text_rmagick_available: RMagick je na voljo(neobvezno) - text_destroy_time_entries_question: "{{hours}} ur je bilo opravljenih na zahtevku, ki ga želite izbrisati. Kaj želite storiti?" + text_destroy_time_entries_question: "%{hours} ur je bilo opravljenih na zahtevku, ki ga želite izbrisati. Kaj želite storiti?" text_destroy_time_entries: Izbriši opravljene ure text_assign_time_entries_to_project: Predaj opravljene ure projektu text_reassign_time_entries: 'Prenesi opravljene ure na ta zahtevek:' - text_user_wrote: "{{value}} je napisal(a):" - text_enumeration_destroy_question: "{{count}} objektov je določenih tej vrednosti." + 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.' @@ -785,7 +792,7 @@ enumeration_issue_priorities: Prioritete zahtevkov enumeration_doc_categories: Kategorije dokumentov enumeration_activities: Aktivnosti (sledenje časa) - warning_attachments_not_saved: "{{count}} file(s) could not be saved." + warning_attachments_not_saved: "%{count} file(s) could not be saved." field_editable: Editable text_plugin_assets_writable: Plugin assets directory writable label_display: Display @@ -801,21 +808,21 @@ label_descending: Descending label_sort: Sort label_ascending: Ascending - label_date_from_to: From {{start}} to {{end}} + label_date_from_to: From %{start} to %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? + text_wiki_page_destroy_question: This page has %{descendants} child page(s) and descendant(s). What do you want to do? text_wiki_page_reassign_children: Reassign child pages to this parent page text_wiki_page_nullify_children: Keep child pages as root pages text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated" label_wiki_content_added: Wiki page added - 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_added: "'%{id}' wiki page has been added" + mail_body_wiki_content_added: The '%{id}' wiki page has been added by %{author}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '%{id}' wiki page has been updated by %{author}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -823,14 +830,14 @@ label_branch: Branch 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"). - 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_changed: "%{label} changed from %{old} to %{new}" + text_journal_set_to: "%{label} set to %{value}" + text_journal_deleted: "%{label} deleted (%{old})" label_group_plural: Groups label_group: Group label_group_new: New group label_time_entry_plural: Spent time - text_journal_added: "{{label}} {{value}} added" + text_journal_added: "%{label} %{value} added" field_active: Active enumeration_system_activity: System Activity permission_delete_issue_watchers: Delete watchers @@ -865,9 +872,9 @@ setting_start_of_week: Start calendars on permission_view_issues: View Issues label_display_used_statuses_only: Only display statuses that are used by this tracker - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_api_access_key: API access key - label_api_access_key_created_on: API access key created {{value}} ago + label_api_access_key_created_on: API access key created %{value} ago label_feeds_access_key: RSS access key notice_api_access_key_reseted: Your API access key was reset. setting_rest_api_enabled: Enable REST web service @@ -894,12 +901,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -907,7 +914,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -918,8 +925,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Kodiranje sporočil ob predaji + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/sr-YU.yml.svn-base --- a/config/locales/.svn/text-base/sr-YU.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/sr-YU.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -18,7 +18,10 @@ month_names: [~, januar, februar, mart, april, maj, jun, jul, avgust, septembar, oktobar, novembar, decembar] abbr_month_names: [~, jan, feb, mar, apr, maj, jun, jul, avg, sep, okt, nov, dec] # Used in date_select and datime_select. - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -34,37 +37,37 @@ half_a_minute: "pola minuta" less_than_x_seconds: one: "manje od jedne sekunde" - other: "manje od {{count}} sek." + other: "manje od %{count} sek." x_seconds: one: "jedna sekunda" - other: "{{count}} sek." + other: "%{count} sek." less_than_x_minutes: one: "manje od minuta" - other: "manje od {{count}} min." + other: "manje od %{count} min." x_minutes: one: "jedan minut" - other: "{{count}} min." + other: "%{count} min." about_x_hours: one: "približno jedan sat" - other: "približno {{count}} sati" + other: "približno %{count} sati" x_days: one: "jedan dan" - other: "{{count}} dana" + other: "%{count} dana" about_x_months: one: "približno jedan mesec" - other: "približno {{count}} meseci" + other: "približno %{count} meseci" x_months: one: "jedan mesec" - other: "{{count}} meseci" + other: "%{count} meseci" about_x_years: one: "približno godinu dana" - other: "približno {{count}} god." + other: "približno %{count} god." over_x_years: one: "preko godinu dana" - other: "preko {{count}} god." + other: "preko %{count} god." almost_x_years: one: "skoro godinu dana" - other: "skoro {{count}} god." + other: "skoro %{count} god." number: format: @@ -95,6 +98,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "nije uključen u spisak" exclusion: "je rezervisan" @@ -103,17 +110,17 @@ accepted: "mora biti prihvaćen" empty: "ne može biti prazno" blank: "ne može biti prazno" - too_long: "je predugačka (maksimum znakova je {{count}})" - too_short: "je prekratka (minimum znakova je {{count}})" - wrong_length: "je pogrešne dužine (broj znakova mora biti {{count}})" + too_long: "je predugačka (maksimum znakova je %{count})" + too_short: "je prekratka (minimum znakova je %{count})" + wrong_length: "je pogrešne dužine (broj znakova mora biti %{count})" taken: "je već u upotrebi" not_a_number: "nije broj" not_a_date: "nije ispravan datum" - greater_than: "mora biti veći od {{count}}" - greater_than_or_equal_to: "mora biti veći ili jednak {{count}}" - equal_to: "mora biti jednak {{count}}" - less_than: "mora biti manji od {{count}}" - less_than_or_equal_to: "mora biti manji ili jednak {{count}}" + greater_than: "mora biti veći od %{count}" + greater_than_or_equal_to: "mora biti veći ili jednak %{count}" + equal_to: "mora biti jednak %{count}" + less_than: "mora biti manji od %{count}" + less_than_or_equal_to: "mora biti manji ili jednak %{count}" odd: "mora biti paran" even: "mora biti neparan" greater_than_start_date: "mora biti veći od početnog datuma" @@ -150,12 +157,12 @@ notice_file_not_found: Strana kojoj želite pristupiti ne postoji ili je uklonjena. notice_locking_conflict: Podatak je ažuriran od strane drugog korisnika. notice_not_authorized: Niste ovlašćeni za pristup ovoj strani. - notice_email_sent: "E-poruka je poslata na {{value}}" - notice_email_error: "Dogodila se greška prilikom slanja e-poruke ({{value}})" + notice_email_sent: "E-poruka je poslata na %{value}" + notice_email_error: "Dogodila se greška prilikom slanja e-poruke (%{value})" notice_feeds_access_key_reseted: Vaš RSS pristupni ključ je poništen. notice_api_access_key_reseted: Vaš API pristupni ključ je poništen. - notice_failed_to_save_issues: "Neuspešno snimanje {{count}} problema od {{total}} odabranih: {{ids}}." - notice_failed_to_save_members: "Neuspešno snimanje člana(ova): {{errors}}." + notice_failed_to_save_issues: "Neuspešno snimanje %{count} problema od %{total} odabranih: %{ids}." + notice_failed_to_save_members: "Neuspešno snimanje člana(ova): %{errors}." notice_no_issue_selected: "Ni jedan problem nije odabran! Molimo, odaberite problem koji želite da menjate." notice_account_pending: "Vaš nalog je kreiran i čeka na odobrenje administratora." notice_default_data_loaded: Podrazumevano konfigurisanje je uspešno učitano. @@ -163,9 +170,9 @@ notice_unable_delete_time_entry: Stavku evidencije vremena je nemoguće izbrisati. notice_issue_done_ratios_updated: Odnos rešenih problema je ažuriran. - error_can_t_load_default_data: "Podrazumevano konfigurisanje je nemoguće učitati: {{value}}" + error_can_t_load_default_data: "Podrazumevano konfigurisanje je nemoguće učitati: %{value}" error_scm_not_found: "Stavka ili ispravka nisu pronađene u spremištu." - error_scm_command_failed: "Greška se javila prilikom pokušaja pristupa spremištu: {{value}}" + error_scm_command_failed: "Greška se javila prilikom pokušaja pristupa spremištu: %{value}" error_scm_annotate: "Stavka ne postoji ili ne može biti označena." error_issue_not_found_in_project: 'Problem nije pronađen ili ne pripada ovom projektu.' error_no_tracker_in_project: 'Ni jedno praćenje nije povezano sa ovim projektom. Molimo proverite podešavanja projekta.' @@ -179,26 +186,26 @@ error_workflow_copy_source: 'Molimo odaberite izvorno praćenje ili ulogu' error_workflow_copy_target: 'Molimo odaberite odredišno praćenje i ulogu' error_unable_delete_issue_status: 'Status problema je nemoguće obrisati' - error_unable_to_connect: "Povezivanje sa ({{value}}) je nemoguće" - warning_attachments_not_saved: "{{count}} datoteka ne može biti snimljena." + error_unable_to_connect: "Povezivanje sa (%{value}) je nemoguće" + warning_attachments_not_saved: "%{count} datoteka ne može biti snimljena." - mail_subject_lost_password: "Vaša {{value}} lozinka" + mail_subject_lost_password: "Vaša %{value} lozinka" mail_body_lost_password: 'Za promenu vaše lozinke, kliknite na sledeći link:' - mail_subject_register: "Aktivacija vašeg {{value}} naloga" + mail_subject_register: "Aktivacija vašeg %{value} naloga" mail_body_register: 'Za aktivaciju vašeg naloga, kliknite na sledeći link:' - mail_body_account_information_external: "Vaš nalog {{value}} možete koristiti za prijavu." + mail_body_account_information_external: "Vaš nalog %{value} možete koristiti za prijavu." mail_body_account_information: Informacije o vašem nalogu - mail_subject_account_activation_request: "Zahtev za aktivaciju naloga {{value}}" - mail_body_account_activation_request: "Novi korisnik ({{value}}) je registrovan. Nalog čeka na vaše odobrenje:" - mail_subject_reminder: "{{count}} problema dospeva narednih {{days}} dana" - mail_body_reminder: "{{count}} problema dodeljenih vama dospeva u narednih {{days}} dana:" - mail_subject_wiki_content_added: "Wiki stranica '{{id}}' je dodata" - mail_body_wiki_content_added: "{{author}} je dodao wiki stranicu '{{id}}'." - mail_subject_wiki_content_updated: "Wiki stranica '{{id}}' je ažurirana" - mail_body_wiki_content_updated: "{{author}} je ažurirao wiki stranicu '{{id}}'." + mail_subject_account_activation_request: "Zahtev za aktivaciju naloga %{value}" + mail_body_account_activation_request: "Novi korisnik (%{value}) je registrovan. Nalog čeka na vaše odobrenje:" + mail_subject_reminder: "%{count} problema dospeva narednih %{days} dana" + mail_body_reminder: "%{count} problema dodeljenih vama dospeva u narednih %{days} dana:" + mail_subject_wiki_content_added: "Wiki stranica '%{id}' je dodata" + mail_body_wiki_content_added: "%{author} je dodao wiki stranicu '%{id}'." + mail_subject_wiki_content_updated: "Wiki stranica '%{id}' je ažurirana" + mail_body_wiki_content_updated: "%{author} je ažurirao wiki stranicu '%{id}'." gui_validation_error: jedna greška - gui_validation_error_plural: "{{count}} grešaka" + gui_validation_error_plural: "%{count} grešaka" field_name: Naziv field_description: Opis @@ -261,7 +268,8 @@ field_attr_lastname: Atribut prezimena field_attr_mail: Atribut e-adrese field_onthefly: Kreiranje korisnika u toku rada - field_done_ratio: % urađeno + field_start_date: Početak + field_done_ratio: "% urađeno" field_auth_source: Režim potvrde identiteta field_hide_mail: Sakrij moju e-adresu field_comments: Komentar @@ -318,7 +326,6 @@ setting_cross_project_issue_relations: Dozvoli povezivanje problema iz unakrsnih projekata setting_issue_list_default_columns: Podrazumevane kolone prikazane na spisku problema setting_repositories_encodings: Kodiranje spremišta - setting_commit_logs_encoding: Kodiranje izvršnih poruka setting_emails_footer: Podnožje stranice e-poruke setting_protocol: Protokol setting_per_page_options: Opcije prikaza objekata po stranici @@ -421,14 +428,14 @@ label_x_projects: zero: nema projekata one: jedan projekat - other: "{{count}} projekata" + other: "%{count} projekata" label_project_all: Svi projekti label_project_latest: Poslednji projekti label_issue: Problem label_issue_new: Novi problem label_issue_plural: Problemi label_issue_view_all: Prikaz svih problema - label_issues_by: "Problemi ({{value}})" + label_issues_by: "Problemi (%{value})" label_issue_added: Problem je dodat label_issue_updated: Problem je ažuriran label_document: Dokument @@ -478,7 +485,7 @@ label_registered_on: Registrovan label_activity: Aktivnost label_overall_activity: Celokupna aktivnost - label_user_activity: "Aktivnost korisnika {{value}}" + label_user_activity: "Aktivnost korisnika %{value}" label_new: Novo label_logged_as: Prijavljeni ste kao label_environment: Okruženje @@ -488,7 +495,7 @@ label_auth_source_plural: Režimi potvrde identiteta label_subproject_plural: Potprojekti label_subproject_new: Novi potprojekat - label_and_its_subprojects: "{{value}} i njegovi potprojekti" + label_and_its_subprojects: "%{value} i njegovi potprojekti" label_min_max_length: Min. - Maks. dužina label_list: Spisak label_date: Datum @@ -499,8 +506,8 @@ label_text: Dugi tekst label_attribute: Osobina label_attribute_plural: Osobine - label_download: "{{count}} preuzimanje" - label_download_plural: "{{count}} preuzimanja" + label_download: "%{count} preuzimanje" + label_download_plural: "%{count} preuzimanja" label_no_data: Nema podataka za prikazivanje label_change_status: Promena statusa label_history: Istorija @@ -532,17 +539,17 @@ label_closed_issues: zatvoren label_closed_issues_plural: zatvorenih label_x_open_issues_abbr_on_total: - zero: 0 otvorenih / {{total}} - one: 1 otvoren / {{total}} - other: "{{count}} otvorenih / {{total}}" + zero: 0 otvorenih / %{total} + one: 1 otvoren / %{total} + other: "%{count} otvorenih / %{total}" label_x_open_issues_abbr: zero: 0 otvorenih one: 1 otvoren - other: "{{count}} otvorenih" + other: "%{count} otvorenih" label_x_closed_issues_abbr: zero: 0 zatvorenih one: 1 zatvoren - other: "{{count}} zatvorenih" + other: "%{count} zatvorenih" label_total: Ukupno label_permissions: Dozvole label_current_status: Trenutni status @@ -560,7 +567,7 @@ label_months_from: meseci od label_gantt: Gantov dijagram label_internal: Unutrašnji - label_last_changes: "poslednjih {{count}} promena" + label_last_changes: "poslednjih %{count} promena" label_change_view_all: Prikaži sve promene label_personalize_page: Personalizuj ovu stranu label_comment: Komentar @@ -568,7 +575,7 @@ label_x_comments: zero: bez komentara one: jedan komentar - other: "{{count}} komentara" + other: "%{count} komentara" label_comment_add: Dodaj komentar label_comment_added: Komentar dodat label_comment_delete: Obriši komentare @@ -589,7 +596,7 @@ label_yesterday: juče label_this_week: ove sedmice label_last_week: poslednje sedmice - label_last_n_days: "poslednjih {{count}} dana" + label_last_n_days: "poslednjih %{count} dana" label_this_month: ovog meseca label_last_month: poslednjeg meseca label_this_year: ove godine @@ -603,13 +610,13 @@ label_repository: Spremište label_repository_plural: Spremišta label_browse: Pregledanje - label_modification: "{{count}} promena" - label_modification_plural: "{{count}} promena" + label_modification: "%{count} promena" + label_modification_plural: "%{count} promena" label_branch: Grana label_tag: Oznaka label_revision: Revizija label_revision_plural: Revizije - label_revision_id: "Revizija {{value}}" + label_revision_id: "Revizija %{value}" label_associated_revisions: Pridružene revizije label_added: dodato label_modified: promenjeno @@ -626,8 +633,8 @@ label_sort_lower: Premeštanje na dole label_sort_lowest: Premeštanje na dno label_roadmap: Plan rada - label_roadmap_due_in: "Dospeva {{value}}" - label_roadmap_overdue: "{{value}} najkasnije" + label_roadmap_due_in: "Dospeva %{value}" + label_roadmap_overdue: "%{value} najkasnije" label_roadmap_no_issues: Nema problema za ovu verziju label_search: Pretraga label_result_plural: Rezultati @@ -646,8 +653,8 @@ label_issue_tracking: Praćenje problema label_spent_time: Utrošeno vreme label_overall_spent_time: Celokupno utrošeno vreme - label_f_hour: "{{value}} sat" - label_f_hour_plural: "{{value}} sati" + label_f_hour: "%{value} sat" + label_f_hour_plural: "%{value} sati" label_time_tracking: Praćenje vremena label_change_plural: Promene label_statistics: Statistika @@ -698,15 +705,15 @@ label_date_from: Šalje label_date_to: Prima label_language_based: Bazirano na jeziku korisnika - label_sort_by: "Sortirano po {{value}}" + label_sort_by: "Sortirano po %{value}" label_send_test_email: Slanje probne e-poruke label_feeds_access_key: RSS pristupni ključ label_missing_feeds_access_key: RSS pristupni ključ nedostaje - label_feeds_access_key_created_on: "RSS pristupni ključ je napravljen pre {{value}}" + label_feeds_access_key_created_on: "RSS pristupni ključ je napravljen pre %{value}" label_module_plural: Moduli - label_added_time_by: "Dodao {{author}} pre {{age}}" - label_updated_time_by: "Ažurirao {{author}} pre {{age}}" - label_updated_time: "Ažurirano pre {{value}}" + label_added_time_by: "Dodao %{author} pre %{age}" + label_updated_time_by: "Ažurirao %{author} pre %{age}" + label_updated_time: "Ažurirano pre %{value}" label_jump_to_a_project: Skok na projekat... label_file_plural: Datoteke label_changeset_plural: Skupovi promena @@ -722,7 +729,7 @@ label_registration_activation_by_email: aktivacija naloga putem e-poruke label_registration_manual_activation: ručna aktivacija naloga label_registration_automatic_activation: automatska aktivacija naloga - label_display_per_page: "Broj stavki po stranici: {{value}}" + label_display_per_page: "Broj stavki po stranici: %{value}" label_age: Starost label_change_properties: Promeni svojstva label_general: Opšti @@ -745,7 +752,7 @@ label_sort: Sortiranje label_ascending: Rastući niz label_descending: Opadajući niz - label_date_from_to: Od {{start}} do {{end}} + label_date_from_to: Od %{start} do %{end} label_wiki_content_added: Wiki stranica je dodata label_wiki_content_updated: Wiki stranica je ažurirana label_group: Grupa @@ -764,7 +771,7 @@ label_display_used_statuses_only: Prikazuj statuse korišćene samo od strane ovog praćenja label_api_access_key: API pristupni ključ label_missing_api_access_key: Nedostaje API pristupni ključ - label_api_access_key_created_on: "API pristupni ključ je kreiran pre {{value}}" + label_api_access_key_created_on: "API pristupni ključ je kreiran pre %{value}" label_profile: Profil label_subtask_plural: Podzadatak label_project_copy_notifications: Pošalji e-poruku sa obaveštenjem prilikom kopiranja projekta @@ -827,53 +834,53 @@ text_regexp_info: npr. ^[A-Z0-9]+$ text_min_max_length_info: 0 znači bez ograničenja text_project_destroy_confirmation: Jeste li sigurni da želite da izbrišete ovaj projekat i sve pripadajuće podatke? - text_subprojects_destroy_warning: "Potprojekti: {{value}} će takođe biti izbrisan." + text_subprojects_destroy_warning: "Potprojekti: %{value} će takođe biti izbrisan." text_workflow_edit: Odaberite ulogu i praćenje za izmenu toka posla text_are_you_sure: Jeste li sigurni? - text_journal_changed: "{{label}} promenjen od {{old}} u {{new}}" - text_journal_set_to: "{{label}} postavljen u {{value}}" - text_journal_deleted: "{{label}} izbrisano ({{old}})" - text_journal_added: "{{label}} {{value}} dodato" + text_journal_changed: "%{label} promenjen od %{old} u %{new}" + text_journal_set_to: "%{label} postavljen u %{value}" + text_journal_deleted: "%{label} izbrisano (%{old})" + text_journal_added: "%{label} %{value} dodato" text_tip_issue_begin_day: zadatak počinje ovog dana text_tip_issue_end_day: zadatak se završava ovog dana text_tip_issue_begin_end_day: zadatak počinje i završava ovog dana text_project_identifier_info: 'Dozvoljena su samo mala slova (a-š), brojevi i crtice.
    Jednom snimljen identifikator više se ne može promeniti.' - text_caracters_maximum: "Najviše {{count}} znak(ova)." - text_caracters_minimum: "Broj znakova mora biti najmanje {{count}}." - text_length_between: "Broj znakova mora biti između {{min}} i {{max}}." + text_caracters_maximum: "Najviše %{count} znak(ova)." + text_caracters_minimum: "Broj znakova mora biti najmanje %{count}." + text_length_between: "Broj znakova mora biti između %{min} i %{max}." text_tracker_no_workflow: Ovo praćenje nema definisan tok posla text_unallowed_characters: Nedozvoljeni znakovi text_comma_separated: Dozvoljene su višestruke vrednosti (odvojene zarezom). text_line_separated: Dozvoljene su višestruke vrednosti (jedan red za svaku vrednost). text_issues_ref_in_commit_messages: Referenciranje i popravljanje problema u izvršnim porukama - text_issue_added: "{{author}} je prijavio problem {{id}}." - text_issue_updated: "{{author}} je ažurirao problem {{id}}." + text_issue_added: "%{author} je prijavio problem %{id}." + text_issue_updated: "%{author} je ažurirao problem %{id}." text_wiki_destroy_confirmation: Jeste li sigurni da želite da obrišete wiki i sav sadržaj? - text_issue_category_destroy_question: "Nekoliko problema ({{count}}) je dodeljeno ovoj kategoriji. Šta želite da uradite?" + text_issue_category_destroy_question: "Nekoliko problema (%{count}) je dodeljeno ovoj kategoriji. Šta želite da uradite?" text_issue_category_destroy_assignments: Ukloni dodeljene kategorije text_issue_category_reassign_to: Dodeli ponovo probleme ovoj kategoriji text_user_mail_option: "Za neizabrane projekte, dobićete samo obaveštenje o stvarima koje pratite ili ste uključeni (npr. problemi čiji ste vi autor ili zastupnik)." text_no_configuration_data: "Uloge, praćenja, statusi problema i toka posla još uvek nisu podešeni.\nPreporučljivo je da učitate podrazumevano konfigurisanje. Izmena je moguća nakon prvog učitavanja." text_load_default_configuration: Učitaj podrazumevano konfigurisanje - text_status_changed_by_changeset: "Primenjeno u skupu sa promenama {{value}}." + text_status_changed_by_changeset: "Primenjeno u skupu sa promenama %{value}." text_issues_destroy_confirmation: 'Jeste li sigurni da želite da izbrišete odabrane probleme?' text_select_project_modules: 'Odaberite module koje želite omogućiti za ovaj projekat:' text_default_administrator_account_changed: Podrazumevani administratorski nalog je promenjen text_file_repository_writable: Fascikla priloženih datoteka je upisiva text_plugin_assets_writable: Fascikla elemenata dodatnih komponenti je upisiva text_rmagick_available: RMagick je dostupan (opciono) - text_destroy_time_entries_question: "{{hours}} sati je prijavljeno za ovaj problem koji želite izbrisati. Šta želite da uradite?" + text_destroy_time_entries_question: "%{hours} sati je prijavljeno za ovaj problem koji želite izbrisati. Šta želite da uradite?" text_destroy_time_entries: Izbriši prijavljene sate text_assign_time_entries_to_project: Dodeli prijavljene sate projektu text_reassign_time_entries: 'Dodeli ponovo prijavljene sate ovom problemu:' - text_user_wrote: "{{value}} je napisao:" - text_enumeration_destroy_question: "{{count}} objekat(a) je dodeljeno ovoj vrednosti." + 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' - text_wiki_page_destroy_question: "Ova stranica ima {{descendants}} podređenih stranica i podstranica. Šta želite da uradite?" + text_wiki_page_destroy_question: "Ova stranica ima %{descendants} podređenih stranica i podstranica. Šta želite da uradite?" text_wiki_page_nullify_children: "Zadrži podređene stranice kao korene stranice" text_wiki_page_destroy_children: "Izbriši podređene stranice i sve njihove podstranice" text_wiki_page_reassign_children: "Dodeli ponovo podređene stranice ovoj matičnoj stranici" @@ -911,7 +918,7 @@ field_time_entries: Vreme evidencije project_module_gantt: Gantov dijagram project_module_calendar: Kalendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -921,9 +928,51 @@ 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. - field_start_date: Start date + 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 + 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Kodiranje izvršnih poruka + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/sr.yml.svn-base --- a/config/locales/.svn/text-base/sr.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/sr.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -18,7 +18,10 @@ month_names: [~, јануар, фебруар, март, април, мај, јун, јул, август, септембар, октобар, новембар, децембар] abbr_month_names: [~, јан, феб, мар, апр, мај, јун, јул, авг, сеп, окт, нов, дец] # Used in date_select and datime_select. - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -34,37 +37,37 @@ half_a_minute: "пола минута" less_than_x_seconds: one: "мање од једне секунде" - other: "мање од {{count}} сек." + other: "мање од %{count} сек." x_seconds: one: "једна секунда" - other: "{{count}} сек." + other: "%{count} сек." less_than_x_minutes: one: "мање од минута" - other: "мање од {{count}} мин." + other: "мање од %{count} мин." x_minutes: one: "један минут" - other: "{{count}} мин." + other: "%{count} мин." about_x_hours: one: "приближно један сат" - other: "приближно {{count}} сати" + other: "приближно %{count} сати" x_days: one: "један дан" - other: "{{count}} дана" + other: "%{count} дана" about_x_months: one: "приближно један месец" - other: "приближно {{count}} месеци" + other: "приближно %{count} месеци" x_months: one: "један месец" - other: "{{count}} месеци" + other: "%{count} месеци" about_x_years: one: "приближно годину дана" - other: "приближно {{count}} год." + other: "приближно %{count} год." over_x_years: one: "преко годину дана" - other: "преко {{count}} год." + other: "преко %{count} год." almost_x_years: one: "скоро годину дана" - other: "скоро {{count}} год." + other: "скоро %{count} год." number: format: @@ -95,6 +98,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "није укључен у списак" exclusion: "је резервисан" @@ -103,17 +110,17 @@ accepted: "мора бити прихваћен" empty: "не може бити празно" blank: "не може бити празно" - too_long: "је предугачка (максимум знакова је {{count}})" - too_short: "је прекратка (минимум знакова је {{count}})" - wrong_length: "је погрешне дужине (број знакова мора бити {{count}})" + 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}}" + 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: "мора бити већи од почетног датума" @@ -150,12 +157,12 @@ notice_file_not_found: Страна којој желите приступити не постоји или је уклоњена. notice_locking_conflict: Податак је ажуриран од стране другог корисника. notice_not_authorized: Нисте овлашћени за приступ овој страни. - notice_email_sent: "E-порука је послата на {{value}}" - notice_email_error: "Догодила се грешка приликом слања е-поруке ({{value}})" + notice_email_sent: "E-порука је послата на %{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_failed_to_save_issues: "Неуспешно снимање %{count} проблема од %{total} одабраних: %{ids}." + notice_failed_to_save_members: "Неуспешно снимање члана(ова): %{errors}." notice_no_issue_selected: "Ни један проблем није одабран! Молимо, одаберите проблем који желите да мењате." notice_account_pending: "Ваш налог је креиран и чека на одобрење администратора." notice_default_data_loaded: Подразумевано конфигурисање је успешно учитано. @@ -163,9 +170,9 @@ notice_unable_delete_time_entry: Ставку евиденције времена је немогуће избрисати. notice_issue_done_ratios_updated: Однос решених проблема је ажуриран. - error_can_t_load_default_data: "Подразумевано конфигурисање је немогуће учитати: {{value}}" + error_can_t_load_default_data: "Подразумевано конфигурисање је немогуће учитати: %{value}" error_scm_not_found: "Ставка или исправка нису пронађене у спремишту." - error_scm_command_failed: "Грешка се јавила приликом покушаја приступа спремишту: {{value}}" + error_scm_command_failed: "Грешка се јавила приликом покушаја приступа спремишту: %{value}" error_scm_annotate: "Ставка не постоји или не може бити означена." error_issue_not_found_in_project: 'Проблем није пронађен или не припада овом пројекту.' error_no_tracker_in_project: 'Ни једно праћење није повезано са овим пројектом. Молимо проверите подешавања пројекта.' @@ -179,26 +186,26 @@ error_workflow_copy_source: 'Молимо одаберите изворно праћење или улогу' error_workflow_copy_target: 'Молимо одаберите одредишно праћење и улогу' error_unable_delete_issue_status: 'Статус проблема је немогуће обрисати' - error_unable_to_connect: "Повезивање са ({{value}}) је немогуће" - warning_attachments_not_saved: "{{count}} датотека не може бити снимљена." + error_unable_to_connect: "Повезивање са (%{value}) је немогуће" + warning_attachments_not_saved: "%{count} датотека не може бити снимљена." - mail_subject_lost_password: "Ваша {{value}} лозинка" + mail_subject_lost_password: "Ваша %{value} лозинка" mail_body_lost_password: 'За промену ваше лозинке, кликните на следећи линк:' - mail_subject_register: "Активација вашег {{value}} налога" + mail_subject_register: "Активација вашег %{value} налога" mail_body_register: 'За активацију вашег налога, кликните на следећи линк:' - mail_body_account_information_external: "Ваш налог {{value}} можете користити за пријаву." + 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: "{{author}} је додао wiki страницу '{{id}}'." - mail_subject_wiki_content_updated: "Wiki страница '{{id}}' је ажурирана" - mail_body_wiki_content_updated: "{{author}} је ажурирао wiki страницу '{{id}}'." + 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: "%{author} је додао wiki страницу '%{id}'." + mail_subject_wiki_content_updated: "Wiki страница '%{id}' је ажурирана" + mail_body_wiki_content_updated: "%{author} је ажурирао wiki страницу '%{id}'." gui_validation_error: једна грешка - gui_validation_error_plural: "{{count}} грешака" + gui_validation_error_plural: "%{count} грешака" field_name: Назив field_description: Опис @@ -261,7 +268,8 @@ field_attr_lastname: Атрибут презимена field_attr_mail: Атрибут е-адресе field_onthefly: Креирање корисника у току рада - field_done_ratio: % урађено + field_start_date: Почетак + field_done_ratio: "% урађено" field_auth_source: Режим потврде идентитета field_hide_mail: Сакриј моју е-адресу field_comments: Коментар @@ -318,7 +326,6 @@ setting_cross_project_issue_relations: Дозволи повезивање проблема из унакрсних пројеката setting_issue_list_default_columns: Подразумеване колоне приказане на списку проблема setting_repositories_encodings: Кодирање спремишта - setting_commit_logs_encoding: Кодирање извршних порука setting_emails_footer: Подножје странице е-поруке setting_protocol: Протокол setting_per_page_options: Опције приказа објеката по страници @@ -421,14 +428,14 @@ label_x_projects: zero: нема пројеката one: један пројекат - other: "{{count}} пројеката" + 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_issues_by: "Проблеми (%{value})" label_issue_added: Проблем је додат label_issue_updated: Проблем је ажуриран label_document: Документ @@ -478,7 +485,7 @@ label_registered_on: Регистрован label_activity: Активност label_overall_activity: Целокупна активност - label_user_activity: "Активност корисника {{value}}" + label_user_activity: "Активност корисника %{value}" label_new: Ново label_logged_as: Пријављени сте као label_environment: Окружење @@ -488,7 +495,7 @@ label_auth_source_plural: Режими потврде идентитета label_subproject_plural: Потпројекти label_subproject_new: Нови потпројекат - label_and_its_subprojects: "{{value}} и његови потпројекти" + label_and_its_subprojects: "%{value} и његови потпројекти" label_min_max_length: Мин. - Макс. дужина label_list: Списак label_date: Датум @@ -499,8 +506,8 @@ label_text: Дуги текст label_attribute: Особина label_attribute_plural: Особине - label_download: "{{count}} преузимање" - label_download_plural: "{{count}} преузимања" + label_download: "%{count} преузимање" + label_download_plural: "%{count} преузимања" label_no_data: Нема података за приказивање label_change_status: Промена статуса label_history: Историја @@ -532,17 +539,17 @@ label_closed_issues: затворен label_closed_issues_plural: затворених label_x_open_issues_abbr_on_total: - zero: 0 отворених / {{total}} - one: 1 отворен / {{total}} - other: "{{count}} отворених / {{total}}" + zero: 0 отворених / %{total} + one: 1 отворен / %{total} + other: "%{count} отворених / %{total}" label_x_open_issues_abbr: zero: 0 отворених one: 1 отворен - other: "{{count}} отворених" + other: "%{count} отворених" label_x_closed_issues_abbr: zero: 0 затворених one: 1 затворен - other: "{{count}} затворених" + other: "%{count} затворених" label_total: Укупно label_permissions: Дозволе label_current_status: Тренутни статус @@ -560,7 +567,7 @@ label_months_from: месеци од label_gantt: Гантов дијаграм label_internal: Унутрашњи - label_last_changes: "последњих {{count}} промена" + label_last_changes: "последњих %{count} промена" label_change_view_all: Прикажи све промене label_personalize_page: Персонализуј ову страну label_comment: Коментар @@ -568,7 +575,7 @@ label_x_comments: zero: без коментара one: један коментар - other: "{{count}} коментара" + other: "%{count} коментара" label_comment_add: Додај коментар label_comment_added: Коментар додат label_comment_delete: Обриши коментаре @@ -589,7 +596,7 @@ label_yesterday: јуче label_this_week: ове седмице label_last_week: последње седмице - label_last_n_days: "последњих {{count}} дана" + label_last_n_days: "последњих %{count} дана" label_this_month: овог месеца label_last_month: последњег месеца label_this_year: ове године @@ -603,13 +610,13 @@ label_repository: Спремиште label_repository_plural: Спремишта label_browse: Прегледање - label_modification: "{{count}} промена" - label_modification_plural: "{{count}} промена" + label_modification: "%{count} промена" + label_modification_plural: "%{count} промена" label_branch: Грана label_tag: Ознака label_revision: Ревизија label_revision_plural: Ревизије - label_revision_id: "Ревизија {{value}}" + label_revision_id: "Ревизија %{value}" label_associated_revisions: Придружене ревизије label_added: додато label_modified: промењено @@ -626,8 +633,8 @@ label_sort_lower: Премештање на доле label_sort_lowest: Премештање на дно label_roadmap: План рада - label_roadmap_due_in: "Доспева {{value}}" - label_roadmap_overdue: "{{value}} најкасније" + label_roadmap_due_in: "Доспева %{value}" + label_roadmap_overdue: "%{value} најкасније" label_roadmap_no_issues: Нема проблема за ову верзију label_search: Претрага label_result_plural: Резултати @@ -646,8 +653,8 @@ label_issue_tracking: Праћење проблема label_spent_time: Утрошено време label_overall_spent_time: Целокупно утрошено време - label_f_hour: "{{value}} сат" - label_f_hour_plural: "{{value}} сати" + label_f_hour: "%{value} сат" + label_f_hour_plural: "%{value} сати" label_time_tracking: Праћење времена label_change_plural: Промене label_statistics: Статистика @@ -698,15 +705,15 @@ label_date_from: Шаље label_date_to: Прима label_language_based: Базирано на језику корисника - label_sort_by: "Сортирано по {{value}}" + 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_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_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: Скупови промена @@ -722,7 +729,7 @@ label_registration_activation_by_email: активација налога путем е-поруке label_registration_manual_activation: ручна активација налога label_registration_automatic_activation: аутоматска активација налога - label_display_per_page: "Број ставки по страници: {{value}}" + label_display_per_page: "Број ставки по страници: %{value}" label_age: Старост label_change_properties: Промени својства label_general: Општи @@ -745,7 +752,7 @@ label_sort: Сортирање label_ascending: Растући низ label_descending: Опадајући низ - label_date_from_to: Од {{start}} до {{end}} + label_date_from_to: Од %{start} до %{end} label_wiki_content_added: Wiki страница је додата label_wiki_content_updated: Wiki страница је ажурирана label_group: Група @@ -764,7 +771,7 @@ 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_api_access_key_created_on: "API приступни кључ је креиран пре %{value}" label_profile: Профил label_subtask_plural: Подзадатак label_project_copy_notifications: Пошаљи е-поруку са обавештењем приликом копирања пројекта @@ -827,53 +834,53 @@ text_regexp_info: нпр. ^[A-Z0-9]+$ text_min_max_length_info: 0 значи без ограничења text_project_destroy_confirmation: Јесте ли сигурни да желите да избришете овај пројекат и све припадајуће податке? - text_subprojects_destroy_warning: "Потпројекти: {{value}} ће такође бити избрисан." + text_subprojects_destroy_warning: "Потпројекти: %{value} ће такође бити избрисан." text_workflow_edit: Одаберите улогу и праћење за измену тока посла text_are_you_sure: Јесте ли сигурни? - text_journal_changed: "{{label}} промењен од {{old}} у {{new}}" - text_journal_set_to: "{{label}} постављен у {{value}}" - text_journal_deleted: "{{label}} избрисано ({{old}})" - text_journal_added: "{{label}} {{value}} додато" + 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-ш), бројеви и цртице.
    Једном снимљен идентификатор више се не може променити.' - text_caracters_maximum: "Највише {{count}} знак(ова)." - text_caracters_minimum: "Број знакова мора бити најмање {{count}}." - text_length_between: "Број знакова мора бити између {{min}} и {{max}}." + 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: "{{author}} је пријавио проблем {{id}}." - text_issue_updated: "{{author}} је ажурирао проблем {{id}}." + text_issue_added: "%{author} је пријавио проблем %{id}." + text_issue_updated: "%{author} је ажурирао проблем %{id}." text_wiki_destroy_confirmation: Јесте ли сигурни да желите да обришете wiki и сав садржај? - text_issue_category_destroy_question: "Неколико проблема ({{count}}) је додељено овој категорији. Шта желите да урадите?" + 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_status_changed_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_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_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: 'Један ред за сваку вредност' - text_wiki_page_destroy_question: "Ова страница има {{descendants}} подређених страница и подстраница. Шта желите да урадите?" + text_wiki_page_destroy_question: "Ова страница има %{descendants} подређених страница и подстраница. Шта желите да урадите?" text_wiki_page_nullify_children: "Задржи подређене странице као корене странице" text_wiki_page_destroy_children: "Избриши подређене странице и све њихове подстранице" text_wiki_page_reassign_children: "Додели поново подређене странице овој матичној страници" @@ -912,7 +919,7 @@ project_module_gantt: Гантов дијаграм project_module_calendar: Календар - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -923,8 +930,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Кодирање извршних порука + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/sv.yml.svn-base --- a/config/locales/.svn/text-base/sv.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/sv.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -54,7 +54,7 @@ byte: one: "Byte" other: "Bytes" - kb: "KB" + kb: "kB" mb: "MB" gb: "GB" tb: "TB" @@ -65,44 +65,44 @@ half_a_minute: "en halv minut" less_than_x_seconds: one: "mindre än en sekund" - other: "mindre än {{count}} sekunder" + other: "mindre än %{count} sekunder" x_seconds: one: "en sekund" - other: "{{count}} sekunder" + other: "%{count} sekunder" less_than_x_minutes: one: "mindre än en minut" - other: "mindre än {{count}} minuter" + other: "mindre än %{count} minuter" x_minutes: one: "en minut" - other: "{{count}} minuter" + other: "%{count} minuter" about_x_hours: one: "ungefär en timme" - other: "ungefär {{count}} timmar" + other: "ungefär %{count} timmar" x_days: one: "en dag" - other: "{{count}} dagar" + other: "%{count} dagar" about_x_months: one: "ungefär en månad" - other: "ungefär {{count}} månader" + other: "ungefär %{count} månader" x_months: one: "en månad" - other: "{{count}} månader" + other: "%{count} månader" about_x_years: one: "ungefär ett år" - other: "ungefär {{count}} år" + other: "ungefär %{count} år" over_x_years: one: "mer än ett år" - other: "mer än {{count}} år" + other: "mer än %{count} år" almost_x_years: one: "nästan 1 år" - other: "nästan {{count}} år" + other: "nästan %{count} år" activerecord: errors: template: header: - one: "Ett fel förhindrade denna {{model}} från att sparas" - other: "{{count}} fel förhindrade denna {{model}} från att sparas" + one: "Ett fel förhindrade denna %{model} från att sparas" + other: "%{count} fel förhindrade denna %{model} från att sparas" # The variable :count is also available body: "Det var problem med följande fält:" # The values :model, :attribute and :value are always available for interpolation @@ -115,22 +115,22 @@ accepted : "måste vara accepterad" empty: "får ej vara tom" blank: "måste anges" - too_long: "är för lång (maximum är {{count}} tecken)" - too_short: "är för kort (minimum är {{count}} tecken)" - wrong_length: "har fel längd (ska vara {{count}} tecken)" + too_long: "är för lång (maximum är %{count} tecken)" + too_short: "är för kort (minimum är %{count} tecken)" + wrong_length: "har fel längd (ska vara %{count} tecken)" taken: "har redan tagits" not_a_number: "är inte ett nummer" - greater_than: "måste vara större än {{count}}" - greater_than_or_equal_to: "måste vara större än eller lika med {{count}}" + greater_than: "måste vara större än %{count}" + greater_than_or_equal_to: "måste vara större än eller lika med %{count}" equal_to: "måste vara samma som" - less_than: "måste vara mindre än {{count}}" - less_than_or_equal_to: "måste vara mindre än eller lika med {{count}}" + less_than: "måste vara mindre än %{count}" + less_than_or_equal_to: "måste vara mindre än eller lika med %{count}" odd: "måste vara udda" even: "måste vara jämnt" greater_than_start_date: "måste vara senare än startdatumet" not_same_project: "tillhör inte samma projekt" circular_dependency: "Denna relation skulle skapa ett cirkulärt beroende" - 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: "Ett ärende kan inte länkas till ett av dess underärenden" direction: ltr date: @@ -149,7 +149,10 @@ month_names: [~, januari, februari, mars, april, maj, juni, juli, augusti, september, oktober, november, december] abbr_month_names: [~, jan, feb, mar, apr, maj, jun, jul, aug, sep, okt, nov, dec] # Used in date_select and datime_select. - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -176,7 +179,7 @@ general_csv_separator: ',' general_csv_decimal_separator: '.' general_csv_encoding: ISO-8859-1 - general_pdf_encoding: ISO-8859-1 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' notice_account_updated: Kontot har uppdaterats @@ -196,28 +199,29 @@ notice_locking_conflict: Data har uppdaterats av en annan användare. notice_not_authorized: Du saknar behörighet att komma åt den här sidan. notice_not_authorized_archived_project: Projektet du försöker komma åt har arkiverats. - notice_email_sent: "Ett mail skickades till {{value}}" - notice_email_error: "Ett fel inträffade när mail skickades ({{value}})" + notice_email_sent: "Ett mail skickades till %{value}" + notice_email_error: "Ett fel inträffade när mail skickades (%{value})" notice_feeds_access_key_reseted: Din RSS-nyckel återställdes. notice_api_access_key_reseted: Din API-nyckel återställdes. - notice_failed_to_save_issues: "Misslyckades med att spara {{count}} ärende(n) på {{total}} valt: {{ids}}." - notice_failed_to_save_members: "Misslyckades med att spara medlem(mar): {{errors}}." + notice_failed_to_save_issues: "Misslyckades med att spara %{count} ärende(n) på %{total} valt: %{ids}." + notice_failed_to_save_members: "Misslyckades med att spara medlem(mar): %{errors}." notice_no_issue_selected: "Inget ärende är markerat! Var vänlig, markera de ärenden du vill ändra." notice_account_pending: "Ditt konto skapades och avvaktar nu administratörens godkännande." notice_default_data_loaded: Standardkonfiguration inläst. 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_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_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." - error_scm_command_failed: "Ett fel inträffade vid försök att nå versionsarkivet: {{value}}" + error_scm_command_failed: "Ett fel inträffade vid försök att nå versionsarkivet: %{value}" error_scm_annotate: "Inlägget existerar inte eller kan inte kommenteras." error_issue_not_found_in_project: 'Ärendet hittades inte eller så tillhör det inte detta projekt' 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,27 +229,27 @@ 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." + warning_attachments_not_saved: "%{count} fil(er) kunde inte sparas." - mail_subject_lost_password: "Ditt {{value}} lösenord" + mail_subject_lost_password: "Ditt %{value} lösenord" mail_body_lost_password: 'För att ändra ditt lösenord, klicka på följande länk:' - mail_subject_register: "Din {{value}} kontoaktivering" + mail_subject_register: "Din %{value} kontoaktivering" mail_body_register: 'För att aktivera ditt konto, klicka på följande länk:' - mail_body_account_information_external: "Du kan använda ditt {{value}}-konto för att logga in." + mail_body_account_information_external: "Du kan använda ditt %{value}-konto för att logga in." mail_body_account_information: Din kontoinformation - mail_subject_account_activation_request: "{{value}} begäran om kontoaktivering" - mail_body_account_activation_request: "En ny användare ({{value}}) har registrerat sig och avvaktar ditt godkännande:" - 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_subject_wiki_content_updated: "'{{id}}' wikisida har uppdaterats" - mail_body_wiki_content_updated: The '{{id}}' wikisida har uppdaterats av {{author}}. + mail_subject_account_activation_request: "%{value} begäran om kontoaktivering" + mail_body_account_activation_request: "En ny användare (%{value}) har registrerat sig och avvaktar ditt godkännande:" + 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_subject_wiki_content_updated: "'%{id}' wikisida har uppdaterats" + mail_body_wiki_content_updated: "The '%{id}' wikisida har uppdaterats av %{author}." gui_validation_error: 1 fel - gui_validation_error_plural: "{{count}} fel" + gui_validation_error_plural: "%{count} fel" field_name: Namn field_description: Beskrivning @@ -308,7 +312,8 @@ field_attr_lastname: Efternamnsattribut field_attr_mail: Mailattribut field_onthefly: Skapa användare on-the-fly - field_done_ratio: % Klart + field_start_date: Startdatum + field_done_ratio: "% Klart" field_auth_source: Autentiseringsläge field_hide_mail: Dölj min mailadress field_comments: Kommentar @@ -339,9 +344,19 @@ 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 + field_warn_on_leaving_unsaved: Varna om jag lämnar en sida med osparad text + field_issues_visibility: Ärendesynlighet + field_is_private: Privat + field_commit_logs_encoding: Teckenuppsättning för commit-meddelanden + field_scm_path_encoding: Sökvägskodning + field_path_to_repository: Sökväg till versionsarkiv + field_root_directory: Rotmapp + field_cvsroot: CVSROOT + field_cvs_module: Modul setting_app_title: Applikationsrubrik setting_app_subtitle: Applikationsunderrubrik @@ -351,14 +366,14 @@ setting_self_registration: Självregistrering setting_attachment_max_size: Maxstorlek på bilaga setting_issues_export_limit: Exportgräns för ärenden - setting_mail_from: Avsändare + setting_mail_from: Avsändaradress setting_bcc_recipients: Hemlig kopia (bcc) till mottagare setting_plain_text_mail: Oformaterad text i mail (ingen HTML) setting_host_name: Värddatornamn setting_text_formatting: Textformatering setting_wiki_compression: Komprimering av wikihistorik setting_feeds_limit: Innehållsgräns för Feed - setting_default_projects_public: Nya projekt är publika som standard + setting_default_projects_public: Nya projekt är publika setting_autofetch_changesets: Automatisk hämtning av commits setting_sys_api_enabled: Aktivera WS för versionsarkivhantering setting_commit_ref_keywords: Referens-nyckelord @@ -369,15 +384,15 @@ setting_cross_project_issue_relations: Tillåt ärenderelationer mellan projekt setting_issue_list_default_columns: Standardkolumner i ärendelistan setting_repositories_encodings: Teckenuppsättningar för versionsarkiv - setting_commit_logs_encoding: Teckenuppsättning för commit-meddelanden + setting_emails_header: Mail-header setting_emails_footer: Signatur setting_protocol: Protokoll setting_per_page_options: Alternativ, objekt per sida setting_user_format: Visningsformat för användare setting_activity_days_default: Dagar som visas på projektaktivitet - setting_display_subprojects_issues: Visa ärenden från underprojekt i huvudprojekt som standard + 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 @@ -389,7 +404,7 @@ setting_openid: Tillåt inloggning och registrering med OpenID setting_password_min_length: Minsta tillåtna lösenordslängd setting_new_project_user_role_id: Tilldelad roll för en icke-administratör som skapar ett projekt - setting_default_projects_modules: Standardaktiverade moduler för nya projekt + setting_default_projects_modules: Aktiverade moduler för nya projekt setting_issue_done_ratio: Beräkna % klart med setting_issue_done_ratio_issue_field: Använd ärendefältet setting_issue_done_ratio_issue_status: Använd ärendestatus @@ -397,6 +412,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 @@ -410,6 +428,8 @@ permission_edit_issues: Ändra ärenden permission_view_issues: Visa ärenden permission_manage_issue_relations: Hantera ärenderelationer + permission_set_issues_private: Sätta ärenden publika eller privata + permission_set_own_issues_private: Sätta egna ärenden publika eller privata permission_add_issue_notes: Lägga till ärendenotering permission_edit_issue_notes: Ändra ärendenoteringar permission_edit_own_issue_notes: Ändra egna ärendenoteringar @@ -475,16 +495,19 @@ label_x_projects: zero: inga projekt one: 1 projekt - other: "{{count}} projekt" + other: "%{count} projekt" label_project_all: Alla projekt label_project_latest: Senaste projekt label_issue: Ärende label_issue_new: Nytt ärende label_issue_plural: Ärenden label_issue_view_all: Visa alla ärenden - label_issues_by: "Ärenden {{value}}" + label_issues_by: "Ärenden %{value}" label_issue_added: Ärende tillagt label_issue_updated: Ärende uppdaterat + label_issue_note_added: Anteckning tillagd + label_issue_status_updated: Status uppdaterad + label_issue_priority_updated: Prioritet uppdaterad label_document: Dokument label_document_new: Nytt dokument label_document_plural: Dokument @@ -493,6 +516,8 @@ label_role_plural: Roller label_role_new: Ny roll label_role_and_permissions: Roller och behörigheter + label_role_anonymous: Anonym + label_role_non_member: Icke-medlem label_member: Medlem label_member_new: Ny medlem label_member_plural: Medlemmar @@ -532,7 +557,7 @@ label_registered_on: Registrerad label_activity: Aktivitet label_overall_activity: All aktivitet - label_user_activity: "Aktiviteter för {{value}}" + label_user_activity: "Aktiviteter för %{value}" label_new: Ny label_logged_as: Inloggad som label_environment: Miljö @@ -542,7 +567,7 @@ label_auth_source_plural: Autentiseringslägen label_subproject_plural: Underprojekt label_subproject_new: Nytt underprojekt - label_and_its_subprojects: "{{value}} och dess underprojekt" + label_and_its_subprojects: "%{value} och dess underprojekt" label_min_max_length: Min./Max.-längd label_list: Lista label_date: Datum @@ -553,8 +578,8 @@ label_text: Lång text label_attribute: Attribut label_attribute_plural: Attribut - label_download: "{{count}} Nerladdning" - label_download_plural: "{{count}} Nerladdningar" + label_download: "%{count} Nerladdning" + label_download_plural: "%{count} Nerladdningar" label_no_data: Ingen data att visa label_change_status: Ändra status label_history: Historia @@ -571,6 +596,7 @@ label_news_latest: Senaste nyheterna label_news_view_all: Visa alla nyheter label_news_added: Nyhet tillagd + label_news_comment_added: Kommentar tillagd till en nyhet label_settings: Inställningar label_overview: Översikt label_version: Version @@ -578,7 +604,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 @@ -586,17 +612,17 @@ label_closed_issues: stängd label_closed_issues_plural: stängda label_x_open_issues_abbr_on_total: - zero: 0 öppna av {{total}} - one: 1 öppen av {{total}} - other: "{{count}} öppna av {{total}}" + zero: 0 öppna av %{total} + one: 1 öppen av %{total} + other: "%{count} öppna av %{total}" label_x_open_issues_abbr: zero: 0 öppna one: 1 öppen - other: "{{count}} öppna" + other: "%{count} öppna" label_x_closed_issues_abbr: zero: 0 stängda one: 1 stängd - other: "{{count}} stängda" + other: "%{count} stängda" label_total: Total label_permissions: Behörigheter label_current_status: Nuvarande status @@ -614,7 +640,7 @@ label_months_from: månader från label_gantt: Gantt label_internal: Intern - label_last_changes: "senaste {{count}} ändringar" + label_last_changes: "senaste %{count} ändringar" label_change_view_all: Visa alla ändringar label_personalize_page: Anpassa denna sida label_comment: Kommentar @@ -622,13 +648,14 @@ label_x_comments: zero: inga kommentarer one: 1 kommentar - other: "{{count}} kommentarer" + other: "%{count} kommentarer" label_comment_add: Lägg till kommentar label_comment_added: Kommentar tillagd label_comment_delete: Ta bort kommentar label_query: Användardefinerad fråga label_query_plural: Användardefinerade frågor label_query_new: Ny fråga + label_my_queries: Mina egna frågor label_filter_add: Lägg till filter label_filter_plural: Filter label_equals: är @@ -643,7 +670,7 @@ label_yesterday: igår label_this_week: denna vecka label_last_week: senaste veckan - label_last_n_days: "senaste {{count}} dagarna" + label_last_n_days: "senaste %{count} dagarna" label_this_month: denna månad label_last_month: senaste månaden label_this_year: detta året @@ -657,13 +684,13 @@ label_repository: Versionsarkiv label_repository_plural: Versionsarkiv label_browse: Bläddra - label_modification: "{{count}} ändring" - label_modification_plural: "{{count}} ändringar" + label_modification: "%{count} ändring" + label_modification_plural: "%{count} ändringar" label_branch: Branch 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 @@ -680,8 +707,8 @@ label_sort_lower: Flytta ner label_sort_lowest: Flytta till botten label_roadmap: Roadmap - label_roadmap_due_in: "Färdig om {{value}}" - label_roadmap_overdue: "{{value}} sen" + label_roadmap_due_in: "Färdig om %{value}" + label_roadmap_overdue: "%{value} sen" label_roadmap_no_issues: Inga ärenden för denna version label_search: Sök label_result_plural: Resultat @@ -700,8 +727,8 @@ label_issue_tracking: Ärendeuppföljning label_spent_time: Spenderad tid label_overall_spent_time: Total tid spenderad - label_f_hour: "{{value}} timme" - label_f_hour_plural: "{{value}} timmar" + label_f_hour: "%{value} timme" + label_f_hour_plural: "%{value} timmar" label_time_tracking: Tidsuppföljning label_change_plural: Ändringar label_statistics: Statistik @@ -752,35 +779,36 @@ label_date_from: Från label_date_to: Till label_language_based: Språkbaserad - label_sort_by: "Sortera på {{value}}" + label_sort_by: "Sortera på %{value}" label_send_test_email: Skicka testmail label_feeds_access_key: RSS-nyckel label_missing_feeds_access_key: Saknar en RSS-nyckel - label_feeds_access_key_created_on: "RSS-nyckel skapad för {{value}} sedan" + label_feeds_access_key_created_on: "RSS-nyckel skapad för %{value} sedan" label_module_plural: Moduler - label_added_time_by: "Tillagd av {{author}} för {{age}} sedan" - label_updated_time_by: "Uppdaterad av {{author}} för {{age}} sedan" - label_updated_time: "Uppdaterad för {{value}} sedan" + label_added_time_by: "Tillagd av %{author} för %{age} sedan" + label_updated_time_by: "Uppdaterad av %{author} för %{age} sedan" + label_updated_time: "Uppdaterad för %{value} sedan" label_jump_to_a_project: Gå till projekt... label_file_plural: Filer label_changeset_plural: Changesets label_default_columns: Standardkolumner label_no_change_option: (Ingen ändring) label_bulk_edit_selected_issues: Gemensam ändring av markerade ärenden + label_bulk_edit_selected_time_entries: Gruppredigera valda tidloggningar label_theme: Tema label_default: Standard 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 label_registration_automatic_activation: automatisk kontoaktivering - label_display_per_page: "Per sida: {{value}}" + label_display_per_page: "Per sida: %{value}" label_age: Ålder label_change_properties: Ändra inställningar label_general: Allmänt @@ -803,7 +831,7 @@ label_sort: Sortera label_descending: Fallande label_ascending: Stigande - label_date_from_to: Från {{start}} till {{end}} + label_date_from_to: Från %{start} till %{end} label_wiki_content_added: Wikisida tillagd label_wiki_content_updated: Wikisida uppdaterad label_group: Grupp @@ -822,22 +850,32 @@ 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 + label_principal_search: "Sök efter användare eller grupp:" + label_user_search: "Sök efter användare:" + label_additional_workflow_transitions_for_author: Ytterligare övergångar tillåtna när användaren är den som skapat ärendet + label_additional_workflow_transitions_for_assignee: Ytterligare övergångar tillåtna när användaren är den som tilldelats ärendet + label_issues_visibility_all: Alla ärenden + label_issues_visibility_public: Alla icke-privata ärenden + label_issues_visibility_own: Ärenden skapade av eller tilldelade till användaren + label_git_report_last_commit: Rapportera senaste commit av filer och mappar button_login: Logga in button_submit: Skicka button_save: Spara button_check_all: Markera alla button_uncheck_all: Avmarkera alla + button_collapse_all: Kollapsa alla + button_expand_all: Expandera alla button_delete: Ta bort button_create: Skapa button_create_and_continue: Skapa och fortsätt button_test: Testa button_edit: Ändra - button_edit_associated_wikipage: "Ändra associerad Wikisida: {{page_title}}" + button_edit_associated_wikipage: "Ändra associerad Wikisida: %{page_title}" button_add: Lägg till button_change: Ändra button_apply: Verkställ @@ -886,60 +924,72 @@ text_regexp_info: eg. ^[A-Z0-9]+$ text_min_max_length_info: 0 betyder ingen gräns text_project_destroy_confirmation: Är du säker på att du vill ta bort detta projekt och all relaterad data? - text_subprojects_destroy_warning: "Alla underprojekt: {{value}} kommer också tas bort." + text_subprojects_destroy_warning: "Alla underprojekt: %{value} kommer också tas bort." text_workflow_edit: Välj en roll och en ärendetyp för att ändra arbetsflöde text_are_you_sure: Är du säker ? text_are_you_sure_with_children: Ta bort ärende och alla underärenden? - text_journal_changed: "{{label}} ändrad från {{old}} till {{new}}" - text_journal_set_to: "{{label}} satt till {{value}}" - text_journal_deleted: "{{label}} borttagen ({{old}})" - text_journal_added: "{{label}} {{value}} tillagd" - text_tip_issue_begin_day: arbetsuppgift som börjar denna dag - text_tip_issue_end_day: arbetsuppgift som slutar denna dag - text_tip_issue_begin_end_day: arbetsuppgift börjar och slutar denna dag + text_journal_changed: "%{label} ändrad från %{old} till %{new}" + text_journal_changed_no_detail: "%{label} uppdaterad" + text_journal_set_to: "%{label} satt till %{value}" + text_journal_deleted: "%{label} borttagen (%{old})" + text_journal_added: "%{label} %{value} tillagd" + text_tip_issue_begin_day: ärende som börjar denna dag + text_tip_issue_end_day: ärende som slutar denna dag + text_tip_issue_begin_end_day: ärende som börjar och slutar denna dag text_project_identifier_info: 'Små bokstäver (a-z), siffror och streck tillåtna.
    När den är sparad kan identifieraren inte ändras.' - text_caracters_maximum: "max {{count}} tecken." - text_caracters_minimum: "Måste vara minst {{count}} tecken lång." - text_length_between: "Längd mellan {{min}} och {{max}} tecken." + text_caracters_maximum: "max %{count} tecken." + text_caracters_minimum: "Måste vara minst %{count} tecken lång." + text_length_between: "Längd mellan %{min} och %{max} tecken." text_tracker_no_workflow: Inget arbetsflöde definerat för denna ärendetyp text_unallowed_characters: Otillåtna tecken text_comma_separated: Flera värden tillåtna (kommaseparerade). text_line_separated: Flera värden tillåtna (ett värde per rad). text_issues_ref_in_commit_messages: Referera och fixa ärenden i commit-meddelanden - text_issue_added: "Ärende {{id}} har rapporterats (av {{author}})." - text_issue_updated: "Ärende {{id}} har uppdaterats (av {{author}})." + text_issue_added: "Ärende %{id} har rapporterats (av %{author})." + text_issue_updated: "Ärende %{id} har uppdaterats (av %{author})." text_wiki_destroy_confirmation: Är du säker på att du vill ta bort denna wiki och allt dess innehåll ? - text_issue_category_destroy_question: "Några ärenden ({{count}}) är tilldelade till denna kategori. Vad vill du göra ?" + text_issue_category_destroy_question: "Några ärenden (%{count}) är tilldelade till denna kategori. Vad vill du göra ?" text_issue_category_destroy_assignments: Ta bort kategoritilldelningar text_issue_category_reassign_to: Återtilldela ärenden till denna kategori text_user_mail_option: "För omarkerade projekt kommer du bara bli underrättad om saker du bevakar eller är inblandad i (T.ex. ärenden du skapat eller tilldelats)." 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_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_issues_destroy_descendants_confirmation: Detta kommer även ta bort %{count} underaktivitet(er). + text_time_entries_destroy_confirmation: Är du säker på att du vill ta bort valda tidloggningar? text_select_project_modules: 'Välj vilka moduler som ska vara aktiva för projektet:' text_default_administrator_account_changed: Standardadministratörens konto ändrat text_file_repository_writable: Arkivet för bifogade filer är skrivbart text_plugin_assets_writable: Arkivet för plug-ins är skrivbart text_rmagick_available: RMagick tillgängligt (ej obligatoriskt) - text_destroy_time_entries_question: "{{hours}} timmar har rapporterats på ärendena du är på väg att ta bort. Vad vill du göra ?" + text_destroy_time_entries_question: "%{hours} timmar har rapporterats på ärendena du är på väg att ta bort. Vad vill du göra ?" text_destroy_time_entries: Ta bort rapporterade timmar text_assign_time_entries_to_project: Tilldela rapporterade timmar till projektet text_reassign_time_entries: 'Återtilldela rapporterade timmar till detta ärende:' - text_user_wrote: "{{value}} skrev:" - text_enumeration_destroy_question: "{{count}} objekt är tilldelade till detta värde." + 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_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 emailadress i både Redmine och versionsarkivet mappas automatiskt." + 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 + text_warn_on_leaving_unsaved: Nuvarande sida innehåller osparad text som kommer försvinna om du lämnar sidan. + text_scm_path_encoding_note: "Standard: UTF-8" + text_git_repository_note: Naket och lokalt versionsarkiv (t.ex. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Lokalt versionsarkiv (t.ex. /hgrepo, c:\hgrepo) + text_scm_command: Kommando + text_scm_command_version: Version + text_scm_config: Du kan konfigurera dina scm-kommando i config/configuration.yml. Vänligen starta om applikationen när ändringar gjorts. + text_scm_command_not_available: Scm-kommando är inte tillgängligt. Vänligen kontrollera inställningarna i administratörspanelen. default_role_manager: Projektledare default_role_developer: Utvecklare @@ -967,8 +1017,3 @@ enumeration_doc_categories: Dokumentkategorier enumeration_activities: Aktiviteter (tidsuppföljning) enumeration_system_activity: Systemaktivitet - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/th.yml.svn-base --- a/config/locales/.svn/text-base/th.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/th.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -16,7 +16,10 @@ 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 ] + order: + - :year + - :month + - :day time: formats: @@ -32,37 +35,37 @@ half_a_minute: "half a minute" less_than_x_seconds: one: "less than 1 second" - other: "less than {{count}} seconds" + other: "less than %{count} seconds" x_seconds: one: "1 second" - other: "{{count}} seconds" + other: "%{count} seconds" less_than_x_minutes: one: "less than a minute" - other: "less than {{count}} minutes" + other: "less than %{count} minutes" x_minutes: one: "1 minute" - other: "{{count}} minutes" + other: "%{count} minutes" about_x_hours: one: "about 1 hour" - other: "about {{count}} hours" + other: "about %{count} hours" x_days: one: "1 day" - other: "{{count}} days" + other: "%{count} days" about_x_months: one: "about 1 month" - other: "about {{count}} months" + other: "about %{count} months" x_months: one: "1 month" - other: "{{count}} months" + other: "%{count} months" about_x_years: one: "about 1 year" - other: "about {{count}} years" + other: "about %{count} years" over_x_years: one: "over 1 year" - other: "over {{count}} years" + other: "over %{count} years" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" number: format: @@ -92,6 +95,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "ไม่อยู่ในรายการ" exclusion: "ถูกสงวนไว้" @@ -106,11 +113,11 @@ taken: "ถูกใช้ไปแล้ว" not_a_number: "ไม่ใช่ตัวเลข" not_a_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}}" + 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: "ต้องมากกว่าวันเริ่ม" @@ -147,31 +154,31 @@ notice_file_not_found: หน้าที่คุณต้องการดูไม่มีอยู่จริง หรือถูกลบไปแล้ว. notice_locking_conflict: ข้อมูลถูกปรับปรุงโดยผู้ใช้คนอื่น. notice_not_authorized: คุณไม่มีสิทธิเข้าถึงหน้านี้. - notice_email_sent: "อีเมล์ได้ถูกส่งถึง {{value}}" - notice_email_error: "เกิดความผิดพลาดขณะกำส่งอีเมล์ ({{value}})" + notice_email_sent: "อีเมล์ได้ถูกส่งถึง %{value}" + notice_email_error: "เกิดความผิดพลาดขณะกำส่งอีเมล์ (%{value})" notice_feeds_access_key_reseted: RSS access key ของคุณถูก reset แล้ว. - notice_failed_to_save_issues: "{{count}} ปัญหาจาก {{total}} ปัญหาที่ถูกเลือกไม่สามารถจัดเก็บ: {{ids}}." + notice_failed_to_save_issues: "%{count} ปัญหาจาก %{total} ปัญหาที่ถูกเลือกไม่สามารถจัดเก็บ: %{ids}." notice_no_issue_selected: "ไม่มีปัญหาที่ถูกเลือก! กรุณาเลือกปัญหาที่คุณต้องการแก้ไข." notice_account_pending: "บัญชีของคุณสร้างเสร็จแล้ว ขณะนี้รอการอนุมัติจากผู้บริหารจัดการ." notice_default_data_loaded: ค่าเริ่มต้นโหลดเสร็จแล้ว. - error_can_t_load_default_data: "ค่าเริ่มต้นโหลดไม่สำเร็จ: {{value}}" + error_can_t_load_default_data: "ค่าเริ่มต้นโหลดไม่สำเร็จ: %{value}" error_scm_not_found: "ไม่พบรุ่นที่ต้องการในแหล่งเก็บต้นฉบับ." - error_scm_command_failed: "เกิดความผิดพลาดในการเข้าถึงแหล่งเก็บต้นฉบับ: {{value}}" + error_scm_command_failed: "เกิดความผิดพลาดในการเข้าถึงแหล่งเก็บต้นฉบับ: %{value}" error_scm_annotate: "entry ไม่มีอยู่จริง หรือไม่สามารถเขียนหมายเหตุประกอบ." error_issue_not_found_in_project: 'ไม่พบปัญหานี้ หรือปัญหาไม่ได้อยู่ในโครงการนี้' - mail_subject_lost_password: "รหัสผ่าน {{value}} ของคุณ" + mail_subject_lost_password: "รหัสผ่าน %{value} ของคุณ" mail_body_lost_password: 'คลิ๊กที่ลิงค์ต่อไปนี้เพื่อเปลี่ยนรหัสผ่าน:' - mail_subject_register: "เปิดบัญชี {{value}} ของคุณ" + mail_subject_register: "เปิดบัญชี %{value} ของคุณ" mail_body_register: 'คลิ๊กที่ลิงค์ต่อไปนี้เพื่อเปลี่ยนรหัสผ่าน:' - mail_body_account_information_external: "คุณสามารถใช้บัญชี {{value}} เพื่อเข้าสู่ระบบ." + mail_body_account_information_external: "คุณสามารถใช้บัญชี %{value} เพื่อเข้าสู่ระบบ." mail_body_account_information: ข้อมูลบัญชีของคุณ - mail_subject_account_activation_request: "กรุณาเปิดบัญชี {{value}}" - mail_body_account_activation_request: "ผู้ใช้ใหม่ ({{value}}) ได้ลงทะเบียน. บัญชีของเขากำลังรออนุมัติ:" + mail_subject_account_activation_request: "กรุณาเปิดบัญชี %{value}" + mail_body_account_activation_request: "ผู้ใช้ใหม่ (%{value}) ได้ลงทะเบียน. บัญชีของเขากำลังรออนุมัติ:" gui_validation_error: 1 ข้อผิดพลาด - gui_validation_error_plural: "{{count}} ข้อผิดพลาด" + gui_validation_error_plural: "%{count} ข้อผิดพลาด" field_name: ชื่อ field_description: รายละเอียด @@ -233,7 +240,8 @@ field_attr_lastname: นามสกุล attribute field_attr_mail: อีเมล์ attribute field_onthefly: สร้างผู้ใช้ทันที - field_done_ratio: % สำเร็จ + field_start_date: เริ่ม + field_done_ratio: "% สำเร็จ" field_auth_source: วิธีการยืนยันตัวตน field_hide_mail: ซ่อนอีเมล์ของฉัน field_comments: ความเห็น @@ -306,14 +314,14 @@ label_x_projects: zero: no projects one: 1 project - other: "{{count}} projects" + other: "%{count} projects" label_project_all: โครงการทั้งหมด label_project_latest: โครงการล่าสุด label_issue: ปัญหา label_issue_new: ปัญหาใหม่ label_issue_plural: ปัญหา label_issue_view_all: ดูปัญหาทั้งหมด - label_issues_by: "ปัญหาโดย {{value}}" + label_issues_by: "ปัญหาโดย %{value}" label_issue_added: ปัญหาถูกเพิ่ม label_issue_updated: ปัญหาถูกปรับปรุง label_document: เอกสาร @@ -381,8 +389,8 @@ label_text: ข้อความขนาดยาว label_attribute: คุณลักษณะ label_attribute_plural: คุณลักษณะ - label_download: "{{count}} ดาวน์โหลด" - label_download_plural: "{{count}} ดาวน์โหลด" + label_download: "%{count} ดาวน์โหลด" + label_download_plural: "%{count} ดาวน์โหลด" label_no_data: จำนวนข้อมูลที่แสดง label_change_status: เปลี่ยนสถานะ label_history: ประวัติ @@ -413,17 +421,17 @@ label_closed_issues: ปิด label_closed_issues_plural: ปิด label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{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" + other: "%{count} open" label_x_closed_issues_abbr: zero: 0 closed one: 1 closed - other: "{{count}} closed" + other: "%{count} closed" label_total: จำนวนรวม label_permissions: สิทธิ label_current_status: สถานะปัจจุบัน @@ -441,7 +449,7 @@ label_months_from: เดือนจาก label_gantt: Gantt label_internal: ภายใน - label_last_changes: "last {{count}} เปลี่ยนแปลง" + label_last_changes: "last %{count} เปลี่ยนแปลง" label_change_view_all: ดูการเปลี่ยนแปลงทั้งหมด label_personalize_page: ปรับแต่งหน้านี้ label_comment: ความเห็น @@ -449,7 +457,7 @@ label_x_comments: zero: no comments one: 1 comment - other: "{{count}} comments" + other: "%{count} comments" label_comment_add: เพิ่มความเห็น label_comment_added: ความเห็นถูกเพิ่ม label_comment_delete: ลบความเห็น @@ -468,7 +476,7 @@ label_yesterday: เมื่อวาน label_this_week: อาทิตย์นี้ label_last_week: อาทิตย์ที่แล้ว - label_last_n_days: "{{count}} วันย้อนหลัง" + label_last_n_days: "%{count} วันย้อนหลัง" label_this_month: เดือนนี้ label_last_month: เดือนที่แล้ว label_this_year: ปีนี้ @@ -482,8 +490,8 @@ label_repository: ที่เก็บต้นฉบับ label_repository_plural: ที่เก็บต้นฉบับ label_browse: เปิดหา - label_modification: "{{count}} เปลี่ยนแปลง" - label_modification_plural: "{{count}} เปลี่ยนแปลง" + label_modification: "%{count} เปลี่ยนแปลง" + label_modification_plural: "%{count} เปลี่ยนแปลง" label_revision: การแก้ไข label_revision_plural: การแก้ไข label_associated_revisions: การแก้ไขที่เกี่ยวข้อง @@ -499,8 +507,8 @@ label_sort_lower: ย้ายลง label_sort_lowest: ย้ายไปล่างสุด label_roadmap: แผนงาน - label_roadmap_due_in: "ถึงกำหนดใน {{value}}" - label_roadmap_overdue: "{{value}} ช้ากว่ากำหนด" + label_roadmap_due_in: "ถึงกำหนดใน %{value}" + label_roadmap_overdue: "%{value} ช้ากว่ากำหนด" label_roadmap_no_issues: ไม่มีปัญหาสำหรับรุ่นนี้ label_search: ค้นหา label_result_plural: ผลการค้นหา @@ -518,8 +526,8 @@ label_changes_details: รายละเอียดการเปลี่ยนแปลงทั้งหมด label_issue_tracking: ติดตามปัญหา label_spent_time: เวลาที่ใช้ - label_f_hour: "{{value}} ชั่วโมง" - label_f_hour_plural: "{{value}} ชั่วโมง" + label_f_hour: "%{value} ชั่วโมง" + label_f_hour_plural: "%{value} ชั่วโมง" label_time_tracking: ติดตามการใช้เวลา label_change_plural: เปลี่ยนแปลง label_statistics: สถิติ @@ -567,12 +575,12 @@ label_date_from: จาก label_date_to: ถึง label_language_based: ขึ้นอยู่กับภาษาของผู้ใช้ - label_sort_by: "เรียงโดย {{value}}" + label_sort_by: "เรียงโดย %{value}" label_send_test_email: ส่งจดหมายทดสอบ - label_feeds_access_key_created_on: "RSS access key สร้างเมื่อ {{value}} ที่ผ่านมา" + label_feeds_access_key_created_on: "RSS access key สร้างเมื่อ %{value} ที่ผ่านมา" label_module_plural: ส่วนประกอบ - label_added_time_by: "เพิ่มโดย {{author}} {{age}} ที่ผ่านมา" - label_updated_time: "ปรับปรุง {{value}} ที่ผ่านมา" + label_added_time_by: "เพิ่มโดย %{author} %{age} ที่ผ่านมา" + label_updated_time: "ปรับปรุง %{value} ที่ผ่านมา" label_jump_to_a_project: ไปที่โครงการ... label_file_plural: แฟ้ม label_changeset_plural: กลุ่มการเปลี่ยนแปลง @@ -588,7 +596,7 @@ label_registration_activation_by_email: เปิดบัญชีผ่านอีเมล์ label_registration_manual_activation: อนุมัติโดยผู้บริหารจัดการ label_registration_automatic_activation: เปิดบัญชีอัตโนมัติ - label_display_per_page: "ต่อหน้า: {{value}}" + label_display_per_page: "ต่อหน้า: %{value}" label_age: อายุ label_change_properties: เปลี่ยนคุณสมบัติ label_general: ทั่วๆ ไป @@ -650,36 +658,36 @@ text_regexp_info: ตัวอย่าง ^[A-Z0-9]+$ text_min_max_length_info: 0 หมายถึงไม่จำกัด text_project_destroy_confirmation: คุณแน่ใจไหมว่าต้องการลบโครงการและข้อมูลที่เกี่ยวข้่อง ? - text_subprojects_destroy_warning: "โครงการย่อย: {{value}} จะถูกลบด้วย." + text_subprojects_destroy_warning: "โครงการย่อย: %{value} จะถูกลบด้วย." text_workflow_edit: เลือกบทบาทและการติดตาม เพื่อแก้ไขลำดับงาน text_are_you_sure: คุณแน่ใจไหม ? text_tip_issue_begin_day: งานที่เริ่มวันนี้ text_tip_issue_end_day: งานที่จบวันนี้ text_tip_issue_begin_end_day: งานที่เริ่มและจบวันนี้ text_project_identifier_info: 'ภาษาอังกฤษตัวเล็ก(a-z), ตัวเลข(0-9) และขีด (-) เท่านั้น.
    เมื่อจัดเก็บแล้ว, ชื่อเฉพาะไม่สามารถเปลี่ยนแปลงได้' - text_caracters_maximum: "สูงสุด {{count}} ตัวอักษร." - text_caracters_minimum: "ต้องยาวอย่างน้อย {{count}} ตัวอักษร." - text_length_between: "ความยาวระหว่าง {{min}} ถึง {{max}} ตัวอักษร." + text_caracters_maximum: "สูงสุด %{count} ตัวอักษร." + text_caracters_minimum: "ต้องยาวอย่างน้อย %{count} ตัวอักษร." + text_length_between: "ความยาวระหว่าง %{min} ถึง %{max} ตัวอักษร." text_tracker_no_workflow: ไม่ได้บัญญัติลำดับงานสำหรับการติดตามนี้ text_unallowed_characters: ตัวอักษรต้องห้าม text_comma_separated: ใส่ได้หลายค่า โดยคั่นด้วยลูกน้ำ( ,). text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages - text_issue_added: "ปัญหา {{id}} ถูกแจ้งโดย {{author}}." - text_issue_updated: "ปัญหา {{id}} ถูกปรับปรุงโดย {{author}}." + text_issue_added: "ปัญหา %{id} ถูกแจ้งโดย %{author}." + text_issue_updated: "ปัญหา %{id} ถูกปรับปรุงโดย %{author}." text_wiki_destroy_confirmation: คุณแน่ใจหรือว่าต้องการลบ wiki นี้พร้อมทั้งเนี้อหา? - text_issue_category_destroy_question: "บางปัญหา ({{count}}) อยู่ในประเภทนี้. คุณต้องการทำอย่างไร ?" + 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_status_changed_by_changeset: "ประยุกต์ใช้ในกลุ่มการเปลี่ยนแปลง %{value}." text_issues_destroy_confirmation: 'คุณแน่ใจไหมว่าต้องการลบปัญหา(ทั้งหลาย)ที่เลือกไว้?' text_select_project_modules: 'เลือกส่วนประกอบที่ต้องการใช้งานสำหรับโครงการนี้:' text_default_administrator_account_changed: ค่าเริ่มต้นของบัญชีผู้บริหารจัดการถูกเปลี่ยนแปลง text_file_repository_writable: ที่เก็บต้นฉบับสามารถเขียนได้ text_rmagick_available: RMagick มีให้ใช้ (เป็นตัวเลือก) - text_destroy_time_entries_question: "{{hours}} ชั่วโมงที่ถูกแจ้งในปัญหานี้จะโดนลบ. คุณต้องการทำอย่างไร?" + text_destroy_time_entries_question: "%{hours} ชั่วโมงที่ถูกแจ้งในปัญหานี้จะโดนลบ. คุณต้องการทำอย่างไร?" text_destroy_time_entries: ลบเวลาที่รายงานไว้ text_assign_time_entries_to_project: ระบุเวลาที่ใช้ในโครงการนี้ text_reassign_time_entries: 'ระบุเวลาที่ใช้ในโครงการนี่อีกครั้ง:' @@ -709,22 +717,21 @@ enumeration_issue_priorities: ความสำคัญของปัญหา enumeration_doc_categories: ประเภทเอกสาร enumeration_activities: กิจกรรม (ใช้ในการติดตามเวลา) - label_and_its_subprojects: "{{value}} and its subprojects" - mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:" - mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days" - text_user_wrote: "{{value}} wrote:" + label_and_its_subprojects: "%{value} and its subprojects" + mail_body_reminder: "%{count} issue(s) that are assigned to you are due in the next %{days} days:" + mail_subject_reminder: "%{count} issue(s) due in the next %{days} days" + text_user_wrote: "%{value} wrote:" label_duplicated_by: duplicated by setting_enabled_scm: Enabled SCM text_enumeration_category_reassign_to: 'Reassign them to this value:' - text_enumeration_destroy_question: "{{count}} objects are assigned to this value." + text_enumeration_destroy_question: "%{count} objects are assigned to this value." label_incoming_emails: Incoming emails 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 button_quote: Quote setting_sequential_project_identifiers: Generate sequential project identifiers notice_unable_delete_version: Unable to delete version @@ -782,12 +789,12 @@ 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: Edit own messages permission_delete_own_messages: Delete own messages - label_user_activity: "{{value}}'s activity" - label_updated_time_by: "Updated by {{author}} {{age}} ago" + label_user_activity: "%{value}'s activity" + label_updated_time_by: "Updated by %{author} %{age} ago" text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' setting_diff_max_lines_displayed: Max number of diff lines displayed text_plugin_assets_writable: Plugin assets directory writable - warning_attachments_not_saved: "{{count}} file(s) could not be saved." + warning_attachments_not_saved: "%{count} file(s) could not be saved." button_create_and_continue: Create and continue text_custom_field_possible_values_info: 'One line for each value' label_display: Display @@ -802,21 +809,21 @@ label_descending: Descending label_sort: Sort label_ascending: Ascending - label_date_from_to: From {{start}} to {{end}} + label_date_from_to: From %{start} to %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? + text_wiki_page_destroy_question: This page has %{descendants} child page(s) and descendant(s). What do you want to do? text_wiki_page_reassign_children: Reassign child pages to this parent page text_wiki_page_nullify_children: Keep child pages as root pages text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated" label_wiki_content_added: Wiki page added - 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_added: "'%{id}' wiki page has been added" + mail_body_wiki_content_added: The '%{id}' wiki page has been added by %{author}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '%{id}' wiki page has been updated by %{author}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -824,14 +831,14 @@ label_branch: Branch 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"). - 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_changed: "%{label} changed from %{old} to %{new}" + text_journal_set_to: "%{label} set to %{value}" + text_journal_deleted: "%{label} deleted (%{old})" label_group_plural: Groups label_group: Group label_group_new: New group label_time_entry_plural: Spent time - text_journal_added: "{{label}} {{value}} added" + text_journal_added: "%{label} %{value} added" field_active: Active enumeration_system_activity: System Activity permission_delete_issue_watchers: Delete watchers @@ -866,9 +873,9 @@ setting_start_of_week: Start calendars on permission_view_issues: View Issues label_display_used_statuses_only: Only display statuses that are used by this tracker - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_api_access_key: API access key - label_api_access_key_created_on: API access key created {{value}} ago + label_api_access_key_created_on: API access key created %{value} ago label_feeds_access_key: RSS access key notice_api_access_key_reseted: Your API access key was reset. setting_rest_api_enabled: Enable REST web service @@ -895,12 +902,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -908,7 +915,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -919,8 +926,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Commit messages encoding + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/tr.yml.svn-base --- a/config/locales/.svn/text-base/tr.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/tr.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,5 +1,6 @@ -# Turkish translations for Ruby on Rails +# Turkish translations for Ruby on Rails # by Ozgun Ataman (ozataman@gmail.com) +# by Burak Yigit Kaya (ben@byk.im) tr: locale: @@ -18,8 +19,11 @@ abbr_day_names: [Pzr, Pzt, Sal, Çrş, Prş, Cum, Cts] month_names: [~, Ocak, Şubat, Mart, Nisan, Mayıs, Haziran, Temmuz, Ağustos, Eylül, Ekim, Kasım, Aralık] abbr_month_names: [~, Oca, Şub, Mar, Nis, May, Haz, Tem, Ağu, Eyl, Eki, Kas, Ara] - order: [ :day, :month, :year ] - + order: + - :day + - :month + - :year + time: formats: default: "%a %d.%b.%y %H:%M" @@ -30,46 +34,46 @@ am: "öğleden önce" pm: "öğleden sonra" - + datetime: distance_in_words: half_a_minute: 'yarım dakika' less_than_x_seconds: zero: '1 saniyeden az' one: '1 saniyeden az' - other: '{{count}} saniyeden az' + other: '%{count} saniyeden az' x_seconds: one: '1 saniye' - other: '{{count}} saniye' + other: '%{count} saniye' less_than_x_minutes: zero: '1 dakikadan az' one: '1 dakikadan az' - other: '{{count}} dakikadan az' + other: '%{count} dakikadan az' x_minutes: one: '1 dakika' - other: '{{count}} dakika' + other: '%{count} dakika' about_x_hours: - one: '1 saat civarında' - other: '{{count}} saat civarında' + one: 'yaklaşık 1 saat' + other: 'yaklaşık %{count} saat' x_days: one: '1 gün' - other: '{{count}} gün' + other: '%{count} gün' about_x_months: - one: '1 ay civarında' - other: '{{count}} ay civarında' + one: 'yaklaşık 1 ay' + other: 'yaklaşık %{count} ay' x_months: one: '1 ay' - other: '{{count}} ay' + other: '%{count} ay' about_x_years: - one: '1 yıl civarında' - other: '{{count}} yıl civarında' + one: 'yaklaşık 1 yıl' + other: 'yaklaşık %{count} yıl' over_x_years: one: '1 yıldan fazla' - other: '{{count}} yıldan fazla' + other: '%{count} yıldan fazla' almost_x_years: - one: "almost 1 year" - other: "almost {{count}} years" - + one: "neredeyse 1 Yıl" + other: "neredeyse %{count} yıl" + number: format: precision: 2 @@ -101,7 +105,7 @@ units: byte: one: "Byte" - other: "Bytes" + other: "Byte" kb: "KB" mb: "MB" gb: "GB" @@ -111,13 +115,13 @@ array: sentence_connector: "ve" skip_last_comma: true - + activerecord: errors: template: header: - one: "{{model}} girişi kaydedilemedi: 1 hata." - other: "{{model}} girişi kadedilemedi: {{count}} hata." + one: "%{model} girişi kaydedilemedi: 1 hata." + other: "%{model} girişi kadedilemedi: %{count} hata." body: "Lütfen aşağıdaki hataları düzeltiniz:" messages: @@ -128,36 +132,36 @@ accepted: "kabul edilmeli" empty: "doldurulmalı" blank: "doldurulmalı" - too_long: "çok uzun (en fazla {{count}} karakter)" - too_short: "çok kısa (en az {{count}} karakter)" - wrong_length: "yanlış uzunlukta (tam olarak {{count}} karakter olmalı)" + too_long: "çok uzun (en fazla %{count} karakter)" + too_short: "çok kısa (en az %{count} karakter)" + wrong_length: "yanlış uzunlukta (tam olarak %{count} karakter olmalı)" taken: "hali hazırda kullanılmakta" not_a_number: "geçerli bir sayı değil" - greater_than: "{{count}} sayısından büyük olmalı" - greater_than_or_equal_to: "{{count}} sayısına eşit veya büyük olmalı" - equal_to: "tam olarak {{count}} olmalı" - less_than: "{{count}} sayısından küçük olmalı" - less_than_or_equal_to: "{{count}} sayısına eşit veya küçük olmalı" + greater_than: "%{count} sayısından büyük olmalı" + greater_than_or_equal_to: "%{count} sayısına eşit veya büyük olmalı" + equal_to: "tam olarak %{count} olmalı" + less_than: "%{count} sayısından küçük olmalı" + less_than_or_equal_to: "%{count} sayısına eşit veya küçük olmalı" odd: "tek olmalı" even: "çift olmalı" greater_than_start_date: "başlangıç tarihinden büyük olmalı" not_same_project: "aynı projeye ait değil" circular_dependency: "Bu ilişki döngüsel bağımlılık meydana getirecektir" - 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: "Bir iş, alt işlerinden birine bağlanamaz" models: - + actionview_instancetag_blank_option: Lütfen Seçin - + general_text_No: 'Hayır' general_text_Yes: 'Evet' general_text_no: 'hayır' general_text_yes: 'evet' general_lang_name: 'Türkçe' general_csv_separator: ',' - general_csv_encoding: ISO-8859-1 - general_pdf_encoding: ISO-8859-1 + general_csv_encoding: ISO-8859-9 + general_pdf_encoding: UTF-8 general_first_day_of_week: '7' - + notice_account_updated: Hesap başarıyla güncelleştirildi. notice_account_invalid_creditentials: Geçersiz kullanıcı ya da parola notice_account_password_updated: Parola başarıyla güncellendi. @@ -174,34 +178,34 @@ notice_file_not_found: Erişmek istediğiniz sayfa mevcut değil ya da kaldırılmış. notice_locking_conflict: Veri başka bir kullanıcı tarafından güncellendi. notice_not_authorized: Bu sayfaya erişme yetkiniz yok. - notice_email_sent: "E-posta gönderildi {{value}}" - notice_email_error: "E-posta gönderilirken bir hata oluştu ({{value}})" + notice_email_sent: "E-posta gönderildi %{value}" + notice_email_error: "E-posta gönderilirken bir hata oluştu (%{value})" notice_feeds_access_key_reseted: RSS erişim anahtarınız sıfırlandı. - notice_failed_to_save_issues: "Failed to save {{count}} issue(s) on {{total}} selected: {{ids}}." - notice_no_issue_selected: "Seçili ileti yok! Lütfen, düzenlemek istediğiniz iletileri işaretleyin." + notice_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}." + notice_no_issue_selected: "Seçili iş yok! Lütfen, düzenlemek istediğiniz işleri işaretleyin." notice_account_pending: "Hesabınız oluşturuldu ve yönetici onayı bekliyor." notice_default_data_loaded: Varasayılan konfigürasyon başarılıyla yüklendi. - - error_can_t_load_default_data: "Varsayılan konfigürasyon yüklenemedi: {{value}}" - error_scm_not_found: "Depoda, giriş ya da revizyon yok." - error_scm_command_failed: "Depoya erişmeye çalışırken bir hata meydana geldi: {{value}}" + + error_can_t_load_default_data: "Varsayılan konfigürasyon yüklenemedi: %{value}" + error_scm_not_found: "Depoda, giriş ya da değişiklik yok." + error_scm_command_failed: "Depoya erişmeye çalışırken bir hata meydana geldi: %{value}" error_scm_annotate: "Giriş mevcut değil veya izah edilemedi." - error_issue_not_found_in_project: 'İleti bilgisi bulunamadı veya bu projeye ait değil' - - mail_subject_lost_password: "Parolanız {{value}}" + error_issue_not_found_in_project: 'İş bilgisi bulunamadı veya bu projeye ait değil' + + mail_subject_lost_password: "Parolanız %{value}" mail_body_lost_password: 'Parolanızı değiştirmek için, aşağıdaki bağlantıya tıklayın:' - mail_subject_register: "Your {{value}} hesap aktivasyonu" + mail_subject_register: "%{value} hesap aktivasyonu" mail_body_register: 'Hesabınızı etkinleştirmek için, aşağıdaki bağlantıya tıklayın:' - mail_body_account_information_external: "Hesabınızı {{value}} giriş yapmak için kullanabilirsiniz." + mail_body_account_information_external: "Hesabınızı %{value} giriş yapmak için kullanabilirsiniz." mail_body_account_information: Hesap bilgileriniz - mail_subject_account_activation_request: "{{value}} hesabı etkinleştirme isteği" - mail_body_account_activation_request: "Yeni bir kullanıcı ({{value}}) kaydedildi. Hesap onaylanmayı bekliyor:" - + mail_subject_account_activation_request: "%{value} hesabı etkinleştirme isteği" + mail_body_account_activation_request: "Yeni bir kullanıcı (%{value}) kaydedildi. Hesap onaylanmayı bekliyor:" + gui_validation_error: 1 hata - gui_validation_error_plural: "{{count}} hata" - + gui_validation_error_plural: "%{count} hata" + field_name: İsim - field_description: Açıklama + field_description: Yorum field_summary: Özet field_is_required: Gerekli field_firstname: Ad @@ -211,11 +215,11 @@ field_filesize: Boyut field_downloads: İndirilenler field_author: Yazar - field_created_on: Oluşturuldu - field_updated_on: Güncellendi + field_created_on: Oluşturulma + field_updated_on: Güncellenme field_field_format: Biçim field_is_for_all: Tüm projeler için - field_possible_values: Mümkün değerler + field_possible_values: Kullanılabilir değerler field_regexp: Düzenli ifadeler field_min_length: En az uzunluk field_max_length: En çok uzunluk @@ -223,23 +227,23 @@ field_category: Kategori field_title: Başlık field_project: Proje - field_issue: İleti + field_issue: İş field_status: Durum field_notes: Notlar - field_is_closed: İleti kapatıldı + field_is_closed: İş kapatıldı field_is_default: Varsayılan Değer - field_tracker: Takipçi + field_tracker: İş tipi field_subject: Konu field_due_date: Bitiş Tarihi field_assigned_to: Atanan field_priority: Öncelik - field_fixed_version: Hedef Version + field_fixed_version: Hedef Sürüm field_user: Kullanıcı field_role: Rol field_homepage: Anasayfa field_is_public: Genel field_parent: 'Üst proje: ' - field_is_in_roadmap: Yol haritasında gösterilen iletiler + field_is_in_roadmap: Yol haritasında gösterilen işler field_login: Giriş field_mail_notification: E-posta uyarıları field_admin: Yönetici @@ -249,7 +253,7 @@ field_password: Parola field_new_password: Yeni Parola field_password_confirmation: Onay - field_version: Versiyon + field_version: Sürüm field_type: Tip field_host: Host field_port: Port @@ -260,37 +264,38 @@ field_attr_lastname: Soyad Niteliği field_attr_mail: E-Posta Niteliği field_onthefly: Anında kullanıcı oluşturma - field_done_ratio: % tamamlandı + field_start_date: Başlangıç Tarihi + field_done_ratio: Tamamlanma yüzdesi field_auth_source: Kimlik Denetim Modu field_hide_mail: E-posta adresimi gizle - field_comments: Açıklama + field_comments: Yorumlar field_url: URL field_start_page: Başlangıç Sayfası field_subproject: Alt Proje - field_hours: Saatler - field_activity: Faaliyet + field_hours: Saat + field_activity: Etkinlik field_spent_on: Tarih field_identifier: Tanımlayıcı field_is_filter: filtre olarak kullanılmış - field_issue_to: İlişkili ileti + field_issue_to: İlişkili iş field_delay: Gecikme - field_assignable: Bu role atanabilecek iletiler - field_redirect_existing_links: Mevcut bağlantıları tekrar yönlendir + field_assignable: Bu role atanabilecek işler + field_redirect_existing_links: Mevcut bağlantıları yönlendir field_estimated_hours: Kalan zaman field_column_names: Sütunlar field_time_zone: Saat dilimi field_searchable: Aranabilir field_default_value: Varsayılan değer - field_comments_sorting: Açıklamaları göster - + field_comments_sorting: Yorumları göster + setting_app_title: Uygulama Bağlığı setting_app_subtitle: Uygulama alt başlığı setting_welcome_text: Hoşgeldin Mesajı setting_default_language: Varsayılan Dil setting_login_required: Kimlik denetimi gerekli mi setting_self_registration: Otomatik kayıt - setting_attachment_max_size: Maksimum Ek boyutu - setting_issues_export_limit: İletilerin dışa aktarılma sınırı + setting_attachment_max_size: Maksimum ek boyutu + setting_issues_export_limit: İşlerin dışa aktarılma sınırı setting_mail_from: Gönderici e-posta adresi setting_bcc_recipients: Alıcıları birbirinden gizle (bcc) setting_host_name: Host adı @@ -305,17 +310,17 @@ setting_autologin: Otomatik Giriş setting_date_format: Tarih Formati setting_time_format: Zaman Formatı - setting_cross_project_issue_relations: Çapraz-Proje ileti ilişkilendirmesine izin ver - setting_issue_list_default_columns: İleti listesinde gösterilen varsayılan sütunlar + setting_cross_project_issue_relations: Çapraz-Proje iş ilişkilendirmesine izin ver + setting_issue_list_default_columns: İş listesinde gösterilen varsayılan sütunlar setting_repositories_encodings: Depo dil kodlaması setting_emails_footer: E-posta dip not setting_protocol: Protokol - setting_per_page_options: Sayfa seçenekleri başına nesneler - setting_user_format: Kullanıcı gösterim formatı - setting_activity_days_default: Proje Faaliyetlerinde gösterilen gün sayısı - setting_display_subprojects_issues: Varsayılan olarak ana projenin ileti listesinde alt proje iletilerini göster - - project_module_issue_tracking: İleti Takibi + setting_per_page_options: Sayfada başına öğe sayısı + setting_user_format: Kullanıcı gösterim biçimi + setting_activity_days_default: Proje etkinliklerinde gösterilen gün sayısı + setting_display_subprojects_issues: Varsayılan olarak ana projenin iş listesinde alt proje işlerini göster + + project_module_issue_tracking: İş Takibi project_module_time_tracking: Zaman Takibi project_module_news: Haberler project_module_documents: Belgeler @@ -323,7 +328,7 @@ project_module_wiki: Wiki project_module_repository: Depo project_module_boards: Tartışma Alanı - + label_user: Kullanıcı label_user_plural: Kullanıcılar label_user_new: Yeni Kullanıcı @@ -331,18 +336,18 @@ label_project_new: Yeni proje label_project_plural: Projeler label_x_projects: - zero: no projects - one: 1 project - other: "{{count}} projects" + zero: hiç proje yok + one: 1 proje + other: "%{count} proje" label_project_all: Tüm Projeler label_project_latest: En son projeler - label_issue: İleti - label_issue_new: Yeni İleti - label_issue_plural: İletiler - label_issue_view_all: Tüm iletileri izle - label_issues_by: "{{value}} tarafından gönderilmiş iletiler" - label_issue_added: İleti eklendi - label_issue_updated: İleti güncellendi + label_issue: İş + label_issue_new: Yeni İş + label_issue_plural: İşler + label_issue_view_all: Tüm işleri izle + label_issues_by: "%{value} tarafından gönderilmiş işler" + label_issue_added: İş eklendi + label_issue_updated: İş güncellendi label_document: Belge label_document_new: Yeni belge label_document_plural: Belgeler @@ -354,15 +359,15 @@ label_member: Üye label_member_new: Yeni üye label_member_plural: Üyeler - label_tracker: Takipçi - label_tracker_plural: Takipçiler - label_tracker_new: Yeni takipçi + label_tracker: İş tipi + label_tracker_plural: İş tipleri + label_tracker_new: Yeni iş tipi label_workflow: İş akışı - label_issue_status: İleti durumu - label_issue_status_plural: İleti durumuları + label_issue_status: İş durumu + label_issue_status_plural: İş durumuları label_issue_status_new: Yeni durum - label_issue_category: İleti kategorisi - label_issue_category_plural: İleti kategorileri + label_issue_category: İş kategorisi + label_issue_category_plural: İş kategorileri label_issue_category_new: Yeni kategori label_custom_field: Özel alan label_custom_field_plural: Özel alanlar @@ -373,21 +378,21 @@ label_information_plural: Bilgi label_please_login: Lütfen giriş yapın label_register: Kayıt - label_password_lost: Parolamı unuttum? + label_password_lost: Parolamı unuttum label_home: Anasayfa label_my_page: Kişisel Sayfam label_my_account: Hesabım label_my_projects: Projelerim label_administration: Yönetim - label_login: Gir + label_login: Giriş label_logout: Çıkış label_help: Yardım - label_reported_issues: Rapor edilmiş iletiler - label_assigned_to_me_issues: Bana atanmış iletiler + label_reported_issues: Rapor edilmiş işler + label_assigned_to_me_issues: Bana atanmış işler label_last_login: Son bağlantı - label_registered_on: Kayıtlı - label_activity: Faaliyet - label_overall_activity: Tüm aktiviteler + label_registered_on: Kayıt tarihi + label_activity: Etkinlik + label_overall_activity: Tüm etkinlikler label_new: Yeni label_logged_as: "Kullanıcı :" label_environment: Çevre @@ -400,14 +405,14 @@ label_list: Liste label_date: Tarih label_integer: Tam sayı - label_float: Noktalı sayı - label_boolean: Boolean + label_float: Ondalıklı sayı + label_boolean: "Evet/Hayır" label_string: Metin label_text: Uzun Metin label_attribute: Nitelik label_attribute_plural: Nitelikler - label_download: "{{count}} indirilen" - label_download_plural: "{{count}} indirilen" + label_download: "%{count} indirme" + label_download_plural: "%{count} indirme" label_no_data: Gösterilecek veri yok label_change_status: Değişim Durumu label_history: Geçmiş @@ -426,29 +431,29 @@ label_news_added: Haber eklendi label_settings: Ayarlar label_overview: Genel - label_version: Versiyon - label_version_new: Yeni versiyon - label_version_plural: Versiyonlar + label_version: Sürüm + label_version_new: Yeni sürüm + label_version_plural: Sürümler label_confirmation: Doğrulamama - label_export_to: 'Diğer uygun kaynaklar:' - label_read: Oku... + label_export_to: "Diğer uygun kaynaklar:" + label_read: "Oku..." label_public_projects: Genel Projeler label_open_issues: açık label_open_issues_plural: açık label_closed_issues: kapalı label_closed_issues_plural: kapalı label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{total}}" + zero: tamamı kapalı, toplam %{total} + one: 1'i' açık, toplam %{total} + other: "%{count} açık, toplam %{total}" label_x_open_issues_abbr: - zero: 0 open - one: 1 open - other: "{{count}} open" + zero: hiç açık yok + one: 1 açık + other: "%{count} açık" label_x_closed_issues_abbr: - zero: 0 closed - one: 1 closed - other: "{{count}} closed" + zero: hiç kapalı yok + one: 1 kapalı + other: "%{count} kapalı" label_total: Toplam label_permissions: İzinler label_current_status: Mevcut Durum @@ -459,25 +464,25 @@ label_next: Sonraki label_previous: Önceki label_used_by: 'Kullanan: ' - label_details: Detaylar - label_add_note: Bir not ekle + label_details: Ayrıntılar + label_add_note: Not ekle label_per_page: Sayfa başına label_calendar: Takvim - label_months_from: aylardan itibaren - label_gantt: Gantt + label_months_from: ay öncesinden itibaren + label_gantt: İş-Zaman Çizelgesi label_internal: Dahili - label_last_changes: "Son {{count}} değişiklik" + label_last_changes: "Son %{count} değişiklik" label_change_view_all: Tüm Değişiklikleri gör label_personalize_page: Bu sayfayı kişiselleştir - label_comment: Açıklama - label_comment_plural: Açıklamalar + label_comment: Yorum + label_comment_plural: Yorumlar label_x_comments: - zero: no comments - one: 1 comment - other: "{{count}} comments" - label_comment_add: Açıklama Ekle - label_comment_added: Açıklama Eklendi - label_comment_delete: Açıklamaları sil + zero: hiç yorum yok + one: 1 yorum + other: "%{count} yorum" + label_comment_add: Yorum Ekle + label_comment_added: Yorum Eklendi + label_comment_delete: Yorumları sil label_query: Özel Sorgu label_query_plural: Özel Sorgular label_query_new: Yeni Sorgu @@ -493,7 +498,7 @@ label_yesterday: Dün label_this_week: Bu hafta label_last_week: Geçen hafta - label_last_n_days: "Son {{count}} gün" + label_last_n_days: "Son %{count} gün" label_this_month: Bu ay label_last_month: Geçen ay label_this_year: Bu yıl @@ -506,27 +511,27 @@ label_day_plural: Günler label_repository: Depo label_repository_plural: Depolar - label_browse: Tara - label_modification: "{{count}} değişim" - label_modification_plural: "{{count}} değişim" - label_revision: Revizyon - label_revision_plural: Revizyonlar - label_associated_revisions: Birleştirilmiş revizyonlar + label_browse: Gözat + label_modification: "%{count} değişim" + label_modification_plural: "%{count} değişim" + label_revision: Değişiklik + label_revision_plural: Değişiklikler + label_associated_revisions: Birleştirilmiş değişiklikler label_added: eklendi label_modified: güncellendi label_deleted: silindi - label_latest_revision: En son revizyon - label_latest_revision_plural: En son revizyonlar - label_view_revisions: Revizyonları izle + label_latest_revision: En son değişiklik + label_latest_revision_plural: En son değişiklikler + label_view_revisions: Değişiklikleri izle label_max_size: En büyük boyut label_sort_highest: Üste taşı label_sort_higher: Yukarı taşı label_sort_lower: Aşağı taşı label_sort_lowest: Dibe taşı label_roadmap: Yol Haritası - label_roadmap_due_in: "Due in {{value}}" - label_roadmap_overdue: "{{value}} geç" - label_roadmap_no_issues: Bu versiyon için ileti yok + label_roadmap_due_in: "%{value} içinde bitmeli" + label_roadmap_overdue: "%{value} geç" + label_roadmap_no_issues: Bu sürüm için iş yok label_search: Ara label_result_plural: Sonuçlar label_all_words: Tüm Kelimeler @@ -537,14 +542,14 @@ label_wiki_page_plural: Wiki sayfaları label_index_by_title: Başlığa göre diz label_index_by_date: Tarihe göre diz - label_current_version: Güncel versiyon + label_current_version: Güncel sürüm label_preview: Önizleme label_feed_plural: Beslemeler label_changes_details: Bütün değişikliklerin detayları - label_issue_tracking: İleti Takibi + label_issue_tracking: İş Takibi label_spent_time: Harcanan zaman - label_f_hour: "{{value}} saat" - label_f_hour_plural: "{{value}} saat" + label_f_hour: "%{value} saat" + label_f_hour_plural: "%{value} saat" label_time_tracking: Zaman Takibi label_change_plural: Değişiklikler label_statistics: İstatistikler @@ -556,9 +561,9 @@ label_options: Tercihler label_copy_workflow_from: İşakışı kopyala label_permissions_report: İzin raporu - label_watched_issues: İzlenmiş iletiler - label_related_issues: İlişkili iletiler - label_applied_status: uygulanmış iletiler + label_watched_issues: İzlenmiş işler + label_related_issues: İlişkili işler + label_applied_status: uygulanmış işler label_loading: Yükleniyor... label_relation_new: Yeni ilişki label_relation_delete: İlişkiyi sil @@ -574,7 +579,7 @@ label_start_to_end: baştan sona label_stay_logged_in: Sürekli bağlı kal label_disabled: Devredışı - label_show_completed_versions: Tamamlanmış versiyonları göster + label_show_completed_versions: Tamamlanmış sürümleri göster label_me: Ben label_board: Tartışma Alanı label_board_new: Yeni alan @@ -591,34 +596,34 @@ label_week: Hafta label_date_from: Başlangıç label_date_to: Bitiş - label_language_based: Kullanıcı diline istinaden - label_sort_by: "{{value}} göre sırala" + label_language_based: Kullanıcı dili bazlı + label_sort_by: "%{value} göre sırala" label_send_test_email: Test e-postası gönder - label_feeds_access_key_created_on: "RSS erişim anahtarı {{value}} önce oluşturuldu" + label_feeds_access_key_created_on: "RSS erişim anahtarı %{value} önce oluşturuldu" label_module_plural: Modüller - label_added_time_by: "{{author}} tarafından {{age}} önce eklendi" - label_updated_time: "{{value}} önce güncellendi" + label_added_time_by: "%{author} tarafından %{age} önce eklendi" + label_updated_time: "%{value} önce güncellendi" label_jump_to_a_project: Projeye git... label_file_plural: Dosyalar label_changeset_plural: Değişiklik Listeleri label_default_columns: Varsayılan Sütunlar label_no_change_option: (Değişiklik yok) - label_bulk_edit_selected_issues: Seçili iletileri toplu düzenle + label_bulk_edit_selected_issues: Seçili işleri toplu olarak düzenle label_theme: Tema label_default: Varsayılan label_search_titles_only: Sadece başlıkları ara label_user_mail_option_all: "Tüm projelerimdeki herhangi bir olay için" - label_user_mail_option_selected: "Sadece seçili projelerdeki herhangi bir olay için..." + label_user_mail_option_selected: "Sadece seçili projelerdeki herhangi bir olay için" label_user_mail_no_self_notified: "Kendi yaptığım değişikliklerden haberdar olmak istemiyorum" label_registration_activation_by_email: e-posta ile hesap etkinleştirme label_registration_manual_activation: Elle hesap etkinleştirme label_registration_automatic_activation: Otomatik hesap etkinleştirme - label_display_per_page: "Sayfa başına: {{value}}" + label_display_per_page: "Sayfa başına: %{value}" label_age: Yaş label_change_properties: Özellikleri değiştir label_general: Genel label_more: Daha fazla - label_scm: KKY + label_scm: KY label_plugins: Eklentiler label_ldap_authentication: LDAP Denetimi label_downloads_abbr: D/L @@ -628,7 +633,7 @@ label_chronological_order: Tarih sırasına göre label_reverse_chronological_order: Ters tarih sırasına göre label_planning: Planlanıyor - + button_login: Giriş button_submit: Gönder button_save: Kaydet @@ -652,8 +657,8 @@ button_cancel: İptal button_activate: Etkinleştir button_sort: Sırala - button_log_time: Günlük zamanı - button_rollback: Bu versiyone geri al + button_log_time: Zaman kaydı + button_rollback: Bu sürüme geri al button_watch: İzle button_unwatch: İzlemeyi iptal et button_reply: Cevapla @@ -663,63 +668,63 @@ button_rename: Yeniden adlandır button_change_password: Parolayı değiştir button_copy: Kopyala - button_annotate: Revizyon geçmişine göre göster + button_annotate: Değişiklik geçmişine göre göster button_update: Güncelle button_configure: Yapılandır - + status_active: faal status_registered: kayıtlı status_locked: kilitli - + text_select_mail_notifications: Gönderilecek e-posta uyarısına göre hareketi seçin. - text_regexp_info: eg. ^[A-Z0-9]+$ + text_regexp_info: örn. ^[A-Z0-9]+$ text_min_max_length_info: 0 sınırlama yok demektir text_project_destroy_confirmation: Bu projeyi ve bağlantılı verileri silmek istediğinizden emin misiniz? - text_subprojects_destroy_warning: "Ayrıca {{value}} alt proje silinecek." - text_workflow_edit: İşakışını düzenlemek için bir rol ve takipçi seçin + text_subprojects_destroy_warning: "Ayrıca %{value} alt proje silinecek." + text_workflow_edit: İşakışını düzenlemek için bir rol ve iş tipi seçin text_are_you_sure: Emin misiniz ? text_tip_issue_begin_day: Bugün başlayan görevler text_tip_issue_end_day: Bugün sona eren görevler text_tip_issue_begin_end_day: Bugün başlayan ve sona eren görevler text_project_identifier_info: 'Küçük harfler (a-z), sayılar ve noktalar kabul edilir.
    Bir kere kaydedildiğinde,tanımlayıcı değiştirilemez.' - text_caracters_maximum: "En çok {{count}} karakter." - text_caracters_minimum: "En az {{count}} karakter uzunluğunda olmalı." - text_length_between: "{{min}} ve {{max}} karakterleri arasındaki uzunluk." - text_tracker_no_workflow: Bu takipçi için işakışı tanımlanmamış + text_caracters_maximum: "En çok %{count} karakter." + text_caracters_minimum: "En az %{count} karakter uzunluğunda olmalı." + text_length_between: "%{min} ve %{max} karakterleri arasındaki uzunluk." + text_tracker_no_workflow: Bu iş tipi için işakışı tanımlanmamış text_unallowed_characters: Yasaklı karakterler - text_comma_separated: Çoklu değer uygundur(Virgül ile ayrılmış). - text_issues_ref_in_commit_messages: Teslim mesajlarındaki iletileri çözme ve başvuruda bulunma - text_issue_added: "İleti {{id}}, {{author}} tarafından rapor edildi." - text_issue_updated: "İleti {{id}}, {{author}} tarafından güncellendi." + text_comma_separated: Çoklu değer girilebilir(Virgül ile ayrılmış). + text_issues_ref_in_commit_messages: Teslim mesajlarındaki işleri çözme ve başvuruda bulunma + text_issue_added: "İş %{id}, %{author} tarafından rapor edildi." + text_issue_updated: "İş %{id}, %{author} tarafından güncellendi." text_wiki_destroy_confirmation: bu wikiyi ve tüm içeriğini silmek istediğinizden emin misiniz? - text_issue_category_destroy_question: "Bazı iletiler ({{count}}) bu kategoriye atandı. Ne yapmak istersiniz?" + text_issue_category_destroy_question: "Bazı işler (%{count}) bu kategoriye atandı. Ne yapmak istersiniz?" text_issue_category_destroy_assignments: Kategori atamalarını kaldır - text_issue_category_reassign_to: İletileri bu kategoriye tekrar ata - text_user_mail_option: "Seçili olmayan projeler için, sadece dahil olduğunuz ya da izlediğiniz öğeler hakkında uyarılar alacaksınız (örneğin,yazarı veya atandığınız iletiler)." - text_no_configuration_data: "Roller, takipçiler, ileti durumları ve işakışı henüz yapılandırılmadı.\nVarsayılan yapılandırılmanın yüklenmesi şiddetle tavsiye edilir. Bir kez yüklendiğinde yapılandırmayı değiştirebileceksiniz." + text_issue_category_reassign_to: İşleri bu kategoriye tekrar ata + text_user_mail_option: "Seçili olmayan projeler için, sadece dahil olduğunuz ya da izlediğiniz öğeler hakkında uyarılar alacaksınız (örneğin,yazarı veya atandığınız işler)." + text_no_configuration_data: "Roller, iş tipleri, iş durumları ve işakışı henüz yapılandırılmadı.\nVarsayılan yapılandırılmanın yüklenmesi şiddetle tavsiye edilir. Bir kez yüklendiğinde yapılandırmayı değiştirebileceksiniz." text_load_default_configuration: Varsayılan yapılandırmayı yükle - text_status_changed_by_changeset: "Değişiklik listesi {{value}} içinde uygulandı." - text_issues_destroy_confirmation: 'Seçili iletileri silmek istediğinizden emin misiniz ?' + text_status_changed_by_changeset: "Değişiklik listesi %{value} içinde uygulandı." + text_issues_destroy_confirmation: 'Seçili işleri silmek istediğinizden emin misiniz ?' text_select_project_modules: 'Bu proje için etkinleştirmek istediğiniz modülleri seçin:' text_default_administrator_account_changed: Varsayılan yönetici hesabı değişti text_file_repository_writable: Dosya deposu yazılabilir text_rmagick_available: RMagick Kullanılabilir (isteğe bağlı) - text_destroy_time_entries_question: Silmek üzere olduğunuz iletiler üzerine {{hours}} saat raporlandı.Ne yapmak istersiniz ? - text_destroy_time_entries: Raporlanmış saatleri sil - text_assign_time_entries_to_project: Raporlanmış saatleri projeye ata - text_reassign_time_entries: 'Raporlanmış saatleri bu iletiye tekrar ata:' - + text_destroy_time_entries_question: Silmek üzere olduğunuz işler üzerine %{hours} saat raporlandı.Ne yapmak istersiniz ? + text_destroy_time_entries: Raporlanmış süreleri sil + text_assign_time_entries_to_project: Raporlanmış süreleri projeye ata + text_reassign_time_entries: 'Raporlanmış süreleri bu işe tekrar ata:' + default_role_manager: Yönetici default_role_developer: Geliştirici default_role_reporter: Raporlayıcı default_tracker_bug: Hata - default_tracker_feature: ÖZellik + default_tracker_feature: Özellik default_tracker_support: Destek default_issue_status_new: Yeni - default_issue_status_in_progress: In Progress + default_issue_status_in_progress: Yapılıyor default_issue_status_resolved: Çözüldü default_issue_status_feedback: Geribildirim - default_issue_status_closed: Kapatıldı + default_issue_status_closed: "Kapatıldı" default_issue_status_rejected: Reddedildi default_doc_category_user: Kullanıcı Dökümantasyonu default_doc_category_tech: Teknik Dökümantasyon @@ -729,224 +734,264 @@ default_priority_urgent: Acil default_priority_immediate: Derhal default_activity_design: Tasarım - default_activity_development: Geliştirim - - enumeration_issue_priorities: İleti önceliği + default_activity_development: Geliştirme + + enumeration_issue_priorities: İş önceliği enumeration_doc_categories: Belge Kategorileri enumeration_activities: Faaliyetler (zaman takibi) - button_quote: Quote - setting_enabled_scm: Enabled SCM - label_incoming_emails: Incoming emails - 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_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:" - label_duplicated_by: duplicated by - text_enumeration_destroy_question: "{{count}} objects are assigned to this value." - text_user_wrote: "{{value}} wrote:" - setting_mail_handler_api_enabled: Enable WS for incoming emails - label_and_its_subprojects: "{{value}} and its subprojects" - mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days" - setting_mail_handler_api_key: API key - setting_commit_logs_encoding: Commit messages encoding + button_quote: Alıntı + setting_enabled_scm: KKY Açık + label_incoming_emails: "Gelen e-postalar" + label_generate_key: "Anahtar oluştur" + setting_sequential_project_identifiers: "Sıralı proje tanımlayıcıları oluştur" + field_parent_title: Üst sayfa + 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: 'Hepsini şuna çevir:' + label_issue_watchers: Takipçiler + mail_body_reminder: "Size atanmış olan %{count} iş %{days} gün içerisinde bitirilmeli:" + label_duplicated_by: yineleyen + text_enumeration_destroy_question: "Bu nesneye %{count} değer bağlanmış." + text_user_wrote: "%{value} demiş ki:" + setting_mail_handler_api_enabled: Gelen e-postalar için WS'yi aç + label_and_its_subprojects: "%{value} ve alt projeleri" + mail_subject_reminder: "%{count} iş bir kaç güne bitecek" + setting_mail_handler_api_key: API anahtarı + setting_commit_logs_encoding: Gönderim mesajlarının kodlaması (UTF-8 vs.) general_csv_decimal_separator: '.' - notice_unable_delete_version: Unable to delete version - label_renamed: renamed - label_copied: copied - setting_plain_text_mail: plain text only (no HTML) - permission_view_files: View files - permission_edit_issues: Edit issues - permission_edit_own_time_entries: Edit own time logs - permission_manage_public_queries: Manage public queries - permission_add_issues: Add issues - permission_log_time: Log spent time - permission_view_changesets: View changesets - permission_view_time_entries: View spent time - permission_manage_versions: Manage versions - permission_manage_wiki: Manage wiki - permission_manage_categories: Manage issue categories - permission_protect_wiki_pages: Protect wiki pages - permission_comment_news: Comment news - permission_delete_messages: Delete messages - permission_select_project_modules: Select project modules - permission_manage_documents: Manage documents - permission_edit_wiki_pages: Edit wiki pages - permission_add_issue_watchers: Add watchers - permission_view_gantt: View gantt chart - permission_move_issues: Move issues - permission_manage_issue_relations: Manage issue relations - permission_delete_wiki_pages: Delete wiki pages - permission_manage_boards: Manage boards - permission_delete_wiki_pages_attachments: Delete attachments - permission_view_wiki_edits: View wiki history - permission_add_messages: Post messages - permission_view_messages: View messages - permission_manage_files: Manage files - permission_edit_issue_notes: Edit notes - permission_manage_news: Manage news - permission_view_calendar: View calendrier - permission_manage_members: Manage members - permission_edit_messages: Edit messages - permission_delete_issues: Delete issues - permission_view_issue_watchers: View watchers list - permission_manage_repository: Manage repository - permission_commit_access: Commit access - permission_browse_repository: Browse repository - permission_view_documents: View documents - permission_edit_project: Edit project - permission_add_issue_notes: Add notes - permission_save_queries: Save queries - permission_view_wiki_pages: View wiki - permission_rename_wiki_pages: Rename wiki pages - permission_edit_time_entries: Edit time logs - permission_edit_own_issue_notes: Edit own notes - setting_gravatar_enabled: Use Gravatar user icons - label_example: Example + notice_unable_delete_version: Sürüm silinemiyor + label_renamed: yeniden adlandırılmış + label_copied: kopyalanmış + setting_plain_text_mail: sadece düz metin (HTML yok) + permission_view_files: Dosyaları görme + permission_edit_issues: İşleri düzenleme + permission_edit_own_time_entries: Kendi zaman girişlerini düzenleme + permission_manage_public_queries: Herkese açık sorguları yönetme + permission_add_issues: İş ekleme + permission_log_time: Harcanan zamanı kaydetme + permission_view_changesets: Değişimleri görme(SVN, vs.) + permission_view_time_entries: Harcanan zamanı görme + permission_manage_versions: Sürümleri yönetme + permission_manage_wiki: Wiki'yi yönetme + permission_manage_categories: İş kategorilerini yönetme + permission_protect_wiki_pages: Wiki sayfalarını korumaya alma + permission_comment_news: Haberlere yorum yapma + permission_delete_messages: Mesaj silme + permission_select_project_modules: Proje modüllerini seçme + permission_manage_documents: Belgeleri yönetme + permission_edit_wiki_pages: Wiki sayfalarını düzenleme + permission_add_issue_watchers: Takipçi ekleme + permission_view_gantt: İş-Zaman çizelgesi görme + permission_move_issues: İşlerin yerini değiştirme + permission_manage_issue_relations: İşlerin biribiriyle bağlantılarını yönetme + permission_delete_wiki_pages: Wiki sayfalarını silme + permission_manage_boards: Panoları yönetme + permission_delete_wiki_pages_attachments: Ekleri silme + permission_view_wiki_edits: Wiki geçmişini görme + permission_add_messages: Mesaj gönderme + permission_view_messages: Mesajları görme + permission_manage_files: Dosyaları yönetme + permission_edit_issue_notes: Notları düzenleme + permission_manage_news: Haberleri yönetme + permission_view_calendar: Takvimleri görme + permission_manage_members: Üyeleri yönetme + permission_edit_messages: Mesajları düzenleme + permission_delete_issues: İşleri silme + permission_view_issue_watchers: Takipçi listesini görme + permission_manage_repository: Depo yönetimi + permission_commit_access: Gönderme erişimi + permission_browse_repository: Depoya gözatma + permission_view_documents: Belgeleri görme + permission_edit_project: Projeyi düzenleme + permission_add_issue_notes: Not ekleme + permission_save_queries: Sorgu kaydetme + permission_view_wiki_pages: Wiki görme + permission_rename_wiki_pages: Wiki sayfasının adını değiştirme + permission_edit_time_entries: Zaman kayıtlarını düzenleme + permission_edit_own_issue_notes: Kendi notlarını düzenleme + setting_gravatar_enabled: Kullanıcı resimleri için Gravatar kullan + label_example: Örnek 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: Edit own messages - permission_delete_own_messages: Delete own messages - label_user_activity: "{{value}}'s activity" - label_updated_time_by: "Updated by {{author}} {{age}} ago" - text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' - setting_diff_max_lines_displayed: Max number of diff lines displayed - text_plugin_assets_writable: Plugin assets directory writable - warning_attachments_not_saved: "{{count}} file(s) could not be saved." - button_create_and_continue: Create and continue - text_custom_field_possible_values_info: 'One line for each value' - label_display: Display - field_editable: Editable - setting_repository_log_display_limit: Maximum number of revisions displayed on file log - setting_file_max_size_displayed: Max size of text files displayed inline - field_watcher: Watcher - setting_openid: Allow OpenID login and registration + permission_edit_own_messages: Kendi mesajlarını düzenleme + permission_delete_own_messages: Kendi mesajlarını silme + label_user_activity: "%{value} kullanıcısının etkinlikleri" + label_updated_time_by: "%{author} tarafından %{age} önce güncellendi" + text_diff_truncated: '... Bu fark tam olarak gösterilemiyor çünkü gösterim için ayarlanmış üst sınırı aşıyor.' + setting_diff_max_lines_displayed: Gösterilebilecek maksimumu fark satırı + text_plugin_assets_writable: Eklenti yardımcı dosya dizini yazılabilir + warning_attachments_not_saved: "%{count} adet dosya kaydedilemedi." + button_create_and_continue: Oluştur ve devam et + text_custom_field_possible_values_info: 'Her değer için bir satır' + label_display: Göster + field_editable: Düzenlenebilir + setting_repository_log_display_limit: Dosya kaydında gösterilecek maksimum değişim sayısı + setting_file_max_size_displayed: Dahili olarak gösterilecek metin dosyaları için maksimum satır sayısı + field_watcher: Takipçi + setting_openid: Kayıt ve giriş için OpenID'ye izin ver field_identity_url: OpenID URL - label_login_with_open_id_option: or login with OpenID - field_content: Content - label_descending: Descending - label_sort: Sort - label_ascending: Ascending - label_date_from_to: From {{start}} to {{end}} + label_login_with_open_id_option: veya OpenID kullanın + field_content: İçerik + label_descending: Azalan + label_sort: Sırala + label_ascending: Artan + label_date_from_to: "%{start} - %{end} arası" label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? - text_wiki_page_reassign_children: Reassign child pages to this parent page - text_wiki_page_nullify_children: Keep child pages as root pages - text_wiki_page_destroy_children: Delete child pages and all their descendants - setting_password_min_length: Minimum password length - field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" - label_wiki_content_added: Wiki page added - 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}}. - label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. - permission_add_project: Create project - setting_new_project_user_role_id: Role given to a non-admin user who creates a project - label_view_all_revisions: View all revisions - label_tag: Tag - label_branch: Branch - 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"). - label_group_plural: Groups - label_group: Group - label_group_new: New group - label_time_entry_plural: Spent time - 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" - field_active: Active - enumeration_system_activity: System Activity - permission_delete_issue_watchers: Delete watchers - version_status_closed: closed - version_status_locked: locked - version_status_open: open - error_can_not_reopen_issue_on_closed_version: An issue assigned to a closed version can not be reopened - label_user_anonymous: Anonymous - button_move_and_follow: Move and follow - setting_default_projects_modules: Default enabled modules for new projects - setting_gravatar_default: Default Gravatar image - field_sharing: Sharing - label_version_sharing_hierarchy: With project hierarchy - label_version_sharing_system: With all projects - label_version_sharing_descendants: With subprojects - label_version_sharing_tree: With project tree - label_version_sharing_none: Not shared - error_can_not_archive_project: This project can not be archived - button_duplicate: Duplicate - button_copy_and_follow: Copy and follow - label_copy_source: Source - setting_issue_done_ratio: Calculate the issue done ratio with - setting_issue_done_ratio_issue_status: Use the issue status - error_issue_done_ratios_not_updated: Issue done ratios not updated. - error_workflow_copy_target: Please select target tracker(s) and role(s) - setting_issue_done_ratio_issue_field: Use the issue field - label_copy_same_as_target: Same as target - label_copy_target: Target - notice_issue_done_ratios_updated: Issue done ratios updated. - error_workflow_copy_source: Please select a source tracker or role - label_update_issue_done_ratios: Update issue done ratios - setting_start_of_week: Start calendars on - permission_view_issues: View Issues - label_display_used_statuses_only: Only display statuses that are used by this tracker - label_revision_id: Revision {{value}} - label_api_access_key: API access key - label_api_access_key_created_on: API access key created {{value}} ago - label_feeds_access_key: RSS access key - notice_api_access_key_reseted: Your API access key was reset. - setting_rest_api_enabled: Enable REST web service - label_missing_api_access_key: Missing an API access key - label_missing_feeds_access_key: Missing a RSS access key - button_show: Show - text_line_separated: Multiple values allowed (one line for each value). - setting_mail_handler_body_delimiters: Truncate emails after one of these lines - permission_add_subprojects: Create subprojects - label_subproject_new: New subproject - 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. - Are you sure you want to continue? - label_close_versions: Close completed versions - label_board_sticky: Sticky - label_board_locked: Locked - permission_export_wiki_pages: Export wiki pages - setting_cache_formatted_text: Cache formatted text - permission_manage_project_activities: Manage project activities - error_unable_delete_issue_status: Unable to delete issue status - label_profile: Profile - permission_manage_subtasks: Manage subtasks - field_parent_issue: Parent task - label_subtask_plural: Subtasks - label_project_copy_notifications: Send email notifications during the project copy - error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) - error_can_not_remove_role: This role is in use and can not be deleted. - error_can_not_delete_tracker: This tracker contains issues and can't be deleted. - 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 - 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. - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header + text_wiki_page_destroy_question: Bu sayfanın %{descendants} adet alt sayfası var. Ne yapmak istersiniz? + text_wiki_page_reassign_children: Alt sayfaları bu sayfanın altına bağla + text_wiki_page_nullify_children: Alt sayfaları ana sayfa olarak sakla + text_wiki_page_destroy_children: Alt sayfaları ve onların alt sayfalarını tamamen sil + setting_password_min_length: Minimum parola uzunluğu + field_group_by: Sonuçları grupla + mail_subject_wiki_content_updated: "'%{id}' wiki sayfası güncellendi" + label_wiki_content_added: Wiki sayfası eklendi + mail_subject_wiki_content_added: "'%{id}' wiki sayfası eklendi" + mail_body_wiki_content_added: "'%{id}' wiki sayfası, %{author} tarafından eklendi." + label_wiki_content_updated: Wiki sayfası güncellendi + mail_body_wiki_content_updated: "'%{id}' wiki sayfası, %{author} tarafından güncellendi." + permission_add_project: Proje oluştur + setting_new_project_user_role_id: Yönetici olmayan ancak proje yaratabilen kullanıcıya verilen rol + label_view_all_revisions: Tüm değişiklikleri gör + label_tag: Etiket + label_branch: Kol + error_no_tracker_in_project: Bu projeye bağlanmış bir iş tipi yok. Lütfen proje ayarlarını kontrol edin. + error_no_default_issue_status: Varsayılan iş durumu tanımlanmamış. Lütfen ayarlarınızı kontrol edin ("Yönetim -> İş durumları" sayfasına gidin). + label_group_plural: Gruplar + label_group: Grup + label_group_new: Yeni grup + label_time_entry_plural: Harcanan zaman + text_journal_changed: "%{label}: %{old} -> %{new}" + text_journal_set_to: "%{label} %{value} yapıldı" + text_journal_deleted: "%{label} silindi (%{old})" + text_journal_added: "%{label} %{value} eklendi" + field_active: Etkin + enumeration_system_activity: Sistem Etkinlikleri + permission_delete_issue_watchers: İzleyicileri sil + version_status_closed: kapalı + version_status_locked: kilitli + version_status_open: açık + error_can_not_reopen_issue_on_closed_version: Kapatılmış bir sürüme ait işler tekrar açılamaz + label_user_anonymous: Anonim + button_move_and_follow: Yerini değiştir ve takip et + setting_default_projects_modules: Yeni projeler için varsayılan modüller + setting_gravatar_default: Varsayılan Gravatar resmi + field_sharing: Paylaşım + label_version_sharing_hierarchy: Proje hiyerarşisi ile + label_version_sharing_system: Tüm projeler ile + label_version_sharing_descendants: Alt projeler ile + label_version_sharing_tree: Proje ağacı ile + label_version_sharing_none: Paylaşılmamış + error_can_not_archive_project: Bu proje arşivlenemez + button_duplicate: Yinele + button_copy_and_follow: Kopyala ve takip et + label_copy_source: Kaynak + setting_issue_done_ratio: İş tamamlanma oranını şununla hesapla + setting_issue_done_ratio_issue_status: İş durumunu kullan + error_issue_done_ratios_not_updated: İş tamamlanma oranları güncellenmedi. + error_workflow_copy_target: Lütfen hedef iş tipi ve rolleri seçin + setting_issue_done_ratio_issue_field: İşteki alanı kullan + label_copy_same_as_target: Hedef ile aynı + label_copy_target: Hedef + notice_issue_done_ratios_updated: İş tamamlanma oranları güncellendi. + error_workflow_copy_source: Lütfen kaynak iş tipi ve rolleri seçin + label_update_issue_done_ratios: İş tamamlanma oranlarını güncelle + setting_start_of_week: Takvimleri şundan başlat + permission_view_issues: İşleri Gör + label_display_used_statuses_only: Sadece bu iş tipi tarafından kullanılan durumları göster + label_revision_id: Değişiklik %{value} + label_api_access_key: API erişim anahtarı + label_api_access_key_created_on: API erişim anahtarı %{value} önce oluşturuldu + label_feeds_access_key: RSS erişim anahtarı + notice_api_access_key_reseted: API erişim anahtarınız sıfırlandı. + setting_rest_api_enabled: REST web servisini etkinleştir + label_missing_api_access_key: Bir API erişim anahtarı eksik + label_missing_feeds_access_key: Bir RSS erişim anahtarı eksik + button_show: Göster + text_line_separated: Çoklu değer girilebilir (her satıra bir değer). + setting_mail_handler_body_delimiters: Şu satırların birinden sonra e-postayı sonlandır + permission_add_subprojects: Alt proje yaratma + label_subproject_new: Yeni alt proje + text_own_membership_delete_confirmation: "Projeyi daha sonra düzenleyememenize sebep olacak bazı yetkilerinizi kaldırmak üzeresiniz.\nDevam etmek istediğinize emin misiniz?" + label_close_versions: Tamamlanmış sürümleri kapat + label_board_sticky: Yapışkan + label_board_locked: Kilitli + permission_export_wiki_pages: Wiki sayfalarını dışarı aktar + setting_cache_formatted_text: Biçimlendirilmiş metni önbelleğe al + permission_manage_project_activities: Proje etkinliklerini yönetme + error_unable_delete_issue_status: İş durumu silinemiyor + label_profile: Profil + permission_manage_subtasks: Alt işleri yönetme + field_parent_issue: Üst iş + label_subtask_plural: Alt işler + label_project_copy_notifications: Proje kopyalaması esnasında bilgilendirme e-postaları gönder + error_can_not_delete_custom_field: Özel alan silinemiyor + error_unable_to_connect: Bağlanılamıyor (%{value}) + error_can_not_remove_role: Bu rol kullanımda olduğundan silinemez. + error_can_not_delete_tracker: Bu iş tipi içerisinde iş barındırdığından silinemiyor. + field_principal: Temel + label_my_page_block: Kişisel sayfa bloğum + notice_failed_to_save_members: "Üyeler kaydedilemiyor: %{errors}." + text_zoom_out: Uzaklaş + text_zoom_in: Yakınlaş + notice_unable_delete_time_entry: Zaman kayıt girdisi silinemiyor. + label_overall_spent_time: Toplam harcanan zaman + field_time_entries: Zaman Kayıtları + project_module_gantt: İş-Zaman Çizelgesi + project_module_calendar: Takvim + button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}" + text_are_you_sure_with_children: İş, tüm alt işlerle birlikte silinsin mi? + field_text: Metin alanı + label_user_mail_option_only_owner: Sadece sahibi olduğum şeyler için + setting_default_notification_option: Varsayılan bildirim seçeneği + label_user_mail_option_only_my_events: Sadece takip ettiğim ya da içinde olduğum şeyler için + label_user_mail_option_only_assigned: Sadece bana atanan şeyler için + label_user_mail_option_none: Hiç bir şey için + field_member_of_group: Atananın grubu + field_assigned_to_role: Atananın rolü + notice_not_authorized_archived_project: Erişmeye çalıştığınız proje arşive kaldırılmış. + label_principal_search: "Kullanıcı ya da grup ara:" + label_user_search: "Kullanıcı ara:" + field_visible: Görünür + setting_emails_header: "E-Posta başlığı" + setting_commit_logtime_activity_id: Kaydedilen zaman için etkinlik + text_time_logged_by_changeset: Applied in changeset %{value}. + setting_commit_logtime_enabled: Zaman kaydını etkinleştir + 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: İş-Zaman çizelgesinde gösterilecek en fazla öğe sayısı + field_warn_on_leaving_unsaved: Kaydedilmemiş metin bulunan bir sayfadan çıkarken beni uyar + text_warn_on_leaving_unsaved: Bu sayfada terkettiğiniz takdirde kaybolacak kaydedilmemiş metinler var. + label_my_queries: Özel sorgularım + text_journal_changed_no_detail: "%{label} güncellendi" + label_news_comment_added: Bir habere yorum eklendi + button_expand_all: Tümünü genişlet + button_collapse_all: Tümünü daralt + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Seçilen zaman kayıtlarını toplu olarak düzenle + text_time_entries_destroy_confirmation: Seçilen zaman kaydını/kayıtlarını silmek istediğinize emin misiniz? + label_role_anonymous: Anonim + label_role_non_member: Üye Değil + label_issue_note_added: Not eklendi + label_issue_status_updated: Durum güncellendi + label_issue_priority_updated: Öncelik güncellendi + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: İşlerin görünürlüğü + label_issues_visibility_all: Tüm işler + permission_set_own_issues_private: Set own issues public or private + field_is_private: Özel + permission_set_issues_private: İşleri özel ya da genel olarak işaretleme + label_issues_visibility_public: Özel olmayan tüm işler + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Commit messages encoding + field_scm_path_encoding: Yol kodlaması(encoding) + text_scm_path_encoding_note: "Varsayılan: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Ana dizin + field_cvs_module: Modül + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Komut + text_scm_command_version: Sürüm + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/uk.yml.svn-base --- a/config/locales/.svn/text-base/uk.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/uk.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -16,7 +16,10 @@ 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 ] + order: + - :year + - :month + - :day time: formats: @@ -32,37 +35,37 @@ half_a_minute: "half a minute" less_than_x_seconds: one: "less than 1 second" - other: "less than {{count}} seconds" + other: "less than %{count} seconds" x_seconds: one: "1 second" - other: "{{count}} seconds" + other: "%{count} seconds" less_than_x_minutes: one: "less than a minute" - other: "less than {{count}} minutes" + other: "less than %{count} minutes" x_minutes: one: "1 minute" - other: "{{count}} minutes" + other: "%{count} minutes" about_x_hours: one: "about 1 hour" - other: "about {{count}} hours" + other: "about %{count} hours" x_days: one: "1 day" - other: "{{count}} days" + other: "%{count} days" about_x_months: one: "about 1 month" - other: "about {{count}} months" + other: "about %{count} months" x_months: one: "1 month" - other: "{{count}} months" + other: "%{count} months" about_x_years: one: "about 1 year" - other: "about {{count}} years" + other: "about %{count} years" over_x_years: one: "over 1 year" - other: "over {{count}} years" + other: "over %{count} years" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" number: format: @@ -92,6 +95,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "немає в списку" exclusion: "зарезервовано" @@ -106,11 +113,11 @@ taken: "вже використовується" not_a_number: "не є числом" not_a_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}}" + 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: "повинна бути пізніша за дату початку" @@ -148,24 +155,24 @@ notice_locking_conflict: Дані оновлено іншим користувачем. notice_scm_error: Запису та/або виправлення немає в репозиторії. notice_not_authorized: У вас немає прав для відвідини даної сторінки. - notice_email_sent: "Відправлено листа {{value}}" - notice_email_error: "Під час відправки листа відбулася помилка ({{value}})" + notice_email_sent: "Відправлено листа %{value}" + notice_email_error: "Під час відправки листа відбулася помилка (%{value})" notice_feeds_access_key_reseted: Ваш ключ доступу RSS було скинуто. - notice_failed_to_save_issues: "Не вдалося зберегти {{count}} пункт(ів) з {{total}} вибраних: {{ids}}." + notice_failed_to_save_issues: "Не вдалося зберегти %{count} пункт(ів) з %{total} вибраних: %{ids}." notice_no_issue_selected: "Не вибрано жодної задачі! Будь ласка, відзначте задачу, яку ви хочете відредагувати." notice_account_pending: "Ваш обліковий запис створено і він чекає на підтвердження адміністратором." - mail_subject_lost_password: "Ваш {{value}} пароль" + mail_subject_lost_password: "Ваш %{value} пароль" mail_body_lost_password: 'Для зміни пароля, зайдіть за наступним посиланням:' - mail_subject_register: "Активація облікового запису {{value}}" + mail_subject_register: "Активація облікового запису %{value}" mail_body_register: 'Для активації облікового запису, зайдіть за наступним посиланням:' - mail_body_account_information_external: "Ви можете використовувати ваш {{value}} обліковий запис для входу." + mail_body_account_information_external: "Ви можете використовувати ваш %{value} обліковий запис для входу." mail_body_account_information: Інформація по Вашому обліковому запису - mail_subject_account_activation_request: "Запит на активацію облікового запису {{value}}" - mail_body_account_activation_request: "Новий користувач ({{value}}) зареєструвався. Його обліковий запис чекає на ваше підтвердження:" + mail_subject_account_activation_request: "Запит на активацію облікового запису %{value}" + mail_body_account_activation_request: "Новий користувач (%{value}) зареєструвався. Його обліковий запис чекає на ваше підтвердження:" gui_validation_error: 1 помилка - gui_validation_error_plural: "{{count}} помилки(ок)" + gui_validation_error_plural: "%{count} помилки(ок)" field_name: Ім'я field_description: Опис @@ -227,7 +234,8 @@ field_attr_lastname: Атрибут Прізвище field_attr_mail: Атрибут Email field_onthefly: Створення користувача на льоту - field_done_ratio: % зроблено + field_start_date: Початок + field_done_ratio: "% зроблено" field_auth_source: Режим аутентифікації field_hide_mail: Приховувати мій email field_comments: Коментар @@ -284,14 +292,14 @@ label_x_projects: zero: no projects one: 1 project - other: "{{count}} projects" + other: "%{count} projects" label_project_all: Усі проекти label_project_latest: Останні проекти label_issue: Питання label_issue_new: Нові питання label_issue_plural: Питання label_issue_view_all: Проглянути всі питання - label_issues_by: "Питання за {{value}}" + label_issues_by: "Питання за %{value}" label_document: Документ label_document_new: Новий документ label_document_plural: Документи @@ -353,8 +361,8 @@ label_text: Довгий текст label_attribute: Атрибут label_attribute_plural: атрибути - label_download: "{{count}} Завантажено" - label_download_plural: "{{count}} Завантажень" + label_download: "%{count} Завантажено" + label_download_plural: "%{count} Завантажень" label_no_data: Немає даних для відображення label_change_status: Змінити статус label_history: Історія @@ -383,17 +391,17 @@ label_closed_issues: закрите label_closed_issues_plural: закриті label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{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" + other: "%{count} open" label_x_closed_issues_abbr: zero: 0 closed one: 1 closed - other: "{{count}} closed" + other: "%{count} closed" label_total: Всього label_permissions: Права доступу label_current_status: Поточний статус @@ -411,7 +419,7 @@ label_months_from: місяців(ця) з label_gantt: Діаграма Ганта label_internal: Внутрішній - label_last_changes: "останні {{count}} змін" + label_last_changes: "останні %{count} змін" label_change_view_all: Проглянути всі зміни label_personalize_page: Персоналізувати цю сторінку label_comment: Коментувати @@ -419,7 +427,7 @@ label_x_comments: zero: no comments one: 1 comment - other: "{{count}} comments" + other: "%{count} comments" label_comment_add: Залишити коментар label_comment_added: Коментар додано label_comment_delete: Видалити коментарі @@ -443,8 +451,8 @@ label_day_plural: днів(я) label_repository: Репозиторій label_browse: Проглянути - label_modification: "{{count}} зміна" - label_modification_plural: "{{count}} змін" + label_modification: "%{count} зміна" + label_modification_plural: "%{count} змін" label_revision: Версія label_revision_plural: Версій label_added: додано @@ -459,8 +467,8 @@ label_sort_lower: Вниз label_sort_lowest: У кінець label_roadmap: Оперативний план - label_roadmap_due_in: "Строк {{value}}" - label_roadmap_overdue: "{{value}} запізнення" + label_roadmap_due_in: "Строк %{value}" + label_roadmap_overdue: "%{value} запізнення" label_roadmap_no_issues: Немає питань для даної версії label_search: Пошук label_result_plural: Результати @@ -478,8 +486,8 @@ label_changes_details: Подробиці по всіх змінах label_issue_tracking: Координація питань label_spent_time: Витрачений час - label_f_hour: "{{value}} година" - label_f_hour_plural: "{{value}} годин(и)" + label_f_hour: "%{value} година" + label_f_hour_plural: "%{value} годин(и)" label_time_tracking: Облік часу label_change_plural: Зміни label_statistics: Статистика @@ -526,12 +534,12 @@ label_date_from: З label_date_to: Кому label_language_based: На основі мови користувача - label_sort_by: "Сортувати за {{value}}" + label_sort_by: "Сортувати за %{value}" label_send_test_email: Послати email для перевірки - label_feeds_access_key_created_on: "Ключ доступу RSS створений {{value}} назад " + label_feeds_access_key_created_on: "Ключ доступу RSS створений %{value} назад " label_module_plural: Модулі - label_added_time_by: "Доданий {{author}} {{age}} назад" - label_updated_time: "Оновлений {{value}} назад" + label_added_time_by: "Доданий %{author} %{age} назад" + label_updated_time: "Оновлений %{value} назад" label_jump_to_a_project: Перейти до проекту... label_file_plural: Файли label_changeset_plural: Набори змін @@ -599,17 +607,17 @@ text_tip_issue_end_day: день завершення задачі text_tip_issue_begin_end_day: початок задачі і закінчення цього дня text_project_identifier_info: 'Рядкові букви (a-z), допустимі цифри і дефіс.
    Збережений ідентифікатор не може бути змінений.' - text_caracters_maximum: "{{count}} символів(а) максимум." - text_caracters_minimum: "Повинно мати якнайменше {{count}} символів(а) у довжину." - text_length_between: "Довжина між {{min}} і {{max}} символів." + text_caracters_maximum: "%{count} символів(а) максимум." + text_caracters_minimum: "Повинно мати якнайменше %{count} символів(а) у довжину." + text_length_between: "Довжина між %{min} і %{max} символів." text_tracker_no_workflow: Для цього координатора послідовність дій не визначена text_unallowed_characters: Заборонені символи text_comma_separated: Допустимі декілька значень (розділені комою). text_issues_ref_in_commit_messages: Посилання та зміна питань у повідомленнях до подавань - text_issue_added: "Issue {{id}} has been reported by {{author}}." - text_issue_updated: "Issue {{id}} has been updated by {{author}}." + text_issue_added: "Issue %{id} has been reported by %{author}." + text_issue_updated: "Issue %{id} has been updated by %{author}." text_wiki_destroy_confirmation: Ви впевнені, що хочете видалити цю wiki і весь зміст? - text_issue_category_destroy_question: "Декілька питань ({{count}}) призначено в цю категорію. Що ви хочете зробити?" + text_issue_category_destroy_question: "Декілька питань (%{count}) призначено в цю категорію. Що ви хочете зробити?" text_issue_category_destroy_assignments: Видалити призначення категорії text_issue_category_reassign_to: Перепризначити задачі до даної категорії text_user_mail_option: "Для невибраних проектів ви отримуватимете повідомлення тільки про те, що проглядаєте або в чому берете участь (наприклад, питання автором яких ви є або які вам призначені)." @@ -639,8 +647,8 @@ enumeration_issue_priorities: Пріоритети питань enumeration_doc_categories: Категорії документів enumeration_activities: Дії (облік часу) - text_status_changed_by_changeset: "Applied in changeset {{value}}." - label_display_per_page: "Per page: {{value}}" + text_status_changed_by_changeset: "Applied in changeset %{value}." + label_display_per_page: "Per page: %{value}" label_issue_added: Issue added label_issue_updated: Issue updated setting_per_page_options: Objects per page options @@ -650,7 +658,7 @@ label_document_added: Document added label_message_posted: Message added text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s) ?' - error_scm_command_failed: "An error occurred when trying to access the repository: {{value}}" + error_scm_command_failed: "An error occurred when trying to access the repository: %{value}" setting_user_format: Users display format label_age: Age label_file_added: File added @@ -666,7 +674,7 @@ 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." label_news_added: News added label_repository_plural: Repositories - error_can_t_load_default_data: "Default configuration could not be loaded: {{value}}" + error_can_t_load_default_data: "Default configuration could not be loaded: %{value}" project_module_boards: Boards project_module_issue_tracking: Issue tracking project_module_wiki: Wiki @@ -683,7 +691,7 @@ label_ldap_authentication: LDAP authentication label_downloads_abbr: D/L label_this_month: this month - label_last_n_days: "last {{count}} days" + label_last_n_days: "last %{count} days" label_all_time: all time label_this_year: this year label_date_range: Date range @@ -692,7 +700,7 @@ label_last_month: last month label_add_another_file: Add another file label_optional_description: Optional description - 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_question: "%{hours} hours were reported on the issues you are about to delete. What do you want to do ?" error_issue_not_found_in_project: 'The issue was not found or does not belong to this project' text_assign_time_entries_to_project: Assign reported hours to the project text_destroy_time_entries: Delete reported hours @@ -707,23 +715,22 @@ setting_default_projects_public: New projects are public by default error_scm_annotate: "The entry does not exist or can not be annotated." label_planning: Planning - text_subprojects_destroy_warning: "Its subproject(s): {{value}} will be also deleted." - label_and_its_subprojects: "{{value}} and its subprojects" - mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:" - mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days" - text_user_wrote: "{{value}} wrote:" + text_subprojects_destroy_warning: "Its subproject(s): %{value} will be also deleted." + label_and_its_subprojects: "%{value} and its subprojects" + mail_body_reminder: "%{count} issue(s) that are assigned to you are due in the next %{days} days:" + mail_subject_reminder: "%{count} issue(s) due in the next %{days} days" + text_user_wrote: "%{value} wrote:" label_duplicated_by: duplicated by setting_enabled_scm: Enabled SCM text_enumeration_category_reassign_to: 'Reassign them to this value:' - text_enumeration_destroy_question: "{{count}} objects are assigned to this value." + text_enumeration_destroy_question: "%{count} objects are assigned to this value." label_incoming_emails: Incoming emails 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 button_quote: Quote setting_sequential_project_identifiers: Generate sequential project identifiers notice_unable_delete_version: Unable to delete version @@ -781,12 +788,12 @@ 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: Edit own messages permission_delete_own_messages: Delete own messages - label_user_activity: "{{value}}'s activity" - label_updated_time_by: "Updated by {{author}} {{age}} ago" + label_user_activity: "%{value}'s activity" + label_updated_time_by: "Updated by %{author} %{age} ago" text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' setting_diff_max_lines_displayed: Max number of diff lines displayed text_plugin_assets_writable: Plugin assets directory writable - warning_attachments_not_saved: "{{count}} file(s) could not be saved." + warning_attachments_not_saved: "%{count} file(s) could not be saved." button_create_and_continue: Create and continue text_custom_field_possible_values_info: 'One line for each value' label_display: Display @@ -801,21 +808,21 @@ label_descending: Descending label_sort: Sort label_ascending: Ascending - label_date_from_to: From {{start}} to {{end}} + label_date_from_to: From %{start} to %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? + text_wiki_page_destroy_question: This page has %{descendants} child page(s) and descendant(s). What do you want to do? text_wiki_page_reassign_children: Reassign child pages to this parent page text_wiki_page_nullify_children: Keep child pages as root pages text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated" label_wiki_content_added: Wiki page added - 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_added: "'%{id}' wiki page has been added" + mail_body_wiki_content_added: The '%{id}' wiki page has been added by %{author}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '%{id}' wiki page has been updated by %{author}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -823,14 +830,14 @@ label_branch: Branch 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"). - 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_changed: "%{label} changed from %{old} to %{new}" + text_journal_set_to: "%{label} set to %{value}" + text_journal_deleted: "%{label} deleted (%{old})" label_group_plural: Groups label_group: Group label_group_new: New group label_time_entry_plural: Spent time - text_journal_added: "{{label}} {{value}} added" + text_journal_added: "%{label} %{value} added" field_active: Active enumeration_system_activity: System Activity permission_delete_issue_watchers: Delete watchers @@ -865,9 +872,9 @@ setting_start_of_week: Start calendars on permission_view_issues: View Issues label_display_used_statuses_only: Only display statuses that are used by this tracker - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_api_access_key: API access key - label_api_access_key_created_on: API access key created {{value}} ago + label_api_access_key_created_on: API access key created %{value} ago label_feeds_access_key: RSS access key notice_api_access_key_reseted: Your API access key was reset. setting_rest_api_enabled: Enable REST web service @@ -894,12 +901,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -907,7 +914,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -918,8 +925,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Commit messages encoding + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/vi.yml.svn-base --- a/config/locales/.svn/text-base/vi.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/vi.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -66,37 +66,37 @@ half_a_minute: "30 giây" less_than_x_seconds: one: "chưa tới 1 giây" - other: "chưa tới {{count}} giây" + other: "chưa tới %{count} giây" x_seconds: one: "1 giây" - other: "{{count}} giây" + other: "%{count} giây" less_than_x_minutes: one: "chưa tới 1 phút" - other: "chưa tới {{count}} phút" + other: "chưa tới %{count} phút" x_minutes: one: "1 phút" - other: "{{count}} phút" + other: "%{count} phút" about_x_hours: one: "khoảng 1 giờ" - other: "khoảng {{count}} giờ" + other: "khoảng %{count} giờ" x_days: one: "1 ngày" - other: "{{count}} ngày" + other: "%{count} ngày" about_x_months: one: "khoảng 1 tháng" - other: "khoảng {{count}} tháng" + other: "khoảng %{count} tháng" x_months: one: "1 tháng" - other: "{{count}} tháng" + other: "%{count} tháng" about_x_years: one: "khoảng 1 năm" - other: "khoảng {{count}} năm" + other: "khoảng %{count} năm" over_x_years: one: "hơn 1 năm" - other: "hơn {{count}} năm" + other: "hơn %{count} năm" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" prompts: year: "Năm" month: "Tháng" @@ -109,8 +109,8 @@ errors: template: header: - one: "1 lỗi ngăn không cho lưu {{model}} này" - other: "{{count}} lỗi ngăn không cho lưu {{model}} này" + one: "1 lỗi ngăn không cho lưu %{model} này" + other: "%{count} lỗi ngăn không cho lưu %{model} này" # The variable :count is also available body: "Có lỗi với các mục sau:" @@ -124,16 +124,16 @@ accepted: "phải được đồng ý" empty: "không thể rỗng" blank: "không thể để trắng" - too_long: "quá dài (tối đa {{count}} ký tự)" - too_short: "quá ngắn (tối thiểu {{count}} ký tự)" - wrong_length: "độ dài không đúng (phải là {{count}} ký tự)" + too_long: "quá dài (tối đa %{count} ký tự)" + too_short: "quá ngắn (tối thiểu %{count} ký tự)" + wrong_length: "độ dài không đúng (phải là %{count} ký tự)" taken: "đã có" not_a_number: "không phải là số" - greater_than: "phải lớn hơn {{count}}" - greater_than_or_equal_to: "phải lớn hơn hoặc bằng {{count}}" - equal_to: "phải bằng {{count}}" - less_than: "phải nhỏ hơn {{count}}" - less_than_or_equal_to: "phải nhỏ hơn hoặc bằng {{count}}" + greater_than: "phải lớn hơn %{count}" + greater_than_or_equal_to: "phải lớn hơn hoặc bằng %{count}" + equal_to: "phải bằng %{count}" + less_than: "phải nhỏ hơn %{count}" + less_than_or_equal_to: "phải nhỏ hơn hoặc bằng %{count}" odd: "phải là số chẵn" even: "phải là số lẻ" greater_than_start_date: "phải đi sau ngày bắt đầu" @@ -158,7 +158,10 @@ month_names: [~, "Tháng một", "Tháng hai", "Tháng ba", "Tháng tư", "Tháng năm", "Tháng sáu", "Tháng bảy", "Tháng tám", "Tháng chín", "Tháng mười", "Tháng mười một", "Tháng mười hai"] abbr_month_names: [~, "Tháng một", "Tháng hai", "Tháng ba", "Tháng tư", "Tháng năm", "Tháng sáu", "Tháng bảy", "Tháng tám", "Tháng chín", "Tháng mười", "Tháng mười một", "Tháng mười hai"] # Used in date_select and datime_select. - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -177,7 +180,7 @@ last_word_connector: ", và " actionview_instancetag_blank_option: Vui lòng chọn - + general_text_No: 'Không' general_text_Yes: 'Có' general_text_no: 'không' @@ -188,7 +191,7 @@ general_csv_encoding: UTF-8 general_pdf_encoding: UTF-8 general_first_day_of_week: '1' - + notice_account_updated: Cập nhật tài khoản thành công. notice_account_invalid_creditentials: Tài khoản hoặc mật mã không hợp lệ notice_account_password_updated: Cập nhật mật mã thành công. @@ -205,34 +208,34 @@ notice_file_not_found: Trang bạn cố xem không tồn tại hoặc đã chuyển. notice_locking_conflict: Thông tin đang được cập nhật bởi người khác. Hãy chép nội dung cập nhật của bạn vào clipboard. notice_not_authorized: Bạn không có quyền xem trang này. - notice_email_sent: "Email đã được gửi tới {{value}}" - notice_email_error: "Lỗi xảy ra khi gửi email ({{value}})" + notice_email_sent: "Email đã được gửi tới %{value}" + notice_email_error: "Lỗi xảy ra khi gửi email (%{value})" notice_feeds_access_key_reseted: Mã số chứng thực RSS đã được tạo lại. - notice_failed_to_save_issues: "Failed to save {{count}} issue(s) on {{total}} selected: {{ids}}." + 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: "Thông tin tài khoản đã được tạo ra và đang chờ chứng thực từ ban quản trị." notice_default_data_loaded: Đã nạp cấu hình mặc định. notice_unable_delete_version: Không thể xóa phiên bản. - error_can_t_load_default_data: "Không thể nạp cấu hình mặc định: {{value}}" + error_can_t_load_default_data: "Không thể nạp cấu hình mặc định: %{value}" error_scm_not_found: "The entry or revision was not found in the repository." - error_scm_command_failed: "Lỗi xảy ra khi truy cập vào kho lưu trữ: {{value}}" + error_scm_command_failed: "Lỗi xảy ra khi truy cập vào kho lưu trữ: %{value}" error_scm_annotate: "The entry does not exist or can not be annotated." error_issue_not_found_in_project: 'Vấn đề không tồn tại hoặc không thuộc dự án' - mail_subject_lost_password: "{{value}}: mật mã của bạn" + mail_subject_lost_password: "%{value}: mật mã của bạn" mail_body_lost_password: "Để đổi mật mã, hãy click chuột vào liên kết sau:" - mail_subject_register: "{{value}}: kích hoạt tài khoản" + mail_subject_register: "%{value}: kích hoạt tài khoản" mail_body_register: "Để kích hoạt tài khoản, hãy click chuột vào liên kết sau:" - mail_body_account_information_external: " Bạn có thể dùng tài khoản {{value}} để đăng nhập." + mail_body_account_information_external: " Bạn có thể dùng tài khoản %{value} để đăng nhập." mail_body_account_information: Thông tin về tài khoản - mail_subject_account_activation_request: "{{value}}: Yêu cầu chứng thực tài khoản" - mail_body_account_activation_request: "Người dùng ({{value}}) mới đăng ký và cần bạn xác nhận:" - mail_subject_reminder: "{{count}} vấn đề hết hạn trong các {{days}} ngày tới" - mail_body_reminder: "{{count}} vấn đề gán cho bạn sẽ hết hạn trong {{days}} ngày tới:" + mail_subject_account_activation_request: "%{value}: Yêu cầu chứng thực tài khoản" + mail_body_account_activation_request: "Người dùng (%{value}) mới đăng ký và cần bạn xác nhận:" + mail_subject_reminder: "%{count} vấn đề hết hạn trong các %{days} ngày tới" + mail_body_reminder: "%{count} vấn đề gán cho bạn sẽ hết hạn trong %{days} ngày tới:" gui_validation_error: 1 lỗi - gui_validation_error_plural: "{{count}} lỗi" + gui_validation_error_plural: "%{count} lỗi" field_name: Tên field_description: Mô tả @@ -294,6 +297,7 @@ field_attr_lastname: Lastname attribute field_attr_mail: Email attribute field_onthefly: On-the-fly user creation + field_start_date: Bắt đầu field_done_ratio: Tiến độ field_auth_source: Authentication mode field_hide_mail: Không làm lộ email của bạn @@ -343,7 +347,6 @@ setting_cross_project_issue_relations: Cho phép quan hệ chéo giữa các dự án 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: Chữ ký cuối thư setting_protocol: Giao thức setting_per_page_options: Objects per page options @@ -373,14 +376,14 @@ label_x_projects: zero: no projects one: 1 project - other: "{{count}} projects" + other: "%{count} projects" label_project_all: Mọi dự án label_project_latest: Dự án mới nhất label_issue: Vấn đề label_issue_new: Tạo vấn đề mới label_issue_plural: Vấn đề label_issue_view_all: Tất cả vấn đề - label_issues_by: "Vấn đề của {{value}}" + label_issues_by: "Vấn đề của %{value}" label_issue_added: Đã thêm vấn đề label_issue_updated: Vấn đề được cập nhật label_document: Tài liệu @@ -436,7 +439,7 @@ label_auth_source_new: New authentication mode label_auth_source_plural: Authentication modes label_subproject_plural: Dự án con - label_and_its_subprojects: "{{value}} và dự án con" + label_and_its_subprojects: "%{value} và dự án con" label_min_max_length: Min - Max length label_list: List label_date: Ngày @@ -447,8 +450,8 @@ label_text: Long text label_attribute: Attribute label_attribute_plural: Attributes - label_download: "{{count}} lần tải" - label_download_plural: "{{count}} lần tải" + label_download: "%{count} lần tải" + label_download_plural: "%{count} lần tải" label_no_data: Chưa có thông tin gì label_change_status: Đổi trạng thái label_history: Lược sử @@ -479,17 +482,17 @@ label_closed_issues: đóng label_closed_issues_plural: đóng label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{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" + other: "%{count} open" label_x_closed_issues_abbr: zero: 0 closed one: 1 closed - other: "{{count}} closed" + other: "%{count} closed" label_total: Tổng cộng label_permissions: Quyền label_current_status: Trạng thái hiện tại @@ -507,7 +510,7 @@ label_months_from: tháng từ label_gantt: Biểu đồ sự kiện label_internal: Nội bộ - label_last_changes: "{{count}} thay đổi cuối" + label_last_changes: "%{count} thay đổi cuối" label_change_view_all: Xem mọi thay đổi label_personalize_page: Điều chỉnh trang này label_comment: Bình luận @@ -515,7 +518,7 @@ label_x_comments: zero: no comments one: 1 comment - other: "{{count}} comments" + other: "%{count} comments" label_comment_add: Thêm bình luận label_comment_added: Đã thêm bình luận label_comment_delete: Xóa bình luận @@ -534,7 +537,7 @@ label_yesterday: hôm qua label_this_week: tuần này label_last_week: tuần trước - label_last_n_days: "{{count}} ngày cuối" + label_last_n_days: "%{count} ngày cuối" label_this_month: tháng này label_last_month: tháng cuối label_this_year: năm này @@ -548,8 +551,8 @@ label_repository: Kho lưu trữ label_repository_plural: Kho lưu trữ label_browse: Duyệt - label_modification: "{{count}} thay đổi" - label_modification_plural: "{{count}} thay đổi" + label_modification: "%{count} thay đổi" + label_modification_plural: "%{count} thay đổi" label_revision: Bản điều chỉnh label_revision_plural: Bản điều chỉnh label_associated_revisions: Associated revisions @@ -567,8 +570,8 @@ label_sort_lower: Dịch xuống label_sort_lowest: Xuống dưới cùng label_roadmap: Kế hoạch - label_roadmap_due_in: "Hết hạn trong {{value}}" - label_roadmap_overdue: "Trễ {{value}}" + label_roadmap_due_in: "Hết hạn trong %{value}" + label_roadmap_overdue: "Trễ %{value}" label_roadmap_no_issues: Không có vấn đề cho phiên bản này label_search: Tìm label_result_plural: Kết quả @@ -586,8 +589,8 @@ label_changes_details: Chi tiết của mọi thay đổi label_issue_tracking: Vấn đề label_spent_time: Thời gian - label_f_hour: "{{value}} giờ" - label_f_hour_plural: "{{value}} giờ" + label_f_hour: "%{value} giờ" + label_f_hour_plural: "%{value} giờ" label_time_tracking: Theo dõi thời gian label_change_plural: Thay đổi label_statistics: Thống kê @@ -636,12 +639,12 @@ label_date_from: Từ label_date_to: Đến label_language_based: Theo ngôn ngữ người dùng - label_sort_by: "Sắp xếp theo {{value}}" + label_sort_by: "Sắp xếp theo %{value}" label_send_test_email: Send a test email - label_feeds_access_key_created_on: "Mã chứng thực RSS được tạo ra cách đây {{value}}" + label_feeds_access_key_created_on: "Mã chứng thực RSS được tạo ra cách đây %{value}" label_module_plural: Mô-đun - label_added_time_by: "thêm bởi {{author}} cách đây {{age}}" - label_updated_time: "Cập nhật cách đây {{value}}" + label_added_time_by: "thêm bởi %{author} cách đây %{age}" + label_updated_time: "Cập nhật cách đây %{value}" label_jump_to_a_project: Nhảy đến dự án... label_file_plural: Tập tin label_changeset_plural: Thay đổi @@ -657,7 +660,7 @@ 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: "mỗi trang: {{value}}" + label_display_per_page: "mỗi trang: %{value}" label_age: Age label_change_properties: Thay đổi thuộc tính label_general: Tổng quan @@ -723,43 +726,43 @@ text_regexp_info: eg. ^[A-Z0-9]+$ text_min_max_length_info: 0 để chỉ không hạn chế 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_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: Bạn chắc chứ? text_tip_issue_begin_day: ngày bắt đầu text_tip_issue_end_day: ngày kết thúc text_tip_issue_begin_end_day: bắt đầu và kết thúc cùng ngày text_project_identifier_info: 'Chỉ cho phép chữ cái thường (a-z), con số và dấu gạch ngang.
    Sau khi lưu, chỉ số ID không thể thay đổi.' - text_caracters_maximum: "Tối đa {{count}} ký tự." - text_caracters_minimum: "Phải gồm ít nhất {{count}} ký tự." - text_length_between: "Length between {{min}} and {{max}} characters." + text_caracters_maximum: "Tối đa %{count} ký tự." + text_caracters_minimum: "Phải gồm ít nhất %{count} ký tự." + text_length_between: "Length between %{min} and %{max} characters." text_tracker_no_workflow: No workflow defined for this tracker text_unallowed_characters: Ký tự không hợp lệ text_comma_separated: Multiple values allowed (comma separated). 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_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_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: "Với các dự án không được chọn, bạn chỉ có thể nhận được thông báo về các vấn đề bạn đăng ký theo dõi hoặc có liên quan đến bạn (chẳng hạn, vấn đề được gán cho bạn)." 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_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: 'Chọn các mô-đun cho dự án:' text_default_administrator_account_changed: Default administrator account changed text_file_repository_writable: File repository 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_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_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 @@ -840,12 +843,12 @@ label_example: Ví dụ text_repository_usernames_mapping: "Chọn hoặc cập nhật ánh xạ người dùng hệ thống với người dùng trong kho lưu trữ.\nNhững trường hợp trùng hợp về tên và email sẽ được tự động ánh xạ." permission_delete_own_messages: Delete own messages - label_user_activity: "{{value}}'s activity" - label_updated_time_by: "Updated by {{author}} {{age}} ago" + label_user_activity: "%{value}'s activity" + label_updated_time_by: "Updated by %{author} %{age} ago" text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' setting_diff_max_lines_displayed: Max number of diff lines displayed text_plugin_assets_writable: Plugin assets directory writable - warning_attachments_not_saved: "{{count}} file(s) could not be saved." + warning_attachments_not_saved: "%{count} file(s) could not be saved." button_create_and_continue: Create and continue text_custom_field_possible_values_info: 'One line for each value' label_display: Display @@ -860,21 +863,21 @@ label_descending: Descending label_sort: Sort label_ascending: Ascending - label_date_from_to: From {{start}} to {{end}} + label_date_from_to: From %{start} to %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? + text_wiki_page_destroy_question: This page has %{descendants} child page(s) and descendant(s). What do you want to do? text_wiki_page_reassign_children: Reassign child pages to this parent page text_wiki_page_nullify_children: Keep child pages as root pages text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated" label_wiki_content_added: Wiki page added - 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_added: "'%{id}' wiki page has been added" + mail_body_wiki_content_added: The '%{id}' wiki page has been added by %{author}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '%{id}' wiki page has been updated by %{author}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -882,14 +885,14 @@ label_branch: Branch 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"). - 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_changed: "%{label} changed from %{old} to %{new}" + text_journal_set_to: "%{label} set to %{value}" + text_journal_deleted: "%{label} deleted (%{old})" label_group_plural: Groups label_group: Group label_group_new: New group label_time_entry_plural: Spent time - text_journal_added: "{{label}} {{value}} added" + text_journal_added: "%{label} %{value} added" field_active: Active enumeration_system_activity: System Activity permission_delete_issue_watchers: Delete watchers @@ -924,9 +927,9 @@ setting_start_of_week: Start calendars on permission_view_issues: View Issues label_display_used_statuses_only: Only display statuses that are used by this tracker - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_api_access_key: API access key - label_api_access_key_created_on: API access key created {{value}} ago + label_api_access_key_created_on: API access key created %{value} ago label_feeds_access_key: RSS access key notice_api_access_key_reseted: Your API access key was reset. setting_rest_api_enabled: Enable REST web service @@ -953,12 +956,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -966,7 +969,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -977,8 +980,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Commit messages encoding + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/zh-TW.yml.svn-base --- a/config/locales/.svn/text-base/zh-TW.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/zh-TW.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -20,7 +20,10 @@ month_names: [~, 一月, 二月, 三月, 四月, 五月, 六月, 七月, 八月, 九月, 十月, 十一月, 十二月] abbr_month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月] # 使用於 date_select 與 datime_select. - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -104,37 +107,37 @@ half_a_minute: "半分鐘" less_than_x_seconds: one: "小於 1 秒" - other: "小於 {{count}} 秒" + other: "小於 %{count} 秒" x_seconds: one: "1 秒" - other: "{{count}} 秒" + other: "%{count} 秒" less_than_x_minutes: one: "小於 1 分鐘" - other: "小於 {{count}} 分鐘" + other: "小於 %{count} 分鐘" x_minutes: one: "1 分鐘" - other: "{{count}} 分鐘" + other: "%{count} 分鐘" about_x_hours: one: "約 1 小時" - other: "約 {{count}} 小時" + other: "約 %{count} 小時" x_days: one: "1 天" - other: "{{count}} 天" + other: "%{count} 天" about_x_months: one: "約 1 個月" - other: "約 {{count}} 個月" + other: "約 %{count} 個月" x_months: one: "1 個月" - other: "{{count}} 個月" + other: "%{count} 個月" about_x_years: one: "約 1 年" - other: "約 {{count}} 年" + other: "約 %{count} 年" over_x_years: one: "超過 1 年" - other: "超過 {{count}} 年" + other: "超過 %{count} 年" almost_x_years: one: "將近 1 年" - other: "將近 {{count}} 年" + other: "將近 %{count} 年" prompts: year: "年" month: "月" @@ -147,8 +150,8 @@ errors: template: header: - one: "有 1 個錯誤發生使得「{{model}}」無法被儲存。" - other: "有 {{count}} 個錯誤發生使得「{{model}}」無法被儲存。" + one: "有 1 個錯誤發生使得「%{model}」無法被儲存。" + other: "有 %{count} 個錯誤發生使得「%{model}」無法被儲存。" # The variable :count is also available body: "下面所列欄位有問題:" # The values :model, :attribute and :value are always available for interpolation @@ -161,23 +164,23 @@ accepted: "必须是可被接受的" empty: "不能留空" blank: "不能是空白字元" - too_long: "過長(最長是 {{count}} 個字)" - too_short: "過短(最短是 {{count}} 個字)" - wrong_length: "字數錯誤(必須是 {{count}} 個字)" + too_long: "過長(最長是 %{count} 個字)" + too_short: "過短(最短是 %{count} 個字)" + wrong_length: "字數錯誤(必須是 %{count} 個字)" taken: "已經被使用" not_a_number: "不是數字" - greater_than: "必須大於 {{count}}" - greater_than_or_equal_to: "必須大於或等於 {{count}}" - equal_to: "必須等於 {{count}}" - less_than: "必須小於 {{count}}" - less_than_or_equal_to: "必須小於或等於 {{count}}" + greater_than: "必須大於 %{count}" + greater_than_or_equal_to: "必須大於或等於 %{count}" + equal_to: "必須等於 %{count}" + less_than: "必須小於 %{count}" + less_than_or_equal_to: "必須小於或等於 %{count}" odd: "必須是奇數" even: "必須是偶數" # Append your own errors here or at the model/attributes scope. greater_than_start_date: "必須在開始日期之後" not_same_project: "不屬於同一個專案" circular_dependency: "這個關聯會導致環狀相依" - cant_link_an_issue_with_a_descendant: "項目無法被連結至自己的子項目" + cant_link_an_issue_with_a_descendant: "項目無法被連結至自己的子任務" # You can define own errors for models or model attributes. # The values :model, :attribute and :value are always available for interpolation. @@ -185,7 +188,7 @@ # For example, # models: # user: - # blank: "This is a custom blank message for {{model}}: {{attribute}}" + # blank: "This is a custom blank message for %{model}: %{attribute}" # attributes: # login: # blank: "This is a custom blank message for User login" @@ -236,23 +239,24 @@ notice_locking_conflict: 資料已被其他使用者更新。 notice_not_authorized: 你未被授權存取此頁面。 notice_not_authorized_archived_project: 您欲存取的專案已經被歸檔封存。 - notice_email_sent: "郵件已經成功寄送至以下收件者: {{value}}" - notice_email_error: "寄送郵件的過程中發生錯誤 ({{value}})" + 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_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: "在 SCM 儲存庫中找不到這個項目或版次。" - error_scm_command_failed: "嘗試存取 SCM 儲存庫時發生錯誤: {{value}}" - error_scm_annotate: "SCM 儲存庫中無此項目或此項目無法被加註。" + 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: '尚未定義項目狀態的預設值。請您前往「網站管理」->「項目狀態清單」頁面,檢查相關組態設定。' @@ -265,26 +269,26 @@ error_workflow_copy_source: '請選擇一個來源項目追蹤標籤或角色' error_workflow_copy_target: '請選擇一個(或多個)目的項目追蹤標籤或角色' error_unable_delete_issue_status: '無法刪除項目狀態' - error_unable_to_connect: "無法連線至({{value}})" - warning_attachments_not_saved: "{{count}} 個附加檔案無法被儲存。" + error_unable_to_connect: "無法連線至(%{value})" + warning_attachments_not_saved: "%{count} 個附加檔案無法被儲存。" mail_subject_lost_password: 您的 Redmine 網站密碼 mail_body_lost_password: '欲變更您的 Redmine 網站密碼, 請點選以下鏈結:' mail_subject_register: 啟用您的 Redmine 帳號 mail_body_register: '欲啟用您的 Redmine 帳號, 請點選以下鏈結:' - mail_body_account_information_external: "您可以使用 {{value}} 帳號登入 Redmine 網站。" + mail_body_account_information_external: "您可以使用 %{value} 帳號登入 Redmine 網站。" mail_body_account_information: 您的 Redmine 帳號資訊 mail_subject_account_activation_request: Redmine 帳號啟用需求通知 - mail_body_account_activation_request: "有位新用戶 ({{value}}) 已經完成註冊,正等候您的審核:" - mail_subject_reminder: "您有 {{count}} 個項目即將到期 ({{days}})" - mail_body_reminder: "{{count}} 個指派給您的項目,將於 {{days}} 天之內到期:" - mail_subject_wiki_content_added: "'{{id}}' wiki 頁面已被新增" - mail_body_wiki_content_added: "The '{{id}}' wiki 頁面已被 {{author}} 新增。" - mail_subject_wiki_content_updated: "'{{id}}' wiki 頁面已被更新" - mail_body_wiki_content_updated: "The '{{id}}' wiki 頁面已被 {{author}} 更新。" + mail_body_account_activation_request: "有位新用戶 (%{value}) 已經完成註冊,正等候您的審核:" + mail_subject_reminder: "您有 %{count} 個項目即將到期 (%{days})" + mail_body_reminder: "%{count} 個指派給您的項目,將於 %{days} 天之內到期:" + mail_subject_wiki_content_added: "'%{id}' wiki 頁面已被新增" + mail_body_wiki_content_added: "此 '%{id}' wiki 頁面已被 %{author} 新增。" + mail_subject_wiki_content_updated: "'%{id}' wiki 頁面已被更新" + mail_body_wiki_content_updated: "此 '%{id}' wiki 頁面已被 %{author} 更新。" gui_validation_error: 1 個錯誤 - gui_validation_error_plural: "{{count}} 個錯誤" + gui_validation_error_plural: "%{count} 個錯誤" field_name: 名稱 field_description: 概述 @@ -352,7 +356,7 @@ field_done_ratio: 完成百分比 field_auth_source: 認證模式 field_hide_mail: 隱藏我的電子郵件 - field_comments: 註解 + field_comments: 回應 field_url: 網址 field_start_page: 首頁 field_subproject: 子專案 @@ -371,7 +375,7 @@ field_time_zone: 時區 field_searchable: 可用做搜尋條件 field_default_value: 預設值 - field_comments_sorting: 註解排序 + field_comments_sorting: 回應排序 field_parent_title: 父頁面 field_editable: 可編輯 field_watcher: 觀察者 @@ -379,10 +383,20 @@ field_content: 內容 field_group_by: 結果分組方式 field_sharing: 共用 - field_parent_issue: 父工作項目 + field_parent_issue: 父任務 field_member_of_group: "被指派者的群組" field_assigned_to_role: "被指派者的角色" field_text: 內容文字 + field_visible: 可被看見 + field_warn_on_leaving_unsaved: "提醒我將要離開的頁面中尚有未儲存的資料" + field_issues_visibility: 項目可見度 + field_is_private: 私人 + field_commit_logs_encoding: 認可訊息編碼 + field_scm_path_encoding: 路徑編碼 + field_path_to_repository: 儲存機制路徑 + field_root_directory: 根資料夾 + field_cvsroot: CVSROOT + field_cvs_module: 模組 setting_app_title: 標題 setting_app_subtitle: 副標題 @@ -399,18 +413,18 @@ setting_text_formatting: 文字格式 setting_wiki_compression: 壓縮 Wiki 歷史文章 setting_feeds_limit: RSS 新聞限制 - setting_autofetch_changesets: 自動取得送交版次 + setting_autofetch_changesets: 自動擷取認可 setting_default_projects_public: 新建立之專案預設為「公開」 - setting_sys_api_enabled: 啟用管理版本庫之網頁服務 (Web Service) - setting_commit_ref_keywords: 送交用於參照項目之關鍵字 - setting_commit_fix_keywords: 送交用於修正項目之關鍵字 + setting_sys_api_enabled: 啟用管理儲存機制的網頁服務 (Web Service) + 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: 每頁顯示個數選項 @@ -426,7 +440,7 @@ setting_gravatar_default: 預設全球認證大頭像圖片 setting_diff_max_lines_displayed: 差異顯示行數之最大值 setting_file_max_size_displayed: 檔案內容顯示大小之最大值 - setting_repository_log_display_limit: 版次顯示數目之最大值 + setting_repository_log_display_limit: 修訂版顯示數目之最大值 setting_openid: 允許使用 OpenID 登入與註冊 setting_password_min_length: 密碼最小長度 setting_new_project_user_role_id: 管理者以外之用戶建立新專案時,將被指派的角色 @@ -438,6 +452,9 @@ setting_rest_api_enabled: 啟用 REST 網路服務技術(Web Service) 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: 建立子專案 @@ -451,6 +468,8 @@ permission_add_issues: 新增項目 permission_edit_issues: 編輯項目 permission_manage_issue_relations: 管理項目關聯 + permission_set_issues_private: 設定項目為公開或私人 + permission_set_own_issues_private: 設定自己的項目為公開或私人 permission_add_issue_notes: 新增筆記 permission_edit_issue_notes: 編輯筆記 permission_edit_own_issue_notes: 編輯自己的筆記 @@ -468,7 +487,7 @@ permission_edit_time_entries: 編輯工時紀錄 permission_edit_own_time_entries: 編輯自己的工時記錄 permission_manage_news: 管理新聞 - permission_comment_news: 註解新聞 + permission_comment_news: 回應新聞 permission_manage_documents: 管理文件 permission_view_documents: 檢視文件 permission_manage_files: 管理檔案 @@ -481,10 +500,10 @@ permission_edit_wiki_pages: 編輯 wiki 頁面 permission_delete_wiki_pages_attachments: 刪除附件 permission_protect_wiki_pages: 專案 wiki 頁面 - permission_manage_repository: 管理版本庫 - permission_browse_repository: 瀏覽版本庫 + permission_manage_repository: 管理儲存機制 + permission_browse_repository: 瀏覽儲存機制 permission_view_changesets: 檢視變更集 - permission_commit_access: 存取送交之變更 + permission_commit_access: 存取認可 permission_manage_boards: 管理討論版 permission_view_messages: 檢視訊息 permission_add_messages: 新增訊息 @@ -493,7 +512,7 @@ permission_delete_messages: 刪除訊息 permission_delete_own_messages: 刪除自己的訊息 permission_export_wiki_pages: 匯出 wiki 頁面 - permission_manage_subtasks: 管理子工作項目 + permission_manage_subtasks: 管理子任務 project_module_issue_tracking: 項目追蹤 project_module_time_tracking: 工時追蹤 @@ -516,16 +535,19 @@ label_x_projects: zero: 無專案 one: 1 個專案 - other: "{{count}} 個專案" + 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_issues_by: "項目按 %{value} 分組顯示" label_issue_added: 項目已新增 label_issue_updated: 項目已更新 + label_issue_note_added: 筆記已新增 + label_issue_status_updated: 狀態已更新 + label_issue_priority_updated: 優先權已更新 label_document: 文件 label_document_new: 建立新文件 label_document_plural: 文件 @@ -534,6 +556,8 @@ label_role_plural: 角色 label_role_new: 建立新角色 label_role_and_permissions: 角色與權限 + label_role_anonymous: 匿名者 + label_role_non_member: 非會員 label_member: 成員 label_member_new: 建立新成員 label_member_plural: 成員 @@ -573,7 +597,7 @@ label_registered_on: 註冊於 label_activity: 活動 label_overall_activity: 整體活動 - label_user_activity: "{{value}} 的活動" + label_user_activity: "%{value} 的活動" label_new: 建立新的... label_logged_as: 目前登入 label_environment: 環境 @@ -583,7 +607,7 @@ label_auth_source_plural: 認證模式清單 label_subproject_plural: 子專案 label_subproject_new: 建立子專案 - label_and_its_subprojects: "{{value}} 與其子專案" + label_and_its_subprojects: "%{value} 與其子專案" label_min_max_length: 最小 - 最大 長度 label_list: 清單 label_date: 日期 @@ -594,8 +618,8 @@ label_text: 長文字 label_attribute: 屬性 label_attribute_plural: 屬性 - label_download: "{{count}} 個下載" - label_download_plural: "{{count}} 個下載" + label_download: "%{count} 個下載" + label_download_plural: "%{count} 個下載" label_no_data: 沒有任何資料可供顯示 label_change_status: 變更狀態 label_history: 歷史 @@ -612,6 +636,7 @@ label_news_latest: 最近新聞 label_news_view_all: 檢視全部的新聞 label_news_added: 新聞已新增 + label_news_comment_added: 回應已加入新聞 label_settings: 設定 label_overview: 概觀 label_version: 版本 @@ -627,17 +652,17 @@ label_closed_issues: 已結束 label_closed_issues_plural: 已結束 label_x_open_issues_abbr_on_total: - zero: 0 進行中 / 共 {{total}} - one: 1 進行中 / 共 {{total}} - other: "{{count}} 進行中 / 共 {{total}}" + zero: 0 進行中 / 共 %{total} + one: 1 進行中 / 共 %{total} + other: "%{count} 進行中 / 共 %{total}" label_x_open_issues_abbr: zero: 0 進行中 one: 1 進行中 - other: "{{count}} 進行中" + other: "%{count} 進行中" label_x_closed_issues_abbr: zero: 0 已結束 one: 1 已結束 - other: "{{count}} 已結束" + other: "%{count} 已結束" label_total: 總計 label_permissions: 權限 label_current_status: 目前狀態 @@ -655,21 +680,22 @@ label_months_from: 個月, 開始月份 label_gantt: 甘特圖 label_internal: 內部 - label_last_changes: "最近 {{count}} 個變更" + label_last_changes: "最近 %{count} 個變更" label_change_view_all: 檢視全部的變更 label_personalize_page: 自訂版面 - label_comment: 註解 - label_comment_plural: 註解 + label_comment: 回應 + label_comment_plural: 回應 label_x_comments: - zero: 無註解 - one: 1 個註解 - other: "{{count}} 個註解" - label_comment_add: 加入新註解 - label_comment_added: 新註解已加入 - label_comment_delete: 刪除註解 + zero: 無回應 + one: 1 個回應 + other: "%{count} 個回應" + label_comment_add: 加入新回應 + label_comment_added: 新回應已加入 + label_comment_delete: 刪除回應 label_query: 自訂查詢 label_query_plural: 自訂查詢 label_query_new: 建立新查詢 + label_my_queries: 我的自訂查詢 label_filter_add: 加入新篩選條件 label_filter_plural: 篩選條件 label_equals: 等於 @@ -684,7 +710,7 @@ label_yesterday: 昨天 label_this_week: 本週 label_last_week: 上週 - label_last_n_days: "過去 {{count}} 天" + label_last_n_days: "過去 %{count} 天" label_this_month: 這個月 label_last_month: 上個月 label_this_year: 今年 @@ -695,34 +721,34 @@ label_contains: 包含 label_not_contains: 不包含 label_day_plural: 天 - label_repository: 版本控管 - label_repository_plural: 版本控管 + label_repository: 儲存機制 + label_repository_plural: 儲存機制清單 label_browse: 瀏覽 - label_modification: "{{count}} 變更" - label_modification_plural: "{{count}} 變更" + label_modification: "%{count} 變更" + label_modification_plural: "%{count} 變更" label_branch: 分支 label_tag: 標籤 - label_revision: 版次 - label_revision_plural: 版次清單 - label_revision_id: "版次 {{value}}" - label_associated_revisions: 相關版次 + 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_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_due_in: "剩餘 %{value}" + label_roadmap_overdue: "逾期 %{value}" label_roadmap_no_issues: 此版本尚未包含任何項目 label_search: 搜尋 label_result_plural: 結果 @@ -741,13 +767,13 @@ label_issue_tracking: 項目追蹤 label_spent_time: 耗用工時 label_overall_spent_time: 整體耗用工時 - label_f_hour: "{{value}} 小時" - label_f_hour_plural: "{{value}} 小時" + 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_commits_per_month: 依月份統計認可 + label_commits_per_author: 依作者統計認可 label_view_diff: 檢視差異 label_diff_inline: 直列 label_diff_side_by_side: 並排 @@ -793,21 +819,22 @@ label_date_from: 開始 label_date_to: 結束 label_language_based: 依用戶之語系決定 - label_sort_by: "按 {{value}} 排序" + 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_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_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_bulk_edit_selected_issues: 大量編輯選取的項目 + label_bulk_edit_selected_time_entries: 大量編輯選取的工時項目 label_theme: 畫面主題 label_default: 預設 label_search_titles_only: 僅搜尋標題 @@ -821,7 +848,7 @@ label_registration_activation_by_email: 透過電子郵件啟用帳戶 label_registration_manual_activation: 手動啟用帳戶 label_registration_automatic_activation: 自動啟用帳戶 - label_display_per_page: "每頁顯示: {{value}} 個" + label_display_per_page: "每頁顯示: %{value} 個" label_age: 年齡 label_change_properties: 變更屬性 label_general: 一般 @@ -844,7 +871,7 @@ label_sort: 排序 label_ascending: 遞增排序 label_descending: 遞減排序 - label_date_from_to: 起 {{start}} 迄 {{end}} + label_date_from_to: 起 %{start} 迄 %{end} label_wiki_content_added: Wiki 頁面已新增 label_wiki_content_updated: Wiki 頁面已更新 label_group: 群組 @@ -863,22 +890,32 @@ 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_api_access_key_created_on: "API 存取金鑰建立於 %{value} 之前" label_profile: 配置概況 - label_subtask_plural: 子工作項目 + label_subtask_plural: 子任務 label_project_copy_notifications: 在複製專案的過程中,傳送通知郵件 + label_principal_search: "搜尋用戶或群組:" + label_user_search: "搜尋用戶:" + label_additional_workflow_transitions_for_author: 用戶為作者時額外允許的流程轉換 + label_additional_workflow_transitions_for_assignee: 用戶為被指定者時額外允許的流程轉換 + label_issues_visibility_all: 所有項目 + label_issues_visibility_public: 所有非私人項目 + label_issues_visibility_own: 使用者所建立的或被指派的項目 + label_git_report_last_commit: 報告最後認可的文件和目錄 button_login: 登入 button_submit: 送出 button_save: 儲存 button_check_all: 全選 button_uncheck_all: 全不選 + button_collapse_all: 全部摺疊 + button_expand_all: 全部展開 button_delete: 刪除 button_create: 建立 button_create_and_continue: 繼續建立 button_test: 測試 button_edit: 編輯 - button_edit_associated_wikipage: "編輯相關 Wiki 頁面: {{page_title}}" + button_edit_associated_wikipage: "編輯相關 Wiki 頁面: %{page_title}" button_add: 新增 button_change: 修改 button_apply: 套用 @@ -927,61 +964,73 @@ text_regexp_info: eg. ^[A-Z0-9]+$ text_min_max_length_info: 0 代表「不限制」 text_project_destroy_confirmation: 您確定要刪除這個專案和其他相關資料? - text_subprojects_destroy_warning: "下列子專案: {{value}} 將一併被刪除。" + 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_journal_changed: "%{label} 從 %{old} 變更為 %{new}" + text_journal_changed_no_detail: "%{label} 已更新" + 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)、阿拉伯數字與連字符號(-)。
    儲存後,代碼不可再被更改。' - text_caracters_maximum: "最多 {{count}} 個字元." - text_caracters_minimum: "長度必須大於 {{count}} 個字元." - text_length_between: "長度必須介於 {{min}} 至 {{max}} 個字元之間." + 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_issues_ref_in_commit_messages: 認可訊息中參照(或修正)項目之關鍵字 + text_issue_added: "項目 %{id} 已被 %{author} 通報。" + text_issue_updated: "項目 %{id} 已被 %{author} 更新。" text_wiki_destroy_confirmation: 您確定要刪除這個 wiki 和其中的所有內容? - text_issue_category_destroy_question: "有 ({{count}}) 個項目被指派到此分類. 請選擇您想要的動作?" + 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_status_changed_by_changeset: "已套用至變更集 %{value}." + text_time_logged_by_changeset: "紀錄於變更集 %{value}." text_issues_destroy_confirmation: '確定刪除已選擇的項目?' + text_issues_destroy_descendants_confirmation: "這麼做將會一併刪除 %{count} 子任務。" + text_time_entries_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_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_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_repository_usernames_mapping: "選擇或更新 Redmine 使用者與版本庫使用者之對應關係。\n版本庫中之使用者帳號或電子郵件信箱,與 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: '一列輸入一個值' - text_wiki_page_destroy_question: "此頁面包含 {{descendants}} 個子頁面及延伸頁面。 請選擇您想要的動作?" + 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: 縮小 - + text_warn_on_leaving_unsaved: "若您離開這個頁面,此頁面所包含的未儲存資料將會遺失。" + text_scm_path_encoding_note: "預設: UTF-8" + text_git_repository_note: "純(Bare)儲存機制與本機儲存機制 (e.g. /gitrepo, c:\gitrepo)" + text_mercurial_repository_note: "本機儲存機制 (e.g. /hgrepo, c:\hgrepo)" + text_scm_command: 命令 + text_scm_command_version: 版本 + text_scm_config: 您可以在 config/configuration.yml 中設定 SCM 命令。請在編輯該檔案之後重新啟動 Redmine 應用程式。 + text_scm_command_not_available: SCM 命令無法使用。請檢查管理面板中的設定。 + default_role_manager: 管理人員 default_role_developer: 開發人員 default_role_reporter: 報告人員 @@ -1008,8 +1057,3 @@ enumeration_doc_categories: 文件分類 enumeration_activities: 活動 (時間追蹤) enumeration_system_activity: 系統活動 - - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/.svn/text-base/zh.yml.svn-base --- a/config/locales/.svn/text-base/zh.yml.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/.svn/text-base/zh.yml.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,91 +1,81 @@ # Chinese (China) translations for Ruby on Rails # by tsechingho (http://github.com/tsechingho) - zh: + # 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" short: "%b%d日" long: "%Y年%b%d日" + 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: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月] - order: [ :year, :month, :day ] - + # Used in date_select and datime_select. + order: + - :year + - :month + - :day + time: formats: default: "%Y年%b%d日 %A %H:%M:%S" time: "%H:%M" - time: "%H:%M" short: "%b%d日 %H:%M" long: "%Y年%b%d日 %H:%M" am: "上午" pm: "下午" - + datetime: distance_in_words: half_a_minute: "半分钟" less_than_x_seconds: one: "一秒内" - other: "少于 {{count}} 秒" + other: "少于 %{count} 秒" x_seconds: one: "一秒" - other: "{{count}} 秒" + other: "%{count} 秒" less_than_x_minutes: one: "一分钟内" - other: "少于 {{count}} 分钟" + other: "少于 %{count} 分钟" x_minutes: one: "一分钟" - other: "{{count}} 分钟" + other: "%{count} 分钟" about_x_hours: one: "大约一小时" - other: "大约 {{count}} 小时" + other: "大约 %{count} 小时" x_days: one: "一天" - other: "{{count}} 天" + other: "%{count} 天" about_x_months: one: "大约一个月" - other: "大约 {{count}} 个月" + other: "大约 %{count} 个月" x_months: one: "一个月" - other: "{{count}} 个月" + other: "%{count} 个月" about_x_years: one: "大约一年" - other: "大约 {{count}} 年" + other: "大约 %{count} 年" over_x_years: one: "一年以上" - other: "{{count}} 年以上" + other: "%{count} 年以上" almost_x_years: one: "将近 1 年" - other: "将近 {{count}} 年" - prompts: - year: "年" - month: "月" - day: "日" - hour: "时" - minute: "分" - second: "秒" - + other: "将近 %{count} 年" + number: + # Default format for numbers format: - separator: "." - delimiter: "," + separator: "." + delimiter: "" precision: 3 - currency: - format: - format: "%n %u" - unit: "元" - separator: "." - delimiter: "," - precision: 2 - percentage: - format: - delimiter: "" - precision: - format: - delimiter: "" human: format: delimiter: "" @@ -96,24 +86,24 @@ byte: one: "Byte" other: "Bytes" - kb: "KB" + kb: "kB" mb: "MB" gb: "GB" tb: "TB" - + + +# Used in array.to_sentence. support: array: - words_connector: ", " - two_words_connector: " 和 " - last_word_connector: ", 和 " - + sentence_connector: "和" + skip_last_comma: false + activerecord: errors: template: - header: - one: "有 1 个错误发生导致「{{model}}」无法被保存。" - other: "有 {{count}} 个错误发生导致「{{model}}」无法被保存。" - body: "如下字段出现错误:" + header: + one: "由于发生了一个错误 %{model} 无法保存" + other: "%{count} 个错误使得 %{model} 无法保存" messages: inclusion: "不包含于列表中" exclusion: "是保留关键字" @@ -122,22 +112,23 @@ accepted: "必须是可被接受的" empty: "不能留空" blank: "不能为空字符" - too_long: "过长(最长为 {{count}} 个字符)" - too_short: "过短(最短为 {{count}} 个字符)" - wrong_length: "长度非法(必须为 {{count}} 个字符)" + too_long: "过长(最长为 %{count} 个字符)" + too_short: "过短(最短为 %{count} 个字符)" + wrong_length: "长度非法(必须为 %{count} 个字符)" taken: "已经被使用" not_a_number: "不是数字" - greater_than: "必须大于 {{count}}" - greater_than_or_equal_to: "必须大于或等于 {{count}}" - equal_to: "必须等于 {{count}}" - less_than: "必须小于 {{count}}" - less_than_or_equal_to: "必须小于或等于 {{count}}" + 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: "An issue can not be linked to one of its subtasks" + cant_link_an_issue_with_a_descendant: "问题不能关联到它的子任务" actionview_instancetag_blank_option: 请选择 @@ -168,49 +159,57 @@ notice_file_not_found: 您访问的页面不存在或已被删除。 notice_locking_conflict: 数据已被另一位用户更新 notice_not_authorized: 对不起,您无权访问此页面。 - notice_email_sent: "邮件已成功发送到 {{value}}" - notice_email_error: "发送邮件时发生错误 ({{value}})" + 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_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: 问题完成度已更新。 - - error_can_t_load_default_data: "无法载入默认设置:{{value}}" + notice_gantt_chart_truncated: "The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})" + + error_can_t_load_default_data: "无法载入默认设置:%{value}" error_scm_not_found: "版本库中不存在该条目和(或)其修订版本。" - error_scm_command_failed: "访问版本库时发生错误:{{value}}" + 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: 请选择目标跟踪标签和角色 - - warning_attachments_not_saved: "{{count}} 个文件保存失败。" + error_unable_delete_issue_status: '无法删除问题状态' + error_unable_to_connect: "无法连接 (%{value})" + warning_attachments_not_saved: "%{count} 个文件保存失败" - mail_subject_lost_password: "您的 {{value}} 密码" + mail_subject_lost_password: "您的 %{value} 密码" mail_body_lost_password: '请点击以下链接来修改您的密码:' - mail_subject_register: "{{value}}帐号激活" + mail_subject_register: "%{value}帐号激活" mail_body_register: '请点击以下链接来激活您的帐号:' - mail_body_account_information_external: "您可以使用您的 {{value}} 帐号来登录。" + 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}}' wiki页面已添加" - mail_body_wiki_content_added: "'{{id}}' wiki页面已由 {{author}} 添加。" - mail_subject_wiki_content_updated: "'{{id}}' wiki页面已更新" - mail_body_wiki_content_updated: "'{{id}}' wiki页面已由 {{author}} 更新。" - + 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}' wiki页面已添加" + mail_body_wiki_content_added: "'%{id}' wiki页面已由 %{author} 添加。" + mail_subject_wiki_content_updated: "'%{id}' wiki页面已更新。" + mail_body_wiki_content_updated: "'%{id}' wiki页面已由 %{author} 更新。" + gui_validation_error: 1 个错误 - gui_validation_error_plural: "{{count}} 个错误" + gui_validation_error_plural: "%{count} 个错误" field_name: 名称 field_description: 描述 @@ -247,11 +246,12 @@ field_priority: 优先级 field_fixed_version: 目标版本 field_user: 用户 + field_principal: 用户/用户组 field_role: 角色 field_homepage: 主页 field_is_public: 公开 field_parent: 上级项目 - field_is_in_roadmap: 在路线图中显示问题 + field_is_in_roadmap: 在路线图中显示 field_login: 登录名 field_mail_notification: 邮件通知 field_admin: 管理员 @@ -272,7 +272,8 @@ field_attr_lastname: 姓氏属性 field_attr_mail: 邮件属性 field_onthefly: 即时用户生成 - field_done_ratio: 完成度 + field_start_date: 开始日期 + field_done_ratio: % 完成 field_auth_source: 认证模式 field_hide_mail: 隐藏我的邮件地址 field_comments: 注释 @@ -290,6 +291,7 @@ field_redirect_existing_links: 重定向到现有链接 field_estimated_hours: 预期时间 field_column_names: 列 + field_time_entries: 工时 field_time_zone: 时区 field_searchable: 可用作搜索条件 field_default_value: 默认值 @@ -301,7 +303,12 @@ 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: 欢迎文字 @@ -309,7 +316,7 @@ setting_login_required: 要求认证 setting_self_registration: 允许自注册 setting_attachment_max_size: 附件大小限制 - setting_issues_export_limit: 问题输出条目的限制 + setting_issues_export_limit: 问题导出条目的限制 setting_mail_from: 邮件发件人地址 setting_bcc_recipients: 使用密件抄送 (bcc) setting_plain_text_mail: 纯文本(无HTML) @@ -328,7 +335,7 @@ 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: 每页显示条目个数的设置 @@ -354,12 +361,18 @@ setting_issue_done_ratio_issue_status: 使用问题状态 setting_start_of_week: 日历开始于 setting_rest_api_enabled: 启用REST web service - + 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: 查看问题 @@ -407,7 +420,9 @@ 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: 新闻 @@ -416,6 +431,8 @@ project_module_wiki: Wiki project_module_repository: 版本库 project_module_boards: 讨论区 + project_module_calendar: 日历 + project_module_gantt: 甘特图 label_user: 用户 label_user_plural: 用户 @@ -427,14 +444,14 @@ label_x_projects: zero: 无项目 one: 1 个项目 - other: "{{count}} 个项目" + 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_issues_by: "按 %{value} 分组显示问题" label_issue_added: 问题已添加 label_issue_updated: 问题已更新 label_document: 文档 @@ -473,6 +490,7 @@ label_my_page: 我的工作台 label_my_account: 我的帐号 label_my_projects: 我的项目 + label_my_page_block: 我的工作台模块 label_administration: 管理 label_login: 登录 label_logout: 退出 @@ -482,8 +500,8 @@ label_last_login: 最后登录 label_registered_on: 注册于 label_activity: 活动 - label_overall_activity: 全部活动 - label_user_activity: "{{value}} 的活动" + label_overall_activity: 活动概览 + label_user_activity: "%{value} 的活动" label_new: 新建 label_logged_as: 登录为 label_environment: 环境 @@ -493,7 +511,7 @@ label_auth_source_plural: 认证模式 label_subproject_plural: 子项目 label_subproject_new: 新建子项目 - label_and_its_subprojects: "{{value}} 及其子项目" + label_and_its_subprojects: "%{value} 及其子项目" label_min_max_length: 最小 - 最大 长度 label_list: 列表 label_date: 日期 @@ -504,8 +522,8 @@ label_text: 文本 label_attribute: 属性 label_attribute_plural: 属性 - label_download: "{{count}} 次下载" - label_download_plural: "{{count}} 次下载" + label_download: "%{count} 次下载" + label_download_plural: "%{count} 次下载" label_no_data: 没有任何数据可供显示 label_change_status: 变更状态 label_history: 历史记录 @@ -537,26 +555,26 @@ label_closed_issues: 已关闭 label_closed_issues_plural: 已关闭 label_x_open_issues_abbr_on_total: - zero: 0 打开 / {{total}} - one: 1 打开 / {{total}} - other: "{{count}} 打开 / {{total}}" + zero: 0 打开 / %{total} + one: 1 打开 / %{total} + other: "%{count} 打开 / %{total}" label_x_open_issues_abbr: zero: 0 打开 one: 1 打开 - other: "{{count}} 打开" + other: "%{count} 打开" label_x_closed_issues_abbr: - zero: 0 关闭 - one: 1 关闭 - other: "{{count}} 关闭" + zero: 0 已关闭 + one: 1 已关闭 + other: "%{count} 已关闭" label_total: 合计 label_permissions: 权限 label_current_status: 当前状态 - label_new_statuses_allowed: 可变更的新状态 + label_new_statuses_allowed: 允许的新状态 label_all: 全部 label_none: 无 label_nobody: 无人 - label_next: 下一个 - label_previous: 上一个 + label_next: 下一页 + label_previous: 上一页 label_used_by: 使用中 label_details: 详情 label_add_note: 添加说明 @@ -565,7 +583,7 @@ label_months_from: 个月以来 label_gantt: 甘特图 label_internal: 内部 - label_last_changes: "最近的 {{count}} 次变更" + label_last_changes: "最近的 %{count} 次变更" label_change_view_all: 查看所有变更 label_personalize_page: 个性化定制本页 label_comment: 评论 @@ -573,7 +591,7 @@ label_x_comments: zero: 无评论 one: 1 条评论 - other: "{{count}} 条评论" + other: "%{count} 条评论" label_comment_add: 添加评论 label_comment_added: 评论已添加 label_comment_delete: 删除评论 @@ -594,7 +612,7 @@ label_yesterday: 昨天 label_this_week: 本周 label_last_week: 上周 - label_last_n_days: "最后 {{count}} 天" + label_last_n_days: "最后 %{count} 天" label_this_month: 本月 label_last_month: 上月 label_this_year: 今年 @@ -608,13 +626,13 @@ label_repository: 版本库 label_repository_plural: 版本库 label_browse: 浏览 - label_modification: "{{count}} 个更新" - label_modification_plural: "{{count}} 个更新" + label_modification: "%{count} 个更新" + label_modification_plural: "%{count} 个更新" label_branch: 分支 label_tag: 标签 label_revision: 修订 label_revision_plural: 修订 - label_revision_id: 修订 {{value}} + label_revision_id: 修订 %{value} label_associated_revisions: 相关修订版本 label_added: 已添加 label_modified: 已修改 @@ -631,8 +649,8 @@ label_sort_lower: 下移 label_sort_lowest: 置底 label_roadmap: 路线图 - label_roadmap_due_in: "截止日期到 {{value}}" - label_roadmap_overdue: "{{value}} 延期" + label_roadmap_due_in: "截止日期到 %{value}" + label_roadmap_overdue: "%{value} 延期" label_roadmap_no_issues: 该版本没有问题 label_search: 搜索 label_result_plural: 结果 @@ -650,8 +668,9 @@ label_changes_details: 所有变更的详情 label_issue_tracking: 问题跟踪 label_spent_time: 耗时 - label_f_hour: "{{value}} 小时" - label_f_hour_plural: "{{value}} 小时" + label_overall_spent_time: 总体耗时 + label_f_hour: "%{value} 小时" + label_f_hour_plural: "%{value} 小时" label_time_tracking: 时间跟踪 label_change_plural: 变更 label_statistics: 统计 @@ -687,6 +706,8 @@ label_board: 讨论区 label_board_new: 新建讨论区 label_board_plural: 讨论区 + label_board_locked: 锁定 + label_board_sticky: 置顶 label_topic_plural: 主题 label_message_plural: 帖子 label_message_last: 最新的帖子 @@ -700,15 +721,15 @@ label_date_from: 从 label_date_to: 到 label_language_based: 根据用户的语言 - label_sort_by: "根据 {{value}} 排序" + 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_feeds_access_key_created_on: "RSS存取键是在 %{value} 之前建立的" label_module_plural: 模块 - label_added_time_by: "由 {{author}} 在 {{age}} 之前添加" - label_updated_time: " 更新于 {{value}} 之前" - label_updated_time_by: "由 {{author}} 更新于 {{age}} 之前" + label_added_time_by: "由 %{author} 在 %{age} 之前添加" + label_updated_time: " 更新于 %{value} 之前" + label_updated_time_by: "由 %{author} 更新于 %{age} 之前" label_jump_to_a_project: 选择一个项目... label_file_plural: 文件 label_changeset_plural: 变更 @@ -720,12 +741,16 @@ 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_display_per_page: "每页显示:%{value}" + label_age: 提交时间 label_change_properties: 修改属性 label_general: 一般 label_more: 更多 @@ -747,7 +772,7 @@ label_sort: 排序 label_ascending: 升序 label_descending: 降序 - label_date_from_to: 从 {{start}} 到 {{end}} + label_date_from_to: 从 %{start} 到 %{end} label_wiki_content_added: Wiki 页面已添加 label_wiki_content_updated: Wiki 页面已更新 label_group: 组 @@ -766,7 +791,12 @@ 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_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: 提交 @@ -778,6 +808,7 @@ button_create_and_continue: 创建并继续 button_test: 测试 button_edit: 编辑 + button_edit_associated_wikipage: "编辑相关wiki页面: %{page_title}" button_add: 新增 button_change: 修改 button_apply: 应用 @@ -815,69 +846,73 @@ 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_subprojects_destroy_warning: "以下子项目也将被同时删除:%{value}" text_workflow_edit: 选择角色和跟踪标签来编辑工作流程 text_are_you_sure: 您确定? - text_journal_changed: "{{label}} 从 {{old}} 变更为 {{new}}" - text_journal_set_to: "{{label}} 被设置为 {{value}}" - text_journal_deleted: "{{label}} 已删除 ({{old}})" - text_journal_added: "{{label}} {{value}} 已添加" + 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),数字和连字符(-)。
    请注意,标识符保存后将不可修改。' - text_caracters_maximum: "最多 {{count}} 个字符。" - text_caracters_minimum: "至少需要 {{count}} 个字符。" - text_length_between: "长度必须在 {{min}} 到 {{max}} 个字符之间。" + 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_issue_added: "问题 %{id} 已由 %{author} 提交。" + text_issue_updated: "问题 %{id} 已由 %{author} 更新。" text_wiki_destroy_confirmation: 您确定要删除这个 wiki 及其所有内容吗? - text_issue_category_destroy_question: "有一些问题({{count}} 个)属于此类别。您想进行哪种操作?" + 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_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_question: 您要删除的问题已经上报了 %{hours} 小时的工作量。您想进行那种操作? text_destroy_time_entries: 删除上报的工作量 text_assign_time_entries_to_project: 将已上报的工作量提交到项目中 text_reassign_time_entries: '将已上报的工作量指定到此问题:' - text_user_wrote: "{{value}} 写到:" + text_user_wrote: "%{value} 写到:" + text_enumeration_destroy_question: "%{count} 个对象被关联到了这个枚举值。" 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: '每项数值一行' - text_wiki_page_destroy_question: 此页面有 {{descendants}} 个子页面和下级页面。您想进行那种操作? - text_wiki_page_reassign_children: 将子页面的上级页面设置为 + 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: 你正在删除你现有的某些或全部权限,如果这样做了你可能将会再也无法编辑该项目了。你确定要继续吗? - + text_zoom_in: Zoom in + text_zoom_out: Zoom out + default_role_manager: 管理人员 default_role_developer: 开发人员 default_role_reporter: 报告人员 @@ -904,44 +939,43 @@ enumeration_doc_categories: 文档类别 enumeration_activities: 活动(时间跟踪) enumeration_system_activity: 系统活动 - label_board_sticky: 置顶 - label_board_locked: 锁定 - permission_export_wiki_pages: 导出 wiki 页面 - setting_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: 复制项目时发送邮件通知 - error_can_not_delete_custom_field: 不能删除自定义属性 - error_unable_to_connect: 不能连接到 ({{value}}) - error_can_not_remove_role: 该角色正在使用中, 不能删除. - error_can_not_delete_tracker: 该跟踪标签包含问题, 不能删除. - field_principal: 用户/用户组 - label_my_page_block: 我的工作台模块 - notice_failed_to_save_members: "成员保存失败:{{errors}}。" - text_zoom_out: 缩小 - text_zoom_in: 放大 - notice_unable_delete_time_entry: 无法删除工时记录。 - label_overall_spent_time: 所有项目耗用工时 - field_time_entries: Log time - 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. - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header + + 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + + field_commit_logs_encoding: 提交注释的编码 + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/bg.yml --- a/config/locales/bg.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/bg.yml Mon Jul 25 14:23:37 2011 +0100 @@ -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" @@ -16,7 +17,10 @@ month_names: [~, Януари, Февруари, Март, Април, Май, Юни, Юли, Август, Септември, Октомври, Ноември, Декември] abbr_month_names: [~, Яну, Фев, Мар, Апр, Май, Юни, Юли, Авг, Сеп, Окт, Ное, Дек] # Used in date_select and datime_select. - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -32,45 +36,46 @@ half_a_minute: "half a minute" less_than_x_seconds: one: "по-малко от 1 секунда" - other: "по-малко от {{count}} секунди" + other: "по-малко от %{count} секунди" x_seconds: one: "1 секунда" - other: "{{count}} секунди" + other: "%{count} секунди" less_than_x_minutes: one: "по-малко от 1 минута" - other: "по-малко от {{count}} минути" + other: "по-малко от %{count} минути" x_minutes: one: "1 минута" - other: "{{count}} минути" + other: "%{count} минути" about_x_hours: one: "около 1 час" - other: "около {{count}} часа" + other: "около %{count} часа" x_days: one: "1 ден" - other: "{{count}} дена" + other: "%{count} дена" about_x_months: one: "около 1 месец" - other: "около {{count}} месеца" + other: "около %{count} месеца" x_months: one: "1 месец" - other: "{{count}} месеца" + other: "%{count} месеца" about_x_years: one: "около 1 година" - other: "около {{count}} години" + other: "около %{count} години" over_x_years: one: "над 1 година" - other: "над {{count}} години" + other: "над %{count} години" almost_x_years: one: "почти 1 година" - other: "почти {{count}} години" + other: "почти %{count} години" number: + # Default format for numbers format: separator: "." delimiter: "" precision: 3 - human: - format: + human: + format: precision: 1 delimiter: "" storage_units: @@ -83,7 +88,8 @@ mb: "MB" gb: "GB" tb: "TB" - + + # Used in array.to_sentence. support: array: @@ -92,6 +98,10 @@ activerecord: errors: + template: + header: + one: "1 грешка попречи този %{model} да бъде записан" + other: "%{count} грешки попречиха този %{model} да бъде записан" messages: inclusion: "не съществува в списъка" exclusion: "е запазено" @@ -106,16 +116,17 @@ taken: "вече съществува" not_a_number: "не е число" not_a_date: "е невалидна дата" - greater_than: "трябва да бъде по-голям[a/о] от {{count}}" - greater_than_or_equal_to: "трябва да бъде по-голям[a/о] от или равен[a/o] на {{count}}" - equal_to: "трябва да бъде равен[a/o] на {{count}}" - less_than: "трябва да бъде по-малък[a/o] от {{count}}" - less_than_or_equal_to: "трябва да бъде по-малък[a/o] от или равен[a/o] на {{count}}" + greater_than: "трябва да бъде по-голям[a/о] от %{count}" + greater_than_or_equal_to: "трябва да бъде по-голям[a/о] от или равен[a/o] на %{count}" + equal_to: "трябва да бъде равен[a/o] на %{count}" + less_than: "трябва да бъде по-малък[a/o] от %{count}" + less_than_or_equal_to: "трябва да бъде по-малък[a/o] от или равен[a/o] на %{count}" odd: "трябва да бъде нечетен[a/o]" even: "трябва да бъде четен[a/o]" greater_than_start_date: "трябва да е след началната дата" not_same_project: "не е от същия проект" circular_dependency: "Тази релация ще доведе до безкрайна зависимост" + cant_link_an_issue_with_a_descendant: "Една задача не може да бъде свързвана към своя подзадача" actionview_instancetag_blank_option: Изберете @@ -123,7 +134,7 @@ general_text_Yes: 'Да' general_text_no: 'не' general_text_yes: 'да' - general_lang_name: 'Bulgarian' + general_lang_name: 'Bulgarian (Български)' general_csv_separator: ',' general_csv_decimal_separator: '.' general_csv_encoding: UTF-8 @@ -146,24 +157,61 @@ notice_file_not_found: Несъществуваща или преместена страница. notice_locking_conflict: Друг потребител променя тези данни в момента. notice_not_authorized: Нямате право на достъп до тази страница. - notice_email_sent: "Изпратен e-mail на {{value}}" - notice_email_error: "Грешка при изпращане на e-mail ({{value}})" + 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_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_subject_lost_password: "Вашата парола (%{value})" mail_body_lost_password: 'За да смените паролата си, използвайте следния линк:' - mail_subject_register: "Активация на профил ({{value}})" + 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}} грешки" + gui_validation_error_plural: "%{count} грешки" field_name: Име field_description: Описание - field_summary: Групиран изглед + field_summary: Анотация field_is_required: Задължително field_firstname: Име field_lastname: Фамилия @@ -196,6 +244,7 @@ field_priority: Приоритет field_fixed_version: Планувана версия field_user: Потребител + field_principal: Principal field_role: Роля field_homepage: Начална страница field_is_public: Публичен @@ -221,7 +270,8 @@ field_attr_lastname: Атрибут Фамилия (Lastname) field_attr_mail: Атрибут Email field_onthefly: Динамично създаване на потребител - field_done_ratio: % Прогрес + field_start_date: Начална дата + field_done_ratio: "% Прогрес" field_auth_source: Начин на оторизация field_hide_mail: Скрий e-mail адреса ми field_comments: Коментар @@ -238,8 +288,34 @@ 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: Предупреди ме, когато напускам страница с незаписано съдържание + field_issues_visibility: Видимост на задачите + field_is_private: Лична + field_commit_logs_encoding: Кодова таблица на съобщенията при поверяване + field_scm_path_encoding: Кодова таблица на пътищата (path) + field_path_to_repository: Път до хранилището + field_root_directory: Коренна директория (папка) + field_cvsroot: CVSROOT + field_cvs_module: Модул + setting_app_title: Заглавие setting_app_subtitle: Описание setting_welcome_text: Допълнителен текст @@ -249,41 +325,157 @@ 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_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_set_own_issues_private: Установяване на собствените задачи публични или лични + permission_set_issues_private: Установяване на задачите публични или лични + 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}} проекта" + 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_issue_note_added: Добавена бележка + label_issue_status_updated: Обновено състояние + label_issue_priority_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_role_anonymous: Анонимен + label_role_non_member: Не член label_member: Член label_member_new: Нов член label_member_plural: Членове @@ -306,12 +498,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: Изход @@ -321,25 +515,30 @@ label_last_login: Последно свързване label_registered_on: Регистрация label_activity: Дейност + label_overall_activity: Цялостна дейност + label_user_activity: "Активност на %{value}" label_new: Нов - label_logged_as: Влязъл като + 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_download: "%{count} изтегляне" + label_download_plural: "%{count} изтегляния" label_no_data: Няма изходни данни label_change_status: Промяна на състоянието label_history: История @@ -347,6 +546,7 @@ label_attachment_new: Нов файл label_attachment_delete: Изтриване label_attachment_plural: Файлове + label_file_added: Добавен файл label_report: Справка label_report_plural: Справки label_news: Новини @@ -354,11 +554,14 @@ label_news_plural: Новини label_news_latest: Последни новини label_news_view_all: Виж всички + label_news_added: Добавена новина + label_news_comment_added: Добавен коментар към новина label_settings: Настройки label_overview: Общ изглед label_version: Версия label_version_new: Нова версия label_version_plural: Версии + label_close_versions: Затваряне на завършените версии label_confirmation: Одобрение label_export_to: Експорт към label_read: Read... @@ -368,23 +571,24 @@ label_closed_issues: затворена label_closed_issues_plural: затворени label_x_open_issues_abbr_on_total: - zero: 0 отворени / {{total}} - one: 1 отворена / {{total}} - other: "{{count}} отворени / {{total}}" + zero: 0 отворени / %{total} + one: 1 отворена / %{total} + other: "%{count} отворени / %{total}" label_x_open_issues_abbr: zero: 0 отворени one: 1 отворена - other: "{{count}} отворени" + other: "%{count} отворени" label_x_closed_issues_abbr: zero: 0 затворени one: 1 затворена - other: "{{count}} затворени" + 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: Използва се от @@ -395,7 +599,7 @@ label_months_from: месеца от label_gantt: Мрежов график label_internal: Вътрешен - label_last_changes: "последни {{count}} промени" + label_last_changes: "последни %{count} промени" label_change_view_all: Виж всички промени label_personalize_page: Персонализиране label_comment: Коментар @@ -403,22 +607,33 @@ label_x_comments: zero: 0 коментари one: 1 коментар - other: "{{count}} коментари" + other: "%{count} коментари" label_comment_add: Добавяне на коментар label_comment_added: Добавен коментар label_comment_delete: Изтриване на коментари 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: преди @@ -426,25 +641,33 @@ label_not_contains: не съдържа label_day_plural: дни label_repository: Хранилище + label_repository_plural: Хранилища label_browse: Разглеждане - label_modification: "{{count}} промяна" - label_modification_plural: "{{count}} промени" + 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_due_in: "Излиза след %{value}" + label_roadmap_overdue: "%{value} закъснение" label_roadmap_no_issues: Няма задачи за тази версия label_search: Търсене label_result_plural: Pезултати @@ -462,8 +685,9 @@ label_changes_details: Подробни промени label_issue_tracking: Тракинг label_spent_time: Отделено време - label_f_hour: "{{value}} час" - label_f_hour_plural: "{{value}} часа" + label_overall_spent_time: Общо употребено време + label_f_hour: "%{value} час" + label_f_hour_plural: "%{value} часа" label_time_tracking: Отделяне на време label_change_plural: Промени label_statistics: Статистики @@ -483,6 +707,7 @@ label_relation_delete: Изтриване на релация label_relates_to: свързана със label_duplicates: дублира + label_duplicated_by: дублирана от label_blocks: блокира label_blocked_by: блокирана от label_precedes: предшества @@ -498,10 +723,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: Година @@ -510,23 +738,103 @@ label_date_from: От label_date_to: До label_language_based: В зависимост от езика - label_sort_by: "Сортиране по {{value}}" + label_sort_by: "Сортиране по %{value}" label_send_test_email: Изпращане на тестов e-mail - label_feeds_access_key_created_on: "{{value}} от създаването на RSS ключа" + 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: "Обновена преди {{value}}" + 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_bulk_edit_selected_time_entries: Групово редактиране на записи за използвано време + 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: "Търсене на потребител:" + label_additional_workflow_transitions_for_author: Позволени са допълнителни преходи, когато потребителят е авторът + label_additional_workflow_transitions_for_assignee: Позволени са допълнителни преходи, когато потребителят е назначеният към задачата + label_issues_visibility_all: Всички задачи + label_issues_visibility_public: Всички не-лични задачи + label_issues_visibility_own: Задачи, създадени от или назначени на потребителя + label_git_report_last_commit: Извеждане на последното поверяване за файлове и папки + button_login: Вход button_submit: Прикачване button_save: Запис button_check_all: Избор на всички button_uncheck_all: Изчистване на всички + button_collapse_all: Скриване всички + button_expand_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: Приложи @@ -537,6 +845,7 @@ button_list: Списък button_view: Преглед button_move: Преместване + button_move_and_follow: Преместване и продължаване button_back: Назад button_cancel: Отказ button_activate: Активация @@ -550,34 +859,97 @@ 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_changed_no_detail: "%{label} променен" + 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), цифри и тирета.
    Невъзможна промяна след запис.' - text_caracters_maximum: "До {{count}} символа." - text_length_between: "От {{min}} до {{max}} символа." + 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_issue_added: "Публикувана е нова задача с номер %{id} (от %{author})." + text_issue_updated: "Задача %{id} е обновена (от %{author})." text_wiki_destroy_confirmation: Сигурни ли сте, че искате да изтриете това Wiki и цялото му съдържание? - text_issue_category_destroy_question: "Има задачи ({{count}}) обвързани с тази категория. Какво ще изберете?" + 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_issues_destroy_descendants_confirmation: Тази операция ще премахне и %{count} подзадача(и). + text_time_entries_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: Страницата съдържа незаписано съдържание, което може да бъде загубено, ако я напуснете. + text_scm_path_encoding_note: "По подразбиране: UTF-8" + text_git_repository_note: Празно и локално хранилище (например /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Локално хранилище (например /hgrepo, c:\hgrepo) + text_scm_command: SCM команда + text_scm_command_version: Версия + text_scm_config: Можете да конфигурирате SCM командите в config/configuration.yml. За да активирате промените, рестартирайте Redmine. + text_scm_command_not_available: SCM командата не е налична или достъпна. Проверете конфигурацията в административния панел. + default_role_manager: Мениджър default_role_developer: Разработчик default_role_reporter: Публикуващ @@ -599,328 +971,8 @@ 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: 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: The project you're trying to access has been archived. - text_tip_issue_end_day: issue ending this day - field_text: Text field - label_user_mail_option_only_owner: Only for things I am the owner of - field_member_of_group: Assignee's group - project_module_gantt: Gantt - text_are_you_sure_with_children: Delete issue and all child issues? - text_tip_issue_begin_end_day: issue beginning and ending this day - setting_default_notification_option: Default notification option - project_module_calendar: Calendar - label_user_mail_option_only_my_events: Only for things I watch or I'm involved in - text_tip_issue_begin_day: issue beginning this day - label_user_mail_option_only_assigned: Only for things I am assigned to - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" - field_assigned_to_role: Assignee's role - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/bs.yml --- a/config/locales/bs.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/bs.yml Mon Jul 25 14:23:37 2011 +0100 @@ -15,7 +15,10 @@ month_names: [~, Januar, Februar, Mart, April, Maj, Jun, Jul, Avgust, Septembar, Oktobar, Novembar, Decembar] abbr_month_names: [~, Jan, Feb, Mar, Apr, Maj, Jun, Jul, Avg, Sep, Okt, Nov, Dec] - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -32,37 +35,37 @@ half_a_minute: "pola minute" less_than_x_seconds: one: "manje od 1 sekunde" - other: "manje od {{count}} sekudni" + other: "manje od %{count} sekudni" x_seconds: one: "1 sekunda" - other: "{{count}} sekundi" + other: "%{count} sekundi" less_than_x_minutes: one: "manje od 1 minute" - other: "manje od {{count}} minuta" + other: "manje od %{count} minuta" x_minutes: one: "1 minuta" - other: "{{count}} minuta" + other: "%{count} minuta" about_x_hours: one: "oko 1 sahat" - other: "oko {{count}} sahata" + other: "oko %{count} sahata" x_days: one: "1 dan" - other: "{{count}} dana" + other: "%{count} dana" about_x_months: one: "oko 1 mjesec" - other: "oko {{count}} mjeseci" + other: "oko %{count} mjeseci" x_months: one: "1 mjesec" - other: "{{count}} mjeseci" + other: "%{count} mjeseci" about_x_years: one: "oko 1 godine" - other: "oko {{count}} godina" + other: "oko %{count} godina" over_x_years: one: "preko 1 godine" - other: "preko {{count}} godina" + other: "preko %{count} godina" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" number: @@ -106,6 +109,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "nije uključeno u listu" exclusion: "je rezervisano" @@ -120,11 +127,11 @@ taken: "već je zauzeto" not_a_number: "nije broj" not_a_date: "nije ispravan datum" - greater_than: "mora bit veći od {{count}}" - greater_than_or_equal_to: "mora bit veći ili jednak {{count}}" - equal_to: "mora biti jednak {{count}}" - less_than: "mora biti manji od {{count}}" - less_than_or_equal_to: "mora bit manji ili jednak {{count}}" + greater_than: "mora bit veći od %{count}" + greater_than_or_equal_to: "mora bit veći ili jednak %{count}" + equal_to: "mora biti jednak %{count}" + less_than: "mora biti manji od %{count}" + less_than_or_equal_to: "mora bit manji ili jednak %{count}" odd: "mora biti neparan" even: "mora biti paran" greater_than_start_date: "mora biti veći nego početni datum" @@ -141,8 +148,8 @@ general_lang_name: 'Bosanski' general_csv_separator: ',' general_csv_decimal_separator: '.' - general_csv_encoding: utf8 - general_pdf_encoding: utf8 + general_csv_encoding: UTF-8 + general_pdf_encoding: UTF-8 general_first_day_of_week: '7' notice_account_activated: Vaš nalog je aktiviran. Možete se prijaviti. @@ -156,9 +163,9 @@ notice_account_wrong_password: Pogrešna lozinka notice_can_t_change_password: Ovaj nalog koristi eksterni izvor prijavljivanja. Ne mogu da promjenim šifru. notice_default_data_loaded: Podrazumjevana konfiguracija uspječno učitana. - notice_email_error: Došlo je do greške pri slanju emaila ({{value}}) - notice_email_sent: "Email je poslan {{value}}" - notice_failed_to_save_issues: "Neuspješno snimanje {{count}} aktivnosti na {{total}} izabrano: {{ids}}." + notice_email_error: Došlo je do greške pri slanju emaila (%{value}) + notice_email_sent: "Email je poslan %{value}" + notice_failed_to_save_issues: "Neuspješno snimanje %{count} aktivnosti na %{total} izabrano: %{ids}." notice_feeds_access_key_reseted: Vaš RSS pristup je resetovan. notice_file_not_found: Stranica kojoj pokušavate da pristupite ne postoji ili je uklonjena. notice_locking_conflict: "Konflikt: podaci su izmjenjeni od strane drugog korisnika." @@ -169,28 +176,28 @@ notice_successful_delete: Brisanje izvršeno. notice_successful_update: Promjene uspješno izvršene. - error_can_t_load_default_data: "Podrazumjevane postavke se ne mogu učitati {{value}}" - error_scm_command_failed: "Desila se greška pri pristupu repozitoriju: {{value}}" + error_can_t_load_default_data: "Podrazumjevane postavke se ne mogu učitati %{value}" + error_scm_command_failed: "Desila se greška pri pristupu repozitoriju: %{value}" error_scm_not_found: "Unos i/ili revizija ne postoji u repozitoriju." error_scm_annotate: "Ova stavka ne postoji ili nije označena." error_issue_not_found_in_project: 'Aktivnost nije nađena ili ne pripada ovom projektu' - warning_attachments_not_saved: "{{count}} fajl(ovi) ne mogu biti snimljen(i)." + warning_attachments_not_saved: "%{count} fajl(ovi) ne mogu biti snimljen(i)." - mail_subject_lost_password: "Vaša {{value}} lozinka" + mail_subject_lost_password: "Vaša %{value} lozinka" mail_body_lost_password: 'Za promjenu lozinke, kliknite na sljedeći link:' - mail_subject_register: "Aktivirajte {{value}} vaš korisnički račun" + mail_subject_register: "Aktivirajte %{value} vaš korisnički račun" mail_body_register: 'Za aktivaciju vašeg korisničkog računa, kliknite na sljedeći link:' - mail_body_account_information_external: "Možete koristiti vaš {{value}} korisnički račun za prijavu na sistem." + mail_body_account_information_external: "Možete koristiti vaš %{value} korisnički račun za prijavu na sistem." mail_body_account_information: Informacija o vašem korisničkom računu - mail_subject_account_activation_request: "{{value}} zahtjev za aktivaciju korisničkog računa" - mail_body_account_activation_request: "Novi korisnik ({{value}}) se registrovao. Korisnički račun čeka vaše odobrenje za aktivaciju:" - mail_subject_reminder: "{{count}} aktivnost(i) u kašnjenju u narednim {{days}} danima" - mail_body_reminder: "{{count}} aktivnost(i) koje su dodjeljenje vama u narednim {{days}} danima:" + mail_subject_account_activation_request: "%{value} zahtjev za aktivaciju korisničkog računa" + mail_body_account_activation_request: "Novi korisnik (%{value}) se registrovao. Korisnički račun čeka vaše odobrenje za aktivaciju:" + mail_subject_reminder: "%{count} aktivnost(i) u kašnjenju u narednim %{days} danima" + mail_body_reminder: "%{count} aktivnost(i) koje su dodjeljenje vama u narednim %{days} danima:" gui_validation_error: 1 greška - gui_validation_error_plural: "{{count}} grešaka" + gui_validation_error_plural: "%{count} grešaka" field_name: Ime field_description: Opis @@ -252,7 +259,8 @@ field_attr_lastname: Atribut za prezime field_attr_mail: Atribut za email field_onthefly: 'Kreiranje korisnika "On-the-fly"' - field_done_ratio: % Realizovano + field_start_date: Početak + field_done_ratio: "% Realizovano" field_auth_source: Mod za authentifikaciju field_hide_mail: Sakrij moju email adresu field_comments: Komentar @@ -307,7 +315,6 @@ setting_cross_project_issue_relations: Omogući relacije između aktivnosti na različitim projektima setting_issue_list_default_columns: Podrazumjevane koleone za prikaz na listi aktivnosti setting_repositories_encodings: Enkodiranje repozitorija - setting_commit_logs_encoding: 'Enkodiranje "commit" poruka' setting_emails_footer: Potpis na email-ovima setting_protocol: Protokol setting_per_page_options: Broj objekata po stranici @@ -391,14 +398,14 @@ label_x_projects: zero: 0 projekata one: 1 projekat - other: "{{count}} projekata" + other: "%{count} projekata" label_project_all: Svi projekti label_project_latest: Posljednji projekti label_issue: Aktivnost label_issue_new: Nova aktivnost label_issue_plural: Aktivnosti label_issue_view_all: Vidi sve aktivnosti - label_issues_by: "Aktivnosti po {{value}}" + label_issues_by: "Aktivnosti po %{value}" label_issue_added: Aktivnost je dodana label_issue_updated: Aktivnost je izmjenjena label_document: Dokument @@ -449,7 +456,7 @@ label_activity_plural: Promjene label_activity: Operacija label_overall_activity: Pregled svih promjena - label_user_activity: "Promjene izvršene od: {{value}}" + label_user_activity: "Promjene izvršene od: %{value}" label_new: Novi label_logged_as: Prijavljen kao label_environment: Sistemsko okruženje @@ -458,7 +465,7 @@ label_auth_source_new: Novi mod authentifikacije label_auth_source_plural: Modovi authentifikacije label_subproject_plural: Podprojekti - label_and_its_subprojects: "{{value}} i njegovi podprojekti" + label_and_its_subprojects: "%{value} i njegovi podprojekti" label_min_max_length: Min - Maks dužina label_list: Lista label_date: Datum @@ -469,8 +476,8 @@ label_text: Dugi tekst label_attribute: Atribut label_attribute_plural: Atributi - label_download: "{{count}} download" - label_download_plural: "{{count}} download-i" + label_download: "%{count} download" + label_download_plural: "%{count} download-i" label_no_data: Nema podataka za prikaz label_change_status: Promjeni status label_history: Istorija @@ -501,17 +508,17 @@ label_closed_issues: zatvoren label_closed_issues_plural: zatvoreni label_x_open_issues_abbr_on_total: - zero: 0 otvoreno / {{total}} - one: 1 otvorena / {{total}} - other: "{{count}} otvorene / {{total}}" + zero: 0 otvoreno / %{total} + one: 1 otvorena / %{total} + other: "%{count} otvorene / %{total}" label_x_open_issues_abbr: zero: 0 otvoreno one: 1 otvorena - other: "{{count}} otvorene" + other: "%{count} otvorene" label_x_closed_issues_abbr: zero: 0 zatvoreno one: 1 zatvorena - other: "{{count}} zatvorene" + other: "%{count} zatvorene" label_total: Ukupno label_permissions: Dozvole label_current_status: Tekući status @@ -529,7 +536,7 @@ label_months_from: mjeseci od label_gantt: Gantt label_internal: Interno - label_last_changes: "posljednjih {{count}} promjena" + label_last_changes: "posljednjih %{count} promjena" label_change_view_all: Vidi sve promjene label_personalize_page: Personaliziraj ovu stranicu label_comment: Komentar @@ -537,7 +544,7 @@ label_x_comments: zero: bez komentara one: 1 komentar - other: "{{count}} komentari" + other: "%{count} komentari" label_comment_add: Dodaj komentar label_comment_added: Komentar je dodan label_comment_delete: Izbriši komentar @@ -556,7 +563,7 @@ label_yesterday: juče label_this_week: ova hefta label_last_week: zadnja hefta - label_last_n_days: "posljednjih {{count}} dana" + label_last_n_days: "posljednjih %{count} dana" label_this_month: ovaj mjesec label_last_month: posljednji mjesec label_this_year: ova godina @@ -570,8 +577,8 @@ label_repository: Repozitorij label_repository_plural: Repozitoriji label_browse: Listaj - label_modification: "{{count}} promjena" - label_modification_plural: "{{count}} promjene" + label_modification: "%{count} promjena" + label_modification_plural: "%{count} promjene" label_revision: Revizija label_revision_plural: Revizije label_associated_revisions: Doddjeljene revizije @@ -589,8 +596,8 @@ label_sort_lower: Pomjeri dole label_sort_lowest: Pomjeri na dno label_roadmap: Plan realizacije - label_roadmap_due_in: "Obavezan do {{value}}" - label_roadmap_overdue: "{{value}} kasni" + label_roadmap_due_in: "Obavezan do %{value}" + label_roadmap_overdue: "%{value} kasni" label_roadmap_no_issues: Nema aktivnosti za ovu verziju label_search: Traži label_result_plural: Rezultati @@ -608,8 +615,8 @@ label_changes_details: Detalji svih promjena label_issue_tracking: Evidencija aktivnosti label_spent_time: Utrošak vremena - label_f_hour: "{{value}} sahat" - label_f_hour_plural: "{{value}} sahata" + label_f_hour: "%{value} sahat" + label_f_hour_plural: "%{value} sahata" label_time_tracking: Evidencija vremena label_change_plural: Promjene label_statistics: Statistika @@ -658,13 +665,13 @@ label_date_from: Od label_date_to: Do label_language_based: Bazirano na korisnikovom jeziku - label_sort_by: "Sortiraj po {{value}}" + label_sort_by: "Sortiraj po %{value}" label_send_test_email: Pošalji testni email - label_feeds_access_key_created_on: "RSS pristupni ključ kreiran prije {{value}} dana" + label_feeds_access_key_created_on: "RSS pristupni ključ kreiran prije %{value} dana" label_module_plural: Moduli - label_added_time_by: "Dodano od {{author}} prije {{age}}" - label_updated_time_by: "Izmjenjeno od {{author}} prije {{age}}" - label_updated_time: "Izmjenjeno prije {{value}}" + label_added_time_by: "Dodano od %{author} prije %{age}" + label_updated_time_by: "Izmjenjeno od %{author} prije %{age}" + label_updated_time: "Izmjenjeno prije %{value}" label_jump_to_a_project: Skoči na projekat... label_file_plural: Fajlovi label_changeset_plural: Setovi promjena @@ -680,7 +687,7 @@ label_registration_activation_by_email: aktivacija korisničkog računa email-om label_registration_manual_activation: ručna aktivacija korisničkog računa label_registration_automatic_activation: automatska kreacija korisničkog računa - label_display_per_page: "Po stranici: {{value}}" + label_display_per_page: "Po stranici: %{value}" label_age: Starost label_change_properties: Promjena osobina label_general: Generalno @@ -746,44 +753,44 @@ text_regexp_info: npr. ^[A-Z0-9]+$ text_min_max_length_info: 0 znači bez restrikcije text_project_destroy_confirmation: Sigurno želite izbrisati ovaj projekat i njegove podatke ? - text_subprojects_destroy_warning: "Podprojekt(i): {{value}} će takođe biti izbrisani." + text_subprojects_destroy_warning: "Podprojekt(i): %{value} će takođe biti izbrisani." text_workflow_edit: Odaberite ulogu i područje aktivnosti za ispravku toka promjena na aktivnosti text_are_you_sure: Da li ste sigurni ? text_tip_issue_begin_day: zadatak počinje danas text_tip_issue_end_day: zadatak završava danas text_tip_issue_begin_end_day: zadatak započinje i završava danas text_project_identifier_info: 'Samo mala slova (a-z), brojevi i crtice su dozvoljeni.
    Nakon snimanja, identifikator se ne može mijenjati.' - text_caracters_maximum: "maksimum {{count}} karaktera." - text_caracters_minimum: "Dužina mora biti najmanje {{count}} znakova." - text_length_between: "Broj znakova između {{min}} i {{max}}." + text_caracters_maximum: "maksimum %{count} karaktera." + text_caracters_minimum: "Dužina mora biti najmanje %{count} znakova." + text_length_between: "Broj znakova između %{min} i %{max}." text_tracker_no_workflow: Tok statusa nije definisan za ovo područje aktivnosti text_unallowed_characters: Nedozvoljeni znakovi text_comma_separated: Višestruke vrijednosti dozvoljene (odvojiti zarezom). text_issues_ref_in_commit_messages: 'Referenciranje i zatvaranje aktivnosti putem "commit" poruka' - text_issue_added: "Aktivnost {{id}} je prijavljena od {{author}}." - text_issue_updated: "Aktivnost {{id}} je izmjenjena od {{author}}." + text_issue_added: "Aktivnost %{id} je prijavljena od %{author}." + text_issue_updated: "Aktivnost %{id} je izmjenjena od %{author}." text_wiki_destroy_confirmation: Sigurno želite izbrisati ovaj wiki i čitav njegov sadržaj ? - text_issue_category_destroy_question: "Neke aktivnosti ({{count}}) pripadaju ovoj kategoriji. Sigurno to želite uraditi ?" + text_issue_category_destroy_question: "Neke aktivnosti (%{count}) pripadaju ovoj kategoriji. Sigurno to želite uraditi ?" text_issue_category_destroy_assignments: Ukloni kategoriju text_issue_category_reassign_to: Ponovo dodijeli ovu kategoriju text_user_mail_option: "Za projekte koje niste odabrali, primićete samo notifikacije o stavkama koje pratite ili ste u njih uključeni (npr. vi ste autor ili su vama dodjeljenje)." text_no_configuration_data: "Uloge, područja aktivnosti, statusi aktivnosti i tok promjena statusa nisu konfigurisane.\nKrajnje je preporučeno da učitate tekuđe postavke. Kasnije ćete ih moći mjenjati po svojim potrebama." text_load_default_configuration: Učitaj tekuću konfiguraciju - text_status_changed_by_changeset: "Primjenjeno u setu promjena {{value}}." + text_status_changed_by_changeset: "Primjenjeno u setu promjena %{value}." text_issues_destroy_confirmation: 'Sigurno želite izbrisati odabranu/e aktivnost/i ?' text_select_project_modules: 'Odaberi module koje želite u ovom projektu:' text_default_administrator_account_changed: Tekući administratorski račun je promjenjen text_file_repository_writable: U direktorij sa fajlovima koji su prilozi se može pisati text_plugin_assets_writable: U direktorij plugin-ova se može pisati text_rmagick_available: RMagick je dostupan (opciono) - text_destroy_time_entries_question: "{{hours}} sahata je prijavljeno na aktivnostima koje želite brisati. Želite li to učiniti ?" + text_destroy_time_entries_question: "%{hours} sahata je prijavljeno na aktivnostima koje želite brisati. Želite li to učiniti ?" text_destroy_time_entries: Izbriši prijavljeno vrijeme text_assign_time_entries_to_project: Dodaj prijavljenoo vrijeme projektu text_reassign_time_entries: 'Preraspodjeli prijavljeno vrijeme na ovu aktivnost:' - text_user_wrote: "{{value}} je napisao/la:" - text_enumeration_destroy_question: "Za {{count}} objekata je dodjeljenja ova vrijednost." + 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' @@ -818,23 +825,23 @@ button_annotate: Zabilježi button_activate: Aktiviraj label_sort: Sortiranje - label_date_from_to: Od {{start}} do {{end}} + label_date_from_to: Od %{start} do %{end} label_ascending: Rastuće label_descending: Opadajuće label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? + text_wiki_page_destroy_question: This page has %{descendants} child page(s) and descendant(s). What do you want to do? text_wiki_page_reassign_children: Reassign child pages to this parent page text_wiki_page_nullify_children: Keep child pages as root pages text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated" label_wiki_content_added: Wiki page added - 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_added: "'%{id}' wiki page has been added" + mail_body_wiki_content_added: The '%{id}' wiki page has been added by %{author}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '%{id}' wiki page has been updated by %{author}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -842,14 +849,14 @@ label_branch: Branch 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"). - 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_changed: "%{label} changed from %{old} to %{new}" + text_journal_set_to: "%{label} set to %{value}" + text_journal_deleted: "%{label} deleted (%{old})" label_group_plural: Groups label_group: Group label_group_new: New group label_time_entry_plural: Spent time - text_journal_added: "{{label}} {{value}} added" + text_journal_added: "%{label} %{value} added" field_active: Active enumeration_system_activity: System Activity permission_delete_issue_watchers: Delete watchers @@ -884,9 +891,9 @@ setting_start_of_week: Start calendars on permission_view_issues: View Issues label_display_used_statuses_only: Only display statuses that are used by this tracker - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_api_access_key: API access key - label_api_access_key_created_on: API access key created {{value}} ago + label_api_access_key_created_on: API access key created %{value} ago label_feeds_access_key: RSS access key notice_api_access_key_reseted: Your API access key was reset. setting_rest_api_enabled: Enable REST web service @@ -913,12 +920,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -926,7 +933,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -937,8 +944,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: 'Enkodiranje "commit" poruka' + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/ca.yml --- a/config/locales/ca.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/ca.yml Mon Jul 25 14:23:37 2011 +0100 @@ -20,7 +20,10 @@ month_names: [~, Gener, Febrer, Març, Abril, Maig, Juny, Juliol, Agost, Setembre, Octubre, Novembre, Desembre] abbr_month_names: [~, Gen, Feb, Mar, Abr, Mai, Jun, Jul, Ago, Set, Oct, Nov, Des] # Used in date_select and datime_select. - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -36,37 +39,37 @@ half_a_minute: "mig minut" less_than_x_seconds: one: "menys d'un segon" - other: "menys de {{count}} segons" + other: "menys de %{count} segons" x_seconds: one: "1 segons" - other: "{{count}} segons" + other: "%{count} segons" less_than_x_minutes: one: "menys d'un minut" - other: "menys de {{count}} minuts" + other: "menys de %{count} minuts" x_minutes: one: "1 minut" - other: "{{count}} minuts" + other: "%{count} minuts" about_x_hours: one: "aproximadament 1 hora" - other: "aproximadament {{count}} hores" + other: "aproximadament %{count} hores" x_days: one: "1 dia" - other: "{{count}} dies" + other: "%{count} dies" about_x_months: one: "aproximadament 1 mes" - other: "aproximadament {{count}} mesos" + other: "aproximadament %{count} mesos" x_months: one: "1 mes" - other: "{{count}} mesos" + other: "%{count} mesos" about_x_years: one: "aproximadament 1 any" - other: "aproximadament {{count}} anys" + other: "aproximadament %{count} anys" over_x_years: one: "més d'un any" - other: "més de {{count}} anys" + other: "més de %{count} anys" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" number: # Default format for numbers @@ -98,6 +101,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "no està inclòs a la llista" exclusion: "està reservat" @@ -112,11 +119,11 @@ taken: "ja s'està utilitzant" not_a_number: "no és un número" not_a_date: "no és una data vàlida" - greater_than: "ha de ser més gran que {{count}}" - greater_than_or_equal_to: "ha de ser més gran o igual a {{count}}" - equal_to: "ha de ser igual a {{count}}" - less_than: "ha de ser menys que {{count}}" - less_than_or_equal_to: "ha de ser menys o igual a {{count}}" + greater_than: "ha de ser més gran que %{count}" + greater_than_or_equal_to: "ha de ser més gran o igual a %{count}" + equal_to: "ha de ser igual a %{count}" + less_than: "ha de ser menys que %{count}" + less_than_or_equal_to: "ha de ser menys o igual a %{count}" odd: "ha de ser senar" even: "ha de ser parell" greater_than_start_date: "ha de ser superior que la data inicial" @@ -134,7 +141,7 @@ general_csv_separator: ';' general_csv_decimal_separator: ',' general_csv_encoding: ISO-8859-15 - general_pdf_encoding: ISO-8859-15 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' notice_account_updated: "El compte s'ha actualitzat correctament." @@ -153,12 +160,12 @@ notice_file_not_found: "La pàgina a la que intenteu accedir no existeix o s'ha suprimit." notice_locking_conflict: Un altre usuari ha actualitzat les dades. notice_not_authorized: No teniu permís per a accedir a aquesta pàgina. - notice_email_sent: "S'ha enviat un correu electrònic a {{value}}" - notice_email_error: "S'ha produït un error en enviar el correu ({{value}})" + notice_email_sent: "S'ha enviat un correu electrònic a %{value}" + notice_email_error: "S'ha produït un error en enviar el correu (%{value})" notice_feeds_access_key_reseted: "S'ha reiniciat la clau d'accés del RSS." notice_api_access_key_reseted: "S'ha reiniciat la clau d'accés a l'API." - notice_failed_to_save_issues: "No s'han pogut desar %s assumptes de {{count}} seleccionats: {{ids}}." - notice_failed_to_save_members: "No s'han pogut desar els membres: {{errors}}." + notice_failed_to_save_issues: "No s'han pogut desar %{count} assumptes de %{total} seleccionats: %{ids}." + notice_failed_to_save_members: "No s'han pogut desar els membres: %{errors}." notice_no_issue_selected: "No s'ha seleccionat cap assumpte. Activeu els assumptes que voleu editar." notice_account_pending: "S'ha creat el compte i ara està pendent de l'aprovació de l'administrador." notice_default_data_loaded: "S'ha carregat correctament la configuració predeterminada." @@ -166,9 +173,9 @@ notice_unable_delete_time_entry: "No s'ha pogut suprimir l'entrada del registre de temps." notice_issue_done_ratios_updated: "S'ha actualitzat el tant per cent dels assumptes." - error_can_t_load_default_data: "No s'ha pogut carregar la configuració predeterminada: {{value}} " + error_can_t_load_default_data: "No s'ha pogut carregar la configuració predeterminada: %{value} " error_scm_not_found: "No s'ha trobat l'entrada o la revisió en el dipòsit." - error_scm_command_failed: "S'ha produït un error en intentar accedir al dipòsit: {{value}}" + error_scm_command_failed: "S'ha produït un error en intentar accedir al dipòsit: %{value}" error_scm_annotate: "L'entrada no existeix o no s'ha pogut anotar." error_issue_not_found_in_project: "No s'ha trobat l'assumpte o no pertany a aquest projecte" error_no_tracker_in_project: "Aquest projecte no té seguidor associat. Comproveu els paràmetres del projecte." @@ -182,26 +189,26 @@ error_workflow_copy_source: "Seleccioneu un seguidor o rol font" error_workflow_copy_target: "Seleccioneu seguidors i rols objectiu" error_unable_delete_issue_status: "No s'ha pogut suprimir l'estat de l'assumpte" - error_unable_to_connect: "No s'ha pogut connectar ({{value}})" - warning_attachments_not_saved: "No s'han pogut desar {{count}} fitxers." + error_unable_to_connect: "No s'ha pogut connectar (%{value})" + warning_attachments_not_saved: "No s'han pogut desar %{count} fitxers." - mail_subject_lost_password: "Contrasenya de {{value}}" + mail_subject_lost_password: "Contrasenya de %{value}" mail_body_lost_password: "Per a canviar la contrasenya, feu clic en l'enllaç següent:" - mail_subject_register: "Activació del compte de {{value}}" + mail_subject_register: "Activació del compte de %{value}" mail_body_register: "Per a activar el compte, feu clic en l'enllaç següent:" - mail_body_account_information_external: "Podeu utilitzar el compte «{{value}}» per a entrar." + mail_body_account_information_external: "Podeu utilitzar el compte «%{value}» per a entrar." mail_body_account_information: Informació del compte - mail_subject_account_activation_request: "Sol·licitud d'activació del compte de {{value}}" - mail_body_account_activation_request: "S'ha registrat un usuari nou ({{value}}). El seu compte està pendent d'aprovació:" - mail_subject_reminder: "{{count}} assumptes venceran els següents {{days}} dies" - mail_body_reminder: "{{count}} assumptes que teniu assignades venceran els següents {{days}} dies:" - mail_subject_wiki_content_added: "S'ha afegit la pàgina wiki «{{id}}»" - mail_body_wiki_content_added: "En {{author}} ha afegit la pàgina wiki «{{id}}»." - mail_subject_wiki_content_updated: "S'ha actualitzat la pàgina wiki «{{id}}»" - mail_body_wiki_content_updated: "En {{author}} ha actualitzat la pàgina wiki «{{id}}»." + mail_subject_account_activation_request: "Sol·licitud d'activació del compte de %{value}" + mail_body_account_activation_request: "S'ha registrat un usuari nou (%{value}). El seu compte està pendent d'aprovació:" + mail_subject_reminder: "%{count} assumptes venceran els següents %{days} dies" + mail_body_reminder: "%{count} assumptes que teniu assignades venceran els següents %{days} dies:" + mail_subject_wiki_content_added: "S'ha afegit la pàgina wiki «%{id}»" + mail_body_wiki_content_added: "En %{author} ha afegit la pàgina wiki «%{id}»." + mail_subject_wiki_content_updated: "S'ha actualitzat la pàgina wiki «%{id}»" + mail_body_wiki_content_updated: "En %{author} ha actualitzat la pàgina wiki «%{id}»." gui_validation_error: 1 error - gui_validation_error_plural: "{{count}} errors" + gui_validation_error_plural: "%{count} errors" field_name: Nom field_description: Descripció @@ -264,7 +271,8 @@ field_attr_lastname: Atribut del cognom field_attr_mail: Atribut del correu electrònic field_onthefly: "Creació de l'usuari «al vol»" - field_done_ratio: % realitzat + field_start_date: Inici + field_done_ratio: "% realitzat" field_auth_source: "Mode d'autenticació" field_hide_mail: "Oculta l'adreça de correu electrònic" field_comments: Comentari @@ -322,7 +330,6 @@ setting_cross_project_issue_relations: "Permet les relacions d'assumptes entre projectes" setting_issue_list_default_columns: "Columnes mostrades per defecte en la llista d'assumptes" setting_repositories_encodings: Codificacions del dipòsit - setting_commit_logs_encoding: Codificació dels missatges publicats setting_emails_footer: Peu dels correus electrònics setting_protocol: Protocol setting_per_page_options: Opcions dels objectes per pàgina @@ -427,14 +434,14 @@ label_x_projects: zero: cap projecte one: 1 projecte - other: "{{count}} projectes" + other: "%{count} projectes" label_project_all: Tots els projectes label_project_latest: Els últims projectes label_issue: Assumpte label_issue_new: Assumpte nou label_issue_plural: Assumptes label_issue_view_all: Visualitza tots els assumptes - label_issues_by: "Assumptes per {{value}}" + label_issues_by: "Assumptes per %{value}" label_issue_added: Assumpte afegit label_issue_updated: Assumpte actualitzat label_document: Document @@ -485,7 +492,7 @@ label_registered_on: Informat el label_activity: Activitat label_overall_activity: Activitat global - label_user_activity: "Activitat de {{value}}" + label_user_activity: "Activitat de %{value}" label_new: Nou label_logged_as: Heu entrat com a label_environment: Entorn @@ -495,7 +502,7 @@ label_auth_source_plural: "Modes d'autenticació" label_subproject_plural: Subprojectes label_subproject_new: "Subprojecte nou" - label_and_its_subprojects: "{{value}} i els seus subprojectes" + label_and_its_subprojects: "%{value} i els seus subprojectes" label_min_max_length: Longitud mín - max label_list: Llist label_date: Data @@ -506,8 +513,8 @@ label_text: Text llarg label_attribute: Atribut label_attribute_plural: Atributs - label_download: "{{count}} baixada" - label_download_plural: "{{count}} baixades" + label_download: "%{count} baixada" + label_download_plural: "%{count} baixades" label_no_data: Sense dades a mostrar label_change_status: "Canvia l'estat" label_history: Historial @@ -539,17 +546,17 @@ label_closed_issues: tancat label_closed_issues_plural: tancats label_x_open_issues_abbr_on_total: - zero: 0 oberts / {{total}} - one: 1 obert / {{total}} - other: "{{count}} oberts / {{total}}" + zero: 0 oberts / %{total} + one: 1 obert / %{total} + other: "%{count} oberts / %{total}" label_x_open_issues_abbr: zero: 0 oberts one: 1 obert - other: "{{count}} oberts" + other: "%{count} oberts" label_x_closed_issues_abbr: zero: 0 tancats one: 1 tancat - other: "{{count}} tancats" + other: "%{count} tancats" label_total: Total label_permissions: Permisos label_current_status: Estat actual @@ -567,7 +574,7 @@ label_months_from: mesos des de label_gantt: Gantt label_internal: Intern - label_last_changes: "últims {{count}} canvis" + label_last_changes: "últims %{count} canvis" label_change_view_all: Visualitza tots els canvis label_personalize_page: Personalitza aquesta pàgina label_comment: Comentari @@ -575,7 +582,7 @@ label_x_comments: zero: sense comentaris one: 1 comentari - other: "{{count}} comentaris" + other: "%{count} comentaris" label_comment_add: Afegeix un comentari label_comment_added: Comentari afegit label_comment_delete: Suprimeix comentaris @@ -596,7 +603,7 @@ label_yesterday: ahir label_this_week: aquesta setmana label_last_week: "l'última setmana" - label_last_n_days: "els últims {{count}} dies" + label_last_n_days: "els últims %{count} dies" label_this_month: aquest més label_last_month: "l'últim més" label_this_year: aquest any @@ -610,13 +617,13 @@ label_repository: Dipòsit label_repository_plural: Dipòsits label_browse: Navega - label_modification: "{{count}} canvi" - label_modification_plural: "{{count}} canvis" + label_modification: "%{count} canvi" + label_modification_plural: "%{count} canvis" label_branch: Branca label_tag: Etiqueta label_revision: Revisió label_revision_plural: Revisions - label_revision_id: "Revisió {{value}}" + label_revision_id: "Revisió %{value}" label_associated_revisions: Revisions associades label_added: afegit label_modified: modificat @@ -633,8 +640,8 @@ label_sort_lower: Mou cap avall label_sort_lowest: Mou a la part inferior label_roadmap: Planificació - label_roadmap_due_in: "Venç en {{value}}" - label_roadmap_overdue: "{{value}} tard" + label_roadmap_due_in: "Venç en %{value}" + label_roadmap_overdue: "%{value} tard" label_roadmap_no_issues: No hi ha assumptes per a aquesta versió label_search: Cerca label_result_plural: Resultats @@ -653,8 +660,8 @@ label_issue_tracking: "Seguiment d'assumptes" label_spent_time: Temps invertit label_overall_spent_time: "Temps total invertit" - label_f_hour: "{{value}} hora" - label_f_hour_plural: "{{value}} hores" + label_f_hour: "%{value} hora" + label_f_hour_plural: "%{value} hores" label_time_tracking: Temps de seguiment label_change_plural: Canvis label_statistics: Estadístiques @@ -705,15 +712,15 @@ label_date_from: Des de label_date_to: A label_language_based: "Basat en l'idioma de l'usuari" - label_sort_by: "Ordena per {{value}}" + label_sort_by: "Ordena per %{value}" label_send_test_email: Envia un correu electrònic de prova label_feeds_access_key: "Clau d'accés del RSS" label_missing_feeds_access_key: "Falta una clau d'accés del RSS" - label_feeds_access_key_created_on: "Clau d'accés del RSS creada fa {{value}}" + label_feeds_access_key_created_on: "Clau d'accés del RSS creada fa %{value}" label_module_plural: Mòduls - label_added_time_by: "Afegit per {{author}} fa {{age}}" - label_updated_time_by: "Actualitzat per {{author}} fa {{age}}" - label_updated_time: "Actualitzat fa {{value}}" + label_added_time_by: "Afegit per %{author} fa %{age}" + label_updated_time_by: "Actualitzat per %{author} fa %{age}" + label_updated_time: "Actualitzat fa %{value}" label_jump_to_a_project: Salta al projecte... label_file_plural: Fitxers label_changeset_plural: Conjunt de canvis @@ -729,7 +736,7 @@ label_registration_activation_by_email: activació del compte per correu electrònic label_registration_manual_activation: activació del compte manual label_registration_automatic_activation: activació del compte automàtica - label_display_per_page: "Per pàgina: {{value}}" + label_display_per_page: "Per pàgina: %{value}" label_age: Edat label_change_properties: Canvia les propietats label_general: General @@ -752,7 +759,7 @@ label_sort: Ordena label_ascending: Ascendent label_descending: Descendent - label_date_from_to: Des de {{start}} a {{end}} + label_date_from_to: Des de %{start} a %{end} label_wiki_content_added: "S'ha afegit la pàgina wiki" label_wiki_content_updated: "S'ha actualitzat la pàgina wiki" label_group: Grup @@ -771,7 +778,7 @@ label_display_used_statuses_only: "Mostra només els estats que utilitza aquest seguidor" label_api_access_key: "Clau d'accés a l'API" label_missing_api_access_key: "Falta una clau d'accés de l'API" - label_api_access_key_created_on: "Clau d'accés de l'API creada fa {{value}}" + label_api_access_key_created_on: "Clau d'accés de l'API creada fa %{value}" label_profile: Perfil label_subtask_plural: Subtasques label_project_copy_notifications: "Envia notificacions de correu electrònic durant la còpia del projecte" @@ -834,53 +841,53 @@ text_regexp_info: ex. ^[A-Z0-9]+$ text_min_max_length_info: 0 significa sense restricció text_project_destroy_confirmation: Segur que voleu suprimir aquest projecte i les dades relacionades? - text_subprojects_destroy_warning: "També seran suprimits els seus subprojectes: {{value}}." + text_subprojects_destroy_warning: "També seran suprimits els seus subprojectes: %{value}." text_workflow_edit: Seleccioneu un rol i un seguidor per a editar el flux de treball text_are_you_sure: Segur? - text_journal_changed: "{{label}} ha canviat de {{old}} a {{new}}" - text_journal_set_to: "{{label}} s'ha establert a {{value}}" - text_journal_deleted: "{{label}} s'ha suprimit ({{old}})" - text_journal_added: "S'ha afegit {{label}} {{value}}" + text_journal_changed: "%{label} ha canviat de %{old} a %{new}" + text_journal_set_to: "%{label} s'ha establert a %{value}" + text_journal_deleted: "%{label} s'ha suprimit (%{old})" + text_journal_added: "S'ha afegit %{label} %{value}" text_tip_issue_begin_day: "tasca que s'inicia aquest dia" text_tip_issue_end_day: tasca que finalitza aquest dia text_tip_issue_begin_end_day: "tasca que s'inicia i finalitza aquest dia" text_project_identifier_info: "Es permeten lletres en minúscules (a-z), números i guions.
    Un cop desat, l'identificador no es pot modificar." - text_caracters_maximum: "{{count}} caràcters com a màxim." - text_caracters_minimum: "Com a mínim ha de tenir {{count}} caràcters." - text_length_between: "Longitud entre {{min}} i {{max}} caràcters." + text_caracters_maximum: "%{count} caràcters com a màxim." + text_caracters_minimum: "Com a mínim ha de tenir %{count} caràcters." + text_length_between: "Longitud entre %{min} i %{max} caràcters." text_tracker_no_workflow: "No s'ha definit cap flux de treball per a aquest seguidor" text_unallowed_characters: Caràcters no permesos text_comma_separated: Es permeten valors múltiples (separats per una coma). text_line_separated: "Es permeten diversos valors (una línia per cada valor)." text_issues_ref_in_commit_messages: Referència i soluciona els assumptes en els missatges publicats - text_issue_added: "L'assumpte {{id}} ha sigut informat per {{author}}." - text_issue_updated: "L'assumpte {{id}} ha sigut actualitzat per {{author}}." + text_issue_added: "L'assumpte %{id} ha sigut informat per %{author}." + text_issue_updated: "L'assumpte %{id} ha sigut actualitzat per %{author}." text_wiki_destroy_confirmation: Segur que voleu suprimir aquest wiki i tots els seus continguts? - text_issue_category_destroy_question: "Alguns assumptes ({{count}}) estan assignats a aquesta categoria. Què voleu fer?" + text_issue_category_destroy_question: "Alguns assumptes (%{count}) estan assignats a aquesta categoria. Què voleu fer?" text_issue_category_destroy_assignments: Suprimeix les assignacions de la categoria text_issue_category_reassign_to: Torna a assignar els assumptes a aquesta categoria text_user_mail_option: "Per als projectes no seleccionats, només rebreu notificacions sobre les coses que vigileu o que hi esteu implicat (ex. assumptes que en sou l'autor o hi esteu assignat)." text_no_configuration_data: "Encara no s'han configurat els rols, seguidors, estats de l'assumpte i flux de treball.\nÉs altament recomanable que carregueu la configuració predeterminada. Podreu modificar-la un cop carregada." text_load_default_configuration: Carrega la configuració predeterminada - text_status_changed_by_changeset: "Aplicat en el conjunt de canvis {{value}}." + text_status_changed_by_changeset: "Aplicat en el conjunt de canvis %{value}." text_issues_destroy_confirmation: "Segur que voleu suprimir els assumptes seleccionats?" text_select_project_modules: "Seleccioneu els mòduls a habilitar per a aquest projecte:" text_default_administrator_account_changed: "S'ha canviat el compte d'administrador predeterminat" text_file_repository_writable: Es pot escriure en el dipòsit de fitxers text_plugin_assets_writable: Es pot escriure als connectors actius text_rmagick_available: RMagick disponible (opcional) - text_destroy_time_entries_question: "S'han informat {{hours}} hores en els assumptes que aneu a suprimir. Què voleu fer?" + text_destroy_time_entries_question: "S'han informat %{hours} hores en els assumptes que aneu a suprimir. Què voleu fer?" text_destroy_time_entries: Suprimeix les hores informades text_assign_time_entries_to_project: Assigna les hores informades al projecte text_reassign_time_entries: "Torna a assignar les hores informades a aquest assumpte:" - text_user_wrote: "{{value}} va escriure:" - text_enumeration_destroy_question: "{{count}} objectes estan assignats a aquest valor." + 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" - text_wiki_page_destroy_question: "Aquesta pàgina té {{descendants}} pàgines fill i descendents. Què voleu fer?" + text_wiki_page_destroy_question: "Aquesta pàgina té %{descendants} pàgines fill i descendents. Què voleu fer?" text_wiki_page_nullify_children: "Deixa les pàgines fill com a pàgines arrel" text_wiki_page_destroy_children: "Suprimeix les pàgines fill i tots els seus descendents" text_wiki_page_reassign_children: "Reasigna les pàgines fill a aquesta pàgina pare" @@ -915,7 +922,7 @@ enumeration_activities: Activitats (seguidor de temps) enumeration_system_activity: Activitat del sistema - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -926,8 +933,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Codificació dels missatges publicats + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/cs.yml --- a/config/locales/cs.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/cs.yml Mon Jul 25 14:23:37 2011 +0100 @@ -1,4 +1,9 @@ +# Update to 1.1 by Michal Gebauer +# Updated by Josef Liška +# 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: @@ -16,7 +21,10 @@ month_names: [~, Leden, Únor, Březen, Duben, Květen, Červen, Červenec, Srpen, Září, Říjen, Listopad, Prosinec] abbr_month_names: [~, Led, Úno, Bře, Dub, Kvě, Čer, Čec, Srp, Zář, Říj, Lis, Pro] # Used in date_select and datime_select. - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -26,63 +34,65 @@ long: "%B %d, %Y %H:%M" am: "dop." pm: "odp." - + datetime: distance_in_words: half_a_minute: "půl minuty" less_than_x_seconds: one: "méně než sekunda" - other: "méně než {{count}} sekund" + other: "méně než %{count} sekund" x_seconds: one: "1 sekunda" - other: "{{count}} sekund" + other: "%{count} sekund" less_than_x_minutes: one: "méně než minuta" - other: "méně než {{count}} minut" + other: "méně než %{count} minut" x_minutes: one: "1 minuta" - other: "{{count}} minut" + other: "%{count} minut" about_x_hours: one: "asi 1 hodina" - other: "asi {{count}} hodin" + other: "asi %{count} hodin" x_days: one: "1 den" - other: "{{count}} dnů" + other: "%{count} dnů" about_x_months: one: "asi 1 měsíc" - other: "asi {{count}} měsíců" + other: "asi %{count} měsíců" x_months: one: "1 měsíc" - other: "{{count}} měsíců" + other: "%{count} měsíců" about_x_years: one: "asi 1 rok" - other: "asi {{count}} let" + other: "asi %{count} let" over_x_years: one: "více než 1 rok" - other: "více než {{count}} roky" + other: "více než %{count} roky" almost_x_years: one: "témeř 1 rok" - other: "téměř {{count}} roky" + 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: @@ -92,6 +102,10 @@ activerecord: errors: + template: + header: + 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" @@ -106,11 +120,11 @@ taken: "je již použito" not_a_number: "není číslo" not_a_date: "není platné datum" - greater_than: "musí být větší než {{count}}" - greater_than_or_equal_to: "musí být větší nebo rovno {{count}}" - equal_to: "musí být přesně {{count}}" - less_than: "musí být méně než {{count}}" - less_than_or_equal_to: "musí být méně nebo rovno {{count}}" + greater_than: "musí být větší než %{count}" + greater_than_or_equal_to: "musí být větší nebo rovno %{count}" + equal_to: "musí být přesně %{count}" + less_than: "musí být méně než %{count}" + less_than_or_equal_to: "musí být méně nebo rovno %{count}" odd: "musí být liché" even: "musí být sudé" greater_than_start_date: "musí být větší než počáteční datum" @@ -118,10 +132,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 - # 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' @@ -150,32 +160,58 @@ 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_email_sent: "Na adresu {{value}} byl odeslán email" - notice_email_error: "Při odesílání emailu nastala chyba ({{value}})" + 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_failed_to_save_issues: "Chyba při uložení {{count}} úkolu(ů) z {{total}} vybraných: {{ids}}." + 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_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_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_subject_lost_password: "Vaše heslo (%{value})" mail_body_lost_password: 'Pro změnu vašeho hesla klikněte na následující odkaz:' - mail_subject_register: "Aktivace účtu ({{value}})" + mail_subject_register: "Aktivace účtu (%{value})" mail_body_register: 'Pro aktivaci vašeho účtu klikněte na následující odkaz:' - mail_body_account_information_external: "Pomocí vašeho účtu {{value}} se můžete přihlásit." + mail_body_account_information_external: "Pomocí vašeho účtu %{value} se můžete přihlásit." 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_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)" + gui_validation_error_plural: "%{count} chyb(y)" field_name: Název field_description: Popis @@ -212,6 +248,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ý @@ -237,7 +274,8 @@ field_attr_lastname: Příjemní (atribut) field_attr_mail: Email (atribut) field_onthefly: Automatické vytváření uživatelů - field_done_ratio: % Hotovo + field_start_date: Začátek + field_done_ratio: "% Hotovo" field_auth_source: Autentifikační mód field_hide_mail: Nezobrazovat můj email field_comments: Komentář @@ -255,10 +293,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 @@ -270,6 +321,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 @@ -285,12 +337,93 @@ 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_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 @@ -300,24 +433,27 @@ 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 label_x_projects: zero: žádné projekty one: 1 projekt - other: "{{count}} projekty(ů)" + other: "%{count} projekty(ů)" label_project_all: Všechny projekty label_project_latest: Poslední projekty label_issue: Úkol label_issue_new: Nový úkol label_issue_plural: Úkoly label_issue_view_all: Všechny úkoly - label_issues_by: "Úkoly podle {{value}}" + label_issues_by: "Úkoly podle %{value}" label_issue_added: Úkol přidán label_issue_updated: Úkol aktualizován label_document: Dokument @@ -350,12 +486,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í @@ -366,6 +504,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í @@ -374,6 +513,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 @@ -384,8 +525,8 @@ label_text: Dlouhý text label_attribute: Atribut label_attribute_plural: Atributy - label_download: "{{count}} stažení" - label_download_plural: "{{count}} stažení" + label_download: "%{count} stažení" + label_download_plural: "%{count} stažení" label_no_data: Žádné položky label_change_status: Změnit stav label_history: Historie @@ -407,6 +548,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... @@ -416,17 +558,17 @@ label_closed_issues: uzavřený label_closed_issues_plural: uzavřené label_x_open_issues_abbr_on_total: - zero: 0 otevřených / {{total}} - one: 1 otevřený / {{total}} - other: "{{count}} otevřených / {{total}}" + zero: 0 otevřených / %{total} + one: 1 otevřený / %{total} + other: "%{count} otevřených / %{total}" label_x_open_issues_abbr: zero: 0 otevřených one: 1 otevřený - other: "{{count}} otevřených" + other: "%{count} otevřených" label_x_closed_issues_abbr: zero: 0 uzavřených one: 1 uzavřený - other: "{{count}} uzavřených" + other: "%{count} uzavřených" label_total: Celkem label_permissions: Práva label_current_status: Aktuální stav @@ -444,7 +586,7 @@ label_months_from: měsíců od label_gantt: Ganttův graf label_internal: Interní - label_last_changes: "posledních {{count}} změn" + label_last_changes: "posledních %{count} změn" label_change_view_all: Zobrazit všechny změny label_personalize_page: Přizpůsobit tuto stránku label_comment: Komentář @@ -452,7 +594,7 @@ label_x_comments: zero: žádné komentáře one: 1 komentář - other: "{{count}} komentářů" + other: "%{count} komentářů" label_comment_add: Přidat komentáře label_comment_added: Komentář přidán label_comment_delete: Odstranit komentář @@ -465,13 +607,15 @@ 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 label_yesterday: včera label_this_week: tento týden label_last_week: minulý týden - label_last_n_days: "posledních {{count}} dnů" + label_last_n_days: "posledních %{count} dnů" label_this_month: tento měsíc label_last_month: minulý měsíc label_this_year: tento rok @@ -485,25 +629,31 @@ label_repository: Repozitář label_repository_plural: Repozitáře label_browse: Procházet - label_modification: "{{count}} změna" - label_modification_plural: "{{count}} změn" + 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 label_sort_lower: Přesunout dolů label_sort_lowest: Přesunout na konec label_roadmap: Plán - label_roadmap_due_in: "Zbývá {{value}}" - label_roadmap_overdue: "{{value}} pozdě" + label_roadmap_due_in: "Zbývá %{value}" + label_roadmap_overdue: "%{value} pozdě" label_roadmap_no_issues: Pro tuto verzi nejsou žádné úkoly label_search: Hledat label_result_plural: Výsledky @@ -521,8 +671,9 @@ label_changes_details: Detail všech změn label_issue_tracking: Sledování úkolů label_spent_time: Strávený čas - label_f_hour: "{{value}} hodina" - label_f_hour_plural: "{{value}} hodin" + 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 label_change_plural: Změny label_statistics: Statistiky @@ -541,8 +692,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 @@ -557,6 +709,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 @@ -570,12 +724,15 @@ label_date_from: Od label_date_to: Do label_language_based: Podle výchozího jazyku - label_sort_by: "Seřadit podle {{value}}" + label_sort_by: "Seřadit podle %{value}" label_send_test_email: Poslat testovací email - label_feeds_access_key_created_on: "Přístupový klíč pro RSS byl vytvořen před {{value}}" + 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: "Aktualizováno před {{value}}" + 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 label_changeset_plural: Changesety @@ -587,11 +744,15 @@ 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 label_registration_automatic_activation: automatická aktivace účtu - label_display_per_page: "{{value}} na stránku" + label_display_per_page: "%{value} na stránku" label_age: Věk label_change_properties: Změnit vlastnosti label_general: Obecné @@ -605,6 +766,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 @@ -613,8 +808,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 @@ -625,6 +822,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 @@ -636,54 +834,87 @@ 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: Duplikovat + 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 text_project_identifier_info: 'Jsou povolena malá písmena (a-z), čísla a pomlčky.
    Po uložení již není možné identifikátor změnit.' - text_caracters_maximum: "{{count}} znaků maximálně." - text_caracters_minimum: "Musí být alespoň {{count}} znaků dlouhé." - text_length_between: "Délka mezi {{min}} a {{max}} znaky." + text_caracters_maximum: "%{count} znaků maximálně." + text_caracters_minimum: "Musí být alespoň %{count} znaků dlouhé." + text_length_between: "Délka mezi %{min} a %{max} znaky." 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}}." + text_issue_added: "Úkol %{id} byl vytvořen uživatelem %{author}." + text_issue_updated: "Úkol %{id} byl aktualizován uživatelem %{author}." text_wiki_destroy_confirmation: Opravdu si přejete odstranit tuto Wiki a celý její obsah? - text_issue_category_destroy_question: "Některé úkoly ({{count}}) jsou přiřazeny k této kategorii. Co s nimi chtete udělat?" + text_issue_category_destroy_question: "Některé úkoly (%{count}) jsou přiřazeny k této kategorii. Co s nimi chtete udělat?" text_issue_category_destroy_assignments: Zrušit přiřazení ke kategorii text_issue_category_reassign_to: Přiřadit úkoly do této kategorie text_user_mail_option: "U projektů, které nebyly vybrány, budete dostávat oznámení pouze o vašich či o sledovaných položkách (např. o položkách jejichž jste autor nebo ke kterým jste přiřazen(a))." 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_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_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/configuration.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ář @@ -710,221 +941,43 @@ 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. - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header + + 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Kódování zpráv při commitu + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/da.yml --- a/config/locales/da.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/da.yml Mon Jul 25 14:23:37 2011 +0100 @@ -14,7 +14,10 @@ abbr_day_names: [sø, ma, ti, 'on', to, fr, lø] month_names: [~, januar, februar, marts, april, maj, juni, juli, august, september, oktober, november, december] abbr_month_names: [~, jan, feb, mar, apr, maj, jun, jul, aug, sep, okt, nov, dec] - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -35,37 +38,37 @@ half_a_minute: "et halvt minut" less_than_x_seconds: one: "mindre end et sekund" - other: "mindre end {{count}} sekunder" + other: "mindre end %{count} sekunder" x_seconds: one: "et sekund" - other: "{{count}} sekunder" + other: "%{count} sekunder" less_than_x_minutes: one: "mindre end et minut" - other: "mindre end {{count}} minutter" + other: "mindre end %{count} minutter" x_minutes: one: "et minut" - other: "{{count}} minutter" + other: "%{count} minutter" about_x_hours: one: "cirka en time" - other: "cirka {{count}} timer" + other: "cirka %{count} timer" x_days: one: "en dag" - other: "{{count}} dage" + other: "%{count} dage" about_x_months: one: "cirka en måned" - other: "cirka {{count}} måneder" + other: "cirka %{count} måneder" x_months: one: "en måned" - other: "{{count}} måneder" + other: "%{count} måneder" about_x_years: one: "cirka et år" - other: "cirka {{count}} år" + other: "cirka %{count} år" over_x_years: one: "mere end et år" - other: "mere end {{count}} år" + other: "mere end %{count} år" almost_x_years: one: "næsten 1 år" - other: "næsten {{count}} år" + other: "næsten %{count} år" number: format: @@ -107,6 +110,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "er ikke i listen" exclusion: "er reserveret" @@ -115,27 +122,27 @@ accepted: "skal accepteres" empty: "må ikke udelades" blank: "skal udfyldes" - too_long: "er for lang (højst {{count}} tegn)" - too_short: "er for kort (mindst {{count}} tegn)" - wrong_length: "har forkert længde (skulle være {{count}} tegn)" + too_long: "er for lang (højst %{count} tegn)" + too_short: "er for kort (mindst %{count} tegn)" + wrong_length: "har forkert længde (skulle være %{count} tegn)" taken: "er allerede anvendt" not_a_number: "er ikke et tal" - greater_than: "skal være større end {{count}}" - greater_than_or_equal_to: "skal være større end eller lig med {{count}}" - equal_to: "skal være lig med {{count}}" - less_than: "skal være mindre end {{count}}" - less_than_or_equal_to: "skal være mindre end eller lig med {{count}}" + greater_than: "skal være større end %{count}" + greater_than_or_equal_to: "skal være større end eller lig med %{count}" + equal_to: "skal være lig med %{count}" + less_than: "skal være mindre end %{count}" + less_than_or_equal_to: "skal være mindre end eller lig med %{count}" odd: "skal være ulige" even: "skal være lige" greater_than_start_date: "skal være senere end startdatoen" not_same_project: "hører ikke til samme projekt" circular_dependency: "Denne relation vil skabe et afhængighedsforhold" - 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: "En sag kan ikke relateres til en af dens underopgaver" template: header: - one: "En fejl forhindrede {{model}} i at blive gemt" - other: "{{count}} fejl forhindrede denne {{model}} i at blive gemt" + one: "En fejl forhindrede %{model} i at blive gemt" + other: "%{count} fejl forhindrede denne %{model} i at blive gemt" body: "Der var problemer med følgende felter:" actionview_instancetag_blank_option: Vælg venligst @@ -147,7 +154,7 @@ general_lang_name: 'Danish (Dansk)' general_csv_separator: ',' general_csv_encoding: ISO-8859-1 - general_pdf_encoding: ISO-8859-1 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' notice_account_updated: Kontoen er opdateret. @@ -166,29 +173,29 @@ notice_file_not_found: Siden du forsøger at tilgå eksisterer ikke eller er blevet fjernet. notice_locking_conflict: Data er opdateret af en anden bruger. notice_not_authorized: Du har ikke adgang til denne side. - notice_email_sent: "En email er sendt til {{value}}" - notice_email_error: "En fejl opstod under afsendelse af email ({{value}})" + notice_email_sent: "En email er sendt til %{value}" + notice_email_error: "En fejl opstod under afsendelse af email (%{value})" notice_feeds_access_key_reseted: Din adgangsnøgle til RSS er nulstillet. - notice_failed_to_save_issues: "Det mislykkedes at gemme {{count}} sage(r) på {{total}} valgt: {{ids}}." + notice_failed_to_save_issues: "Det mislykkedes at gemme %{count} sage(r) på %{total} valgt: %{ids}." notice_no_issue_selected: "Ingen sag er valgt! Vælg venligst hvilke emner du vil rette." notice_account_pending: "Din konto er oprettet, og afventer administrators godkendelse." notice_default_data_loaded: Standardopsætningen er indlæst. - error_can_t_load_default_data: "Standardopsætning kunne ikke indlæses: {{value}}" + error_can_t_load_default_data: "Standardopsætning kunne ikke indlæses: %{value}" error_scm_not_found: "Adgang nægtet og/eller revision blev ikke fundet i det valgte repository." - error_scm_command_failed: "En fejl opstod under forbindelsen til det valgte repository: {{value}}" + error_scm_command_failed: "En fejl opstod under forbindelsen til det valgte repository: %{value}" - mail_subject_lost_password: "Dit {{value}} kodeord" - mail_body_lost_password: 'For at ændre dit kodeord, klik på dette link:' - mail_subject_register: "{{value}} kontoaktivering" + mail_subject_lost_password: "Dit %{value} kodeord" + mail_body_lost_password: 'Klik på dette link for at ændre dit kodeord:' + mail_subject_register: "%{value} kontoaktivering" mail_body_register: 'Klik på dette link for at aktivere din konto:' - mail_body_account_information_external: "Du kan bruge din {{value}} konto til at logge ind." + mail_body_account_information_external: "Du kan bruge din %{value} konto til at logge ind." mail_body_account_information: Din kontoinformation - mail_subject_account_activation_request: "{{value}} kontoaktivering" - mail_body_account_activation_request: "En ny bruger ({{value}}) er registreret. Godkend venligst kontoen:" + mail_subject_account_activation_request: "%{value} kontoaktivering" + mail_body_account_activation_request: "En ny bruger (%{value}) er registreret. Godkend venligst kontoen:" gui_validation_error: 1 fejl - gui_validation_error_plural: "{{count}} fejl" + gui_validation_error_plural: "%{count} fejl" field_name: Navn field_description: Beskrivelse @@ -223,7 +230,7 @@ field_due_date: Deadline field_assigned_to: Tildelt til field_priority: Prioritet - field_fixed_version: Target version + field_fixed_version: Udgave field_user: Bruger field_role: Rolle field_homepage: Hjemmeside @@ -250,7 +257,8 @@ field_attr_lastname: Efternavn attribut field_attr_mail: Email attribut field_onthefly: løbende brugeroprettelse - field_done_ratio: % Færdig + field_start_date: Start dato + field_done_ratio: "% færdig" field_auth_source: Sikkerhedsmetode field_hide_mail: Skjul min email field_comments: Kommentar @@ -318,14 +326,14 @@ label_x_projects: zero: Ingen projekter one: 1 projekt - other: "{{count}} projekter" + other: "%{count} projekter" label_project_all: Alle projekter label_project_latest: Seneste projekter label_issue: Sag label_issue_new: Opret sag label_issue_plural: Sager label_issue_view_all: Vis alle sager - label_issues_by: "Sager fra {{value}}" + label_issues_by: "Sager fra %{value}" label_issue_added: Sagen er oprettet label_issue_updated: Sagen er opdateret label_document: Dokument @@ -344,7 +352,7 @@ label_tracker_new: Ny type label_workflow: Arbejdsgang label_issue_status: Sagsstatus - label_issue_status_plural: Sagsstatuser + label_issue_status_plural: Sagsstatusser label_issue_status_new: Ny status label_issue_category: Sagskategori label_issue_category_plural: Sagskategorier @@ -369,9 +377,9 @@ label_logout: Log ud label_help: Hjælp label_reported_issues: Rapporterede sager - label_assigned_to_me_issues: Sager tildelt mig - label_last_login: Sidste login tidspunkt - label_registered_on: Registeret den + label_assigned_to_me_issues: Sager tildelt til mig + label_last_login: Sidste logintidspunkt + label_registered_on: Registreret den label_activity: Aktivitet label_new: Ny label_logged_as: Registreret som @@ -391,8 +399,8 @@ label_text: Lang tekst label_attribute: Attribut label_attribute_plural: Attributter - label_download: "{{count}} Download" - label_download_plural: "{{count}} Downloads" + label_download: "%{count} Download" + label_download_plural: "%{count} Downloads" label_no_data: Ingen data at vise label_change_status: Ændringsstatus label_history: Historik @@ -423,17 +431,17 @@ label_closed_issues: lukket label_closed_issues_plural: lukkede label_x_open_issues_abbr_on_total: - zero: 0 åbne / {{total}} - one: 1 åben / {{total}} - other: "{{count}} åbne / {{total}}" + zero: 0 åbne / %{total} + one: 1 åben / %{total} + other: "%{count} åbne / %{total}" label_x_open_issues_abbr: zero: 0 åbne one: 1 åben - other: "{{count}} åbne" + other: "%{count} åbne" label_x_closed_issues_abbr: zero: 0 lukkede one: 1 lukket - other: "{{count}} lukkede" + other: "%{count} lukkede" label_total: Total label_permissions: Rettigheder label_current_status: Nuværende status @@ -442,7 +450,7 @@ label_none: intet label_nobody: ingen label_next: Næste - label_previous: Forrig + label_previous: Forrige label_used_by: Brugt af label_details: Detaljer label_add_note: Tilføj note @@ -451,7 +459,7 @@ label_months_from: måneder frem label_gantt: Gantt label_internal: Intern - label_last_changes: "sidste {{count}} ændringer" + label_last_changes: "sidste %{count} ændringer" label_change_view_all: Vis alle ændringer label_personalize_page: Tilret denne side label_comment: Kommentar @@ -459,7 +467,7 @@ label_x_comments: zero: ingen kommentarer one: 1 kommentar - other: "{{count}} kommentarer" + other: "%{count} kommentarer" label_comment_add: Tilføj en kommentar label_comment_added: Kommentaren er tilføjet label_comment_delete: Slet kommentar @@ -478,25 +486,25 @@ label_yesterday: i går label_this_week: denne uge label_last_week: sidste uge - label_last_n_days: "sidste {{count}} dage" + label_last_n_days: "sidste %{count} dage" label_this_month: denne måned label_last_month: sidste måned label_this_year: dette år label_date_range: Dato interval label_less_than_ago: mindre end dage siden label_more_than_ago: mere end dage siden - label_ago: days siden + label_ago: dage siden label_contains: indeholder label_not_contains: ikke indeholder label_day_plural: dage label_repository: Repository label_repository_plural: Repositories label_browse: Gennemse - label_modification: "{{count}} ændring" - label_modification_plural: "{{count}} ændringer" + label_modification: "%{count} ændring" + label_modification_plural: "%{count} ændringer" label_revision: Revision label_revision_plural: Revisioner - label_associated_revisions: Tilnyttede revisioner + label_associated_revisions: Tilknyttede revisioner label_added: tilføjet label_modified: ændret label_deleted: slettet @@ -510,7 +518,7 @@ label_sort_lowest: Flyt til bunden label_roadmap: Roadmap label_roadmap_due_in: Deadline - label_roadmap_overdue: "{{value}} forsinket" + label_roadmap_overdue: "%{value} forsinket" label_roadmap_no_issues: Ingen sager i denne version label_search: Søg label_result_plural: Resultater @@ -526,10 +534,10 @@ label_preview: Forhåndsvisning label_feed_plural: Feeds label_changes_details: Detaljer for alle ændringer - label_issue_tracking: Sags søgning + label_issue_tracking: Sagssøgning label_spent_time: Anvendt tid - label_f_hour: "{{value}} time" - label_f_hour_plural: "{{value}} timer" + label_f_hour: "%{value} time" + label_f_hour_plural: "%{value} timer" label_time_tracking: Tidsstyring label_change_plural: Ændringer label_statistics: Statistik @@ -538,17 +546,17 @@ label_view_diff: Vis forskelle label_diff_inline: inline label_diff_side_by_side: side om side - label_options: Optioner + label_options: Formatering label_copy_workflow_from: Kopier arbejdsgang fra label_permissions_report: Godkendelsesrapport label_watched_issues: Overvågede sager label_related_issues: Relaterede sager - label_applied_status: Anvendte statuser + label_applied_status: Anvendte statusser label_loading: Indlæser... label_relation_new: Ny relation label_relation_delete: Slet relation label_relates_to: relaterer til - label_duplicates: kopierer + label_duplicates: duplikater label_blocks: blokerer label_blocked_by: blokeret af label_precedes: kommer før @@ -577,16 +585,16 @@ label_date_from: Fra label_date_to: Til label_language_based: Baseret på brugerens sprog - label_sort_by: "Sortér efter {{value}}" + label_sort_by: "Sortér efter %{value}" label_send_test_email: Send en test email - label_feeds_access_key_created_on: "RSS adgangsnøgle dannet for {{value}} siden" + label_feeds_access_key_created_on: "RSS adgangsnøgle dannet for %{value} siden" label_module_plural: Moduler - label_added_time_by: "Tilføjet af {{author}} for {{age}} siden" - label_updated_time: "Opdateret for {{value}} siden" + label_added_time_by: "Tilføjet af %{author} for %{age} siden" + label_updated_time: "Opdateret for %{value} siden" label_jump_to_a_project: Skift til projekt... label_file_plural: Filer label_changeset_plural: Ændringer - label_default_columns: Standard kolonner + label_default_columns: Standardkolonner label_no_change_option: (Ingen ændringer) label_bulk_edit_selected_issues: Masse-ret de valgte sager label_theme: Tema @@ -598,7 +606,7 @@ label_registration_activation_by_email: kontoaktivering på email label_registration_manual_activation: manuel kontoaktivering label_registration_automatic_activation: automatisk kontoaktivering - label_display_per_page: "Per side: {{value}}" + label_display_per_page: "Per side: %{value}" label_age: Alder label_change_properties: Ændre indstillinger label_general: Generelt @@ -660,34 +668,34 @@ text_tip_issue_end_day: opaven slutter denne dag text_tip_issue_begin_end_day: opgaven begynder og slutter denne dag text_project_identifier_info: 'Små bogstaver (a-z), numre og bindestreg er tilladt.
    Denne er en unik identifikation for projektet, og kan defor ikke rettes senere.' - text_caracters_maximum: "max {{count}} karakterer." - text_caracters_minimum: "Skal være mindst {{count}} karakterer lang." - text_length_between: "Længde skal være mellem {{min}} og {{max}} karakterer." + text_caracters_maximum: "max %{count} karakterer." + text_caracters_minimum: "Skal være mindst %{count} karakterer lang." + text_length_between: "Længde skal være mellem %{min} og %{max} karakterer." text_tracker_no_workflow: Ingen arbejdsgang defineret for denne type text_unallowed_characters: Ikke-tilladte karakterer text_comma_separated: Adskillige værdier tilladt (adskilt med komma). text_issues_ref_in_commit_messages: Referer og løser sager i commit-beskeder - text_issue_added: "Sag {{id}} er rapporteret af {{author}}." - text_issue_updated: "Sag {{id}} er blevet opdateret af {{author}}." + text_issue_added: "Sag %{id} er rapporteret af %{author}." + text_issue_updated: "Sag %{id} er blevet opdateret af %{author}." text_wiki_destroy_confirmation: Er du sikker på at du vil slette denne wiki og dens indhold? - text_issue_category_destroy_question: "Nogle sager ({{count}}) er tildelt denne kategori. Hvad ønsker du at gøre?" + text_issue_category_destroy_question: "Nogle sager (%{count}) er tildelt denne kategori. Hvad ønsker du at gøre?" text_issue_category_destroy_assignments: Slet tildelinger af kategori text_issue_category_reassign_to: Tildel sager til denne kategori text_user_mail_option: "For ikke-valgte projekter vil du kun modtage beskeder omhandlende ting du er involveret i eller overvåger (f.eks. sager du har indberettet eller ejer)." - text_no_configuration_data: "Roller, typer, sagsstatuser og arbejdsgange er endnu ikke konfigureret.\nDet er anbefalet at indlæse standardopsætningen. Du vil kunne ændre denne når den er indlæst." + text_no_configuration_data: "Roller, typer, sagsstatusser og arbejdsgange er endnu ikke konfigureret.\nDet er anbefalet at indlæse standardopsætningen. Du vil kunne ændre denne når den er indlæst." text_load_default_configuration: Indlæs standardopsætningen - text_status_changed_by_changeset: "Anvendt i ændring {{value}}." + text_status_changed_by_changeset: "Anvendt i ændring %{value}." text_issues_destroy_confirmation: 'Er du sikker på du ønsker at slette den/de valgte sag(er)?' text_select_project_modules: 'Vælg moduler er skal være aktiveret for dette projekt:' - text_default_administrator_account_changed: Standard administratorkonto ændret + text_default_administrator_account_changed: Standardadministratorkonto ændret text_file_repository_writable: Filarkiv er skrivbar text_rmagick_available: RMagick tilgængelig (valgfri) default_role_manager: Leder default_role_developer: Udvikler default_role_reporter: Rapportør - default_tracker_bug: Bug - default_tracker_feature: Feature + default_tracker_bug: Fejl + default_tracker_feature: Funktion default_tracker_support: Support default_issue_status_new: Ny default_issue_status_in_progress: Igangværende @@ -712,21 +720,21 @@ label_add_another_file: Tilføj endnu en fil label_chronological_order: I kronologisk rækkefølge setting_activity_days_default: Antal dage der vises under projektaktivitet - text_destroy_time_entries_question: "{{hours}} timer er registreret på denne sag som du er ved at slette. Hvad vil du gøre?" + text_destroy_time_entries_question: "%{hours} timer er registreret på denne sag som du er ved at slette. Hvad vil du gøre?" error_issue_not_found_in_project: 'Sagen blev ikke fundet eller tilhører ikke dette projekt' text_assign_time_entries_to_project: Tildel raporterede timer til projektet setting_display_subprojects_issues: Vis sager for underprojekter på hovedprojektet som standard - label_optional_description: Optionel beskrivelse + label_optional_description: Valgfri beskrivelse text_destroy_time_entries: Slet registrerede timer field_comments_sorting: Vis kommentar text_reassign_time_entries: 'Tildel registrerede timer til denne sag igen' label_reverse_chronological_order: I omvendt kronologisk rækkefølge - label_preferences: Preferences + label_preferences: Præferencer label_overall_activity: Overordnet aktivitet setting_default_projects_public: Nye projekter er offentlige som standard error_scm_annotate: "Filen findes ikke, eller kunne ikke annoteres." label_planning: Planlægning - text_subprojects_destroy_warning: "Dets underprojekter(er): {{value}} vil også blive slettet." + text_subprojects_destroy_warning: "Dets underprojekter(er): %{value} vil også blive slettet." permission_edit_issues: Redigér sager setting_diff_max_lines_displayed: Højeste antal forskelle der vises permission_edit_own_issue_notes: Redigér egne noter @@ -749,19 +757,19 @@ 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 - warning_attachments_not_saved: "der var {{count}} fil(er), som ikke kunne gemmes." + warning_attachments_not_saved: "der var %{count} fil(er), som ikke kunne gemmes." permission_comment_news: Kommentér nyheder - text_enumeration_category_reassign_to: 'FLyt dem til denne værdi:' + text_enumeration_category_reassign_to: 'Flyt dem til denne værdi:' permission_select_project_modules: Vælg projektmoduler permission_view_gantt: Se Gantt diagram permission_delete_messages: Slet beskeder permission_move_issues: Flyt sager permission_edit_wiki_pages: Redigér wiki sider - label_user_activity: "{{value}}'s aktivitet" + label_user_activity: "%{value}'s aktivitet" permission_manage_issue_relations: Administrér sags-relationer label_issue_watchers: Overvågere permission_delete_wiki_pages: Slet wiki sider @@ -772,27 +780,27 @@ permission_manage_boards: Administrér fora permission_delete_wiki_pages_attachments: Slet filer vedhæftet wiki sider permission_view_messages: Se beskeder - text_enumeration_destroy_question: "{{count}} objekter er tildelt denne værdi." + text_enumeration_destroy_question: "%{count} objekter er tildelt denne værdi." permission_manage_files: Administrér filer permission_add_messages: Opret beskeder permission_edit_issue_notes: Redigér noter permission_manage_news: Administrér nyheder text_plugin_assets_writable: Der er skriverettigheder til plugin assets folderen label_display: Vis - label_and_its_subprojects: "{{value}} og dets underprojekter" + label_and_its_subprojects: "%{value} og dets underprojekter" permission_view_calendar: Se kalender button_create_and_continue: Opret og fortsæt - setting_gravatar_enabled: Anvend Gravatar bruger ikoner - label_updated_time_by: "Opdateret af {{author}} for {{age}} siden" - text_diff_truncated: '... Listen over forskelle er bleve afkortet da den overstiger den maksimale størrelse der kan vises.' - text_user_wrote: "{{value}} skrev:" + setting_gravatar_enabled: Anvend Gravatar brugerikoner + label_updated_time_by: "Opdateret af %{author} for %{age} siden" + text_diff_truncated: '... Listen over forskelle er blevet afkortet da den overstiger den maksimale størrelse der kan vises.' + text_user_wrote: "%{value} skrev:" setting_mail_handler_api_enabled: Aktiver webservice for indkomne emails permission_delete_issues: Slet sager permission_view_documents: Se dokumenter permission_browse_repository: Gennemse repository permission_manage_repository: Administrér repository permission_manage_members: Administrér medlemmer - mail_subject_reminder: "{{count}} sag(er) har deadline i de kommende dage ({{days}})" + mail_subject_reminder: "%{count} sag(er) har deadline i de kommende dage (%{days})" permission_add_issue_notes: Tilføj noter permission_edit_messages: Redigér beskeder permission_view_issue_watchers: Se liste over overvågere @@ -805,7 +813,6 @@ permission_edit_project: Redigér projekt permission_save_queries: Gem forespørgsler label_copied: kopieret - setting_commit_logs_encoding: Kodning af Commit beskeder text_repository_usernames_mapping: "Vælg eller opdatér de Redmine brugere der svarer til de enkelte brugere fundet i repository loggen.\nBrugere med samme brugernavn eller email adresse i både Redmine og det valgte repository bliver automatisk koblet sammen." permission_edit_time_entries: Redigér tidsregistreringer general_csv_decimal_separator: ',' @@ -817,78 +824,78 @@ field_identity_url: OpenID URL label_login_with_open_id_option: eller login med OpenID setting_per_page_options: Enheder per side muligheder - mail_body_reminder: "{{count}} sage(er) som er tildelt dig har deadline indenfor de næste {{days}} dage:" + mail_body_reminder: "%{count} sage(er) som er tildelt dig har deadline indenfor de næste %{days} dage:" field_content: Indhold label_descending: Aftagende label_sort: Sortér label_ascending: Tiltagende - label_date_from_to: Fra {{start}} til {{end}} + label_date_from_to: Fra %{start} til %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: Denne side har {{descendants}} underside(r) og afledte. Hvad vil du gøre? + text_wiki_page_destroy_question: Denne side har %{descendants} underside(r) og afledte. Hvad vil du gøre? text_wiki_page_reassign_children: Flyt undersider til denne side text_wiki_page_nullify_children: Behold undersider som rod-sider text_wiki_page_destroy_children: Slet undersider ogalle deres afledte sider. setting_password_min_length: Mindste længde på kodeord field_group_by: Gruppér resultater efter - mail_subject_wiki_content_updated: "'{{id}}' wikisiden er blevet opdateret" + mail_subject_wiki_content_updated: "'%{id}' wikisiden er blevet opdateret" label_wiki_content_added: Wiki side tilføjet - mail_subject_wiki_content_added: "'{{id}}' wikisiden er blevet tilføjet" - mail_body_wiki_content_added: The '{{id}}' wikiside er blevet tilføjet af {{author}}. + mail_subject_wiki_content_added: "'%{id}' wikisiden er blevet tilføjet" + mail_body_wiki_content_added: The '%{id}' wikiside er blevet tilføjet af %{author}. label_wiki_content_updated: Wikiside opdateret - mail_body_wiki_content_updated: Wikisiden '{{id}}' er blevet opdateret af {{author}}. + mail_body_wiki_content_updated: Wikisiden '%{id}' er blevet opdateret af %{author}. permission_add_project: Opret projekt setting_new_project_user_role_id: Denne rolle gives til en bruger, som ikke er administrator, og som opretter et projekt label_view_all_revisions: Se alle revisioner label_tag: Tag label_branch: Branch error_no_tracker_in_project: Der er ingen sagshåndtering for dette projekt. Kontrollér venligst projektindstillingerne. - error_no_default_issue_status: Der er ikek defineret en standardstatus. Kontrollér venligst indstillingernen (Gå til "Administration -> Sagsstatuser"). - text_journal_changed: "{{label}} ændret fra {{old}} til {{new}}" - text_journal_set_to: "{{label}} sat til {{value}}" - text_journal_deleted: "{{label}} slettet ({{old}})" + error_no_default_issue_status: Der er ikke defineret en standardstatus. Kontrollér venligst indstillingerne (gå til "Administration -> Sagsstatusser"). + text_journal_changed: "%{label} ændret fra %{old} til %{new}" + text_journal_set_to: "%{label} sat til %{value}" + text_journal_deleted: "%{label} slettet (%{old})" label_group_plural: Grupper label_group: Grupper label_group_new: Ny gruppe label_time_entry_plural: Anvendt tid - text_journal_added: "{{label}} {{value}} tilføjet" + text_journal_added: "%{label} %{value} tilføjet" field_active: Aktiv enumeration_system_activity: System Aktivitet permission_delete_issue_watchers: Slet overvågere version_status_closed: lukket version_status_locked: låst version_status_open: åben - error_can_not_reopen_issue_on_closed_version: En sag tildelt en lukket version, kan ikke genåbnes + error_can_not_reopen_issue_on_closed_version: En sag tildelt en lukket version kan ikke genåbnes label_user_anonymous: Anonym button_move_and_follow: Flyt og overvåg setting_default_projects_modules: Standard moduler, aktiveret for nye projekter setting_gravatar_default: Standard Gravatar billede field_sharing: Delning - label_version_sharing_hierarchy: Med projekt hierarki + label_version_sharing_hierarchy: Med projekthierarki label_version_sharing_system: Med alle projekter - label_version_sharing_descendants: Med under projekter - label_version_sharing_tree: Med projekt træ + label_version_sharing_descendants: Med underprojekter + label_version_sharing_tree: Med projekttræ label_version_sharing_none: Ikke delt error_can_not_archive_project: Dette projekt kan ikke arkiveres - button_duplicate: Kopier - button_copy_and_follow: Kopier og overvåg + button_duplicate: Duplikér + button_copy_and_follow: Kopiér og overvåg label_copy_source: Kilde setting_issue_done_ratio: Beregn sagsløsning ratio - setting_issue_done_ratio_issue_status: Benyt sags status + setting_issue_done_ratio_issue_status: Benyt sagsstatus error_issue_done_ratios_not_updated: Sagsløsnings ratio, ikke opdateret. - error_workflow_copy_target: Vælg venligst mål tracker og rolle(r) - setting_issue_done_ratio_issue_field: Benyt sags felt + error_workflow_copy_target: Vælg venligst måltracker og rolle(r) + setting_issue_done_ratio_issue_field: Benyt sagsfelt label_copy_same_as_target: Samme som mål label_copy_target: Mål - notice_issue_done_ratios_updated: Sagsløsnings ratio opdateret. - error_workflow_copy_source: Vælg venligst en kilde tracker eller rolle - label_update_issue_done_ratios: Opdater sagsløsnings ratio + notice_issue_done_ratios_updated: Sagsløsningsratio opdateret. + error_workflow_copy_source: Vælg venligst en kildetracker eller rolle + label_update_issue_done_ratios: Opdater sagsløsningsratio setting_start_of_week: Start kalendre på permission_view_issues: Vis sager - label_display_used_statuses_only: Vis kun statuser der er benyttet af denne tracker - label_revision_id: Revision {{value}} + label_display_used_statuses_only: Vis kun statusser der er benyttet af denne tracker + label_revision_id: Revision %{value} label_api_access_key: API nøgle - label_api_access_key_created_on: API nøgle genereret {{value}} siden + label_api_access_key_created_on: API nøgle genereret %{value} siden label_feeds_access_key: RSS nøgle notice_api_access_key_reseted: Din API nøgle er nulstillet. setting_rest_api_enabled: Aktiver REST web service @@ -896,51 +903,94 @@ label_missing_feeds_access_key: Mangler en RSS nøgle button_show: Vis text_line_separated: Flere væredier tilladt (en linje for hver værdi). - setting_mail_handler_body_delimiters: Trunker emails efter en af disse linjer + setting_mail_handler_body_delimiters: Trunkér emails efter en af disse linjer permission_add_subprojects: Lav underprojekter label_subproject_new: Nyt underprojekt text_own_membership_delete_confirmation: |- Du er ved at fjerne en eller flere af dine rettigheder, og kan muligvis ikke redigere projektet bagefter. Er du sikker på du ønsker at fortsætte? label_close_versions: Luk færdige versioner - label_board_sticky: Sticky + label_board_sticky: Klistret label_board_locked: Låst permission_export_wiki_pages: Eksporter wiki sider setting_cache_formatted_text: Cache formatteret tekst - permission_manage_project_activities: Administrer projekt aktiviteter - error_unable_delete_issue_status: Det var ikke muligt at slette sags status + permission_manage_project_activities: Administrer projektaktiviteter + error_unable_delete_issue_status: Det var ikke muligt at slette sagsstatus label_profile: Profil - permission_manage_subtasks: Administrer under opgaver - field_parent_issue: Hoved opgave - label_subtask_plural: Under opgaver + permission_manage_subtasks: Administrer underopgaver + field_parent_issue: Hovedopgave + label_subtask_plural: Underopgaver label_project_copy_notifications: Send email notifikationer, mens projektet kopieres - error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) - error_can_not_remove_role: This role is in use and can not be deleted. - error_can_not_delete_tracker: This tracker contains issues and can't be deleted. + error_can_not_delete_custom_field: Kan ikke slette brugerdefineret felt + error_unable_to_connect: Kan ikke forbinde (%{value}) + error_can_not_remove_role: Denne rolle er i brug og kan ikke slettes. + error_can_not_delete_tracker: Denne type indeholder sager og kan ikke slettes. 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 + label_my_page_block: blok + notice_failed_to_save_members: "Fejl under lagring af medlem(mer): %{errors}." + text_zoom_out: Zoom ud + text_zoom_in: Zoom ind + notice_unable_delete_time_entry: Kan ikke slette tidsregistrering. + label_overall_spent_time: Overordnet forbrug af tid + field_time_entries: Log tid 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. - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible + project_module_calendar: Kalender + button_edit_associated_wikipage: "Redigér tilknyttet Wiki side: %{page_title}" + text_are_you_sure_with_children: Slet sag og alle undersager? + field_text: Tekstfelt + label_user_mail_option_only_owner: Kun for ting jeg er ejer af + setting_default_notification_option: Standardpåmindelsesmulighed + label_user_mail_option_only_my_events: Kun for ting jeg overvåger eller er involveret i + label_user_mail_option_only_assigned: Kun for ting jeg er tildelt + label_user_mail_option_none: Ingen hændelser + field_member_of_group: Medlem af gruppe + field_assigned_to_role: Medlem af rolle + notice_not_authorized_archived_project: Projektet du prøver at tilgå, er blevet arkiveret. + label_principal_search: "Søg efter bruger eller gruppe:" + label_user_search: "Søg efter bruger:" + field_visible: Synlig setting_emails_header: Emails header + setting_commit_logtime_activity_id: Aktivitet for registreret tid + text_time_logged_by_changeset: Anvendt i changeset %{value}. + setting_commit_logtime_enabled: Aktiver tidsregistrering + notice_gantt_chart_truncated: Kortet er blevet afkortet, fordi det overstiger det maksimale antal elementer, der kan vises (%{max}) + setting_gantt_items_limit: Maksimalt antal af elementer der kan vises på gantt kortet + + 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Kodning af Commit beskeder + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/de.yml --- a/config/locales/de.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/de.yml Mon Jul 25 14:23:37 2011 +0100 @@ -1,5 +1,6 @@ # German translations for Ruby on Rails # by Clemens Kofler (clemens@railway.at) +# additions for Redmine 1.2 by Jens Martsch (jmartsch@gmail.com) de: direction: ltr @@ -19,7 +20,10 @@ month_names: [~, Januar, Februar, März, April, Mai, Juni, Juli, August, September, Oktober, November, Dezember] abbr_month_names: [~, Jan, Feb, Mär, Apr, Mai, Jun, Jul, Aug, Sep, Okt, Nov, Dez] # Used in date_select and datime_select. - order: [:day, :month, :year] + order: + - :day + - :month + - :year time: formats: @@ -35,37 +39,37 @@ half_a_minute: 'eine halbe Minute' less_than_x_seconds: one: 'weniger als 1 Sekunde' - other: 'weniger als {{count}} Sekunden' + other: 'weniger als %{count} Sekunden' x_seconds: one: '1 Sekunde' - other: '{{count}} Sekunden' + other: '%{count} Sekunden' less_than_x_minutes: one: 'weniger als 1 Minute' - other: 'weniger als {{count}} Minuten' + other: 'weniger als %{count} Minuten' x_minutes: one: '1 Minute' - other: '{{count}} Minuten' + other: '%{count} Minuten' about_x_hours: one: 'etwa 1 Stunde' - other: 'etwa {{count}} Stunden' + other: 'etwa %{count} Stunden' x_days: one: '1 Tag' - other: '{{count}} Tagen' + other: '%{count} Tagen' about_x_months: one: 'etwa 1 Monat' - other: 'etwa {{count}} Monaten' + other: 'etwa %{count} Monaten' x_months: one: '1 Monat' - other: '{{count}} Monaten' + other: '%{count} Monaten' about_x_years: one: 'etwa 1 Jahr' - other: 'etwa {{count}} Jahren' + other: 'etwa %{count} Jahren' over_x_years: one: 'mehr als 1 Jahr' - other: 'mehr als {{count}} Jahren' + other: 'mehr als %{count} Jahren' almost_x_years: one: "fast 1 Jahr" - other: "fast {{count}} Jahren" + other: "fast %{count} Jahren" number: # Default format for numbers @@ -111,7 +115,9 @@ activerecord: errors: template: - header: "Dieses {{model}}-Objekt konnte nicht gespeichert werden: {{count}} Fehler." + header: + one: "Dieses %{model}-Objekt konnte nicht gespeichert werden: %{count} Fehler." + other: "Dieses %{model}-Objekt konnte nicht gespeichert werden: %{count} Fehler." body: "Bitte überprüfen Sie die folgenden Felder:" messages: @@ -122,17 +128,17 @@ accepted: "muss akzeptiert werden" empty: "muss ausgefüllt werden" blank: "muss ausgefüllt werden" - too_long: "ist zu lang (nicht mehr als {{count}} Zeichen)" - too_short: "ist zu kurz (nicht weniger als {{count}} Zeichen)" - wrong_length: "hat die falsche Länge (muss genau {{count}} Zeichen haben)" + too_long: "ist zu lang (nicht mehr als %{count} Zeichen)" + too_short: "ist zu kurz (nicht weniger als %{count} Zeichen)" + wrong_length: "hat die falsche Länge (muss genau %{count} Zeichen haben)" taken: "ist bereits vergeben" not_a_number: "ist keine Zahl" not_a_date: "is kein gültiges Datum" - greater_than: "muss größer als {{count}} sein" - greater_than_or_equal_to: "muss größer oder gleich {{count}} sein" - equal_to: "muss genau {{count}} sein" - less_than: "muss kleiner als {{count}} sein" - less_than_or_equal_to: "muss kleiner oder gleich {{count}} sein" + greater_than: "muss größer als %{count} sein" + greater_than_or_equal_to: "muss größer oder gleich %{count} sein" + equal_to: "muss genau %{count} sein" + less_than: "muss kleiner als %{count} sein" + less_than_or_equal_to: "muss kleiner oder gleich %{count} sein" odd: "muss ungerade sein" even: "muss gerade sein" greater_than_start_date: "muss größer als Anfangsdatum sein" @@ -150,7 +156,7 @@ general_csv_separator: ';' general_csv_decimal_separator: ',' general_csv_encoding: ISO-8859-1 - general_pdf_encoding: ISO-8859-1 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' notice_account_updated: Konto wurde erfolgreich aktualisiert. @@ -169,12 +175,12 @@ notice_file_not_found: Anhang existiert nicht oder ist gelöscht worden. notice_locking_conflict: Datum wurde von einem anderen Benutzer geändert. notice_not_authorized: Sie sind nicht berechtigt, auf diese Seite zuzugreifen. - notice_email_sent: "Eine E-Mail wurde an {{value}} gesendet." - notice_email_error: "Beim Senden einer E-Mail ist ein Fehler aufgetreten ({{value}})." + notice_email_sent: "Eine E-Mail wurde an %{value} gesendet." + notice_email_error: "Beim Senden einer E-Mail ist ein Fehler aufgetreten (%{value})." notice_feeds_access_key_reseted: Ihr Atom-Zugriffsschlüssel wurde zurückgesetzt. notice_api_access_key_reseted: Ihr API-Zugriffsschlüssel wurde zurückgesetzt. - notice_failed_to_save_issues: "{{count}} von {{total}} ausgewählten Tickets konnte(n) nicht gespeichert werden: {{ids}}." - notice_failed_to_save_members: "Benutzer konnte nicht gespeichert werden: {{errors}}." + notice_failed_to_save_issues: "%{count} von %{total} ausgewählten Tickets konnte(n) nicht gespeichert werden: %{ids}." + notice_failed_to_save_members: "Benutzer konnte nicht gespeichert werden: %{errors}." notice_no_issue_selected: "Kein Ticket ausgewählt! Bitte wählen Sie die Tickets, die Sie bearbeiten möchten." notice_account_pending: "Ihr Konto wurde erstellt und wartet jetzt auf die Genehmigung des Administrators." notice_default_data_loaded: Die Standard-Konfiguration wurde erfolgreich geladen. @@ -182,9 +188,9 @@ notice_unable_delete_time_entry: Der Zeiterfassungseintrag konnte nicht gelöscht werden. notice_issue_done_ratios_updated: Der Ticket-Fortschritt wurde aktualisiert. - error_can_t_load_default_data: "Die Standard-Konfiguration konnte nicht geladen werden: {{value}}" + error_can_t_load_default_data: "Die Standard-Konfiguration konnte nicht geladen werden: %{value}" error_scm_not_found: Eintrag und/oder Revision existiert nicht im Projektarchiv. - error_scm_command_failed: "Beim Zugriff auf das Projektarchiv ist ein Fehler aufgetreten: {{value}}" + error_scm_command_failed: "Beim Zugriff auf das Projektarchiv ist ein Fehler aufgetreten: %{value}" error_scm_annotate: "Der Eintrag existiert nicht oder kann nicht annotiert werden." error_issue_not_found_in_project: 'Das Ticket wurde nicht gefunden oder gehört nicht zu diesem Projekt.' error_no_tracker_in_project: Diesem Projekt ist kein Tracker zugeordnet. Bitte überprüfen Sie die Projekteinstellungen. @@ -198,26 +204,26 @@ error_workflow_copy_source: Bitte wählen Sie einen Quell-Tracker und eine Quell-Rolle. error_workflow_copy_target: Bitte wählen Sie die Ziel-Tracker und -Rollen. error_unable_delete_issue_status: "Der Ticket-Status konnte nicht gelöscht werden." - error_unable_to_connect: Fehler beim Verbinden ({{value}}) - warning_attachments_not_saved: "{{count}} Datei(en) konnten nicht gespeichert werden." + error_unable_to_connect: Fehler beim Verbinden (%{value}) + warning_attachments_not_saved: "%{count} Datei(en) konnten nicht gespeichert werden." - mail_subject_lost_password: "Ihr {{value}} Kennwort" + mail_subject_lost_password: "Ihr %{value} Kennwort" mail_body_lost_password: 'Benutzen Sie den folgenden Link, um Ihr Kennwort zu ändern:' - mail_subject_register: "{{value}} Kontoaktivierung" + mail_subject_register: "%{value} Kontoaktivierung" mail_body_register: 'Um Ihr Konto zu aktivieren, benutzen Sie folgenden Link:' - mail_body_account_information_external: "Sie können sich mit Ihrem Konto {{value}} an anmelden." + mail_body_account_information_external: "Sie können sich mit Ihrem Konto %{value} an anmelden." mail_body_account_information: Ihre Konto-Informationen - mail_subject_account_activation_request: "Antrag auf {{value}} Kontoaktivierung" - mail_body_account_activation_request: "Ein neuer Benutzer ({{value}}) hat sich registriert. Sein Konto wartet auf Ihre Genehmigung:" - mail_subject_reminder: "{{count}} Tickets müssen in den nächsten {{days}} Tagen abgegeben werden" - mail_body_reminder: "{{count}} Tickets, die Ihnen zugewiesen sind, müssen in den nächsten {{days}} Tagen abgegeben werden:" - mail_subject_wiki_content_added: "Wiki-Seite '{{id}}' hinzugefügt" - mail_body_wiki_content_added: "Die Wiki-Seite '{{id}}' wurde von {{author}} hinzugefügt." - mail_subject_wiki_content_updated: "Wiki-Seite '{{id}}' erfolgreich aktualisiert" - mail_body_wiki_content_updated: "Die Wiki-Seite '{{id}}' wurde von {{author}} aktualisiert." + mail_subject_account_activation_request: "Antrag auf %{value} Kontoaktivierung" + mail_body_account_activation_request: "Ein neuer Benutzer (%{value}) hat sich registriert. Sein Konto wartet auf Ihre Genehmigung:" + mail_subject_reminder: "%{count} Tickets müssen in den nächsten %{days} Tagen abgegeben werden" + mail_body_reminder: "%{count} Tickets, die Ihnen zugewiesen sind, müssen in den nächsten %{days} Tagen abgegeben werden:" + mail_subject_wiki_content_added: "Wiki-Seite '%{id}' hinzugefügt" + mail_body_wiki_content_added: "Die Wiki-Seite '%{id}' wurde von %{author} hinzugefügt." + mail_subject_wiki_content_updated: "Wiki-Seite '%{id}' erfolgreich aktualisiert" + mail_body_wiki_content_updated: "Die Wiki-Seite '%{id}' wurde von %{author} aktualisiert." gui_validation_error: 1 Fehler - gui_validation_error_plural: "{{count}} Fehler" + gui_validation_error_plural: "%{count} Fehler" field_name: Name field_description: Beschreibung @@ -280,7 +286,8 @@ field_attr_lastname: Name-Attribut field_attr_mail: E-Mail-Attribut field_onthefly: On-the-fly-Benutzererstellung - field_done_ratio: % erledigt + field_start_date: Beginn + field_done_ratio: "% erledigt" field_auth_source: Authentifizierungs-Modus field_hide_mail: E-Mail-Adresse nicht anzeigen field_comments: Kommentar @@ -338,7 +345,6 @@ setting_cross_project_issue_relations: Ticket-Beziehungen zwischen Projekten erlauben setting_issue_list_default_columns: Default-Spalten in der Ticket-Auflistung setting_repositories_encodings: Kodierungen der Projektarchive - setting_commit_logs_encoding: Kodierung der Commit-Log-Meldungen setting_emails_footer: E-Mail-Fußzeile setting_protocol: Protokoll setting_per_page_options: Objekte pro Seite @@ -443,14 +449,14 @@ label_x_projects: zero: keine Projekte one: 1 Projekt - other: "{{count}} Projekte" + other: "%{count} Projekte" label_project_all: Alle Projekte label_project_latest: Neueste Projekte label_issue: Ticket label_issue_new: Neues Ticket label_issue_plural: Tickets label_issue_view_all: Alle Tickets anzeigen - label_issues_by: "Tickets von {{value}}" + label_issues_by: "Tickets von %{value}" label_issue_added: Ticket hinzugefügt label_issue_updated: Ticket aktualisiert label_document: Dokument @@ -501,7 +507,7 @@ label_registered_on: Angemeldet am label_activity: Aktivität label_overall_activity: Aktivität aller Projekte anzeigen - label_user_activity: "Aktivität von {{value}}" + label_user_activity: "Aktivität von %{value}" label_new: Neu label_logged_as: Angemeldet als label_environment: Umgebung @@ -511,7 +517,7 @@ label_auth_source_plural: Authentifizierungs-Arten label_subproject_plural: Unterprojekte label_subproject_new: Neues Unterprojekt - label_and_its_subprojects: "{{value}} und dessen Unterprojekte" + label_and_its_subprojects: "%{value} und dessen Unterprojekte" label_min_max_length: Länge (Min. - Max.) label_list: Liste label_date: Datum @@ -522,8 +528,8 @@ label_text: Langer Text label_attribute: Attribut label_attribute_plural: Attribute - label_download: "{{count}} Download" - label_download_plural: "{{count}} Downloads" + label_download: "%{count} Download" + label_download_plural: "%{count} Downloads" label_no_data: Nichts anzuzeigen label_change_status: Statuswechsel label_history: Historie @@ -555,17 +561,17 @@ label_closed_issues: geschlossen label_closed_issues_plural: geschlossen label_x_open_issues_abbr_on_total: - zero: 0 offen / {{total}} - one: 1 offen / {{total}} - other: "{{count}} offen / {{total}}" + zero: 0 offen / %{total} + one: 1 offen / %{total} + other: "%{count} offen / %{total}" label_x_open_issues_abbr: zero: 0 offen one: 1 offen - other: "{{count}} offen" + other: "%{count} offen" label_x_closed_issues_abbr: zero: 0 geschlossen one: 1 geschlossen - other: "{{count}} geschlossen" + other: "%{count} geschlossen" label_total: Gesamtzahl label_permissions: Berechtigungen label_current_status: Gegenwärtiger Status @@ -583,7 +589,7 @@ label_months_from: Monate ab label_gantt: Gantt-Diagramm label_internal: Intern - label_last_changes: "{{count}} letzte Änderungen" + label_last_changes: "%{count} letzte Änderungen" label_change_view_all: Alle Änderungen anzeigen label_personalize_page: Diese Seite anpassen label_comment: Kommentar @@ -591,7 +597,7 @@ label_x_comments: zero: keine Kommentare one: 1 Kommentar - other: "{{count}} Kommentare" + other: "%{count} Kommentare" label_comment_add: Kommentar hinzufügen label_comment_added: Kommentar hinzugefügt label_comment_delete: Kommentar löschen @@ -612,7 +618,7 @@ label_yesterday: gestern label_this_week: aktuelle Woche label_last_week: vorige Woche - label_last_n_days: "die letzten {{count}} Tage" + label_last_n_days: "die letzten %{count} Tage" label_this_month: aktueller Monat label_last_month: voriger Monat label_this_year: aktuelles Jahr @@ -626,13 +632,13 @@ label_repository: Projektarchiv label_repository_plural: Projektarchive label_browse: Codebrowser - label_modification: "{{count}} Änderung" - label_modification_plural: "{{count}} Änderungen" + label_modification: "%{count} Änderung" + label_modification_plural: "%{count} Änderungen" label_branch: Zweig label_tag: Markierung label_revision: Revision label_revision_plural: Revisionen - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_associated_revisions: Zugehörige Revisionen label_added: hinzugefügt label_modified: geändert @@ -649,8 +655,8 @@ label_sort_lower: Eins tiefer label_sort_lowest: Ans Ende label_roadmap: Roadmap - label_roadmap_due_in: "Fällig in {{value}}" - label_roadmap_overdue: "{{value}} verspätet" + label_roadmap_due_in: "Fällig in %{value}" + label_roadmap_overdue: "%{value} verspätet" label_roadmap_no_issues: Keine Tickets für diese Version label_search: Suche label_result_plural: Resultate @@ -669,8 +675,8 @@ label_issue_tracking: Tickets label_spent_time: Aufgewendete Zeit label_overall_spent_time: Aufgewendete Zeit aller Projekte anzeigen - label_f_hour: "{{value}} Stunde" - label_f_hour_plural: "{{value}} Stunden" + label_f_hour: "%{value} Stunde" + label_f_hour_plural: "%{value} Stunden" label_time_tracking: Zeiterfassung label_change_plural: Änderungen label_statistics: Statistiken @@ -721,15 +727,15 @@ label_date_from: Von label_date_to: Bis label_language_based: Sprachabhängig - label_sort_by: "Sortiert nach {{value}}" + label_sort_by: "Sortiert nach %{value}" label_send_test_email: Test-E-Mail senden label_feeds_access_key: RSS-Zugriffsschlüssel label_missing_feeds_access_key: Der RSS-Zugriffsschlüssel fehlt. - label_feeds_access_key_created_on: "Atom-Zugriffsschlüssel vor {{value}} erstellt" + label_feeds_access_key_created_on: "Atom-Zugriffsschlüssel vor %{value} erstellt" label_module_plural: Module - label_added_time_by: "Von {{author}} vor {{age}} hinzugefügt" - label_updated_time_by: "Von {{author}} vor {{age}} aktualisiert" - label_updated_time: "Vor {{value}} aktualisiert" + label_added_time_by: "Von %{author} vor %{age} hinzugefügt" + label_updated_time_by: "Von %{author} vor %{age} aktualisiert" + label_updated_time: "Vor %{value} aktualisiert" label_jump_to_a_project: Zu einem Projekt springen... label_file_plural: Dateien label_changeset_plural: Changesets @@ -745,7 +751,7 @@ label_registration_activation_by_email: Kontoaktivierung durch E-Mail label_registration_manual_activation: Manuelle Kontoaktivierung label_registration_automatic_activation: Automatische Kontoaktivierung - label_display_per_page: "Pro Seite: {{value}}" + label_display_per_page: "Pro Seite: %{value}" label_age: Geändert vor label_change_properties: Eigenschaften ändern label_general: Allgemein @@ -768,7 +774,7 @@ label_sort: Sortierung label_ascending: Aufsteigend label_descending: Absteigend - label_date_from_to: von {{start}} bis {{end}} + label_date_from_to: von %{start} bis %{end} label_wiki_content_added: Die Wiki-Seite wurde erfolgreich hinzugefügt. label_wiki_content_updated: Die Wiki-Seite wurde erfolgreich aktualisiert. label_group: Gruppe @@ -787,7 +793,7 @@ label_display_used_statuses_only: Zeige nur Status an, die von diesem Tracker verwendet werden label_api_access_key: API-Zugriffsschlüssel label_missing_api_access_key: Der API-Zugriffsschlüssel fehlt. - label_api_access_key_created_on: Der API-Zugriffsschlüssel wurde vor {{value}} erstellt + label_api_access_key_created_on: Der API-Zugriffsschlüssel wurde vor %{value} erstellt label_profile: Profil label_subtask_plural: Unteraufgaben label_project_copy_notifications: Sende Mailbenachrichtigungen beim Kopieren des Projekts. @@ -804,7 +810,7 @@ button_create_and_continue: Anlegen und weiter button_test: Testen button_edit: Bearbeiten - button_edit_associated_wikipage: "Zugehörige Wikiseite bearbeiten: {{page_title}}" + button_edit_associated_wikipage: "Zugehörige Wikiseite bearbeiten: %{page_title}" button_add: Hinzufügen button_change: Wechseln button_apply: Anwenden @@ -853,53 +859,54 @@ text_regexp_info: z. B. ^[A-Z0-9]+$ text_min_max_length_info: 0 heißt keine Beschränkung text_project_destroy_confirmation: Sind Sie sicher, dass sie das Projekt löschen wollen? - text_subprojects_destroy_warning: "Dessen Unterprojekte ({{value}}) werden ebenfalls gelöscht." + text_subprojects_destroy_warning: "Dessen Unterprojekte (%{value}) werden ebenfalls gelöscht." text_workflow_edit: Workflow zum Bearbeiten auswählen text_are_you_sure: Sind Sie sicher? - text_journal_changed: "{{label}} wurde von {{old}} zu {{new}} geändert" - text_journal_set_to: "{{label}} wurde auf {{value}} gesetzt" - text_journal_deleted: "{{label}} {{old}} wurde gelöscht" - text_journal_added: "{{label}} {{value}} wurde hinzugefügt" + text_are_you_sure_with_children: "Lösche Aufgabe und alle Unteraufgaben?" + text_journal_changed: "%{label} wurde von %{old} zu %{new} geändert" + text_journal_set_to: "%{label} wurde auf %{value} gesetzt" + text_journal_deleted: "%{label} %{old} wurde gelöscht" + text_journal_added: "%{label} %{value} wurde hinzugefügt" text_tip_issue_begin_day: Aufgabe, die an diesem Tag beginnt text_tip_issue_end_day: Aufgabe, die an diesem Tag endet text_tip_issue_begin_end_day: Aufgabe, die an diesem Tag beginnt und endet text_project_identifier_info: 'Kleinbuchstaben (a-z), Ziffern und Bindestriche erlaubt.
    Einmal gespeichert, kann die Kennung nicht mehr geändert werden.' - text_caracters_maximum: "Max. {{count}} Zeichen." - text_caracters_minimum: "Muss mindestens {{count}} Zeichen lang sein." - text_length_between: "Länge zwischen {{min}} und {{max}} Zeichen." + text_caracters_maximum: "Max. %{count} Zeichen." + text_caracters_minimum: "Muss mindestens %{count} Zeichen lang sein." + text_length_between: "Länge zwischen %{min} und %{max} Zeichen." text_tracker_no_workflow: Kein Workflow für diesen Tracker definiert. text_unallowed_characters: Nicht erlaubte Zeichen text_comma_separated: Mehrere Werte erlaubt (durch Komma getrennt). text_line_separated: Mehrere Werte sind erlaubt (eine Zeile pro Wert). text_issues_ref_in_commit_messages: Ticket-Beziehungen und -Status in Commit-Log-Meldungen - text_issue_added: "Ticket {{id}} wurde erstellt von {{author}}." - text_issue_updated: "Ticket {{id}} wurde aktualisiert von {{author}}." + text_issue_added: "Ticket %{id} wurde erstellt von %{author}." + text_issue_updated: "Ticket %{id} wurde aktualisiert von %{author}." text_wiki_destroy_confirmation: Sind Sie sicher, dass Sie dieses Wiki mit sämtlichem Inhalt löschen möchten? - text_issue_category_destroy_question: "Einige Tickets ({{count}}) sind dieser Kategorie zugeodnet. Was möchten Sie tun?" + text_issue_category_destroy_question: "Einige Tickets (%{count}) sind dieser Kategorie zugeodnet. Was möchten Sie tun?" text_issue_category_destroy_assignments: Kategorie-Zuordnung entfernen text_issue_category_reassign_to: Tickets dieser Kategorie zuordnen text_user_mail_option: "Für nicht ausgewählte Projekte werden Sie nur Benachrichtigungen für Dinge erhalten, die Sie beobachten oder an denen Sie beteiligt sind (z. B. Tickets, deren Autor Sie sind oder die Ihnen zugewiesen sind)." text_no_configuration_data: "Rollen, Tracker, Ticket-Status und Workflows wurden noch nicht konfiguriert.\nEs ist sehr zu empfehlen, die Standard-Konfiguration zu laden. Sobald sie geladen ist, können Sie sie abändern." text_load_default_configuration: Standard-Konfiguration laden - text_status_changed_by_changeset: "Status geändert durch Changeset {{value}}." + text_status_changed_by_changeset: "Status geändert durch Changeset %{value}." text_issues_destroy_confirmation: 'Sind Sie sicher, dass Sie die ausgewählten Tickets löschen möchten?' text_select_project_modules: 'Bitte wählen Sie die Module aus, die in diesem Projekt aktiviert sein sollen:' text_default_administrator_account_changed: Administrator-Kennwort geändert text_file_repository_writable: Verzeichnis für Dateien beschreibbar text_plugin_assets_writable: Verzeichnis für Plugin-Assets beschreibbar text_rmagick_available: RMagick verfügbar (optional) - text_destroy_time_entries_question: Es wurden bereits {{hours}} Stunden auf dieses Ticket gebucht. Was soll mit den Aufwänden geschehen? + text_destroy_time_entries_question: Es wurden bereits %{hours} Stunden auf dieses Ticket gebucht. Was soll mit den Aufwänden geschehen? text_destroy_time_entries: Gebuchte Aufwände löschen text_assign_time_entries_to_project: Gebuchte Aufwände dem Projekt zuweisen text_reassign_time_entries: 'Gebuchte Aufwände diesem Ticket zuweisen:' - text_user_wrote: "{{value}} schrieb:" - text_enumeration_destroy_question: "{{count}} Objekt(e) sind diesem Wert zugeordnet." + 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' - text_wiki_page_destroy_question: "Diese Seite hat {{descendants}} Unterseite(n). Was möchten Sie tun?" + text_wiki_page_destroy_question: "Diese Seite hat %{descendants} Unterseite(n). Was möchten Sie tun?" text_wiki_page_nullify_children: Verschiebe die Unterseiten auf die oberste Ebene text_wiki_page_destroy_children: Lösche alle Unterseiten text_wiki_page_reassign_children: Ordne die Unterseiten dieser Seite zu @@ -934,16 +941,58 @@ enumeration_activities: Aktivitäten (Zeiterfassung) enumeration_system_activity: System-Aktivität - 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_user_mail_option_none: No events - field_member_of_group: Assignee's group - field_assigned_to_role: Assignee's role - field_start_date: Start date - field_visible: Visible - setting_emails_header: Emails header + field_text: Textfeld + label_user_mail_option_only_owner: Nur für Aufgaben die ich angelegt habe + setting_default_notification_option: Standard Benachrichtigungsoptionen + label_user_mail_option_only_my_events: Nur für Aufgaben die ich beobachte oder an welchen ich mitarbeite + label_user_mail_option_only_assigned: Nur für Aufgaben für die ich zuständig bin. + notice_not_authorized_archived_project: Das Projekt wurde archiviert und ist daher nicht nicht verfügbar. + label_user_mail_option_none: keine Ereignisse + field_member_of_group: Zuständigkeitsgruppe + field_assigned_to_role: Zuständigkeitsrolle + field_visible: Sichtbar + setting_emails_header: E-Mail Betreffzeile + setting_commit_logtime_activity_id: Aktivität für die Zeiterfassung + text_time_logged_by_changeset: Angewendet in Changeset %{value}. + 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: vor dem Verlassen einer Seite mit ungesichertem Text im Editor warnen + text_warn_on_leaving_unsaved: Die aktuellen Änderungen gehen verloren, wenn Sie diese Seite verlassen. + label_my_queries: Meine eigenen Abfragen + text_journal_changed_no_detail: "%{label} aktualisiert" + label_news_comment_added: Kommentar zu einer News hinzugefügt + button_expand_all: Alle ausklappen + button_collapse_all: Alle einklappen + label_additional_workflow_transitions_for_assignee: Zusätzliche Berechtigungen wenn der Benutzer der Zugewiesene ist + label_additional_workflow_transitions_for_author: Zusätzliche Berechtigungen wenn der Benutzer der Autor ist + label_bulk_edit_selected_time_entries: Ausgewählte Zeitaufwände bearbeiten + text_time_entries_destroy_confirmation: Sind Sie sicher, dass Sie die ausgewählten Zeitaufwände löschen möchten? + label_role_anonymous: Anonymous + label_role_non_member: Nichtmitglied + label_issue_note_added: Notiz hinzugefügt + label_issue_status_updated: Status aktualisiert + label_issue_priority_updated: Priorität aktualisiert + label_issues_visibility_own: Tickets die folgender User erstellt hat oder die ihm zugewiesen sind + field_issues_visibility: Ticket Sichtbarkeit + label_issues_visibility_all: Alle Tickets + permission_set_own_issues_private: Eigene Tickets privat oder öffentlich markieren + field_is_private: Privat + permission_set_issues_private: Tickets privat oder öffentlich markieren + label_issues_visibility_public: Alle öffentlichen Tickets + text_issues_destroy_descendants_confirmation: Dies wird auch %{count} Unteraufgabe/n löschen. + field_commit_logs_encoding: Kodierung der Commit-Log-Meldungen + field_scm_path_encoding: Pfad Kodierung + text_scm_path_encoding_note: "Standard: UTF-8" + field_path_to_repository: Pfad zum repository + field_root_directory: Wurzelverzeichnis + field_cvs_module: Modul + field_cvsroot: CVSROOT + text_git_repository_note: Bare und lokales repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Lokales repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Kommando + text_scm_command_version: Version + label_git_report_last_commit: Bericht des letzten Commits für Dateien und Verzeichnisse + text_scm_config: Die SCM-Kommandos können in der in config/configuration.yml konfiguriert werden. Redmine muss anschließend neu gestartet werden. + text_scm_command_not_available: Scm Kommando ist nicht verfügbar. Bitte prüfen Sie die Einstellungen im Administrationspanel. + diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/el.yml --- a/config/locales/el.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/el.yml Mon Jul 25 14:23:37 2011 +0100 @@ -19,7 +19,10 @@ month_names: [~, Ιανουάριος, Φεβρουάριος, Μάρτιος, Απρίλιος, Μάϊος, Ιούνιος, Ιούλιος, Αύγουστος, Σεπτέμβριος, Οκτώβριος, Νοέμβριος, Δεκέμβριος] abbr_month_names: [~, Ιαν, Φεβ, Μαρ, Απρ, Μαϊ, Ιον, Ιολ, Αυγ, Σεπ, Οκτ, Νοε, Δεκ] # Used in date_select and datime_select. - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -35,37 +38,37 @@ half_a_minute: "μισό λεπτό" less_than_x_seconds: one: "λιγότερο από 1 δευτερόλεπτο" - other: "λιγότερο από {{count}} δευτερόλεπτα" + other: "λιγότερο από %{count} δευτερόλεπτα" x_seconds: one: "1 δευτερόλεπτο" - other: "{{count}} δευτερόλεπτα" + other: "%{count} δευτερόλεπτα" less_than_x_minutes: one: "λιγότερο από ένα λεπτό" - other: "λιγότερο από {{count}} λεπτά" + other: "λιγότερο από %{count} λεπτά" x_minutes: one: "1 λεπτό" - other: "{{count}} λεπτά" + other: "%{count} λεπτά" about_x_hours: one: "περίπου 1 ώρα" - other: "περίπου {{count}} ώρες" + other: "περίπου %{count} ώρες" x_days: one: "1 ημέρα" - other: "{{count}} ημέρες" + other: "%{count} ημέρες" about_x_months: one: "περίπου 1 μήνα" - other: "περίπου {{count}} μήνες" + other: "περίπου %{count} μήνες" x_months: one: "1 μήνα" - other: "{{count}} μήνες" + other: "%{count} μήνες" about_x_years: one: "περίπου 1 χρόνο" - other: "περίπου {{count}} χρόνια" + other: "περίπου %{count} χρόνια" over_x_years: one: "πάνω από 1 χρόνο" - other: "πάνω από {{count}} χρόνια" + other: "πάνω από %{count} χρόνια" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" number: format: @@ -95,6 +98,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "δεν περιέχεται στη λίστα" exclusion: "έχει κατοχυρωθεί" @@ -103,17 +110,17 @@ accepted: "πρέπει να γίνει αποδοχή" empty: "δε μπορεί να είναι άδειο" blank: "δε μπορεί να είναι κενό" - too_long: "έχει πολλούς (μέγ.επιτρ. {{count}} χαρακτήρες)" - too_short: "έχει λίγους (ελάχ.επιτρ. {{count}} χαρακτήρες)" - wrong_length: "δεν είναι σωστός ο αριθμός χαρακτήρων (πρέπει να έχει {{count}} χαρακτήρες)" + 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}}" + 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: "πρέπει να είναι αργότερα από την ημερομηνία έναρξης" @@ -150,42 +157,42 @@ notice_file_not_found: Η σελίδα που ζητήσατε δεν υπάρχει ή έχει αφαιρεθεί. notice_locking_conflict: Τα δεδομένα έχουν ενημερωθεί από άλλο χρήστη. notice_not_authorized: Δεν έχετε δικαίωμα πρόσβασης σε αυτή τη σελίδα. - notice_email_sent: "Ένα μήνυμα ηλεκτρονικού ταχυδρομείου εστάλη στο {{value}}" - notice_email_error: "Σφάλμα κατά την αποστολή του μηνύματος στο ({{value}})" + notice_email_sent: "Ένα μήνυμα ηλεκτρονικού ταχυδρομείου εστάλη στο %{value}" + notice_email_error: "Σφάλμα κατά την αποστολή του μηνύματος στο (%{value})" notice_feeds_access_key_reseted: Έγινε επαναφορά στο κλειδί πρόσβασης RSS. - notice_failed_to_save_issues: "Αποτυχία αποθήκευσης {{count}} θεμα(των) από τα {{total}} επιλεγμένα: {{ids}}." + notice_failed_to_save_issues: "Αποτυχία αποθήκευσης %{count} θεμα(των) από τα %{total} επιλεγμένα: %{ids}." notice_no_issue_selected: "Κανένα θέμα δεν είναι επιλεγμένο! Παρακαλούμε, ελέγξτε τα θέματα που θέλετε να επεξεργαστείτε." notice_account_pending: "Ο λογαριασμός σας έχει δημιουργηθεί και είναι σε στάδιο έγκρισης από τον διαχειριστή." notice_default_data_loaded: Οι προεπιλεγμένες ρυθμίσεις φορτώθηκαν επιτυχώς. notice_unable_delete_version: Αδύνατον να διαγραφεί η έκδοση. - error_can_t_load_default_data: "Οι προεπιλεγμένες ρυθμίσεις δεν μπόρεσαν να φορτωθούν:: {{value}}" + error_can_t_load_default_data: "Οι προεπιλεγμένες ρυθμίσεις δεν μπόρεσαν να φορτωθούν:: %{value}" error_scm_not_found: "Η εγγραφή ή η αναθεώρηση δεν βρέθηκε στο αποθετήριο." - error_scm_command_failed: "Παρουσιάστηκε σφάλμα κατά την προσπάθεια πρόσβασης στο αποθετήριο: {{value}}" + error_scm_command_failed: "Παρουσιάστηκε σφάλμα κατά την προσπάθεια πρόσβασης στο αποθετήριο: %{value}" error_scm_annotate: "Η καταχώριση δεν υπάρχει ή δεν μπορεί να σχολιαστεί." error_issue_not_found_in_project: 'Το θέμα δεν βρέθηκε ή δεν ανήκει σε αυτό το έργο' error_no_tracker_in_project: 'Δεν υπάρχει ανιχνευτής για αυτό το έργο. Παρακαλώ ελέγξτε τις ρυθμίσεις του έργου.' error_no_default_issue_status: 'Δεν έχει οριστεί η προεπιλογή κατάστασης θεμάτων. Παρακαλώ ελέγξτε τις ρυθμίσεις σας (Μεταβείτε στην "Διαχείριση -> Κατάσταση θεμάτων").' - warning_attachments_not_saved: "{{count}} αρχείο(α) δε μπορούν να αποθηκευτούν." + warning_attachments_not_saved: "%{count} αρχείο(α) δε μπορούν να αποθηκευτούν." - mail_subject_lost_password: "Ο κωδικός σας {{value}}" + mail_subject_lost_password: "Ο κωδικός σας %{value}" mail_body_lost_password: 'Για να αλλάξετε τον κωδικό πρόσβασης, πατήστε τον ακόλουθο σύνδεσμο:' - mail_subject_register: "Ενεργοποίηση του λογαριασμού χρήστη {{value}} " + mail_subject_register: "Ενεργοποίηση του λογαριασμού χρήστη %{value} " mail_body_register: 'Για να ενεργοποιήσετε το λογαριασμό σας, επιλέξτε τον ακόλουθο σύνδεσμο:' - mail_body_account_information_external: "Μπορείτε να χρησιμοποιήσετε τον λογαριασμό {{value}} για να συνδεθείτε." + 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}}." + 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}} σφάλματα" + gui_validation_error_plural: "%{count} σφάλματα" field_name: Όνομα field_description: Περιγραφή @@ -247,7 +254,8 @@ field_attr_lastname: Ιδιότητα επωνύμου field_attr_mail: Ιδιότητα email field_onthefly: Άμεση δημιουργία χρήστη - field_done_ratio: % επιτεύχθη + field_start_date: Εκκίνηση + field_done_ratio: "% επιτεύχθη" field_auth_source: Τρόπος πιστοποίησης field_hide_mail: Απόκρυψη διεύθυνσης email field_comments: Σχόλιο @@ -302,7 +310,6 @@ setting_cross_project_issue_relations: Επιτρέψτε συσχετισμό θεμάτων σε διασταύρωση-έργων setting_issue_list_default_columns: Προκαθορισμένες εμφανιζόμενες στήλες στη λίστα θεμάτων setting_repositories_encodings: Κωδικοποίηση χαρακτήρων αποθετηρίου - setting_commit_logs_encoding: Κωδικοποίηση μηνυμάτων commit setting_emails_footer: Υποσέλιδο στα email setting_protocol: Πρωτόκολο setting_per_page_options: Αντικείμενα ανά σελίδα επιλογών @@ -389,14 +396,14 @@ label_x_projects: zero: κανένα έργο one: 1 έργο - other: "{{count}} έργα" + 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_issues_by: "Θέματα του %{value}" label_issue_added: Το θέμα προστέθηκε label_issue_updated: Το θέμα ενημερώθηκε label_document: Έγγραφο @@ -446,7 +453,7 @@ label_registered_on: Εγγράφηκε την label_activity: Δραστηριότητα label_overall_activity: Συνολική δραστηριότητα - label_user_activity: "δραστηριότητα του {{value}}" + label_user_activity: "δραστηριότητα του %{value}" label_new: Νέο label_logged_as: Σύνδεδεμένος ως label_environment: Περιβάλλον @@ -455,7 +462,7 @@ label_auth_source_new: Νέος τρόπος πιστοποίησης label_auth_source_plural: Τρόποι πιστοποίησης label_subproject_plural: Επιμέρους έργα - label_and_its_subprojects: "{{value}} και τα επιμέρους έργα του" + label_and_its_subprojects: "%{value} και τα επιμέρους έργα του" label_min_max_length: Ελάχ. - Μέγ. μήκος label_list: Λίστα label_date: Ημερομηνία @@ -466,8 +473,8 @@ label_text: Μακροσκελές κείμενο label_attribute: Ιδιότητα label_attribute_plural: Ιδιότητες - label_download: "{{count}} Μεταφόρτωση" - label_download_plural: "{{count}} Μεταφορτώσεις" + label_download: "%{count} Μεταφόρτωση" + label_download_plural: "%{count} Μεταφορτώσεις" label_no_data: Δεν υπάρχουν δεδομένα label_change_status: Αλλαγή κατάστασης label_history: Ιστορικό @@ -498,17 +505,17 @@ label_closed_issues: Κλειστό label_closed_issues_plural: Κλειστά label_x_open_issues_abbr_on_total: - zero: 0 ανοικτά / {{total}} - one: 1 ανοικτό / {{total}} - other: "{{count}} ανοικτά / {{total}}" + zero: 0 ανοικτά / %{total} + one: 1 ανοικτό / %{total} + other: "%{count} ανοικτά / %{total}" label_x_open_issues_abbr: zero: 0 ανοικτά one: 1 ανοικτό - other: "{{count}} ανοικτά" + other: "%{count} ανοικτά" label_x_closed_issues_abbr: zero: 0 κλειστά one: 1 κλειστό - other: "{{count}} κλειστά" + other: "%{count} κλειστά" label_total: Σύνολο label_permissions: Άδειες label_current_status: Τρέχουσα κατάσταση @@ -526,7 +533,7 @@ label_months_from: μηνών από label_gantt: Gantt label_internal: Εσωτερικό - label_last_changes: "Τελευταίες {{count}} αλλαγές" + label_last_changes: "Τελευταίες %{count} αλλαγές" label_change_view_all: Προβολή όλων των αλλαγών label_personalize_page: Προσαρμογή σελίδας label_comment: Σχόλιο @@ -534,7 +541,7 @@ label_x_comments: zero: δεν υπάρχουν σχόλια one: 1 σχόλιο - other: "{{count}} σχόλια" + other: "%{count} σχόλια" label_comment_add: Προσθήκη σχολίου label_comment_added: Τα σχόλια προστέθηκαν label_comment_delete: Διαγραφή σχολίων @@ -555,7 +562,7 @@ label_yesterday: χθες label_this_week: αυτή την εβδομάδα label_last_week: την προηγούμενη εβδομάδα - label_last_n_days: "τελευταίες {{count}} μέρες" + label_last_n_days: "τελευταίες %{count} μέρες" label_this_month: αυτό το μήνα label_last_month: τον προηγούμενο μήνα label_this_year: αυτό το χρόνο @@ -569,8 +576,8 @@ label_repository: Αποθετήριο label_repository_plural: Αποθετήρια label_browse: Πλοήγηση - label_modification: "{{count}} τροποποίηση" - label_modification_plural: "{{count}} τροποποιήσεις" + label_modification: "%{count} τροποποίηση" + label_modification_plural: "%{count} τροποποιήσεις" label_branch: Branch label_tag: Tag label_revision: Αναθεώρηση @@ -591,8 +598,8 @@ label_sort_lower: Μετακίνηση προς τα κάτω label_sort_lowest: Μετακίνηση στο κατώτατο μέρος label_roadmap: Χάρτης πορείας - label_roadmap_due_in: "Προθεσμία σε {{value}}" - label_roadmap_overdue: "{{value}} καθυστερημένο" + label_roadmap_due_in: "Προθεσμία σε %{value}" + label_roadmap_overdue: "%{value} καθυστερημένο" label_roadmap_no_issues: Δεν υπάρχουν θέματα για αυτή την έκδοση label_search: Αναζήτηση label_result_plural: Αποτελέσματα @@ -610,8 +617,8 @@ label_changes_details: Λεπτομέρειες όλων των αλλαγών label_issue_tracking: Ανίχνευση θεμάτων label_spent_time: Δαπανημένος χρόνος - label_f_hour: "{{value}} ώρα" - label_f_hour_plural: "{{value}} ώρες" + label_f_hour: "%{value} ώρα" + label_f_hour_plural: "%{value} ώρες" label_time_tracking: Ανίχνευση χρόνου label_change_plural: Αλλαγές label_statistics: Στατιστικά @@ -660,13 +667,13 @@ label_date_from: Από label_date_to: Έως label_language_based: Με βάση τη γλώσσα του χρήστη - label_sort_by: "Ταξινόμηση ανά {{value}}" + label_sort_by: "Ταξινόμηση ανά %{value}" label_send_test_email: Αποστολή δοκιμαστικού email - label_feeds_access_key_created_on: "το κλειδί πρόσβασης RSS δημιουργήθηκε πριν από {{value}}" + 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_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: Changesets @@ -682,7 +689,7 @@ label_registration_activation_by_email: ενεργοποίηση λογαριασμού με email label_registration_manual_activation: χειροκίνητη ενεργοποίηση λογαριασμού label_registration_automatic_activation: αυτόματη ενεργοποίηση λογαριασμού - label_display_per_page: "Ανά σελίδα: {{value}}" + label_display_per_page: "Ανά σελίδα: %{value}" label_age: Ηλικία label_change_properties: Αλλαγή ιδιοτήτων label_general: Γενικά @@ -705,7 +712,7 @@ label_sort: Ταξινόμηση label_ascending: Αύξουσα label_descending: Φθίνουσα - label_date_from_to: Από {{start}} έως {{end}} + label_date_from_to: Από %{start} έως %{end} label_wiki_content_added: Η σελίδα Wiki προστέθηκε label_wiki_content_updated: Η σελίδα Wiki ενημερώθηκε @@ -757,48 +764,48 @@ text_regexp_info: eg. ^[A-Z0-9]+$ text_min_max_length_info: 0 σημαίνει ότι δεν υπάρχουν περιορισμοί text_project_destroy_confirmation: Είστε σίγουροι ότι θέλετε να διαγράψετε αυτό το έργο και τα σχετικά δεδομένα του; - text_subprojects_destroy_warning: "Επίσης το(α) επιμέρους έργο(α): {{value}} θα διαγραφούν." + text_subprojects_destroy_warning: "Επίσης το(α) επιμέρους έργο(α): %{value} θα διαγραφούν." text_workflow_edit: Επιλέξτε ένα ρόλο και έναν ανιχνευτή για να επεξεργαστείτε τη ροή εργασίας text_are_you_sure: Είστε σίγουρος ; text_tip_issue_begin_day: καθήκοντα που ξεκινάνε σήμερα text_tip_issue_end_day: καθήκοντα που τελειώνουν σήμερα text_tip_issue_begin_end_day: καθήκοντα που ξεκινάνε και τελειώνουν σήμερα text_project_identifier_info: 'Επιτρέπονται μόνο μικρά πεζά γράμματα (a-z), αριθμοί και παύλες.
    Μετά την αποθήκευση, το αναγνωριστικό δεν μπορεί να αλλάξει.' - text_caracters_maximum: "μέγιστος αριθμός {{count}} χαρακτήρες." - text_caracters_minimum: "Πρέπει να περιέχει τουλάχιστον {{count}} χαρακτήρες." - text_length_between: "Μήκος μεταξύ {{min}} και {{max}} χαρακτήρες." + text_caracters_maximum: "μέγιστος αριθμός %{count} χαρακτήρες." + text_caracters_minimum: "Πρέπει να περιέχει τουλάχιστον %{count} χαρακτήρες." + text_length_between: "Μήκος μεταξύ %{min} και %{max} χαρακτήρες." text_tracker_no_workflow: Δεν έχει οριστεί ροή εργασίας για αυτό τον ανιχνευτή text_unallowed_characters: Μη επιτρεπόμενοι χαρακτήρες text_comma_separated: Επιτρέπονται πολλαπλές τιμές (χωρισμένες με κόμμα). text_issues_ref_in_commit_messages: Αναφορά και καθορισμός θεμάτων σε μηνύματα commit - text_issue_added: "Το θέμα {{id}} παρουσιάστηκε από τον {{author}}." - text_issue_updated: "Το θέμα {{id}} ενημερώθηκε από τον {{author}}." + text_issue_added: "Το θέμα %{id} παρουσιάστηκε από τον %{author}." + text_issue_updated: "Το θέμα %{id} ενημερώθηκε από τον %{author}." text_wiki_destroy_confirmation: Είστε σίγουροι ότι θέλετε να διαγράψετε αυτό το wiki και όλο το περιεχόμενο του ; - text_issue_category_destroy_question: "Κάποια θέματα ({{count}}) έχουν εκχωρηθεί σε αυτή την κατηγορία. Τι θέλετε να κάνετε ;" + 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: "Εφαρμόστηκε στο changeset {{value}}." + text_status_changed_by_changeset: "Εφαρμόστηκε στο changeset %{value}." text_issues_destroy_confirmation: 'Είστε σίγουρος ότι θέλετε να διαγράψετε το επιλεγμένο θέμα(τα);' text_select_project_modules: 'Επιλέξτε ποιες μονάδες θα ενεργοποιήσετε για αυτό το έργο:' text_default_administrator_account_changed: Ο προκαθορισμένος λογαριασμός του διαχειριστή άλλαξε text_file_repository_writable: Εγγράψιμος κατάλογος συνημμένων text_plugin_assets_writable: Εγγράψιμος κατάλογος plugin assets text_rmagick_available: Διαθέσιμο RMagick (προαιρετικό) - text_destroy_time_entries_question: "{{hours}} δαπανήθηκαν σχετικά με τα θέματα που πρόκειται να διαγράψετε. Τι θέλετε να κάνετε ;" + 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_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: 'Μία γραμμή για κάθε τιμή' - text_wiki_page_destroy_question: "Αυτή η σελίδα έχει {{descendants}} σελίδες τέκνων και απογόνων. Τι θέλετε να κάνετε ;" + text_wiki_page_destroy_question: "Αυτή η σελίδα έχει %{descendants} σελίδες τέκνων και απογόνων. Τι θέλετε να κάνετε ;" text_wiki_page_nullify_children: "Διατηρήστε τις σελίδες τέκνων ως σελίδες root" text_wiki_page_destroy_children: "Διαγράψτε όλες τις σελίδες τέκνων και των απογόνων τους" text_wiki_page_reassign_children: "Επανεκχώριση των σελίδων τέκνων στη γονική σελίδα" @@ -828,14 +835,14 @@ enumeration_issue_priorities: Προτεραιότητα θέματος enumeration_doc_categories: Κατηγορία εγγράφων enumeration_activities: Δραστηριότητες (κατακερματισμός χρόνου) - text_journal_changed: "{{label}} άλλαξε από {{old}} σε {{new}}" - text_journal_set_to: "{{label}} ορίζεται σε {{value}}" - text_journal_deleted: "{{label}} διαγράφηκε ({{old}})" + 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}} added" + text_journal_added: "%{label} %{value} added" field_active: Active enumeration_system_activity: System Activity permission_delete_issue_watchers: Delete watchers @@ -870,9 +877,9 @@ setting_start_of_week: Start calendars on permission_view_issues: View Issues label_display_used_statuses_only: Only display statuses that are used by this tracker - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_api_access_key: API access key - label_api_access_key_created_on: API access key created {{value}} ago + label_api_access_key_created_on: API access key created %{value} ago label_feeds_access_key: RSS access key notice_api_access_key_reseted: Your API access key was reset. setting_rest_api_enabled: Enable REST web service @@ -899,12 +906,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -912,7 +919,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -923,8 +930,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Κωδικοποίηση μηνυμάτων commit + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/en-GB.yml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/config/locales/en-GB.yml Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,1 @@ +en-GB: diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/en.yml --- a/config/locales/en.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/en.yml Mon Jul 25 14:23:37 2011 +0100 @@ -16,7 +16,10 @@ 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 ] + order: + - :year + - :month + - :day time: formats: @@ -32,37 +35,37 @@ half_a_minute: "half a minute" less_than_x_seconds: one: "less than 1 second" - other: "less than {{count}} seconds" + other: "less than %{count} seconds" x_seconds: one: "1 second" - other: "{{count}} seconds" + other: "%{count} seconds" less_than_x_minutes: one: "less than a minute" - other: "less than {{count}} minutes" + other: "less than %{count} minutes" x_minutes: one: "1 minute" - other: "{{count}} minutes" + other: "%{count} minutes" about_x_hours: one: "about 1 hour" - other: "about {{count}} hours" + other: "about %{count} hours" x_days: one: "1 day" - other: "{{count}} days" + other: "%{count} days" about_x_months: one: "about 1 month" - other: "about {{count}} months" + other: "about %{count} months" x_months: one: "1 month" - other: "{{count}} months" + other: "%{count} months" about_x_years: one: "about 1 year" - other: "about {{count}} years" + other: "about %{count} years" over_x_years: one: "over 1 year" - other: "over {{count}} years" + other: "over %{count} years" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" number: format: @@ -98,6 +101,10 @@ 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" @@ -106,23 +113,23 @@ 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)" + 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}}" + 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" + cant_link_an_issue_with_a_descendant: "An issue cannot be linked to one of its subtasks" must_accept_terms_and_conditions: "You must accept the Terms and Conditions" actionview_instancetag_blank_option: Please select @@ -135,7 +142,7 @@ general_csv_separator: ',' general_csv_decimal_separator: '.' general_csv_encoding: ISO-8859-1 - general_pdf_encoding: ISO-8859-1 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' notice_account_updated: Account was successfully updated. @@ -155,58 +162,59 @@ notice_locking_conflict: Data has been updated by another user. notice_not_authorized: You are not authorized to access this page. notice_not_authorized_archived_project: The project you're trying to access has been archived. - notice_email_sent: "An email was sent to {{value}}" - notice_email_error: "An error occurred while sending mail ({{value}})" + 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_failed_to_save_members: "Failed to save member(s): {{errors}}." + notice_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}." + notice_failed_to_save_members: "Failed to save member(s): %{errors}." 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_unable_delete_time_entry: Unable to delete time log entry. notice_issue_done_ratios_updated: Issue done ratios updated. + notice_gantt_chart_truncated: "The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})" - error_can_t_load_default_data: "Default configuration could not be loaded: {{value}}" + 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_scm_command_failed: "An error occurred when trying to access the repository: %{value}" + error_scm_annotate: "The entry does not exist or cannot 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_delete_custom_field: Unable to delete custom field - error_can_not_delete_tracker: "This tracker contains issues and can't be deleted." - error_can_not_remove_role: "This role is in use and can not be deleted." - 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_can_not_delete_tracker: "This tracker contains issues and cannot be deleted." + error_can_not_remove_role: "This role is in use and cannot be deleted." + error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version cannot be reopened' + error_can_not_archive_project: This project cannot 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)' error_unable_delete_issue_status: 'Unable to delete issue status' - error_unable_to_connect: "Unable to connect ({{value}})" - warning_attachments_not_saved: "{{count}} file(s) could not be saved." + error_unable_to_connect: "Unable to connect (%{value})" + warning_attachments_not_saved: "%{count} file(s) could not be saved." - mail_subject_lost_password: "Your {{value}} password" + 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_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_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}}." + 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" + gui_validation_error_plural: "%{count} errors" field_ssamr_user_detail: - description: User Description + description: User Description institution: Institution field_other_institution: '' @@ -274,7 +282,7 @@ field_attr_mail: Email attribute field_onthefly: On-the-fly user creation field_start_date: Start date - field_done_ratio: % Done + field_done_ratio: "% Done" field_auth_source: Authentication mode field_hide_mail: Hide my email address field_comments: Comment @@ -309,15 +317,21 @@ 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" + field_issues_visibility: Issues visibility + field_is_private: Private + field_commit_logs_encoding: Commit messages encoding + field_scm_path_encoding: Path encoding + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvsroot: CVSROOT + field_cvs_module: Module + setting_external_repository: "Select this if the project's main repository is hosted somewhere else" setting_external_repository_url: "The URL of the existing external repository. Must be publicly accessible without a password" label_repository_external_url: "External repository URL" - setting_tipoftheday_text: Tip of the Day - setting_notifications_text: Notifications field_terms_and_conditions: 'Terms and Conditions:' accept_terms_and_conditions: 'I have read and agree with the ' - label_ssamr_description: Research description setting_app_title: Application title setting_app_subtitle: Application subtitle setting_welcome_text: Welcome text @@ -344,7 +358,6 @@ 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_header: Emails header setting_emails_footer: Emails footer setting_protocol: Protocol @@ -373,6 +386,10 @@ setting_rest_api_enabled: Enable REST web service setting_cache_formatted_text: Cache formatted text setting_default_notification_option: Default notification option + setting_has_welcome_page: Select this to replace the project overview page with your welcome page + setting_commit_logtime_enabled: Enable time logging + setting_commit_logtime_activity_id: Activity for logged time + setting_gantt_items_limit: Maximum number of items displayed on the gantt chart permission_add_project: Create project permission_add_subprojects: Create subprojects @@ -386,6 +403,8 @@ permission_add_issues: Add issues permission_edit_issues: Edit issues permission_manage_issue_relations: Manage issue relations + permission_set_issues_private: Set issues public or private + permission_set_own_issues_private: Set own issues public or private permission_add_issue_notes: Add notes permission_edit_issue_notes: Edit notes permission_edit_own_issue_notes: Edit own notes @@ -420,7 +439,7 @@ permission_browse_repository: Browse repository permission_view_changesets: View changesets permission_commit_access: Commit access - permission_manage_boards: Manage boards + permission_manage_boards: Manage forums permission_view_messages: View messages permission_add_messages: Post messages permission_edit_messages: Edit messages @@ -440,7 +459,7 @@ project_module_boards: Forums project_module_calendar: Calendar project_module_gantt: Gantt chart - project_module_embedded: Embedded documentation (Javadoc or Doxygen) + project_module_embedded: Embedded documentation (Javadoc, Doxygen or MATLAB) label_tipoftheday: Tip of the day label_notifications: Important Message field_terms_and_conditions: 'Terms and Conditions:' @@ -448,6 +467,7 @@ label_ssamr_description: Research description label_ssamr_details: Other Details label_ssamr_institution: Institution + label_ssamr_description: Research description label_user: User label_user_plural: Users label_user_new: New user @@ -460,17 +480,21 @@ label_x_projects: zero: no projects one: 1 project - other: "{{count}} projects" + other: "%{count} projects" label_project_all: All Projects label_project_latest: Latest projects + label_projects_more: More 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_issues_by: "Issues by %{value}" label_issue_added: Issue added label_issue_updated: Issue updated + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated label_document: Document label_document_new: New document label_document_plural: Documents @@ -479,8 +503,10 @@ label_role_plural: Roles label_role_new: New role label_role_and_permissions: Roles and permissions + label_role_anonymous: Anonymous + label_role_non_member: Non member label_member: Member - label_member_new: New member + label_member_new: Add new member label_member_plural: Members label_tracker: Tracker label_tracker_plural: Trackers @@ -518,8 +544,11 @@ label_last_login: Last connection label_registered_on: Registered on label_activity: Activity + label_activity_recent: Recent activity + label_activity_my_recent: Recent activity in my projects + label_activity_my_recent_none: No recent activity label_overall_activity: Overall activity - label_user_activity: "{{value}}'s activity" + label_user_activity: "%{value}'s activity" label_new: New label_logged_as: Logged in as label_environment: Environment @@ -529,7 +558,7 @@ label_auth_source_plural: Authentication modes label_subproject_plural: Subprojects label_subproject_new: New subproject - label_and_its_subprojects: "{{value}} and its subprojects" + label_and_its_subprojects: "%{value} and its subprojects" label_min_max_length: Min - Max length label_list: List label_date: Date @@ -540,8 +569,8 @@ label_text: Long text label_attribute: Attribute label_attribute_plural: Attributes - label_download: "{{count}} Download" - label_download_plural: "{{count}} Downloads" + label_download: "%{count} Download" + label_download_plural: "%{count} Downloads" label_no_data: No data to display label_change_status: Change status label_history: History @@ -556,8 +585,11 @@ label_news_new: Add news label_news_plural: News label_news_latest: Latest news + label_news_site_latest: Site news + label_news_more: More news label_news_view_all: View all news label_news_added: News added + label_news_comment_added: Comment added to a news label_settings: Settings label_overview: Overview label_version: Version @@ -573,17 +605,17 @@ 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}}" + 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" + other: "%{count} open" label_x_closed_issues_abbr: zero: 0 closed one: 1 closed - other: "{{count}} closed" + other: "%{count} closed" label_total: Total label_permissions: Permissions label_current_status: Current status @@ -601,7 +633,7 @@ label_months_from: months from label_gantt: Gantt label_internal: Internal - label_last_changes: "last {{count}} changes" + label_last_changes: "last %{count} changes" label_change_view_all: View all changes label_personalize_page: Personalise this page label_comment: Comment @@ -609,13 +641,14 @@ label_x_comments: zero: no comments one: 1 comment - other: "{{count}} comments" + 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_my_queries: My custom queries label_filter_add: Add filter label_filter_plural: Filters label_equals: is @@ -630,7 +663,7 @@ label_yesterday: yesterday label_this_week: this week label_last_week: last week - label_last_n_days: "last {{count}} days" + label_last_n_days: "last %{count} days" label_this_month: this month label_last_month: last month label_this_year: this year @@ -645,13 +678,13 @@ label_is_external_repository: Track an external repository label_repository_plural: Repositories label_browse: Browse - label_modification: "{{count}} change" - label_modification_plural: "{{count}} changes" + 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_revision_id: "Revision %{value}" label_associated_revisions: Associated revisions label_added: added label_modified: modified @@ -668,11 +701,12 @@ 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_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_result_plural: Search results + label_matching_project_plural: Matching project names label_all_words: All words label_wiki: Wiki label_wiki_edit: Wiki edit @@ -688,8 +722,8 @@ label_issue_tracking: Issue tracking label_spent_time: Spent time label_overall_spent_time: Overall spent time - label_f_hour: "{{value}} hour" - label_f_hour_plural: "{{value}} hours" + label_f_hour: "%{value} hour" + label_f_hour_plural: "%{value} hours" label_time_tracking: Time tracking label_change_plural: Changes label_statistics: Statistics @@ -740,21 +774,23 @@ label_date_from: From label_date_to: To label_language_based: Based on user's language - label_sort_by: "Sort by {{value}}" + 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_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_added_time_by: "Added by %{author} %{age} ago" + label_updated_time_by: "Updated by %{author} %{age} ago" + label_updated_time: "Updated %{value} ago" + label_time_ago: "{{age}} ago" label_jump_to_a_project: Jump to a project... label_file_plural: Downloads 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_bulk_edit_selected_time_entries: Bulk edit selected time entries label_theme: Theme label_default: Default label_search_titles_only: Search titles only @@ -768,7 +804,7 @@ 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_display_per_page: "Per page: %{value}" label_age: Age label_change_properties: Change properties label_general: General @@ -791,7 +827,7 @@ label_sort: Sort label_ascending: Ascending label_descending: Descending - label_date_from_to: From {{start}} to {{end}} + 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 @@ -810,24 +846,34 @@ 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" + label_api_access_key_created_on: "API access key created %{value} ago" 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_user_search: "Search for user:" - + label_welcome_page: "Welcome page" + label_has_welcome_page: "Use your own welcome page" + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_issues_visibility_all: All issues + label_issues_visibility_public: All non private issues + label_issues_visibility_own: Issues created by or assigned to the user + label_git_report_last_commit: Report last commit for files and directories + button_login: Login button_submit: Submit button_save: Save button_check_all: Check all button_uncheck_all: Uncheck all + button_collapse_all: Collapse all + button_expand_all: Expand all button_delete: Delete button_create: Create button_create_and_continue: Create and continue button_test: Test button_edit: Edit - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}" button_add: Add button_change: Change button_apply: Apply @@ -861,90 +907,106 @@ button_quote: Quote button_duplicate: Duplicate button_show: Show - + button_welcome_page_edit: Create or edit welcome page + button_welcome_page_edit_this: Edit this page + status_active: active status_registered: registered status_locked: locked - + version_status_open: open version_status_locked: locked version_status_closed: closed field_active: Active field_current: Current - + 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_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_are_you_sure_with_children: "Delete issue and all child issues?" - 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_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: 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.
    This will be used in all project-related URLs, and as the repository name. Once saved, the identifier can not be changed.' + text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.
    Once saved, the identifier cannot be changed.' text_project_homepage_info: 'Link to an external project page.' + 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_name_info: "This will be the name of your project throughout this site.
    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.
    This information is publicly visible in your profile and you can edit it at any time.' + text_user_ssamr_description_info: 'Please describe your current research or development interests.
    This information will be used at registration to determine that you are a real person – so please be descriptive, or your application may be delayed or rejected.
    After registration, the description is publicly visible in your profile and you can edit it at any time.' text_issue_parent_issue_info: 'If this is a subtask, please insert its parent task number or write the main task name.' - 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_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_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_status_changed_by_changeset: "Applied in changeset %{value}." + text_time_logged_by_changeset: "Applied in changeset %{value}." text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s)?' + text_issues_destroy_descendants_confirmation: "This will also delete %{count} subtask(s)." + text_time_entries_destroy_confirmation: 'Are you sure you want to delete the selected time entr(y/ies)?' 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_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_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 the project member associated with each username found in the repository log.\nUsers whose name or email matches that in the repository are mapped automatically." 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_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_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." text_files_active_change:
    Click the star to switch active status for a download on or off.
    Active files will be shown more prominently in the download page. text_settings_repo_creation: Creating repository...

    The source code repository for a project will be set up automatically within a few minutes of the project being created.

    Please check again in five minutes, and contact us if there is any problem.

    If you wish to use this project to track a repository that is already hosted somewhere else, please wait until the repository has been created here and then return to this settings page to configure it.

    If you don't want a repository at all, go to the Modules tab and switch it off there. + text_scm_path_encoding_note: "Default: UTF-8" + text_git_repository_note: "Bare and local repository (e.g. /gitrepo, c:\gitrepo)" + text_mercurial_repository_note: "Local repository (e.g. /hgrepo, c:\hgrepo)" + text_scm_command: Command + text_scm_command_version: Version + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. text_settings_repo_explanation: External repositories

    Normally your project's primary repository will be the Mercurial repository hosted at this site.

    However, if you already have your project hosted somewhere else, you can specify your existing external repository's URL here – then this site will track that repository in a read-only “mirror” copy. External Mercurial, git and Subversion repositories can be tracked. Note that you cannot switch to an external repository if you have already made any commits to the repository hosted here. text_settings_repo_is_internal: Currently the repository hosted at this site is the primary repository for this project. text_settings_repo_is_external: Currently the repository hosted at this site is a read-only copy of an external repository. text_settings_repo_need_help: Please contact us if you need help deciding how best to set this up.
    We can also import complete revision history from other systems into a new primary repository for you if you wish. - text_repository_external: "The primary repository for this project is hosted at {{location}}
    This repository is a read-only copy which is updated automatically." + text_has_welcome_page_info: Welcome page

    You can replace the standard {{overview_link}} page for this project with your own welcome page.
    This page will be editable using the project Wiki. + text_has_welcome_page_wiki_disabled: Note: You must enable the Wiki module in the {{modules_link}} tab before you can create or edit this page. - + default_role_manager: Manager default_role_developer: Developer default_role_reporter: Reporter @@ -966,7 +1028,7 @@ 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) diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/es.yml --- a/config/locales/es.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/es.yml Mon Jul 25 14:23:37 2011 +0100 @@ -66,44 +66,44 @@ half_a_minute: "medio minuto" less_than_x_seconds: one: "menos de 1 segundo" - other: "menos de {{count}} segundos" + other: "menos de %{count} segundos" x_seconds: one: "1 segundo" - other: "{{count}} segundos" + other: "%{count} segundos" less_than_x_minutes: one: "menos de 1 minuto" - other: "menos de {{count}} minutos" + other: "menos de %{count} minutos" x_minutes: one: "1 minuto" - other: "{{count}} minutos" + other: "%{count} minutos" about_x_hours: one: "alrededor de 1 hora" - other: "alrededor de {{count}} horas" + other: "alrededor de %{count} horas" x_days: one: "1 día" - other: "{{count}} días" + other: "%{count} días" about_x_months: one: "alrededor de 1 mes" - other: "alrededor de {{count}} meses" + other: "alrededor de %{count} meses" x_months: one: "1 mes" - other: "{{count}} meses" + other: "%{count} meses" about_x_years: one: "alrededor de 1 año" - other: "alrededor de {{count}} años" + other: "alrededor de %{count} años" over_x_years: one: "más de 1 año" - other: "más de {{count}} años" + other: "más de %{count} años" almost_x_years: one: "casi 1 año" - other: "casi {{count}} años" + other: "casi %{count} años" activerecord: errors: template: header: - one: "no se pudo guardar este {{model}} porque se encontró 1 error" - other: "no se pudo guardar este {{model}} porque se encontraron {{count}} errores" + one: "no se pudo guardar este %{model} porque se encontró 1 error" + other: "no se pudo guardar este %{model} porque se encontraron %{count} errores" # The variable :count is also available body: "Se encontraron problemas con los siguientes campos:" @@ -117,16 +117,16 @@ accepted: "debe ser aceptado" empty: "no puede estar vacío" blank: "no puede estar en blanco" - too_long: "es demasiado largo ({{count}} caracteres máximo)" - too_short: "es demasiado corto ({{count}} caracteres mínimo)" - wrong_length: "no tiene la longitud correcta ({{count}} caracteres exactos)" + too_long: "es demasiado largo (%{count} caracteres máximo)" + too_short: "es demasiado corto (%{count} caracteres mínimo)" + wrong_length: "no tiene la longitud correcta (%{count} caracteres exactos)" taken: "ya está en uso" not_a_number: "no es un número" - greater_than: "debe ser mayor que {{count}}" - greater_than_or_equal_to: "debe ser mayor que o igual a {{count}}" - equal_to: "debe ser igual a {{count}}" - less_than: "debe ser menor que {{count}}" - less_than_or_equal_to: "debe ser menor que o igual a {{count}}" + greater_than: "debe ser mayor que %{count}" + greater_than_or_equal_to: "debe ser mayor que o igual a %{count}" + equal_to: "debe ser igual a %{count}" + less_than: "debe ser menor que %{count}" + less_than_or_equal_to: "debe ser menor que o igual a %{count}" odd: "debe ser impar" even: "debe ser par" greater_than_start_date: "debe ser posterior a la fecha de comienzo" @@ -159,7 +159,10 @@ month_names: [~, Enero, Febrero, Marzo, Abril, Mayo, Junio, Julio, Agosto, Setiembre, Octubre, Noviembre, Diciembre] abbr_month_names: [~, Ene, Feb, Mar, Abr, May, Jun, Jul, Ago, Set, Oct, Nov, Dic] # Used in date_select and datime_select. - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -239,10 +242,10 @@ enumeration_activities: Actividades (tiempo dedicado) enumeration_doc_categories: Categorías del documento enumeration_issue_priorities: Prioridad de las peticiones - error_can_t_load_default_data: "No se ha podido cargar la configuración por defecto: {{value}}" + error_can_t_load_default_data: "No se ha podido cargar la configuración por defecto: %{value}" error_issue_not_found_in_project: 'La petición no se encuentra o no está asociada a este proyecto' error_scm_annotate: "No existe la entrada o no ha podido ser anotada" - error_scm_command_failed: "Se produjo un error al acceder al repositorio: {{value}}" + error_scm_command_failed: "Se produjo un error al acceder al repositorio: %{value}" error_scm_not_found: "La entrada y/o la revisión no existe en el repositorio." field_account: Cuenta field_activity: Actividad @@ -264,7 +267,7 @@ field_default_value: Estado por defecto field_delay: Retraso field_description: Descripción - field_done_ratio: % Realizado + field_done_ratio: "% Realizado" field_downloads: Descargas field_due_date: Fecha fin field_effective_date: Fecha @@ -313,6 +316,7 @@ field_role: Perfil field_searchable: Incluir en las búsquedas field_spent_on: Fecha + field_start_date: Fecha de inicio field_start_page: Página principal field_status: Estado field_subject: Tema @@ -332,25 +336,25 @@ general_csv_separator: ';' general_first_day_of_week: '1' general_lang_name: 'Español' - general_pdf_encoding: ISO-8859-15 + general_pdf_encoding: UTF-8 general_text_No: 'No' general_text_Yes: 'Sí' general_text_no: 'no' general_text_yes: 'sí' gui_validation_error: 1 error - gui_validation_error_plural: "{{count}} errores" + gui_validation_error_plural: "%{count} errores" label_activity: Actividad label_add_another_file: Añadir otro fichero label_add_note: Añadir una nota label_added: añadido - label_added_time_by: "Añadido por {{author}} hace {{age}}" + label_added_time_by: "Añadido por %{author} hace %{age}" label_administration: Administración label_age: Edad label_ago: hace label_all: todos label_all_time: todo el tiempo label_all_words: Todas las palabras - label_and_its_subprojects: "{{value}} y proyectos secundarios" + label_and_its_subprojects: "%{value} y proyectos secundarios" label_applied_status: Aplicar estado label_assigned_to_me_issues: Peticiones que me están asignadas label_associated_revisions: Revisiones asociadas @@ -383,17 +387,17 @@ label_closed_issues: cerrada label_closed_issues_plural: cerradas label_x_open_issues_abbr_on_total: - zero: 0 abiertas / {{total}} - one: 1 abierta / {{total}} - other: "{{count}} abiertas / {{total}}" + zero: 0 abiertas / %{total} + one: 1 abierta / %{total} + other: "%{count} abiertas / %{total}" label_x_open_issues_abbr: zero: 0 abiertas one: 1 abierta - other: "{{count}} abiertas" + other: "%{count} abiertas" label_x_closed_issues_abbr: zero: 0 cerradas one: 1 cerrada - other: "{{count}} cerradas" + other: "%{count} cerradas" label_comment: Comentario label_comment_add: Añadir un comentario label_comment_added: Comentario añadido @@ -402,7 +406,7 @@ label_x_comments: zero: sin comentarios one: 1 comentario - other: "{{count}} comentarios" + other: "%{count} comentarios" label_commits_per_author: Commits por autor label_commits_per_month: Commits por mes label_confirmation: Confirmación @@ -426,13 +430,13 @@ label_diff_inline: en línea label_diff_side_by_side: cara a cara label_disabled: deshabilitado - label_display_per_page: "Por página: {{value}}" + label_display_per_page: "Por página: %{value}" label_document: Documento label_document_added: Documento añadido label_document_new: Nuevo documento label_document_plural: Documentos - label_download: "{{count}} Descarga" - label_download_plural: "{{count}} Descargas" + label_download: "%{count} Descarga" + label_download_plural: "%{count} Descargas" label_downloads_abbr: D/L label_duplicated_by: duplicada por label_duplicates: duplicada de @@ -444,10 +448,10 @@ label_equals: igual label_example: Ejemplo label_export_to: 'Exportar a:' - label_f_hour: "{{value}} hora" - label_f_hour_plural: "{{value}} horas" + label_f_hour: "%{value} hora" + label_f_hour_plural: "%{value} horas" label_feed_plural: Feeds - label_feeds_access_key_created_on: "Clave de acceso por RSS creada hace {{value}}" + label_feeds_access_key_created_on: "Clave de acceso por RSS creada hace %{value}" label_file_added: Fichero añadido label_file_plural: Archivos label_filter_add: Añadir el filtro @@ -485,13 +489,13 @@ label_issue_updated: Petición actualizada label_issue_view_all: Ver todas las peticiones label_issue_watchers: Seguidores - label_issues_by: "Peticiones por {{value}}" + label_issues_by: "Peticiones por %{value}" label_jump_to_a_project: Ir al proyecto... label_language_based: Basado en el idioma - label_last_changes: "últimos {{count}} cambios" + label_last_changes: "últimos %{count} cambios" label_last_login: Última conexión label_last_month: último mes - label_last_n_days: "últimos {{count}} días" + label_last_n_days: "últimos %{count} días" label_last_week: última semana label_latest_revision: Última revisión label_latest_revision_plural: Últimas revisiones @@ -512,8 +516,8 @@ label_message_plural: Mensajes label_message_posted: Mensaje añadido label_min_max_length: Longitud mín - máx - label_modification: "{{count}} modificación" - label_modification_plural: "{{count}} modificaciones" + label_modification: "%{count} modificación" + label_modification_plural: "%{count} modificaciones" label_modified: modificado label_module_plural: Módulos label_month: Mes @@ -564,7 +568,7 @@ label_x_projects: zero: sin proyectos one: 1 proyecto - other: "{{count}} proyectos" + other: "%{count} proyectos" label_public_projects: Proyectos públicos label_query: Consulta personalizada label_query_new: Nueva consulta @@ -591,9 +595,9 @@ label_revision: Revisión label_revision_plural: Revisiones label_roadmap: Planificación - label_roadmap_due_in: "Finaliza en {{value}}" + label_roadmap_due_in: "Finaliza en %{value}" label_roadmap_no_issues: No hay peticiones para esta versión - label_roadmap_overdue: "{{value}} tarde" + label_roadmap_overdue: "%{value} tarde" label_role: Perfil label_role_and_permissions: Perfiles y permisos label_role_new: Nuevo perfil @@ -605,7 +609,7 @@ label_send_test_email: Enviar un correo de prueba label_settings: Configuración label_show_completed_versions: Muestra las versiones terminadas - label_sort_by: "Ordenar por {{value}}" + label_sort_by: "Ordenar por %{value}" label_sort_higher: Subir label_sort_highest: Primero label_sort_lower: Bajar @@ -629,11 +633,11 @@ label_tracker: Tipo label_tracker_new: Nuevo tipo label_tracker_plural: Tipos de peticiones - label_updated_time: "Actualizado hace {{value}}" - label_updated_time_by: "Actualizado por {{author}} hace {{age}}" + label_updated_time: "Actualizado hace %{value}" + label_updated_time_by: "Actualizado por %{author} hace %{age}" label_used_by: Utilizado por label_user: Usuario - label_user_activity: "Actividad de {{value}}" + label_user_activity: "Actividad de %{value}" label_user_mail_no_self_notified: "No quiero ser avisado de cambios hechos por mí" label_user_mail_option_all: "Para cualquier evento en todos mis proyectos" label_user_mail_option_selected: "Para cualquier evento de los proyectos seleccionados..." @@ -654,16 +658,16 @@ label_workflow: Flujo de trabajo label_year: Año label_yesterday: ayer - mail_body_account_activation_request: "Se ha inscrito un nuevo usuario ({{value}}). La cuenta está pendiende de aprobación:" + mail_body_account_activation_request: "Se ha inscrito un nuevo usuario (%{value}). La cuenta está pendiende de aprobación:" mail_body_account_information: Información sobre su cuenta - mail_body_account_information_external: "Puede usar su cuenta {{value}} para conectarse." + mail_body_account_information_external: "Puede usar su cuenta %{value} para conectarse." mail_body_lost_password: 'Para cambiar su contraseña, haga clic en el siguiente enlace:' mail_body_register: 'Para activar su cuenta, haga clic en el siguiente enlace:' - mail_body_reminder: "{{count}} peticion(es) asignadas a tí finalizan en los próximos {{days}} días:" - mail_subject_account_activation_request: "Petición de activación de cuenta {{value}}" - mail_subject_lost_password: "Tu contraseña del {{value}}" - mail_subject_register: "Activación de la cuenta del {{value}}" - mail_subject_reminder: "{{count}} peticion(es) finalizan en los próximos {{days}} días" + mail_body_reminder: "%{count} peticion(es) asignadas a tí finalizan en los próximos %{days} días:" + mail_subject_account_activation_request: "Petición de activación de cuenta %{value}" + mail_subject_lost_password: "Tu contraseña del %{value}" + mail_subject_register: "Activación de la cuenta del %{value}" + mail_subject_reminder: "%{count} peticion(es) finalizan en los próximos %{days} días" notice_account_activated: Su cuenta ha sido activada. Ya puede conectarse. notice_account_invalid_creditentials: Usuario o contraseña inválido. notice_account_lost_email_sent: Se le ha enviado un correo con instrucciones para elegir una nueva contraseña. @@ -675,9 +679,9 @@ notice_account_wrong_password: Contraseña incorrecta. notice_can_t_change_password: Esta cuenta utiliza una fuente de autenticación externa. No es posible cambiar la contraseña. notice_default_data_loaded: Configuración por defecto cargada correctamente. - notice_email_error: "Ha ocurrido un error mientras enviando el correo ({{value}})" - notice_email_sent: "Se ha enviado un correo a {{value}}" - notice_failed_to_save_issues: "Imposible grabar %s peticion(es) en {{count}} seleccionado: {{ids}}." + notice_email_error: "Ha ocurrido un error mientras enviando el correo (%{value})" + notice_email_sent: "Se ha enviado un correo a %{value}" + notice_failed_to_save_issues: "Imposible grabar %{count} peticion(es) de %{total} seleccionada(s): %{ids}." notice_feeds_access_key_reseted: Su clave de acceso para RSS ha sido reiniciada. notice_file_not_found: La página a la que intenta acceder no existe. notice_locking_conflict: Los datos han sido modificados por otro usuario. @@ -752,7 +756,6 @@ setting_autologin: Conexión automática setting_bcc_recipients: Ocultar las copias de carbón (bcc) setting_commit_fix_keywords: Palabras clave para la corrección - setting_commit_logs_encoding: Codificación de los mensajes de commit setting_commit_ref_keywords: Palabras clave para la referencia setting_cross_project_issue_relations: Permitir relacionar peticiones de distintos proyectos setting_date_format: Formato de fecha @@ -788,25 +791,25 @@ status_registered: registrado text_are_you_sure: ¿Está seguro? text_assign_time_entries_to_project: Asignar las horas al proyecto - text_caracters_maximum: "{{count}} caracteres como máximo." - text_caracters_minimum: "{{count}} caracteres como mínimo." + text_caracters_maximum: "%{count} caracteres como máximo." + text_caracters_minimum: "%{count} caracteres como mínimo." text_comma_separated: Múltiples valores permitidos (separados por coma). text_default_administrator_account_changed: Cuenta de administrador por defecto modificada 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_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_enumeration_destroy_question: "%{count} objetos con este valor asignado." text_file_repository_writable: Se puede escribir en el repositorio - text_issue_added: "Petición {{id}} añadida por {{author}}." + text_issue_added: "Petición %{id} añadida por %{author}." text_issue_category_destroy_assignments: Dejar las peticiones sin categoría - text_issue_category_destroy_question: "Algunas peticiones ({{count}}) están asignadas a esta categoría. ¿Qué desea hacer?" + text_issue_category_destroy_question: "Algunas peticiones (%{count}) están asignadas a esta categoría. ¿Qué desea hacer?" text_issue_category_reassign_to: Reasignar las peticiones a la categoría - text_issue_updated: "La petición {{id}} ha sido actualizada por {{author}}." + text_issue_updated: "La petición %{id} ha sido actualizada por %{author}." text_issues_destroy_confirmation: '¿Seguro que quiere borrar las peticiones seleccionadas?' text_issues_ref_in_commit_messages: Referencia y petición de corrección en los mensajes - text_length_between: "Longitud entre {{min}} y {{max}} caracteres." + text_length_between: "Longitud entre %{min} y %{max} caracteres." text_load_default_configuration: Cargar la configuración por defecto text_min_max_length_info: 0 para ninguna restricción text_no_configuration_data: "Todavía no se han configurado perfiles, ni tipos, estados y flujo de trabajo asociado a peticiones. Se recomiendo encarecidamente cargar la configuración por defecto. Una vez cargada, podrá modificarla." @@ -818,19 +821,19 @@ text_rmagick_available: RMagick disponible (opcional) text_select_mail_notifications: Seleccionar los eventos a notificar text_select_project_modules: 'Seleccione los módulos a activar para este proyecto:' - text_status_changed_by_changeset: "Aplicado en los cambios {{value}}" - text_subprojects_destroy_warning: "Los proyectos secundarios: {{value}} también se eliminarán" + text_status_changed_by_changeset: "Aplicado en los cambios %{value}" + text_subprojects_destroy_warning: "Los proyectos secundarios: %{value} también se eliminarán" text_tip_issue_begin_day: tarea que comienza este día text_tip_issue_begin_end_day: tarea que comienza y termina este día text_tip_issue_end_day: tarea que termina este día text_tracker_no_workflow: No hay ningún flujo de trabajo definido para este tipo de petición text_unallowed_characters: Caracteres no permitidos text_user_mail_option: "De los proyectos no seleccionados, sólo recibirá notificaciones sobre elementos monitorizados o elementos en los que esté involucrado (por ejemplo, peticiones de las que usted sea autor o asignadas a usted)." - text_user_wrote: "{{value}} escribió:" + text_user_wrote: "%{value} escribió:" text_wiki_destroy_confirmation: ¿Seguro que quiere borrar el wiki y todo su contenido? text_workflow_edit: Seleccionar un flujo de trabajo para actualizar text_plugin_assets_writable: Se puede escribir en el directorio público de las extensiones - warning_attachments_not_saved: "No se han podido grabar {{count}} ficheros." + warning_attachments_not_saved: "No se han podido grabar %{count} ficheros." button_create_and_continue: Crear y continuar text_custom_field_possible_values_info: 'Un valor en cada línea' label_display: Mostrar @@ -845,21 +848,21 @@ label_descending: Descendente label_sort: Ordenar label_ascending: Ascendente - label_date_from_to: Desde {{start}} hasta {{end}} + label_date_from_to: Desde %{start} hasta %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: Esta página tiene {{descendants}} página(s) hija(s) y descendiente(s). ¿Qué desea hacer? + text_wiki_page_destroy_question: Esta página tiene %{descendants} página(s) hija(s) y descendiente(s). ¿Qué desea hacer? text_wiki_page_reassign_children: Reasignar páginas hijas a esta página text_wiki_page_nullify_children: Dejar páginas hijas como páginas raíz text_wiki_page_destroy_children: Eliminar páginas hijas y todos sus descendientes setting_password_min_length: Longitud mínima de la contraseña field_group_by: Agrupar resultados por - mail_subject_wiki_content_updated: "La página wiki '{{id}}' ha sido actualizada" + mail_subject_wiki_content_updated: "La página wiki '%{id}' ha sido actualizada" label_wiki_content_added: Página wiki añadida - mail_subject_wiki_content_added: "Se ha añadido la página wiki '{{id}}'." - mail_body_wiki_content_added: "{{author}} ha añadido la página wiki '{{id}}'." + mail_subject_wiki_content_added: "Se ha añadido la página wiki '%{id}'." + mail_body_wiki_content_added: "%{author} ha añadido la página wiki '%{id}'." label_wiki_content_updated: Página wiki actualizada - mail_body_wiki_content_updated: La página wiki '{{id}}' ha sido actualizada por {{author}}. + mail_body_wiki_content_updated: La página wiki '%{id}' ha sido actualizada por %{author}. permission_add_project: Crear proyecto setting_new_project_user_role_id: Permiso asignado a un usuario no-administrador para crear proyectos label_view_all_revisions: Ver todas las revisiones @@ -867,14 +870,14 @@ label_branch: Rama error_no_tracker_in_project: Este proyecto no tiene asociados tipos de peticiones. Por favor, revise la configuración. error_no_default_issue_status: No se ha definido un estado de petición por defecto. Por favor, revise la configuración (en "Administración" -> "Estados de las peticiones"). - text_journal_changed: "{{label}} cambiado {{old}} por {{new}}" - text_journal_set_to: "{{label}} establecido a {{value}}" - text_journal_deleted: "{{label}} eliminado ({{old}})" + text_journal_changed: "%{label} cambiado %{old} por %{new}" + text_journal_set_to: "%{label} establecido a %{value}" + text_journal_deleted: "%{label} eliminado (%{old})" label_group_plural: Grupos label_group: Grupo label_group_new: Nuevo grupo label_time_entry_plural: Tiempo dedicado - text_journal_added: "Añadido {{label}} {{value}}" + text_journal_added: "Añadido %{label} %{value}" field_active: Activo enumeration_system_activity: Actividad del sistema permission_delete_issue_watchers: Borrar seguidores @@ -910,9 +913,9 @@ setting_start_of_week: Comenzar las semanas en permission_view_issues: Ver peticiones label_display_used_statuses_only: Sólo mostrar los estados usados por este tipo de petición - label_revision_id: Revisión {{value}} + label_revision_id: Revisión %{value} label_api_access_key: Clave de acceso de la API - label_api_access_key_created_on: Clave de acceso de la API creada hace {{value}} + label_api_access_key_created_on: Clave de acceso de la API creada hace %{value} label_feeds_access_key: Clave de acceso RSS notice_api_access_key_reseted: Clave de acceso a la API regenerada. setting_rest_api_enabled: Activar servicio web REST @@ -939,32 +942,75 @@ label_subtask_plural: Subtareas label_project_copy_notifications: Enviar notificaciones por correo electrónico durante la copia del proyecto error_can_not_delete_custom_field: Fue imposible eliminar el campo personalizado - error_unable_to_connect: Fue imposible conectar con ({{value}}) + error_unable_to_connect: Fue imposible conectar con (%{value}) error_can_not_remove_role: Este rol está en uso y no puede ser eliminado. error_can_not_delete_tracker: Este tipo contiene peticiones y no puede ser eliminado. field_principal: Principal label_my_page_block: Bloque Mi página - notice_failed_to_save_members: "Fallo al guardar miembro(s): {{errors}}." + notice_failed_to_save_members: "Fallo al guardar miembro(s): %{errors}." text_zoom_out: Alejar text_zoom_in: Acercar notice_unable_delete_time_entry: Fue imposible eliminar la entrada de tiempo dedicado. label_overall_spent_time: Tiempo total dedicado field_time_entries: Log time 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. - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" + project_module_calendar: Calendario + button_edit_associated_wikipage: "Editar paginas Wiki asociadas: %{page_title}" + text_are_you_sure_with_children: ¿Borrar peticiones y todas sus peticiones hijas? + field_text: Campo de texto + label_user_mail_option_only_owner: Solo para objetos que soy propietario + setting_default_notification_option: Opcion de notificacion por defecto + label_user_mail_option_only_my_events: Solo para objetos que soy seguidor o estoy involucrado + label_user_mail_option_only_assigned: Solo para objetos que estoy asignado + label_user_mail_option_none: Sin eventos + field_member_of_group: Asignado al grupo + field_assigned_to_role: Asignado al perfil + notice_not_authorized_archived_project: El proyecto al que intenta acceder ha sido archivado. + label_principal_search: "Buscar por usuario o grupo:" + label_user_search: "Buscar por usuario:" field_visible: Visible - setting_emails_header: Emails header + setting_emails_header: Encabezado de Correos + + setting_commit_logtime_activity_id: Actividad de los tiempos registrados + text_time_logged_by_changeset: Aplicado en los cambios %{value}. + setting_commit_logtime_enabled: Habilitar registro de horas + notice_gantt_chart_truncated: Se recortó el diagrama porque excede el número máximo de elementos que pueden ser mostrados (%{max}) + setting_gantt_items_limit: Número máximo de elementos mostrados en el diagrama de Gantt + field_warn_on_leaving_unsaved: Avisarme cuando vaya a abandonar una página con texto no guardado + text_warn_on_leaving_unsaved: Esta página contiene texto no guardado y si la abandona sus cambios se perderán + label_my_queries: Mis consultas personalizadas + text_journal_changed_no_detail: "Se actualizó %{label}" + label_news_comment_added: Comentario añadido a noticia + button_expand_all: Expandir todo + button_collapse_all: Contraer todo + label_additional_workflow_transitions_for_assignee: Transiciones adicionales permitidas cuando la petición está asignada al usuario + label_additional_workflow_transitions_for_author: Transiciones adicionales permitidas cuando el usuario es autor de la petición + label_bulk_edit_selected_time_entries: Editar en bloque las horas seleccionadas + text_time_entries_destroy_confirmation: ¿Está seguro de querer eliminar (la hora seleccionada/las horas seleccionadas)? + label_role_anonymous: Anónimo + label_role_non_member: No miembro + label_issue_note_added: Nota añadida + label_issue_status_updated: Estado actualizado + label_issue_priority_updated: Prioridad actualizada + label_issues_visibility_own: Peticiones creadas por el usuario o asignadas a él + field_issues_visibility: Visibilidad de las peticiones + label_issues_visibility_all: Todas las peticiones + permission_set_own_issues_private: Poner las peticiones propias como públicas o privadas + field_is_private: Privada + permission_set_issues_private: Poner peticiones como públicas o privadas + label_issues_visibility_public: Todas las peticiones no privadas + text_issues_destroy_descendants_confirmation: Se procederá a borrar también %{count} subtarea(s). + field_commit_logs_encoding: Codificación de los mensajes de commit + field_scm_path_encoding: Codificación de las rutas + text_scm_path_encoding_note: "Por defecto: UTF-8" + field_path_to_repository: Ruta al repositorio + field_root_directory: Directorio raíz + field_cvs_module: Módulo + field_cvsroot: CVSROOT + text_git_repository_note: Repositorio local (bare repository) (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Repositorio local (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Orden + text_scm_command_version: Versión + label_git_report_last_commit: Informar del último commit para ficheros y directorios + text_scm_config: Puede configurar las órdenes de cada scm en configuration/configuration.yml. Por favor, reinicie la aplicación después de editarlo + text_scm_command_not_available: La orden para el Scm no está disponible. Por favor, compruebe la configuración en el panel de administración. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/eu.yml --- a/config/locales/eu.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/eu.yml Mon Jul 25 14:23:37 2011 +0100 @@ -20,7 +20,10 @@ month_names: [~, Urtarrila, Otsaila, Martxoa, Apirila, Maiatza, Ekaina, Uztaila, Abuztua, Iraila, Urria, Azaroa, Abendua] abbr_month_names: [~, Urt, Ots, Mar, Api, Mai, Eka, Uzt, Abu, Ira, Urr, Aza, Abe] # Used in date_select and datime_select. - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -36,37 +39,37 @@ half_a_minute: "minutu erdi" less_than_x_seconds: one: "segundu bat baino gutxiago" - other: "{{count}} segundu baino gutxiago" + other: "%{count} segundu baino gutxiago" x_seconds: one: "segundu 1" - other: "{{count}} segundu" + other: "%{count} segundu" less_than_x_minutes: one: "minutu bat baino gutxiago" - other: "{{count}} minutu baino gutxiago" + other: "%{count} minutu baino gutxiago" x_minutes: one: "minutu 1" - other: "{{count}} minutu" + other: "%{count} minutu" about_x_hours: one: "ordu 1 inguru" - other: "{{count}} ordu inguru" + other: "%{count} ordu inguru" x_days: one: "egun 1" - other: "{{count}} egun" + other: "%{count} egun" about_x_months: one: "hilabete 1 inguru" - other: "{{count}} hilabete inguru" + other: "%{count} hilabete inguru" x_months: one: "hilabete 1" - other: "{{count}} hilabete" + other: "%{count} hilabete" about_x_years: one: "urte 1 inguru" - other: "{{count}} urte inguru" + other: "%{count} urte inguru" over_x_years: one: "urte 1 baino gehiago" - other: "{{count}} urte baino gehiago" + other: "%{count} urte baino gehiago" almost_x_years: one: "ia urte 1" - other: "ia {{count}} urte" + other: "ia %{count} urte" number: format: @@ -97,6 +100,10 @@ activerecord: errors: + template: + header: + one: "Errore batek %{model} hau godetzea galarazi du." + other: "%{count} errorek %{model} hau gordetzea galarazi dute." messages: inclusion: "ez dago zerrendan" exclusion: "erreserbatuta dago" @@ -105,23 +112,23 @@ accepted: "onartu behar da" empty: "ezin da hutsik egon" blank: "ezin da hutsik egon" - too_long: "luzeegia da (maximoa {{count}} karaktere dira)" - too_short: "laburregia da (minimoa {{count}} karaktere dira)" - wrong_length: "luzera ezegokia da ({{count}} karakter izan beharko litzake)" + too_long: "luzeegia da (maximoa %{count} karaktere dira)" + too_short: "laburregia da (minimoa %{count} karaktere dira)" + wrong_length: "luzera ezegokia da (%{count} karakter izan beharko litzake)" taken: "dagoeneko hartuta dago" not_a_number: "ez da zenbaki bat" not_a_date: "ez da baliozko data" - greater_than: "{{count}} baino handiagoa izan behar du" - greater_than_or_equal_to: "{{count}} edo handiagoa izan behar du" - equal_to: "{{count}} izan behar du" - less_than: "{{count}} baino gutxiago izan behar du" - less_than_or_equal_to: "{{count}} edo gutxiago izan behar du" + greater_than: "%{count} baino handiagoa izan behar du" + greater_than_or_equal_to: "%{count} edo handiagoa izan behar du" + equal_to: "%{count} izan behar du" + less_than: "%{count} baino gutxiago izan behar du" + less_than_or_equal_to: "%{count} edo gutxiago izan behar du" odd: "bakoitia izan behar du" even: "bikoitia izan behar du" 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 @@ -152,20 +159,20 @@ notice_file_not_found: Atzitu nahi duzun orria ez da exisitzen edo ezabatua izan da. notice_locking_conflict: Beste erabiltzaile batek datuak eguneratu ditu. notice_not_authorized: Ez duzu orri hau atzitzeko baimenik. - notice_email_sent: "{{value}} helbidera eposta bat bidali da" - notice_email_error: "Errorea eposta bidaltzean ({{value}})" + notice_email_sent: "%{value} helbidera eposta bat bidali da" + notice_email_error: "Errorea eposta bidaltzean (%{value})" notice_feeds_access_key_reseted: Zure RSS atzipen giltza berrezarri da. notice_api_access_key_reseted: Zure API atzipen giltza berrezarri da. - notice_failed_to_save_issues: "Hautatutako {{total}} zereginetatik {{count}} ezin izan dira konpondu: {{ids}}." + notice_failed_to_save_issues: "Hautatutako %{total} zereginetatik %{count} ezin izan dira konpondu: %{ids}." notice_no_issue_selected: "Ez da zereginik hautatu! Mesedez, editatu nahi dituzun arazoak markatu." notice_account_pending: "Zure kontua sortu da, orain kudeatzailearen onarpenaren zain dago." notice_default_data_loaded: Lehenetsitako konfigurazioa ongi kargatu da. notice_unable_delete_version: Ezin da bertsioa ezabatu. notice_issue_done_ratios_updated: Burututako zereginen erlazioa eguneratu da. - error_can_t_load_default_data: "Ezin izan da lehenetsitako konfigurazioa kargatu: {{value}}" + error_can_t_load_default_data: "Ezin izan da lehenetsitako konfigurazioa kargatu: %{value}" error_scm_not_found: "Sarrera edo berrikuspena ez da biltegian topatu." - error_scm_command_failed: "Errorea gertatu da biltegia atzitzean: {{value}}" + error_scm_command_failed: "Errorea gertatu da biltegia atzitzean: %{value}" error_scm_annotate: "Sarrera ez da existitzen edo ezin da anotatu." error_issue_not_found_in_project: 'Zeregina ez da topatu edo ez da proiektu honetakoa' error_no_tracker_in_project: 'Proiektu honek ez du aztarnaririk esleituta. Mesedez egiaztatu Proiektuaren ezarpenak.' @@ -176,25 +183,25 @@ error_workflow_copy_source: 'Mesedez hautatu iturburuko aztarnari edo rola' error_workflow_copy_target: 'Mesedez hautatu helburuko aztarnari(ak) edo rola(k)' - warning_attachments_not_saved: "{{count}} fitxategi ezin izan d(ir)a gorde." + warning_attachments_not_saved: "%{count} fitxategi ezin izan d(ir)a gorde." - mail_subject_lost_password: "Zure {{value}} pasahitza" + mail_subject_lost_password: "Zure %{value} pasahitza" mail_body_lost_password: 'Zure pasahitza aldatzeko hurrengo estekan klikatu:' - mail_subject_register: "Zure {{value}} kontuaren gaitzea" + mail_subject_register: "Zure %{value} kontuaren gaitzea" mail_body_register: 'Zure kontua gaitzeko hurrengo estekan klikatu:' - mail_body_account_information_external: "Zure {{value}} kontua erabil dezakezu saioa hasteko." + mail_body_account_information_external: "Zure %{value} kontua erabil dezakezu saioa hasteko." mail_body_account_information: Zure kontuaren informazioa - mail_subject_account_activation_request: "{{value}} kontu gaitzeko eskaera" - mail_body_account_activation_request: "Erabiltzaile berri bat ({{value}}) erregistratu da. Kontua zure onarpenaren zain dago:" - mail_subject_reminder: "{{count}} arazo hurrengo {{days}} egunetan amaitzen d(ir)a" - mail_body_reminder: "Zuri esleituta dauden {{count}} arazo hurrengo {{days}} egunetan amaitzen d(ir)a:" - mail_subject_wiki_content_added: "'{{id}}' wiki orria gehitu da" - mail_body_wiki_content_added: "{{author}}-(e)k '{{id}}' wiki orria gehitu du." - mail_subject_wiki_content_updated: "'{{id}}' wiki orria eguneratu da" - mail_body_wiki_content_updated: "{{author}}-(e)k '{{id}}' wiki orria eguneratu du." + mail_subject_account_activation_request: "%{value} kontu gaitzeko eskaera" + mail_body_account_activation_request: "Erabiltzaile berri bat (%{value}) erregistratu da. Kontua zure onarpenaren zain dago:" + mail_subject_reminder: "%{count} arazo hurrengo %{days} egunetan amaitzen d(ir)a" + mail_body_reminder: "Zuri esleituta dauden %{count} arazo hurrengo %{days} egunetan amaitzen d(ir)a:" + mail_subject_wiki_content_added: "'%{id}' wiki orria gehitu da" + mail_body_wiki_content_added: "%{author}-(e)k '%{id}' wiki orria gehitu du." + mail_subject_wiki_content_updated: "'%{id}' wiki orria eguneratu da" + mail_body_wiki_content_updated: "%{author}-(e)k '%{id}' wiki orria eguneratu du." gui_validation_error: akats 1 - gui_validation_error_plural: "{{count}} akats" + gui_validation_error_plural: "%{count} akats" field_name: Izena field_description: Deskribapena @@ -257,6 +264,7 @@ field_attr_lastname: Abizenak atributua field_attr_mail: Eposta atributua field_onthefly: Zuzeneko erabiltzaile sorrera + field_start_date: Hasiera field_done_ratio: Egindako % field_auth_source: Autentikazio modua field_hide_mail: Nire eposta helbidea ezkutatu @@ -272,7 +280,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 @@ -313,7 +321,6 @@ 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_emails_footer: Eposten oina setting_protocol: Protokoloa setting_per_page_options: Orriko objektuen aukerak @@ -358,7 +365,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 @@ -412,14 +419,14 @@ label_x_projects: zero: proiekturik ez one: proiektu bat - other: "{{count}} proiektu" + other: "%{count} proiektu" label_project_all: Proiektu guztiak label_project_latest: Azken proiektuak label_issue: Zeregina label_issue_new: Zeregin berria label_issue_plural: Zereginak label_issue_view_all: Zeregin guztiak ikusi - label_issues_by: "Zereginak honengatik: {{value}}" + label_issues_by: "Zereginak honengatik: %{value}" label_issue_added: Zeregina gehituta label_issue_updated: Zeregina eguneratuta label_document: Dokumentua @@ -436,7 +443,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 @@ -469,7 +476,7 @@ label_registered_on: Noiz erregistratuta label_activity: Jarduerak label_overall_activity: Jarduera guztiak - label_user_activity: "{{value}}-(r)en jarduerak" + label_user_activity: "%{value}-(r)en jarduerak" label_new: Berria label_logged_as: "Sartutako erabiltzailea:" label_environment: Ingurune @@ -479,7 +486,7 @@ label_auth_source_plural: Autentikazio moduak label_subproject_plural: Azpiproiektuak label_subproject_new: Azpiproiektu berria - label_and_its_subprojects: "{{value}} eta bere azpiproiektuak" + label_and_its_subprojects: "%{value} eta bere azpiproiektuak" label_min_max_length: Luzera min - max label_list: Zerrenda label_date: Data @@ -490,8 +497,8 @@ label_text: Testu luzea label_attribute: Atributua label_attribute_plural: Atributuak - label_download: "Deskarga {{count}}" - label_download_plural: "{{count}} Deskarga" + label_download: "Deskarga %{count}" + label_download_plural: "%{count} Deskarga" label_no_data: Ez dago erakusteko daturik label_change_status: Egoera aldatu label_history: Historikoa @@ -502,7 +509,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 @@ -524,17 +531,17 @@ label_closed_issues: itxita label_closed_issues_plural: itxiak label_x_open_issues_abbr_on_total: - zero: 0 irekita / {{total}} - one: 1 irekita / {{total}} - other: "{{count}} irekiak / {{total}}" + zero: 0 irekita / %{total} + one: 1 irekita / %{total} + other: "%{count} irekiak / %{total}" label_x_open_issues_abbr: zero: 0 irekita one: 1 irekita - other: "{{count}} irekiak" + other: "%{count} irekiak" label_x_closed_issues_abbr: zero: 0 itxita one: 1 itxita - other: "{{count}} itxiak" + other: "%{count} itxiak" label_total: Guztira label_permissions: Baimenak label_current_status: Uneko egoera @@ -549,10 +556,10 @@ 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" + label_last_changes: "azken %{count} aldaketak" label_change_view_all: Aldaketa guztiak ikusi label_personalize_page: Orri hau pertsonalizatu label_comment: Iruzkin @@ -560,7 +567,7 @@ label_x_comments: zero: iruzkinik ez one: iruzkin 1 - other: "{{count}} iruzkin" + other: "%{count} iruzkin" label_comment_add: Iruzkina gehitu label_comment_added: Iruzkina gehituta label_comment_delete: Iruzkinak ezabatu @@ -581,7 +588,7 @@ label_yesterday: atzo label_this_week: aste honetan label_last_week: pasadan astean - label_last_n_days: "azken {{count}} egunetan" + label_last_n_days: "azken %{count} egunetan" label_this_month: hilabete hau label_last_month: pasadan hilabetea label_this_year: urte hau @@ -595,13 +602,13 @@ label_repository: Biltegia label_repository_plural: Biltegiak label_browse: Arakatu - label_modification: "aldaketa {{count}}" - label_modification_plural: "{{count}} aldaketa" + label_modification: "aldaketa %{count}" + label_modification_plural: "%{count} aldaketa" label_branch: Adarra label_tag: Etiketa label_revision: Berrikuspena label_revision_plural: Berrikuspenak - label_revision_id: "{{value}} berrikuspen" + label_revision_id: "%{value} berrikuspen" label_associated_revisions: Elkartutako berrikuspenak label_added: gehituta label_modified: aldatuta @@ -618,8 +625,8 @@ label_sort_lower: Behera mugitu label_sort_lowest: Beheraino mugitu label_roadmap: Ibilbide-mapa - label_roadmap_due_in: "Epea: {{value}}" - label_roadmap_overdue: "{{value}} berandu" + label_roadmap_due_in: "Epea: %{value}" + label_roadmap_overdue: "%{value} berandu" label_roadmap_no_issues: Ez dago zereginik bertsio honetan label_search: Bilatu label_result_plural: Emaitzak @@ -637,8 +644,8 @@ label_changes_details: Aldaketa guztien xehetasunak label_issue_tracking: Zeregin jarraipena label_spent_time: Igarotako denbora - label_f_hour: "ordu {{value}}" - label_f_hour_plural: "{{value}} ordu" + label_f_hour: "ordu %{value}" + label_f_hour_plural: "%{value} ordu" label_time_tracking: Denbora jarraipena label_change_plural: Aldaketak label_statistics: Estatistikak @@ -678,7 +685,7 @@ label_message_plural: Mezuak label_message_last: Azken mezua label_message_new: Mezu berria - label_message_posted: Mesua gehituta + label_message_posted: Mezua gehituta label_reply_plural: Erantzunak label_send_information: Erabiltzaileai kontuaren informazioa bidali label_year: Urtea @@ -687,15 +694,15 @@ label_date_from: Nork label_date_to: Nori label_language_based: Erabiltzailearen hizkuntzaren arabera - label_sort_by: "Ordenazioa: {{value}}" + label_sort_by: "Ordenazioa: %{value}" label_send_test_email: Frogako mezua bidali label_feeds_access_key: RSS atzipen giltza label_missing_feeds_access_key: RSS atzipen giltza falta da - label_feeds_access_key_created_on: "RSS atzipen giltza orain dela {{value}} sortuta" + label_feeds_access_key_created_on: "RSS atzipen giltza orain dela %{value} sortuta" label_module_plural: Moduluak - label_added_time_by: "{{author}}, orain dela {{age}} gehituta" - label_updated_time_by: "{{author}}, orain dela {{age}} eguneratuta" - label_updated_time: "Orain dela {{value}} eguneratuta" + label_added_time_by: "%{author}, orain dela %{age} gehituta" + label_updated_time_by: "%{author}, orain dela %{age} eguneratuta" + label_updated_time: "Orain dela %{value} eguneratuta" label_jump_to_a_project: Joan proiektura... label_file_plural: Fitxategiak label_changeset_plural: Aldaketak @@ -711,7 +718,7 @@ label_registration_activation_by_email: kontuak epostaz gaitu label_registration_manual_activation: kontuak eskuz gaitu label_registration_automatic_activation: kontuak automatikoki gaitu - label_display_per_page: "Orriko: {{value}}" + label_display_per_page: "Orriko: %{value}" label_age: Adina label_change_properties: Propietateak aldatu label_general: Orokorra @@ -734,7 +741,7 @@ label_sort: Ordenatu label_ascending: Gorantz label_descending: Beherantz - label_date_from_to: "{{start}}-tik {{end}}-ra" + label_date_from_to: "%{start}-tik %{end}-ra" label_wiki_content_added: Wiki orria gehituta label_wiki_content_updated: Wiki orria eguneratuta label_group: Taldea @@ -753,7 +760,7 @@ label_display_used_statuses_only: Aztarnari honetan erabiltzen diren egoerak bakarrik erakutsi label_api_access_key: API atzipen giltza label_missing_api_access_key: API atzipen giltza falta da - label_api_access_key_created_on: "API atzipen giltza sortuta orain dela {{value}}" + label_api_access_key_created_on: "API atzipen giltza sortuta orain dela %{value}" button_login: Saioa hasi button_submit: Bidali @@ -780,7 +787,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 @@ -813,53 +820,53 @@ text_regexp_info: adib. ^[A-Z0-9]+$ text_min_max_length_info: 0k mugarik gabe esan nahi du text_project_destroy_confirmation: Ziur zaude proiektu hau eta erlazionatutako datu guztiak ezabatu nahi dituzula? - text_subprojects_destroy_warning: "{{value}} azpiproiektuak ere ezabatuko dira." + text_subprojects_destroy_warning: "%{value} azpiproiektuak ere ezabatuko dira." text_workflow_edit: Hautatu rola eta aztarnaria workflow-a editatzeko text_are_you_sure: Ziur zaude? - text_journal_changed: "{{label}} {{old}}-(e)tik {{new}}-(e)ra aldatuta" - 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_journal_changed: "%{label} %{old}-(e)tik %{new}-(e)ra aldatuta" + 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 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.
    Gorde eta gero identifikadorea ezin da aldatu.' - text_caracters_maximum: "{{count}} karaktere gehienez." - text_caracters_minimum: "Gutxienez {{count}} karaktereetako luzerakoa izan behar du." - text_length_between: "Luzera {{min}} eta {{max}} karaktereen artekoa." + text_caracters_maximum: "%{count} karaktere gehienez." + text_caracters_minimum: "Gutxienez %{count} karaktereetako luzerakoa izan behar du." + text_length_between: "Luzera %{min} eta %{max} karaktereen artekoa." text_tracker_no_workflow: Ez da workflow-rik definitu aztarnari honentzako text_unallowed_characters: Debekatutako karaktereak text_comma_separated: Balio anitz izan daitezke (komaz banatuta). text_line_separated: Balio anitz izan daitezke (balio bakoitza lerro batean). text_issues_ref_in_commit_messages: Commit-en mezuetan zereginak erlazionatu eta konpontzen - text_issue_added: "{{id}} zeregina {{author}}-(e)k jakinarazi du." - text_issue_updated: "{{id}} zeregina {{author}}-(e)k eguneratu du." + text_issue_added: "%{id} zeregina %{author}-(e)k jakinarazi du." + text_issue_updated: "%{id} zeregina %{author}-(e)k eguneratu du." text_wiki_destroy_confirmation: Ziur zaude wiki hau eta bere eduki guztiak ezabatu nahi dituzula? - text_issue_category_destroy_question: "Zeregin batzuk ({{count}}) kategoria honetara esleituta daude. Zer egin nahi duzu?" + text_issue_category_destroy_question: "Zeregin batzuk (%{count}) kategoria honetara esleituta daude. Zer egin nahi duzu?" text_issue_category_destroy_assignments: Kategoria esleipenak kendu text_issue_category_reassign_to: Zereginak kategoria honetara esleitu text_user_mail_option: "Hautatu gabeko proiektuetan, behatzen edo parte hartzen duzun gauzei buruzko jakinarazpenak jasoko dituzu (adib. zu egile zaren edo esleituta dituzun zereginak)." text_no_configuration_data: "Rolak, aztarnariak, zeregin egoerak eta workflow-ak ez dira oraindik konfiguratu.\nOso gomendagarria de lehenetsitako kkonfigurazioa kargatzea. Kargatu eta gero aldatu ahalko duzu." text_load_default_configuration: Lehenetsitako konfigurazioa kargatu - text_status_changed_by_changeset: "{{value}} aldaketan aplikatuta." + text_status_changed_by_changeset: "%{value} aldaketan aplikatuta." text_issues_destroy_confirmation: 'Ziur zaude hautatutako zeregina(k) ezabatu nahi dituzula?' text_select_project_modules: 'Hautatu proiektu honetan gaitu behar diren moduluak:' text_default_administrator_account_changed: Lehenetsitako kudeatzaile kontua aldatuta text_file_repository_writable: Eranskinen direktorioan idatz daiteke text_plugin_assets_writable: Pluginen baliabideen direktorioan idatz daiteke text_rmagick_available: RMagick eskuragarri (aukerazkoa) - text_destroy_time_entries_question: "{{hours}} orduei buruz berri eman zen zuk ezabatzera zoazen zereginean. Zer egin nahi duzu?" + text_destroy_time_entries_question: "%{hours} orduei buruz berri eman zen zuk ezabatzera zoazen zereginean. Zer egin nahi duzu?" text_destroy_time_entries: Ezabatu berri emandako orduak text_assign_time_entries_to_project: Berri emandako orduak proiektura esleitu text_reassign_time_entries: 'Berri emandako orduak zeregin honetara esleitu:' - text_user_wrote: "{{value}}-(e)k idatzi zuen:" - text_enumeration_destroy_question: "{{count}} objetu balio honetara esleituta daude." + 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' - text_wiki_page_destroy_question: "Orri honek {{descendants}} orri seme eta ondorengo ditu. Zer egin nahi duzu?" + text_wiki_page_destroy_question: "Orri honek %{descendants} orri seme eta ondorengo ditu. Zer egin nahi duzu?" text_wiki_page_nullify_children: "Orri semeak erro orri moduan mantendu" text_wiki_page_destroy_children: "Orri semeak eta beraien ondorengo guztiak ezabatu" text_wiki_page_reassign_children: "Orri semeak orri guraso honetara esleitu" @@ -891,7 +898,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 @@ -899,36 +906,78 @@ 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_unable_to_connect: Ezin da konektatu ({{value}}) + 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. - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header + 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: Gorde gabeko testua duen orri batetik ateratzen naizenean ohartarazi + text_warn_on_leaving_unsaved: Uneko orritik joaten bazara gorde gabeko testua galduko da. + label_my_queries: Nire galdera pertsonalizatuak + text_journal_changed_no_detail: "%{label} eguneratuta" + label_news_comment_added: Berri batera iruzkina gehituta + button_expand_all: Guztia zabaldu + button_collapse_all: Guztia tolestu + label_additional_workflow_transitions_for_assignee: Erabiltzaileak esleitua duenean baimendutako transtsizio gehigarriak + label_additional_workflow_transitions_for_author: Erabiltzailea egilea denean baimendutako transtsizio gehigarriak + label_bulk_edit_selected_time_entries: Hautatutako denbora egunkariak batera editatu + text_time_entries_destroy_confirmation: Ziur zaude hautatutako denbora egunkariak ezabatu nahi dituzula? + label_role_anonymous: Ezezaguna + label_role_non_member: Ez kidea + label_issue_note_added: Oharra gehituta + label_issue_status_updated: Egoera eguneratuta + label_issue_priority_updated: Lehentasuna eguneratuta + label_issues_visibility_own: Erabiltzaileak sortu edo esleituta dituen zereginak + field_issues_visibility: Zeregin ikusgarritasuna + label_issues_visibility_all: Zeregin guztiak + permission_set_own_issues_private: Nork bere zereginak publiko edo pribatu jarri + field_is_private: Pribatu + permission_set_issues_private: Zereginak publiko edo pribatu jarri + label_issues_visibility_public: Pribatu ez diren zeregin guztiak + text_issues_destroy_descendants_confirmation: Honek %{count} azpiataza ezabatuko ditu baita ere. + field_commit_logs_encoding: Commit-en egunkarien kodetzea + field_scm_path_encoding: Bidearen kodeketa + text_scm_path_encoding_note: "Lehentsita: UTF-8" + field_path_to_repository: Biltegirako bidea + field_root_directory: Erro direktorioa + field_cvs_module: Modulua + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Biltegi locala (adib. /hgrepo, c:\hgrepo) + text_scm_command: Komandoa + text_scm_command_version: Bertsioa + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/fa.yml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/config/locales/fa.yml Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,981 @@ +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 - %H:%M" + time: "%H:%M" + short: "%d %b %H:%M" + long: "%d %B %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_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)، شماره‌ها و خط تیره پذیرفتنی است.
    پس از ذخیره سازی، شناسه نمی‌تواند جایگزین شود.' + 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: پیامد در این روز آغاز می‌شود + field_warn_on_leaving_unsaved: هنگام ترک برگه‌ای که نوشته‌های آن نگهداری نشده، به من هشدار بده + text_tip_issue_begin_end_day: پیامد در این روز آغاز می‌شود و پایان می‌پذیرد + text_tip_issue_end_day: پیامد در این روز پایان می‌پذیرد + text_warn_on_leaving_unsaved: این برگه دارای نوشته‌های نگهداری نشده است که اگر آن را ترک کنید، از میان می‌روند. + label_my_queries: جستارهای سفارشی من + text_journal_changed_no_detail: "%{label} بروز شد" + label_news_comment_added: دیدگاه به یک رویداد افزوده شد + button_expand_all: باز کردن همه + button_collapse_all: بستن همه + label_additional_workflow_transitions_for_assignee: زمانی که به کاربر واگذار شده، گذارهای بیشتر پذیرفته می‌شود + label_additional_workflow_transitions_for_author: زمانی که کاربر نویسنده است، گذارهای بیشتر پذیرفته می‌شود + label_bulk_edit_selected_time_entries: ویرایش دسته‌ای زمان‌های گزارش شده گزینش شده + text_time_entries_destroy_confirmation: آیا می‌خواهید زمان‌های گزارش شده گزینش شده پاک شوند؟ + label_role_anonymous: ناشناس + label_role_non_member: غیر عضو + label_issue_note_added: یادداشت افزوده شد + label_issue_status_updated: وضعیت بروز شد + label_issue_priority_updated: برتری بروز شد + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: کدگذاری پیام‌های انباره + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/fi.yml --- a/config/locales/fi.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/fi.yml Mon Jul 25 14:23:37 2011 +0100 @@ -13,7 +13,10 @@ abbr_day_names: [Su, Ma, Ti, Ke, To, Pe, La] month_names: [~, Tammikuu, Helmikuu, Maaliskuu, Huhtikuu, Toukokuu, Kesäkuu, Heinäkuu, Elokuu, Syyskuu, Lokakuu, Marraskuu, Joulukuu] abbr_month_names: [~, Tammi, Helmi, Maalis, Huhti, Touko, Kesä, Heinä, Elo, Syys, Loka, Marras, Joulu] - order: [:day, :month, :year] + order: + - :day + - :month + - :year time: formats: @@ -78,37 +81,37 @@ half_a_minute: "puoli minuuttia" less_than_x_seconds: one: "aiemmin kuin sekunti" - other: "aiemmin kuin {{count}} sekuntia" + other: "aiemmin kuin %{count} sekuntia" x_seconds: one: "sekunti" - other: "{{count}} sekuntia" + other: "%{count} sekuntia" less_than_x_minutes: one: "aiemmin kuin minuutti" - other: "aiemmin kuin {{count}} minuuttia" + other: "aiemmin kuin %{count} minuuttia" x_minutes: one: "minuutti" - other: "{{count}} minuuttia" + other: "%{count} minuuttia" about_x_hours: one: "noin tunti" - other: "noin {{count}} tuntia" + other: "noin %{count} tuntia" x_days: one: "päivä" - other: "{{count}} päivää" + other: "%{count} päivää" about_x_months: one: "noin kuukausi" - other: "noin {{count}} kuukautta" + other: "noin %{count} kuukautta" x_months: one: "kuukausi" - other: "{{count}} kuukautta" + other: "%{count} kuukautta" about_x_years: one: "vuosi" - other: "noin {{count}} vuotta" + other: "noin %{count} vuotta" over_x_years: one: "yli vuosi" - other: "yli {{count}} vuotta" + other: "yli %{count} vuotta" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" prompts: year: "Vuosi" month: "Kuukausi" @@ -121,8 +124,8 @@ errors: template: header: - one: "1 virhe esti tämän {{model}} mallinteen tallentamisen" - other: "{{count}} virhettä esti tämän {{model}} mallinteen tallentamisen" + one: "1 virhe esti tämän %{model} mallinteen tallentamisen" + other: "%{count} virhettä esti tämän %{model} mallinteen tallentamisen" body: "Seuraavat kentät aiheuttivat ongelmia:" messages: inclusion: "ei löydy listauksesta" @@ -132,16 +135,16 @@ accepted: "täytyy olla hyväksytty" empty: "ei voi olla tyhjä" blank: "ei voi olla sisällötön" - too_long: "on liian pitkä (maksimi on {{count}} merkkiä)" - too_short: "on liian lyhyt (minimi on {{count}} merkkiä)" - wrong_length: "on väärän pituinen (täytyy olla täsmälleen {{count}} merkkiä)" + too_long: "on liian pitkä (maksimi on %{count} merkkiä)" + too_short: "on liian lyhyt (minimi on %{count} merkkiä)" + wrong_length: "on väärän pituinen (täytyy olla täsmälleen %{count} merkkiä)" taken: "on jo käytössä" not_a_number: "ei ole numero" - greater_than: "täytyy olla suurempi kuin {{count}}" - greater_than_or_equal_to: "täytyy olla suurempi tai yhtä suuri kuin{{count}}" - equal_to: "täytyy olla yhtä suuri kuin {{count}}" - less_than: "täytyy olla pienempi kuin {{count}}" - less_than_or_equal_to: "täytyy olla pienempi tai yhtä suuri kuin {{count}}" + greater_than: "täytyy olla suurempi kuin %{count}" + greater_than_or_equal_to: "täytyy olla suurempi tai yhtä suuri kuin%{count}" + equal_to: "täytyy olla yhtä suuri kuin %{count}" + less_than: "täytyy olla pienempi kuin %{count}" + less_than_or_equal_to: "täytyy olla pienempi tai yhtä suuri kuin %{count}" odd: "täytyy olla pariton" even: "täytyy olla parillinen" greater_than_start_date: "tulee olla aloituspäivän jälkeinen" @@ -159,7 +162,7 @@ general_csv_separator: ',' general_csv_decimal_separator: '.' general_csv_encoding: ISO-8859-15 - general_pdf_encoding: ISO-8859-15 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' notice_account_updated: Tilin päivitys onnistui. @@ -178,29 +181,29 @@ notice_file_not_found: Hakemaasi sivua ei löytynyt tai se on poistettu. notice_locking_conflict: Toinen käyttäjä on päivittänyt tiedot. notice_not_authorized: Sinulla ei ole oikeutta näyttää tätä sivua. - notice_email_sent: "Sähköposti on lähetty osoitteeseen {{value}}" - notice_email_error: "Sähköpostilähetyksessä tapahtui virhe ({{value}})" + notice_email_sent: "Sähköposti on lähetty osoitteeseen %{value}" + notice_email_error: "Sähköpostilähetyksessä tapahtui virhe (%{value})" notice_feeds_access_key_reseted: RSS salasana on nollaantunut. - notice_failed_to_save_issues: "{{count}} Tapahtum(an/ien) tallennus epäonnistui {{total}} valitut: {{ids}}." + notice_failed_to_save_issues: "%{count} Tapahtum(an/ien) tallennus epäonnistui %{total} valitut: %{ids}." notice_no_issue_selected: "Tapahtumia ei ole valittu! Valitse tapahtumat joita haluat muokata." notice_account_pending: "Tilisi on luotu ja odottaa ylläpitäjän hyväksyntää." notice_default_data_loaded: Vakioasetusten palautus onnistui. - error_can_t_load_default_data: "Vakioasetuksia ei voitu ladata: {{value}}" + error_can_t_load_default_data: "Vakioasetuksia ei voitu ladata: %{value}" error_scm_not_found: "Syötettä ja/tai versiota ei löydy tietovarastosta." - error_scm_command_failed: "Tietovarastoon pääsyssä tapahtui virhe: {{value}}" + error_scm_command_failed: "Tietovarastoon pääsyssä tapahtui virhe: %{value}" - mail_subject_lost_password: "Sinun {{value}} salasanasi" + mail_subject_lost_password: "Sinun %{value} salasanasi" mail_body_lost_password: 'Vaihtaaksesi salasanasi, napsauta seuraavaa linkkiä:' - mail_subject_register: "{{value}} tilin aktivointi" + mail_subject_register: "%{value} tilin aktivointi" mail_body_register: 'Aktivoidaksesi tilisi, napsauta seuraavaa linkkiä:' - mail_body_account_information_external: "Voit nyt käyttää {{value}} tiliäsi kirjautuaksesi järjestelmään." + mail_body_account_information_external: "Voit nyt käyttää %{value} tiliäsi kirjautuaksesi järjestelmään." mail_body_account_information: Sinun tilin tiedot - mail_subject_account_activation_request: "{{value}} tilin aktivointi pyyntö" - mail_body_account_activation_request: "Uusi käyttäjä ({{value}}) on rekisteröitynyt. Hänen tili odottaa hyväksyntääsi:" + mail_subject_account_activation_request: "%{value} tilin aktivointi pyyntö" + mail_body_account_activation_request: "Uusi käyttäjä (%{value}) on rekisteröitynyt. Hänen tili odottaa hyväksyntääsi:" gui_validation_error: 1 virhe - gui_validation_error_plural: "{{count}} virhettä" + gui_validation_error_plural: "%{count} virhettä" field_name: Nimi field_description: Kuvaus @@ -262,7 +265,8 @@ field_attr_lastname: Sukunimenmääre field_attr_mail: Sähköpostinmääre field_onthefly: Automaattinen käyttäjien luonti - field_done_ratio: % Tehty + field_start_date: Alku + field_done_ratio: "% Tehty" field_auth_source: Varmennusmuoto field_hide_mail: Piiloita sähköpostiosoitteeni field_comments: Kommentti @@ -321,14 +325,14 @@ label_x_projects: zero: no projects one: 1 project - other: "{{count}} projects" + other: "%{count} projects" label_project_all: Kaikki projektit label_project_latest: Uusimmat projektit label_issue: Tapahtuma label_issue_new: Uusi tapahtuma label_issue_plural: Tapahtumat label_issue_view_all: Näytä kaikki tapahtumat - label_issues_by: "Tapahtumat {{value}}" + label_issues_by: "Tapahtumat %{value}" label_document: Dokumentti label_document_new: Uusi dokumentti label_document_plural: Dokumentit @@ -391,8 +395,8 @@ label_text: Pitkä merkkijono label_attribute: Määre label_attribute_plural: Määreet - label_download: "{{count}} Lataus" - label_download_plural: "{{count}} Lataukset" + label_download: "%{count} Lataus" + label_download_plural: "%{count} Lataukset" label_no_data: Ei tietoa näytettäväksi label_change_status: Muutos tila label_history: Historia @@ -421,17 +425,17 @@ label_closed_issues: suljettu label_closed_issues_plural: suljettua label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{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" + other: "%{count} open" label_x_closed_issues_abbr: zero: 0 closed one: 1 closed - other: "{{count}} closed" + other: "%{count} closed" label_total: Yhteensä label_permissions: Oikeudet label_current_status: Nykyinen tila @@ -449,7 +453,7 @@ label_months_from: kuukauden päässä label_gantt: Gantt label_internal: Sisäinen - label_last_changes: "viimeiset {{count}} muutokset" + label_last_changes: "viimeiset %{count} muutokset" label_change_view_all: Näytä kaikki muutokset label_personalize_page: Personoi tämä sivu label_comment: Kommentti @@ -457,7 +461,7 @@ label_x_comments: zero: no comments one: 1 comment - other: "{{count}} comments" + other: "%{count} comments" label_comment_add: Lisää kommentti label_comment_added: Kommentti lisätty label_comment_delete: Poista kommentti @@ -481,8 +485,8 @@ label_repository: Tietovarasto label_repository_plural: Tietovarastot label_browse: Selaus - label_modification: "{{count}} muutos" - label_modification_plural: "{{count}} muutettu" + label_modification: "%{count} muutos" + label_modification_plural: "%{count} muutettu" label_revision: Versio label_revision_plural: Versiot label_added: lisätty @@ -497,8 +501,8 @@ label_sort_lower: Siirrä alas label_sort_lowest: Siirrä alimmaiseksi label_roadmap: Roadmap - label_roadmap_due_in: "Määräaika {{value}}" - label_roadmap_overdue: "{{value}} myöhässä" + label_roadmap_due_in: "Määräaika %{value}" + label_roadmap_overdue: "%{value} myöhässä" label_roadmap_no_issues: Ei tapahtumia tälle versiolle label_search: Haku label_result_plural: Tulokset @@ -516,8 +520,8 @@ label_changes_details: Kaikkien muutosten yksityiskohdat label_issue_tracking: Tapahtumien seuranta label_spent_time: Käytetty aika - label_f_hour: "{{value}} tunti" - label_f_hour_plural: "{{value}} tuntia" + label_f_hour: "%{value} tunti" + label_f_hour_plural: "%{value} tuntia" label_time_tracking: Ajan seuranta label_change_plural: Muutokset label_statistics: Tilastot @@ -562,12 +566,12 @@ label_month: Kuukausi label_week: Viikko label_language_based: Pohjautuen käyttäjän kieleen - label_sort_by: "Lajittele {{value}}" + label_sort_by: "Lajittele %{value}" label_send_test_email: Lähetä testi sähköposti - label_feeds_access_key_created_on: "RSS salasana luotiin {{value}} sitten" + label_feeds_access_key_created_on: "RSS salasana luotiin %{value} sitten" label_module_plural: Moduulit - label_added_time_by: "Lisännyt {{author}} {{age}} sitten" - label_updated_time: "Päivitetty {{value}} sitten" + label_added_time_by: "Lisännyt %{author} %{age} sitten" + label_updated_time: "Päivitetty %{value} sitten" label_jump_to_a_project: Siirry projektiin... label_file_plural: Tiedostot label_changeset_plural: Muutosryhmät @@ -583,7 +587,7 @@ label_registration_activation_by_email: tilin aktivointi sähköpostitse label_registration_manual_activation: tilin aktivointi käsin label_registration_automatic_activation: tilin aktivointi automaattisesti - label_display_per_page: "Per sivu: {{value}}" + label_display_per_page: "Per sivu: %{value}" label_age: Ikä label_change_properties: Vaihda asetuksia label_general: Yleinen @@ -639,17 +643,17 @@ text_tip_issue_end_day: tehtävä joka loppuu tänä päivänä text_tip_issue_begin_end_day: tehtävä joka alkaa ja loppuu tänä päivänä text_project_identifier_info: 'Pienet kirjaimet (a-z), numerot ja viivat ovat sallittu.
    Tallentamisen jälkeen tunnistetta ei voi muuttaa.' - text_caracters_maximum: "{{count}} merkkiä enintään." - text_caracters_minimum: "Täytyy olla vähintään {{count}} merkkiä pitkä." - text_length_between: "Pituus välillä {{min}} ja {{max}} merkkiä." + text_caracters_maximum: "%{count} merkkiä enintään." + text_caracters_minimum: "Täytyy olla vähintään %{count} merkkiä pitkä." + text_length_between: "Pituus välillä %{min} ja %{max} merkkiä." text_tracker_no_workflow: Työnkulkua ei määritelty tälle tapahtumalle text_unallowed_characters: Kiellettyjä merkkejä text_comma_separated: Useat arvot sallittu (pilkku eroteltuna). text_issues_ref_in_commit_messages: Liitän ja korjaan ongelmia syötetyssä viestissä - text_issue_added: "Issue {{id}} has been reported by {{author}}." - text_issue_updated: "Issue {{id}} has been updated by {{author}}." + text_issue_added: "Issue %{id} has been reported by %{author}." + text_issue_updated: "Issue %{id} has been updated by %{author}." text_wiki_destroy_confirmation: Oletko varma että haluat poistaa tämän wiki:n ja kaikki sen sisältämän tiedon? - text_issue_category_destroy_question: "Jotkut tapahtumat ({{count}}) ovat nimetty tälle luokalle. Mitä haluat tehdä?" + text_issue_category_destroy_question: "Jotkut tapahtumat (%{count}) ovat nimetty tälle luokalle. Mitä haluat tehdä?" text_issue_category_destroy_assignments: Poista luokan tehtävät text_issue_category_reassign_to: Vaihda tapahtuma tähän luokkaan text_user_mail_option: "Valitsemattomille projekteille, saat vain muistutuksen asioista joita seuraat tai olet mukana (esim. tapahtumat joissa olet tekijä tai nimettynä)." @@ -683,7 +687,7 @@ enumeration_activities: Historia (ajan seuranta) label_associated_revisions: Liittyvät versiot setting_user_format: Käyttäjien esitysmuoto - text_status_changed_by_changeset: "Päivitetty muutosversioon {{value}}." + text_status_changed_by_changeset: "Päivitetty muutosversioon %{value}." text_issues_destroy_confirmation: 'Oletko varma että haluat poistaa valitut tapahtumat ?' label_more: Lisää label_issue_added: Tapahtuma lisätty @@ -711,8 +715,8 @@ label_downloads_abbr: D/L label_add_another_file: Lisää uusi tiedosto label_this_month: tässä kuussa - text_destroy_time_entries_question: "{{hours}} tuntia on raportoitu tapahtumasta jonka aiot poistaa. Mitä haluat tehdä ?" - label_last_n_days: "viimeiset {{count}} päivää" + text_destroy_time_entries_question: "%{hours} tuntia on raportoitu tapahtumasta jonka aiot poistaa. Mitä haluat tehdä ?" + label_last_n_days: "viimeiset %{count} päivää" label_all_time: koko ajalta error_issue_not_found_in_project: 'Tapahtumaa ei löytynyt tai se ei kuulu tähän projektiin' label_this_year: tänä vuonna @@ -737,25 +741,24 @@ label_overall_activity: Kokonaishistoria error_scm_annotate: "Merkintää ei ole tai siihen ei voi lisätä selityksiä." label_planning: Suunnittelu - text_subprojects_destroy_warning: "Tämän aliprojekti(t): {{value}} tullaan myös poistamaan." - label_and_its_subprojects: "{{value}} ja aliprojektit" - mail_body_reminder: "{{count}} sinulle nimettyä tapahtuma(a) erääntyy {{days}} päivä sisään:" - mail_subject_reminder: "{{count}} tapahtuma(a) erääntyy {{days}} lähipäivinä" - text_user_wrote: "{{value}} kirjoitti:" + text_subprojects_destroy_warning: "Tämän aliprojekti(t): %{value} tullaan myös poistamaan." + label_and_its_subprojects: "%{value} ja aliprojektit" + mail_body_reminder: "%{count} sinulle nimettyä tapahtuma(a) erääntyy %{days} päivä sisään:" + mail_subject_reminder: "%{count} tapahtuma(a) erääntyy %{days} lähipäivinä" + text_user_wrote: "%{value} kirjoitti:" label_duplicated_by: kopioinut setting_enabled_scm: Versionhallinta käytettävissä text_enumeration_category_reassign_to: 'Siirrä täksi arvoksi:' - text_enumeration_destroy_question: "{{count}} kohdetta on sijoitettu tälle arvolle." + text_enumeration_destroy_question: "%{count} kohdetta on sijoitettu tälle arvolle." label_incoming_emails: Saapuvat sähköpostiviestit 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 setting_sequential_project_identifiers: Luo peräkkäiset projektien tunnisteet - setting_commit_logs_encoding: Tee viestien koodaus notice_unable_delete_version: Version poisto epäonnistui label_renamed: uudelleennimetty label_copied: kopioitu @@ -811,12 +814,12 @@ text_repository_usernames_mapping: "Valitse päivittääksesi Redmine käyttäjä jokaiseen käyttäjään joka löytyy tietovaraston lokista.\nKäyttäjät joilla on sama Redmine ja tietovaraston käyttäjänimi tai sähköpostiosoite, yhdistetään automaattisesti." permission_edit_own_messages: Muokkaa omia viestejä permission_delete_own_messages: Poista omia viestejä - label_user_activity: "Käyttäjän {{value}} historia" - label_updated_time_by: "Updated by {{author}} {{age}} ago" + label_user_activity: "Käyttäjän %{value} historia" + label_updated_time_by: "Updated by %{author} %{age} ago" text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' setting_diff_max_lines_displayed: Max number of diff lines displayed text_plugin_assets_writable: Plugin assets directory writable - warning_attachments_not_saved: "{{count}} file(s) could not be saved." + warning_attachments_not_saved: "%{count} file(s) could not be saved." button_create_and_continue: Create and continue text_custom_field_possible_values_info: 'One line for each value' label_display: Display @@ -831,21 +834,21 @@ label_descending: Descending label_sort: Sort label_ascending: Ascending - label_date_from_to: From {{start}} to {{end}} + label_date_from_to: From %{start} to %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? + text_wiki_page_destroy_question: This page has %{descendants} child page(s) and descendant(s). What do you want to do? text_wiki_page_reassign_children: Reassign child pages to this parent page text_wiki_page_nullify_children: Keep child pages as root pages text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated" label_wiki_content_added: Wiki page added - 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_added: "'%{id}' wiki page has been added" + mail_body_wiki_content_added: The '%{id}' wiki page has been added by %{author}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '%{id}' wiki page has been updated by %{author}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -853,14 +856,14 @@ label_branch: Branch 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"). - 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_changed: "%{label} changed from %{old} to %{new}" + text_journal_set_to: "%{label} set to %{value}" + text_journal_deleted: "%{label} deleted (%{old})" label_group_plural: Groups label_group: Group label_group_new: New group label_time_entry_plural: Spent time - text_journal_added: "{{label}} {{value}} added" + text_journal_added: "%{label} %{value} added" field_active: Active enumeration_system_activity: System Activity permission_delete_issue_watchers: Delete watchers @@ -895,9 +898,9 @@ setting_start_of_week: Start calendars on permission_view_issues: View Issues label_display_used_statuses_only: Only display statuses that are used by this tracker - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_api_access_key: API access key - label_api_access_key_created_on: API access key created {{value}} ago + label_api_access_key_created_on: API access key created %{value} ago label_feeds_access_key: RSS access key notice_api_access_key_reseted: Your API access key was reset. setting_rest_api_enabled: Enable REST web service @@ -924,12 +927,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -937,7 +940,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -948,8 +951,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Tee viestien koodaus + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/fr.yml --- a/config/locales/fr.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/fr.yml Mon Jul 25 14:23:37 2011 +0100 @@ -17,7 +17,10 @@ abbr_day_names: [dim, lun, mar, mer, jeu, ven, sam] month_names: [~, janvier, février, mars, avril, mai, juin, juillet, août, septembre, octobre, novembre, décembre] abbr_month_names: [~, jan., fév., mar., avr., mai, juin, juil., août, sept., oct., nov., déc.] - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -36,38 +39,38 @@ less_than_x_seconds: zero: "moins d'une seconde" one: "moins d'une seconde" - other: "moins de {{count}} secondes" + other: "moins de %{count} secondes" x_seconds: one: "1 seconde" - other: "{{count}} secondes" + other: "%{count} secondes" less_than_x_minutes: zero: "moins d'une minute" one: "moins d'une minute" - other: "moins de {{count}} minutes" + other: "moins de %{count} minutes" x_minutes: one: "1 minute" - other: "{{count}} minutes" + other: "%{count} minutes" about_x_hours: one: "environ une heure" - other: "environ {{count}} heures" + other: "environ %{count} heures" x_days: one: "un jour" - other: "{{count}} jours" + other: "%{count} jours" about_x_months: one: "environ un mois" - other: "environ {{count}} mois" + other: "environ %{count} mois" x_months: one: "un mois" - other: "{{count}} mois" + other: "%{count} mois" about_x_years: one: "environ un an" - other: "environ {{count}} ans" + other: "environ %{count} ans" over_x_years: one: "plus d'un an" - other: "plus de {{count}} ans" + other: "plus de %{count} ans" almost_x_years: one: "presqu'un an" - other: "presque {{count}} ans" + other: "presque %{count} ans" prompts: year: "Année" month: "Mois" @@ -112,8 +115,8 @@ errors: template: header: - one: "Impossible d'enregistrer {{model}} : une erreur" - other: "Impossible d'enregistrer {{model}} : {{count}} erreurs." + one: "Impossible d'enregistrer %{model} : une erreur" + other: "Impossible d'enregistrer %{model} : %{count} erreurs." body: "Veuillez vérifier les champs suivants :" messages: inclusion: "n'est pas inclus(e) dans la liste" @@ -123,16 +126,17 @@ accepted: "doit être accepté(e)" empty: "doit être renseigné(e)" blank: "doit être renseigné(e)" - too_long: "est trop long (pas plus de {{count}} caractères)" - too_short: "est trop court (au moins {{count}} caractères)" - wrong_length: "ne fait pas la bonne longueur (doit comporter {{count}} caractères)" + too_long: "est trop long (pas plus de %{count} caractères)" + too_short: "est trop court (au moins %{count} caractères)" + wrong_length: "ne fait pas la bonne longueur (doit comporter %{count} caractères)" taken: "est déjà utilisé" not_a_number: "n'est pas un nombre" - greater_than: "doit être supérieur à {{count}}" - greater_than_or_equal_to: "doit être supérieur ou égal à {{count}}" - equal_to: "doit être égal à {{count}}" - less_than: "doit être inférieur à {{count}}" - less_than_or_equal_to: "doit être inférieur ou égal à {{count}}" + not_a_date: "n'est pas une date valide" + greater_than: "doit être supérieur à %{count}" + greater_than_or_equal_to: "doit être supérieur ou égal à %{count}" + equal_to: "doit être égal à %{count}" + less_than: "doit être inférieur à %{count}" + less_than_or_equal_to: "doit être inférieur ou égal à %{count}" odd: "doit être impair" even: "doit être pair" greater_than_start_date: "doit être postérieure à la date de début" @@ -150,7 +154,7 @@ general_csv_separator: ';' general_csv_decimal_separator: ',' general_csv_encoding: ISO-8859-1 - general_pdf_encoding: ISO-8859-1 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' notice_account_updated: Le compte a été mis à jour avec succès. @@ -165,25 +169,26 @@ 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}})" + notice_email_sent: "Un email a été envoyé à %{value}" + notice_email_error: "Erreur lors de l'envoi de l'email (%{value})" notice_feeds_access_key_reseted: "Votre clé d'accès aux flux RSS a été réinitialisée." - notice_failed_to_save_issues: "{{count}} demande(s) sur les {{total}} sélectionnées n'ont pas pu être mise(s) à jour : {{ids}}." + notice_failed_to_save_issues: "%{count} demande(s) sur les %{total} sélectionnées n'ont pas pu être mise(s) à jour : %{ids}." notice_no_issue_selected: "Aucune demande sélectionnée ! Cochez les demandes que vous voulez mettre à jour." notice_account_pending: "Votre compte a été créé et attend l'approbation de l'administrateur." notice_default_data_loaded: Paramétrage par défaut chargé avec succès. notice_unable_delete_version: Impossible de supprimer cette version. notice_issue_done_ratios_updated: L'avancement des demandes a été mis à jour. notice_api_access_key_reseted: Votre clé d'accès API a été réinitialisée. + notice_gantt_chart_truncated: "Le diagramme a été tronqué car il excède le nombre maximal d'éléments pouvant être affichés (%{max})" - error_can_t_load_default_data: "Une erreur s'est produite lors du chargement du paramétrage : {{value}}" + error_can_t_load_default_data: "Une erreur s'est produite lors du chargement du paramétrage : %{value}" error_scm_not_found: "L'entrée et/ou la révision demandée n'existe pas dans le dépôt." - error_scm_command_failed: "Une erreur s'est produite lors de l'accès au dépôt : {{value}}" + error_scm_command_failed: "Une erreur s'est produite lors de l'accès au dépôt : %{value}" error_scm_annotate: "L'entrée n'existe pas ou ne peut pas être annotée." error_issue_not_found_in_project: "La demande n'existe pas ou n'appartient pas à ce projet" error_can_not_reopen_issue_on_closed_version: 'Une demande assignée à une version fermée ne peut pas être réouverte' @@ -192,25 +197,25 @@ error_workflow_copy_target: 'Veuillez sélectionner les trackers et rôles cibles' error_issue_done_ratios_not_updated: L'avancement des demandes n'a pas pu être mis à jour. - warning_attachments_not_saved: "{{count}} fichier(s) n'ont pas pu être sauvegardés." + warning_attachments_not_saved: "%{count} fichier(s) n'ont pas pu être sauvegardés." - mail_subject_lost_password: "Votre mot de passe {{value}}" + mail_subject_lost_password: "Votre mot de passe %{value}" mail_body_lost_password: 'Pour changer votre mot de passe, cliquez sur le lien suivant :' - mail_subject_register: "Activation de votre compte {{value}}" + mail_subject_register: "Activation de votre compte %{value}" mail_body_register: 'Pour activer votre compte, cliquez sur le lien suivant :' - mail_body_account_information_external: "Vous pouvez utiliser votre compte {{value}} pour vous connecter." + mail_body_account_information_external: "Vous pouvez utiliser votre compte %{value} pour vous connecter." mail_body_account_information: Paramètres de connexion de votre compte - mail_subject_account_activation_request: "Demande d'activation d'un compte {{value}}" - mail_body_account_activation_request: "Un nouvel utilisateur ({{value}}) s'est inscrit. Son compte nécessite votre approbation :" - mail_subject_reminder: "{{count}} demande(s) arrivent à échéance ({{days}})" - mail_body_reminder: "{{count}} demande(s) qui vous sont assignées arrivent à échéance dans les {{days}} prochains jours :" - mail_subject_wiki_content_added: "Page wiki '{{id}}' ajoutée" - mail_body_wiki_content_added: "La page wiki '{{id}}' a été ajoutée par {{author}}." - mail_subject_wiki_content_updated: "Page wiki '{{id}}' mise à jour" - mail_body_wiki_content_updated: "La page wiki '{{id}}' a été mise à jour par {{author}}." + mail_subject_account_activation_request: "Demande d'activation d'un compte %{value}" + mail_body_account_activation_request: "Un nouvel utilisateur (%{value}) s'est inscrit. Son compte nécessite votre approbation :" + mail_subject_reminder: "%{count} demande(s) arrivent à échéance (%{days})" + mail_body_reminder: "%{count} demande(s) qui vous sont assignées arrivent à échéance dans les %{days} prochains jours :" + mail_subject_wiki_content_added: "Page wiki '%{id}' ajoutée" + mail_body_wiki_content_added: "La page wiki '%{id}' a été ajoutée par %{author}." + mail_subject_wiki_content_updated: "Page wiki '%{id}' mise à jour" + mail_body_wiki_content_updated: "La page wiki '%{id}' a été mise à jour par %{author}." gui_validation_error: 1 erreur - gui_validation_error_plural: "{{count}} erreurs" + gui_validation_error_plural: "%{count} erreurs" field_name: Nom field_description: Description @@ -272,7 +277,8 @@ field_attr_lastname: Attribut Nom field_attr_mail: Attribut Email field_onthefly: Création des utilisateurs à la volée - field_done_ratio: % réalisé + field_start_date: Début + field_done_ratio: "% réalisé" field_auth_source: Mode d'authentification field_hide_mail: Cacher mon adresse mail field_comments: Commentaire @@ -304,7 +310,11 @@ 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é" + field_issues_visibility: Visibilité des demandes + field_is_private: Privée + field_commit_logs_encoding: Encodage des messages de commit + setting_app_title: Titre de l'application setting_app_subtitle: Sous-titre de l'application setting_welcome_text: Texte d'accueil @@ -320,18 +330,17 @@ 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 setting_cross_project_issue_relations: Autoriser les relations entre demandes de différents projets setting_issue_list_default_columns: Colonnes affichées par défaut sur la liste des demandes setting_repositories_encodings: Encodages des dépôts - setting_commit_logs_encoding: Encodage des messages de commit setting_emails_footer: Pied-de-page des emails setting_protocol: Protocole setting_per_page_options: Options d'objets affichés par page @@ -346,7 +355,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 @@ -358,18 +367,23 @@ setting_gravatar_default: Image Gravatar par défaut setting_start_of_week: Jour de début des calendriers setting_cache_formatted_text: Mettre en cache le texte formaté + setting_commit_logtime_enabled: Permettre la saisie de temps + setting_commit_logtime_activity_id: Activité pour le temps saisi + setting_gantt_items_limit: Nombre maximum d'éléments affichés sur le gantt permission_add_project: Créer un projet 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 permission_add_issues: Créer des demandes permission_edit_issues: Modifier les demandes permission_manage_issue_relations: Gérer les relations + permission_set_issues_private: Rendre les demandes publiques ou privées + permission_set_own_issues_private: Rendre ses propres demandes publiques ou privées permission_add_issue_notes: Ajouter des notes permission_edit_issue_notes: Modifier les notes permission_edit_own_issue_notes: Modifier ses propres notes @@ -434,7 +448,7 @@ label_x_projects: zero: aucun projet one: un projet - other: "{{count}} projets" + other: "%{count} projets" label_project_all: Tous les projets label_project_latest: Derniers projets label_issue: Demande @@ -443,7 +457,10 @@ label_issue_view_all: Voir toutes les demandes label_issue_added: Demande ajoutée label_issue_updated: Demande mise à jour - label_issues_by: "Demandes par {{value}}" + label_issue_note_added: Note ajoutée + label_issue_status_updated: Statut changé + label_issue_priority_updated: Priorité changée + label_issues_by: "Demandes par %{value}" label_document: Document label_document_new: Nouveau document label_document_plural: Documents @@ -452,6 +469,8 @@ label_role_plural: Rôles label_role_new: Nouveau rôle label_role_and_permissions: Rôles et permissions + label_role_anonymous: Anonyme + label_role_non_member: Non membre label_member: Membre label_member_new: Nouveau membre label_member_plural: Membres @@ -481,7 +500,7 @@ label_my_page: Ma page label_my_account: Mon compte label_my_projects: Mes projets - label_my_page_block: Ma page bloque + label_my_page_block: Blocs disponibles label_administration: Administration label_login: Connexion label_logout: Déconnexion @@ -492,7 +511,7 @@ label_registered_on: "Inscrit le " label_activity: Activité label_overall_activity: Activité globale - label_user_activity: "Activité de {{value}}" + label_user_activity: "Activité de %{value}" label_new: Nouveau label_logged_as: Connecté en tant que label_environment: Environnement @@ -502,7 +521,7 @@ label_auth_source_plural: Modes d'authentification label_subproject_plural: Sous-projets label_subproject_new: Nouveau sous-projet - label_and_its_subprojects: "{{value}} et ses sous-projets" + label_and_its_subprojects: "%{value} et ses sous-projets" label_min_max_length: Longueurs mini - maxi label_list: Liste label_date: Date @@ -513,8 +532,8 @@ label_text: Texte long label_attribute: Attribut label_attribute_plural: Attributs - label_download: "{{count}} téléchargement" - label_download_plural: "{{count}} téléchargements" + label_download: "%{count} téléchargement" + label_download_plural: "%{count} téléchargements" label_no_data: Aucune donnée à afficher label_change_status: Changer le statut label_history: Historique @@ -531,6 +550,7 @@ label_news_latest: Dernières annonces label_news_view_all: Voir toutes les annonces label_news_added: Annonce ajoutée + label_news_comment_added: Commentaire ajouté à une annonce label_settings: Configuration label_overview: Aperçu label_version: Version @@ -545,17 +565,17 @@ label_closed_issues: fermé label_closed_issues_plural: fermés label_x_open_issues_abbr_on_total: - zero: 0 ouvert sur {{total}} - one: 1 ouvert sur {{total}} - other: "{{count}} ouverts sur {{total}}" + zero: 0 ouvert sur %{total} + one: 1 ouvert sur %{total} + other: "%{count} ouverts sur %{total}" label_x_open_issues_abbr: zero: 0 ouvert one: 1 ouvert - other: "{{count}} ouverts" + other: "%{count} ouverts" label_x_closed_issues_abbr: zero: 0 fermé one: 1 fermé - other: "{{count}} fermés" + other: "%{count} fermés" label_total: Total label_permissions: Permissions label_current_status: Statut actuel @@ -573,7 +593,7 @@ label_months_from: mois depuis label_gantt: Gantt label_internal: Interne - label_last_changes: "{{count}} derniers changements" + label_last_changes: "%{count} derniers changements" label_change_view_all: Voir tous les changements label_personalize_page: Personnaliser cette page label_comment: Commentaire @@ -581,13 +601,14 @@ label_x_comments: zero: aucun commentaire one: un commentaire - other: "{{count}} commentaires" + other: "%{count} commentaires" label_comment_add: Ajouter un commentaire label_comment_added: Commentaire ajouté label_comment_delete: Supprimer les commentaires 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 @@ -600,7 +621,7 @@ label_yesterday: hier label_this_week: cette semaine label_last_week: la semaine dernière - label_last_n_days: "les {{count}} derniers jours" + label_last_n_days: "les %{count} derniers jours" label_this_month: ce mois-ci label_last_month: le mois dernier label_this_year: cette année @@ -614,8 +635,8 @@ label_repository: Dépôt label_repository_plural: Dépôts label_browse: Parcourir - label_modification: "{{count}} modification" - label_modification_plural: "{{count}} modifications" + label_modification: "%{count} modification" + label_modification_plural: "%{count} modifications" label_revision: "Révision " label_revision_plural: Révisions label_associated_revisions: Révisions associées @@ -633,8 +654,8 @@ label_sort_lower: Descendre label_sort_lowest: Descendre en dernier label_roadmap: Roadmap - label_roadmap_due_in: "Échéance dans {{value}}" - label_roadmap_overdue: "En retard de {{value}}" + label_roadmap_due_in: "Échéance dans %{value}" + label_roadmap_overdue: "En retard de %{value}" label_roadmap_no_issues: Aucune demande pour cette version label_search: "Recherche " label_result_plural: Résultats @@ -652,8 +673,8 @@ label_changes_details: Détails de tous les changements label_issue_tracking: Suivi des demandes label_spent_time: Temps passé - label_f_hour: "{{value}} heure" - label_f_hour_plural: "{{value}} heures" + label_f_hour: "%{value} heure" + label_f_hour_plural: "%{value} heures" label_time_tracking: Suivi du temps label_change_plural: Changements label_statistics: Statistiques @@ -702,13 +723,13 @@ label_date_from: Du label_date_to: Au label_language_based: Basé sur la langue de l'utilisateur - label_sort_by: "Trier par {{value}}" + label_sort_by: "Trier par %{value}" label_send_test_email: Envoyer un email de test - label_feeds_access_key_created_on: "Clé d'accès RSS créée il y a {{value}}" + label_feeds_access_key_created_on: "Clé d'accès RSS créée il y a %{value}" label_module_plural: Modules - label_added_time_by: "Ajouté par {{author}} il y a {{age}}" - label_updated_time_by: "Mis à jour par {{author}} il y a {{age}}" - label_updated_time: "Mis à jour il y a {{value}}" + label_added_time_by: "Ajouté par %{author} il y a %{age}" + label_updated_time_by: "Mis à jour par %{author} il y a %{age}" + label_updated_time: "Mis à jour il y a %{value}" label_jump_to_a_project: Aller à un projet... label_file_plural: Fichiers label_changeset_plural: Révisions @@ -724,7 +745,7 @@ label_registration_activation_by_email: activation du compte par email label_registration_manual_activation: activation manuelle du compte label_registration_automatic_activation: activation automatique du compte - label_display_per_page: "Par page : {{value}}" + label_display_per_page: "Par page : %{value}" label_age: Âge label_change_properties: Changer les propriétés label_general: Général @@ -747,7 +768,7 @@ label_sort: Tri label_ascending: Croissant label_descending: Décroissant - label_date_from_to: Du {{start}} au {{end}} + label_date_from_to: Du %{start} au %{end} label_wiki_content_added: Page wiki ajoutée label_wiki_content_updated: Page wiki mise à jour label_group_plural: Groupes @@ -765,23 +786,30 @@ label_update_issue_done_ratios: Mettre à jour l'avancement des demandes label_display_used_statuses_only: N'afficher que les statuts utilisés dans ce tracker label_api_access_key: Clé d'accès API - label_api_access_key_created_on: Clé d'accès API créée il y a {{value}} + label_api_access_key_created_on: Clé d'accès API créée il y a %{value} label_feeds_access_key: Clé d'accès RSS label_missing_api_access_key: Clé d'accès API manquante label_missing_feeds_access_key: Clé d'accès RSS manquante label_close_versions: Fermer les versions terminées - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_profile: Profil label_subtask_plural: Sous-tâches label_project_copy_notifications: Envoyer les notifications durant la copie du projet label_principal_search: "Rechercher un utilisateur ou un groupe :" label_user_search: "Rechercher un utilisateur :" + label_additional_workflow_transitions_for_author: Autorisations supplémentaires lorsque l'utilisateur a créé la demande + label_additional_workflow_transitions_for_assignee: Autorisations supplémentaires lorsque la demande est assignée à l'utilisateur + label_issues_visibility_all: Toutes les demandes + label_issues_visibility_public: Toutes les demandes non privées + label_issues_visibility_own: Demandes créées par ou assignées à l'utilisateur button_login: Connexion button_submit: Soumettre button_save: Sauvegarder button_check_all: Tout cocher button_uncheck_all: Tout décocher + button_collapse_all: Plier tout + button_expand_all: Déplier tout button_delete: Supprimer button_create: Créer button_create_and_continue: Créer et continuer @@ -833,53 +861,56 @@ text_regexp_info: ex. ^[A-Z0-9]+$ text_min_max_length_info: 0 pour aucune restriction text_project_destroy_confirmation: Êtes-vous sûr de vouloir supprimer ce projet et toutes ses données ? - text_subprojects_destroy_warning: "Ses sous-projets : {{value}} seront également supprimés." + text_subprojects_destroy_warning: "Ses sous-projets : %{value} seront également supprimés." text_workflow_edit: Sélectionner un tracker et un rôle pour éditer le workflow text_are_you_sure: Êtes-vous sûr ? text_tip_issue_begin_day: tâche commençant ce jour text_tip_issue_end_day: tâche finissant ce jour text_tip_issue_begin_end_day: tâche commençant et finissant ce jour text_project_identifier_info: 'Seuls les lettres minuscules (a-z), chiffres et tirets sont autorisés.
    Un fois sauvegardé, l''identifiant ne pourra plus être modifié.' - text_caracters_maximum: "{{count}} caractères maximum." - text_caracters_minimum: "{{count}} caractères minimum." - text_length_between: "Longueur comprise entre {{min}} et {{max}} caractères." + text_caracters_maximum: "%{count} caractères maximum." + text_caracters_minimum: "%{count} caractères minimum." + text_length_between: "Longueur comprise entre %{min} et %{max} caractères." text_tracker_no_workflow: Aucun worflow n'est défini pour ce tracker text_unallowed_characters: Caractères non autorisés text_comma_separated: Plusieurs valeurs possibles (séparées par des virgules). text_line_separated: Plusieurs valeurs possibles (une valeur par ligne). text_issues_ref_in_commit_messages: Référencement et résolution des demandes dans les commentaires de commits - text_issue_added: "La demande {{id}} a été soumise par {{author}}." - text_issue_updated: "La demande {{id}} a été mise à jour par {{author}}." + 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)." text_no_configuration_data: "Les rôles, trackers, statuts et le workflow ne sont pas encore paramétrés.\nIl est vivement recommandé de charger le paramétrage par defaut. Vous pourrez le modifier une fois chargé." text_load_default_configuration: Charger le paramétrage par défaut - text_status_changed_by_changeset: "Appliqué par commit {{value}}." - text_issues_destroy_confirmation: 'Êtes-vous sûr de vouloir supprimer le(s) demandes(s) selectionnée(s) ?' + text_status_changed_by_changeset: "Appliqué par commit %{value}." + text_time_logged_by_changeset: "Appliqué par commit %{value}" + text_issues_destroy_confirmation: 'Êtes-vous sûr de vouloir supprimer la ou les demandes(s) selectionnée(s) ?' + text_issues_destroy_descendants_confirmation: "Cela entrainera également la suppression de %{count} sous-tâche(s)." text_select_project_modules: 'Sélectionner les modules à activer pour ce projet :' text_default_administrator_account_changed: Compte administrateur par défaut changé text_file_repository_writable: Répertoire de stockage des fichiers accessible en écriture text_plugin_assets_writable: Répertoire public des plugins accessible en écriture text_rmagick_available: Bibliothèque RMagick présente (optionnelle) - text_destroy_time_entries_question: "{{hours}} heures ont été enregistrées sur les demandes à supprimer. Que voulez-vous faire ?" + text_destroy_time_entries_question: "%{hours} heures ont été enregistrées sur les demandes à supprimer. Que voulez-vous faire ?" text_destroy_time_entries: Supprimer les heures text_assign_time_entries_to_project: Reporter les heures sur le projet text_reassign_time_entries: 'Reporter les heures sur cette demande:' - text_user_wrote: "{{value}} a écrit :" - text_enumeration_destroy_question: "Cette valeur est affectée à {{count}} objets." + 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' - text_wiki_page_destroy_question: "Cette page possède {{descendants}} sous-page(s) et descendante(s). Que voulez-vous faire ?" + text_wiki_page_destroy_question: "Cette page possède %{descendants} sous-page(s) et descendante(s). Que voulez-vous faire ?" text_wiki_page_nullify_children: "Conserver les sous-pages en tant que pages racines" 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 " @@ -913,28 +944,29 @@ label_branch: Branche 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_set_to: "{{label}} mis à {{value}}" - text_journal_deleted: "{{label}} {{old}} supprimé" - text_journal_added: "{{label}} {{value}} ajouté" + 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é" enumeration_system_activity: Activité système label_board_sticky: Sticky label_board_locked: Verrouillé error_unable_delete_issue_status: Impossible de supprimer le statut de demande error_can_not_delete_custom_field: Impossible de supprimer le champ personnalisé - error_unable_to_connect: Connexion impossible ({{value}}) + error_unable_to_connect: Connexion impossible (%{value}) error_can_not_remove_role: Ce rôle est utilisé et ne peut pas être supprimé. error_can_not_delete_tracker: Ce tracker contient des demandes et ne peut pas être supprimé. field_principal: Principal - notice_failed_to_save_members: "Erreur lors de la sauvegarde des membres: {{errors}}." + notice_failed_to_save_members: "Erreur lors de la sauvegarde des membres: %{errors}." text_zoom_out: Zoom arrière text_zoom_in: Zoom avant notice_unable_delete_time_entry: Impossible de supprimer le temps passé. label_overall_spent_time: Temps passé global - field_time_entries: Log time + field_time_entries: Temps passé project_module_gantt: Gantt project_module_calendar: Calendrier - button_edit_associated_wikipage: "Modifier la page wiki associée: {{page_title}}" + button_edit_associated_wikipage: "Modifier la page wiki associée: %{page_title}" text_are_you_sure_with_children: Supprimer la demande et toutes ses sous-demandes ? field_text: Champ texte label_user_mail_option_only_owner: Seulement pour ce que j'ai créé @@ -944,5 +976,19 @@ label_user_mail_option_none: Aucune notification field_member_of_group: Groupe de l'assigné field_assigned_to_role: Rôle de l'assigné - field_start_date: Start date - setting_emails_header: Emails header + setting_emails_header: En-tête des emails + label_bulk_edit_selected_time_entries: Modifier les temps passés sélectionnées + text_time_entries_destroy_confirmation: "Etes-vous sûr de vouloir supprimer les temps passés sélectionnés ?" + field_scm_path_encoding: Encodage des chemins + text_scm_path_encoding_note: "Défaut : UTF-8" + field_path_to_repository: Chemin du dépôt + field_root_directory: Répertoire racine + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: "Dépôt nu (bare) et local (exemples : /gitrepo, c:\gitrepo)" + text_mercurial_repository_note: "Dépôt local (exemples : /hgrepo, c:\hgrepo)" + text_scm_command: Commande + text_scm_command_version: Version + label_git_report_last_commit: Afficher le dernier commit des fichiers et répertoires + text_scm_config: Vous pouvez configurer les commandes des SCM dans config/configuration.yml. Redémarrer l'application après modification. + text_scm_command_not_available: Ce SCM n'est pas disponible. Vérifier les paramètres dans la section administration. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/gl.yml --- a/config/locales/gl.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/gl.yml Mon Jul 25 14:23:37 2011 +0100 @@ -55,7 +55,10 @@ abbr_day_names: [Dom, Lun, Mar, Mer, Xov, Ven, Sab] month_names: [~, Xaneiro, Febreiro, Marzo, Abril, Maio, Xunio, Xullo, Agosto, Setembro, Outubro, Novembro, Decembro] abbr_month_names: [~, Xan, Feb, Maz, Abr, Mai, Xun, Xul, Ago, Set, Out, Nov, Dec] - order: [:day, :month, :year] + order: + - :day + - :month + - :year time: formats: @@ -74,41 +77,41 @@ zero: 'menos dun segundo' one: '1 segundo' few: 'poucos segundos' - other: '{{count}} segundos' + other: '%{count} segundos' x_seconds: one: '1 segundo' - other: '{{count}} segundos' + other: '%{count} segundos' less_than_x_minutes: zero: 'menos dun minuto' one: '1 minuto' - other: '{{count}} minutos' + other: '%{count} minutos' x_minutes: one: '1 minuto' - other: '{{count}} minuto' + other: '%{count} minuto' about_x_hours: one: 'aproximadamente unha hora' - other: '{{count}} horas' + other: '%{count} horas' x_days: one: '1 día' - other: '{{count}} días' + other: '%{count} días' x_weeks: one: '1 semana' - other: '{{count}} semanas' + other: '%{count} semanas' about_x_months: one: 'aproximadamente 1 mes' - other: '{{count}} meses' + other: '%{count} meses' x_months: one: '1 mes' - other: '{{count}} meses' + other: '%{count} meses' about_x_years: one: 'aproximadamente 1 ano' - other: '{{count}} anos' + other: '%{count} anos' over_x_years: one: 'máis dun ano' - other: '{{count}} anos' + other: '%{count} anos' almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" now: 'agora' today: 'hoxe' tomorrow: 'mañá' @@ -124,8 +127,8 @@ errors: template: header: - one: "1 erro evitou que se poidese gardar o {{model}}" - other: "{{count}} erros evitaron que se poidese gardar o {{model}}" + one: "1 erro evitou que se poidese gardar o %{model}" + other: "%{count} erros evitaron que se poidese gardar o %{model}" body: "Atopáronse os seguintes problemas:" messages: inclusion: "non está incluido na lista" @@ -135,16 +138,16 @@ accepted: "debe ser aceptado" empty: "non pode estar valeiro" blank: "non pode estar en blanco" - too_long: "é demasiado longo (non máis de {{count}} carácteres)" - too_short: "é demasiado curto (non menos de {{count}} carácteres)" - wrong_length: "non ten a lonxitude correcta (debe ser de {{count}} carácteres)" + too_long: "é demasiado longo (non máis de %{count} carácteres)" + too_short: "é demasiado curto (non menos de %{count} carácteres)" + wrong_length: "non ten a lonxitude correcta (debe ser de %{count} carácteres)" taken: "non está dispoñible" not_a_number: "non é un número" - greater_than: "debe ser maior que {{count}}" - greater_than_or_equal_to: "debe ser maior ou igual que {{count}}" - equal_to: "debe ser igual a {{count}}" - less_than: "debe ser menor que {{count}}" - less_than_or_equal_to: "debe ser menor ou igual que {{count}}" + greater_than: "debe ser maior que %{count}" + greater_than_or_equal_to: "debe ser maior ou igual que %{count}" + equal_to: "debe ser igual a %{count}" + less_than: "debe ser menor que %{count}" + less_than_or_equal_to: "debe ser menor ou igual que %{count}" odd: "debe ser par" even: "debe ser impar" greater_than_start_date: "debe ser posterior á data de comezo" @@ -216,10 +219,10 @@ enumeration_activities: Actividades (tempo dedicado) enumeration_doc_categories: Categorías do documento enumeration_issue_priorities: Prioridade das peticións - error_can_t_load_default_data: "Non se puido cargar a configuración por defecto: {{value}}" + error_can_t_load_default_data: "Non se puido cargar a configuración por defecto: %{value}" error_issue_not_found_in_project: 'A petición non se atopa ou non está asociada a este proxecto' error_scm_annotate: "Non existe a entrada ou non se puido anotar" - error_scm_command_failed: "Aconteceu un erro ao acceder ó repositorio: {{value}}" + error_scm_command_failed: "Aconteceu un erro ao acceder ó repositorio: %{value}" error_scm_not_found: "A entrada e/ou revisión non existe no repositorio." field_account: Conta field_activity: Actividade @@ -241,7 +244,7 @@ field_default_value: Estado por defecto field_delay: Retraso field_description: Descrición - field_done_ratio: % Realizado + field_done_ratio: "% Realizado" field_downloads: Descargas field_due_date: Data fin field_effective_date: Data @@ -290,6 +293,7 @@ field_role: Perfil field_searchable: Incluír nas búsquedas field_spent_on: Data + field_start_date: Data de inicio field_start_page: Páxina principal field_status: Estado field_subject: Tema @@ -309,25 +313,25 @@ general_csv_separator: ';' general_first_day_of_week: '1' general_lang_name: 'Galego' - general_pdf_encoding: ISO-8859-15 + general_pdf_encoding: UTF-8 general_text_No: 'Non' general_text_Yes: 'Si' general_text_no: 'non' general_text_yes: 'si' gui_validation_error: 1 erro - gui_validation_error_plural: "{{count}} erros" + gui_validation_error_plural: "%{count} erros" label_activity: Actividade label_add_another_file: Engadir outro arquivo label_add_note: Engadir unha nota label_added: engadido - label_added_time_by: "Engadido por {{author}} fai {{age}}" + label_added_time_by: "Engadido por %{author} fai %{age}" label_administration: Administración label_age: Idade label_ago: fai label_all: todos label_all_time: todo o tempo label_all_words: Tódalas palabras - label_and_its_subprojects: "{{value}} e proxectos secundarios" + label_and_its_subprojects: "%{value} e proxectos secundarios" label_applied_status: Aplicar estado label_assigned_to_me_issues: Peticións asignadas a min label_associated_revisions: Revisións asociadas @@ -360,17 +364,17 @@ label_closed_issues: pechada label_closed_issues_plural: pechadas label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{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" + other: "%{count} open" label_x_closed_issues_abbr: zero: 0 closed one: 1 closed - other: "{{count}} closed" + other: "%{count} closed" label_comment: Comentario label_comment_add: Engadir un comentario label_comment_added: Comentario engadido @@ -379,7 +383,7 @@ label_x_comments: zero: no comments one: 1 comment - other: "{{count}} comments" + other: "%{count} comments" label_commits_per_author: Commits por autor label_commits_per_month: Commits por mes label_confirmation: Confirmación @@ -403,13 +407,13 @@ label_diff_inline: en liña label_diff_side_by_side: cara a cara label_disabled: deshabilitado - label_display_per_page: "Por páxina: {{value}}" + label_display_per_page: "Por páxina: %{value}" label_document: Documento label_document_added: Documento engadido label_document_new: Novo documento label_document_plural: Documentos - label_download: "{{count}} Descarga" - label_download_plural: "{{count}} Descargas" + label_download: "%{count} Descarga" + label_download_plural: "%{count} Descargas" label_downloads_abbr: D/L label_duplicated_by: duplicada por label_duplicates: duplicada de @@ -421,10 +425,10 @@ label_equals: igual label_example: Exemplo label_export_to: 'Exportar a:' - label_f_hour: "{{value}} hora" - label_f_hour_plural: "{{value}} horas" + label_f_hour: "%{value} hora" + label_f_hour_plural: "%{value} horas" label_feed_plural: Feeds - label_feeds_access_key_created_on: "Clave de acceso por RSS creada fai {{value}}" + label_feeds_access_key_created_on: "Clave de acceso por RSS creada fai %{value}" label_file_added: Arquivo engadido label_file_plural: Arquivos label_filter_add: Engadir o filtro @@ -462,13 +466,13 @@ label_issue_updated: Petición actualizada label_issue_view_all: Ver tódalas peticións label_issue_watchers: Seguidores - label_issues_by: "Peticións por {{value}}" + label_issues_by: "Peticións por %{value}" label_jump_to_a_project: Ir ao proxecto... label_language_based: Baseado no idioma - label_last_changes: "últimos {{count}} cambios" + label_last_changes: "últimos %{count} cambios" label_last_login: Última conexión label_last_month: último mes - label_last_n_days: "últimos {{count}} días" + label_last_n_days: "últimos %{count} días" label_last_week: última semana label_latest_revision: Última revisión label_latest_revision_plural: Últimas revisións @@ -489,8 +493,8 @@ label_message_plural: Mensaxes label_message_posted: Mensaxe engadida label_min_max_length: Lonxitude mín - máx - label_modification: "{{count}} modificación" - label_modification_plural: "{{count}} modificacións" + label_modification: "%{count} modificación" + label_modification_plural: "%{count} modificacións" label_modified: modificado label_module_plural: Módulos label_month: Mes @@ -541,7 +545,7 @@ label_x_projects: zero: no projects one: 1 project - other: "{{count}} projects" + other: "%{count} projects" label_public_projects: Proxectos públicos label_query: Consulta personalizada label_query_new: Nova consulta @@ -568,9 +572,9 @@ label_revision: Revisión label_revision_plural: Revisións label_roadmap: Planificación - label_roadmap_due_in: "Remata en {{value}}" + label_roadmap_due_in: "Remata en %{value}" label_roadmap_no_issues: Non hai peticións para esta versión - label_roadmap_overdue: "{{value}} tarde" + label_roadmap_overdue: "%{value} tarde" label_role: Perfil label_role_and_permissions: Perfiles e permisos label_role_new: Novo perfil @@ -582,7 +586,7 @@ label_send_test_email: Enviar un correo de proba label_settings: Configuración label_show_completed_versions: Mostra as versións rematadas - label_sort_by: "Ordenar por {{value}}" + label_sort_by: "Ordenar por %{value}" label_sort_higher: Subir label_sort_highest: Primeiro label_sort_lower: Baixar @@ -606,11 +610,11 @@ label_tracker: Tipo label_tracker_new: Novo tipo label_tracker_plural: Tipos de peticións - label_updated_time: "Actualizado fai {{value}}" - label_updated_time_by: "Actualizado por {{author}} fai {{age}}" + label_updated_time: "Actualizado fai %{value}" + label_updated_time_by: "Actualizado por %{author} fai %{age}" label_used_by: Utilizado por label_user: Usuario - label_user_activity: "Actividade de {{value}}" + label_user_activity: "Actividade de %{value}" label_user_mail_no_self_notified: "Non quero ser avisado de cambios feitos por min" label_user_mail_option_all: "Para calquera evento en tódolos proxectos" label_user_mail_option_selected: "Para calquera evento dos proxectos seleccionados..." @@ -631,16 +635,16 @@ label_workflow: Fluxo de traballo label_year: Ano label_yesterday: onte - mail_body_account_activation_request: "Inscribiuse un novo usuario ({{value}}). A conta está pendente de aprobación:" + mail_body_account_activation_request: "Inscribiuse un novo usuario (%{value}). A conta está pendente de aprobación:" mail_body_account_information: Información sobre a súa conta - mail_body_account_information_external: "Pode usar a súa conta {{value}} para conectarse." + mail_body_account_information_external: "Pode usar a súa conta %{value} para conectarse." mail_body_lost_password: 'Para cambiar o seu contrasinal, faga clic no seguinte enlace:' mail_body_register: 'Para activar a súa conta, faga clic no seguinte enlace:' - mail_body_reminder: "{{count}} petición(s) asignadas a ti rematan nos próximos {{days}} días:" - mail_subject_account_activation_request: "Petición de activación de conta {{value}}" - mail_subject_lost_password: "O teu contrasinal de {{value}}" - mail_subject_register: "Activación da conta de {{value}}" - mail_subject_reminder: "{{count}} petición(s) rematarán nos próximos {{days}} días" + mail_body_reminder: "%{count} petición(s) asignadas a ti rematan nos próximos %{days} días:" + mail_subject_account_activation_request: "Petición de activación de conta %{value}" + mail_subject_lost_password: "O teu contrasinal de %{value}" + mail_subject_register: "Activación da conta de %{value}" + mail_subject_reminder: "%{count} petición(s) rematarán nos próximos %{days} días" notice_account_activated: A súa conta foi activada. Xa pode conectarse. notice_account_invalid_creditentials: Usuario ou contrasinal inválido. notice_account_lost_email_sent: Enviouse un correo con instrucións para elixir un novo contrasinal. @@ -652,9 +656,9 @@ notice_account_wrong_password: Contrasinal incorrecto. notice_can_t_change_password: Esta conta utiliza unha fonte de autenticación externa. Non é posible cambiar o contrasinal. notice_default_data_loaded: Configuración por defecto cargada correctamente. - notice_email_error: "Ocorreu un error enviando o correo ({{value}})" - notice_email_sent: "Enviouse un correo a {{value}}" - notice_failed_to_save_issues: "Imposible gravar %s petición(s) en {{count}} seleccionado: {{ids}}." + notice_email_error: "Ocorreu un error enviando o correo (%{value})" + notice_email_sent: "Enviouse un correo a %{value}" + notice_failed_to_save_issues: "Imposible gravar %{count} petición(s) de %{total} seleccionada(s): %{ids}." notice_feeds_access_key_reseted: A súa clave de acceso para RSS reiniciouse. notice_file_not_found: A páxina á que tenta acceder non existe. notice_locking_conflict: Os datos modificáronse por outro usuario. @@ -729,7 +733,6 @@ setting_autologin: Conexión automática setting_bcc_recipients: Ocultar as copias de carbón (bcc) setting_commit_fix_keywords: Palabras clave para a corrección - setting_commit_logs_encoding: Codificación das mensaxes de commit setting_commit_ref_keywords: Palabras clave para a referencia setting_cross_project_issue_relations: Permitir relacionar peticións de distintos proxectos setting_date_format: Formato da data @@ -765,25 +768,25 @@ status_registered: rexistrado text_are_you_sure: ¿Está seguro? text_assign_time_entries_to_project: Asignar as horas ó proxecto - text_caracters_maximum: "{{count}} caracteres como máximo." - text_caracters_minimum: "{{count}} caracteres como mínimo" + text_caracters_maximum: "%{count} caracteres como máximo." + text_caracters_minimum: "%{count} caracteres como mínimo" text_comma_separated: Múltiples valores permitidos (separados por coma). text_default_administrator_account_changed: Conta de administrador por defecto modificada 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_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_enumeration_destroy_question: "%{count} obxectos con este valor asignado." text_file_repository_writable: Pódese escribir no repositorio - text_issue_added: "Petición {{id}} engadida por {{author}}." + text_issue_added: "Petición %{id} engadida por %{author}." text_issue_category_destroy_assignments: Deixar as peticións sen categoría - text_issue_category_destroy_question: "Algunhas peticións ({{count}}) están asignadas a esta categoría. ¿Que desexa facer?" + text_issue_category_destroy_question: "Algunhas peticións (%{count}) están asignadas a esta categoría. ¿Que desexa facer?" text_issue_category_reassign_to: Reasignar as peticións á categoría - text_issue_updated: "A petición {{id}} actualizouse por {{author}}." + text_issue_updated: "A petición %{id} actualizouse por %{author}." text_issues_destroy_confirmation: '¿Seguro que quere borrar as peticións seleccionadas?' text_issues_ref_in_commit_messages: Referencia e petición de corrección nas mensaxes - text_length_between: "Lonxitude entre {{min}} e {{max}} caracteres." + text_length_between: "Lonxitude entre %{min} e %{max} caracteres." text_load_default_configuration: Cargar a configuración por defecto text_min_max_length_info: 0 para ningunha restrición text_no_configuration_data: "Inda non se configuraron perfiles, nin tipos, estados e fluxo de traballo asociado a peticións. Recoméndase encarecidamente cargar a configuración por defecto. Unha vez cargada, poderá modificala." @@ -795,18 +798,18 @@ text_rmagick_available: RMagick dispoñible (opcional) text_select_mail_notifications: Seleccionar os eventos a notificar text_select_project_modules: 'Seleccione os módulos a activar para este proxecto:' - text_status_changed_by_changeset: "Aplicado nos cambios {{value}}" - text_subprojects_destroy_warning: "Os proxectos secundarios: {{value}} tamén se eliminarán" + text_status_changed_by_changeset: "Aplicado nos cambios %{value}" + text_subprojects_destroy_warning: "Os proxectos secundarios: %{value} tamén se eliminarán" text_tip_issue_begin_day: tarefa que comeza este día text_tip_issue_begin_end_day: tarefa que comeza e remata este día text_tip_issue_end_day: tarefa que remata este día text_tracker_no_workflow: Non hai ningún fluxo de traballo definido para este tipo de petición text_unallowed_characters: Caracteres non permitidos text_user_mail_option: "Dos proxectos non seleccionados, só recibirá notificacións sobre elementos monitorizados ou elementos nos que estea involucrado (por exemplo, peticións das que vostede sexa autor ou asignadas a vostede)." - text_user_wrote: "{{value}} escribiu:" + text_user_wrote: "%{value} escribiu:" text_wiki_destroy_confirmation: ¿Seguro que quere borrar o wiki e todo o seu contido? text_workflow_edit: Seleccionar un fluxo de traballo para actualizar - warning_attachments_not_saved: "{{count}} file(s) could not be saved." + warning_attachments_not_saved: "%{count} file(s) could not be saved." field_editable: Editable text_plugin_assets_writable: Plugin assets directory writable label_display: Display @@ -822,21 +825,21 @@ label_descending: Descending label_sort: Sort label_ascending: Ascending - label_date_from_to: From {{start}} to {{end}} + label_date_from_to: From %{start} to %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? + text_wiki_page_destroy_question: This page has %{descendants} child page(s) and descendant(s). What do you want to do? text_wiki_page_reassign_children: Reassign child pages to this parent page text_wiki_page_nullify_children: Keep child pages as root pages text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated" label_wiki_content_added: Wiki page added - 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_added: "'%{id}' wiki page has been added" + mail_body_wiki_content_added: The '%{id}' wiki page has been added by %{author}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '%{id}' wiki page has been updated by %{author}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -844,14 +847,14 @@ label_branch: Branch 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"). - 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_changed: "%{label} changed from %{old} to %{new}" + text_journal_set_to: "%{label} set to %{value}" + text_journal_deleted: "%{label} deleted (%{old})" label_group_plural: Groups label_group: Group label_group_new: New group label_time_entry_plural: Spent time - text_journal_added: "{{label}} {{value}} added" + text_journal_added: "%{label} %{value} added" field_active: Active enumeration_system_activity: System Activity permission_delete_issue_watchers: Delete watchers @@ -886,9 +889,9 @@ setting_start_of_week: Start calendars on permission_view_issues: View Issues label_display_used_statuses_only: Only display statuses that are used by this tracker - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_api_access_key: API access key - label_api_access_key_created_on: API access key created {{value}} ago + label_api_access_key_created_on: API access key created %{value} ago label_feeds_access_key: RSS access key notice_api_access_key_reseted: Your API access key was reset. setting_rest_api_enabled: Enable REST web service @@ -915,12 +918,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -928,7 +931,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -939,8 +942,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Codificación das mensaxes de commit + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/he.yml --- a/config/locales/he.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/he.yml Mon Jul 25 14:23:37 2011 +0100 @@ -15,7 +15,10 @@ abbr_day_names: ["א'", "ב'", "ג'", "ד'", "ה'", "ו'", "ש'"] month_names: [~, ינואר, פברואר, מרץ, אפריל, מאי, יוני, יולי, אוגוסט, ספטמבר, אוקטובר, נובמבר, דצמבר] abbr_month_names: [~, יאנ, פבר, מרץ, אפר, מאי, יונ, יול, אוג, ספט, אוק, נוב, דצמ] - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -38,38 +41,38 @@ less_than_x_seconds: zero: 'פחות משניה' one: 'פחות משניה' - other: 'פחות מ־{{count}} שניות' + other: 'פחות מ־%{count} שניות' x_seconds: one: 'שניה אחת' - other: '{{count}} שניות' + other: '%{count} שניות' less_than_x_minutes: zero: 'פחות מדקה אחת' one: 'פחות מדקה אחת' - other: 'פחות מ־{{count}} דקות' + other: 'פחות מ־%{count} דקות' x_minutes: one: 'דקה אחת' - other: '{{count}} דקות' + other: '%{count} דקות' about_x_hours: one: 'בערך שעה אחת' - other: 'בערך {{count}} שעות' + other: 'בערך %{count} שעות' x_days: one: 'יום אחד' - other: '{{count}} ימים' + other: '%{count} ימים' about_x_months: one: 'בערך חודש אחד' - other: 'בערך {{count}} חודשים' + other: 'בערך %{count} חודשים' x_months: one: 'חודש אחד' - other: '{{count}} חודשים' + other: '%{count} חודשים' about_x_years: one: 'בערך שנה אחת' - other: 'בערך {{count}} שנים' + other: 'בערך %{count} שנים' over_x_years: one: 'מעל שנה אחת' - other: 'מעל {{count}} שנים' + other: 'מעל %{count} שנים' almost_x_years: one: "כמעט שנה" - other: "כמעט {{count}} שנים" + other: "כמעט %{count} שנים" number: format: @@ -100,6 +103,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "לא נכלל ברשימה" exclusion: "לא זמין" @@ -108,16 +115,16 @@ accepted: "חייב באישור" empty: "חייב להכלל" blank: "חייב להכלל" - too_long: "ארוך מדי (לא יותר מ־{{count}} תוים)" - too_short: "קצר מדי (לא יותר מ־{{count}} תוים)" - wrong_length: "לא באורך הנכון (חייב להיות {{count}} תוים)" + too_long: "ארוך מדי (לא יותר מ־%{count} תוים)" + too_short: "קצר מדי (לא יותר מ־%{count} תוים)" + wrong_length: "לא באורך הנכון (חייב להיות %{count} תוים)" taken: "לא זמין" not_a_number: "הוא לא מספר" - greater_than: "חייב להיות גדול מ־{{count}}" - greater_than_or_equal_to: "חייב להיות גדול או שווה ל־{{count}}" - equal_to: "חייב להיות שווה ל־{{count}}" - less_than: "חייב להיות קטן מ־{{count}}" - less_than_or_equal_to: "חייב להיות קטן או שווה ל־{{count}}" + 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: "חייב להיות מאוחר יותר מתאריך ההתחלה" @@ -135,7 +142,7 @@ general_csv_separator: ',' general_csv_decimal_separator: '.' general_csv_encoding: ISO-8859-8 - general_pdf_encoding: ISO-8859-8 + general_pdf_encoding: UTF-8 general_first_day_of_week: '7' notice_account_updated: החשבון עודכן בהצלחה! @@ -155,12 +162,12 @@ notice_locking_conflict: המידע עודכן על ידי משתמש אחר. notice_not_authorized: אינך מורשה לראות דף זה. notice_not_authorized_archived_project: הפרויקט שאתה מנסה לגשת אליו נמצא בארכיון. - notice_email_sent: "דואל נשלח לכתובת {{value}}" - notice_email_error: "ארעה שגיאה בעת שליחת הדואל ({{value}})" + 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_failed_to_save_issues: "נכשרת בשמירת %{count} נושאים ב %{total} נבחרו: %{ids}." + notice_failed_to_save_members: "כשלון בשמירת חבר(ים): %{errors}." notice_no_issue_selected: "לא נבחר אף נושא! בחר בבקשה את הנושאים שברצונך לערוך." notice_account_pending: "החשבון שלך נוצר ועתה מחכה לאישור מנהל המערכת." notice_default_data_loaded: אפשרויות ברירת מחדל מופעלות. @@ -168,9 +175,9 @@ notice_unable_delete_time_entry: לא ניתן למחוק רשומת זמן. notice_issue_done_ratios_updated: אחוזי התקדמות לנושא עודכנו. - error_can_t_load_default_data: "אפשרויות ברירת המחדל לא הצליחו להיטען: {{value}}" + error_can_t_load_default_data: "אפשרויות ברירת המחדל לא הצליחו להיטען: %{value}" error_scm_not_found: כניסה ו\או מהדורה אינם קיימים במאגר. - error_scm_command_failed: "ארעה שגיאה בעת ניסון גישה למאגר: {{value}}" + error_scm_command_failed: "ארעה שגיאה בעת ניסון גישה למאגר: %{value}" error_scm_annotate: "הכניסה לא קיימת או שלא ניתן לתאר אותה." error_issue_not_found_in_project: 'הנושאים לא נמצאו או אינם שיכים לפרויקט' error_no_tracker_in_project: לא הוגדר סיווג לפרויקט זה. נא בדוק את הגדרות הפרויקט. @@ -184,26 +191,26 @@ error_workflow_copy_source: נא בחר סיווג או תפקיד מקור error_workflow_copy_target: נא בחר תפקיד(ים) וסיווג(ים) error_unable_delete_issue_status: לא ניתן למחוק מצב נושא - error_unable_to_connect: לא ניתן להתחבר ({{value}}) - warning_attachments_not_saved: "כשלון בשמירת {{count}} קבצים." + error_unable_to_connect: לא ניתן להתחבר (%{value}) + warning_attachments_not_saved: "כשלון בשמירת %{count} קבצים." - mail_subject_lost_password: "סיסמת ה־{{value}} שלך" + mail_subject_lost_password: "סיסמת ה־%{value} שלך" mail_body_lost_password: 'לשינו סיסמת ה־Redmine שלך, לחץ על הקישור הבא:' - mail_subject_register: "הפעלת חשבון {{value}}" + mail_subject_register: "הפעלת חשבון %{value}" mail_body_register: 'להפעלת חשבון ה־Redmine שלך, לחץ על הקישור הבא:' - mail_body_account_information_external: "אתה יכול להשתמש בחשבון {{value}} כדי להתחבר" + 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}}. + 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}} שגיאות" + gui_validation_error_plural: "%{count} שגיאות" field_name: שם field_description: תיאור @@ -266,7 +273,8 @@ field_attr_lastname: תכונת שם משפחה field_attr_mail: תכונת דוא"ל field_onthefly: יצירת משתמשים זריזה - field_done_ratio: % גמור + field_start_date: תאריך התחלה + field_done_ratio: "% גמור" field_auth_source: מקור הזדהות field_hide_mail: החבא את כתובת הדוא"ל שלי field_comments: הערות @@ -325,7 +333,6 @@ setting_cross_project_issue_relations: הרשה קישור נושאים בין פרויקטים setting_issue_list_default_columns: עמודות ברירת מחדל המוצגות ברשימת הנושאים setting_repositories_encodings: קידוד המאגרים - setting_commit_logs_encoding: קידוד הודעות הפקדה setting_emails_footer: תחתית דוא"ל setting_protocol: פרוטוקול setting_per_page_options: אפשרויות אוביקטים לפי דף @@ -431,14 +438,14 @@ label_x_projects: zero: ללא פרויקטים one: פרויקט אחד - other: "{{count}} פרויקטים" + 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_issues_by: "נושאים לפי %{value}" label_issue_added: נושא נוסף label_issue_updated: נושא עודכן label_document: מסמך @@ -489,7 +496,7 @@ label_registered_on: נרשם בתאריך label_activity: פעילות label_overall_activity: פעילות כוללת - label_user_activity: "הפעילות של {{value}}" + label_user_activity: "הפעילות של %{value}" label_new: חדש label_logged_as: מחובר כ label_environment: סביבה @@ -499,7 +506,7 @@ label_auth_source_plural: מקורות הזדהות label_subproject_plural: תת־פרויקטים label_subproject_new: תת־פרויקט חדש - label_and_its_subprojects: "{{value}} וכל תתי־הפרויקטים שלו" + label_and_its_subprojects: "%{value} וכל תתי־הפרויקטים שלו" label_min_max_length: אורך מינימאלי - מקסימאלי label_list: רשימה label_date: תאריך @@ -510,8 +517,8 @@ label_text: טקסט ארוך label_attribute: תכונה label_attribute_plural: תכונות - label_download: "הורדה {{count}}" - label_download_plural: "{{count}} הורדות" + label_download: "הורדה %{count}" + label_download_plural: "%{count} הורדות" label_no_data: אין מידע להציג label_change_status: שנה מצב label_history: היסטוריה @@ -543,17 +550,17 @@ label_closed_issues: סגור label_closed_issues_plural: סגורים label_x_open_issues_abbr_on_total: - zero: 0 פתוחים / {{total}} - one: 1 פתוח / {{total}} - other: "{{count}} פתוחים / {{total}}" + zero: 0 פתוחים / %{total} + one: 1 פתוח / %{total} + other: "%{count} פתוחים / %{total}" label_x_open_issues_abbr: zero: 0 פתוחים one: 1 פתוח - other: "{{count}} פתוחים" + other: "%{count} פתוחים" label_x_closed_issues_abbr: zero: 0 סגורים one: 1 סגור - other: "{{count}} סגורים" + other: "%{count} סגורים" label_total: סה"כ label_permissions: הרשאות label_current_status: מצב נוכחי @@ -571,7 +578,7 @@ label_months_from: חודשים מ label_gantt: גאנט label_internal: פנימי - label_last_changes: "{{count}} שינוים אחרונים" + label_last_changes: "%{count} שינוים אחרונים" label_change_view_all: צפה בכל השינוים label_personalize_page: התאם אישית דף זה label_comment: תגובה @@ -579,7 +586,7 @@ label_x_comments: zero: אין הערות one: הערה אחת - other: "{{count}} הערות" + other: "%{count} הערות" label_comment_add: הוסף תגובה label_comment_added: תגובה נוספה label_comment_delete: מחק תגובות @@ -600,7 +607,7 @@ label_yesterday: אתמול label_this_week: השבוע label_last_week: השבוע שעבר - label_last_n_days: "ב־{{count}} ימים אחרונים" + label_last_n_days: "ב־%{count} ימים אחרונים" label_this_month: החודש label_last_month: חודש שעבר label_this_year: השנה @@ -614,13 +621,13 @@ label_repository: מאגר label_repository_plural: מאגרים label_browse: סייר - label_modification: "שינוי {{count}}" - label_modification_plural: "{{count}} שינויים" + label_modification: "שינוי %{count}" + label_modification_plural: "%{count} שינויים" label_branch: ענף label_tag: סימון label_revision: מהדורה label_revision_plural: מהדורות - label_revision_id: מהדורה {{value}} + label_revision_id: מהדורה %{value} label_associated_revisions: מהדורות קשורות label_added: נוסף label_modified: שונה @@ -637,8 +644,8 @@ label_sort_lower: הזז למטה label_sort_lowest: הזז לתחתית label_roadmap: מפת הדרכים - label_roadmap_due_in: "נגמר בעוד {{value}}" - label_roadmap_overdue: "{{value}} מאחר" + label_roadmap_due_in: "נגמר בעוד %{value}" + label_roadmap_overdue: "%{value} מאחר" label_roadmap_no_issues: אין נושאים לגירסה זו label_search: חפש label_result_plural: תוצאות @@ -657,8 +664,8 @@ label_issue_tracking: מעקב אחר נושאים label_spent_time: זמן שהושקע label_overall_spent_time: זמן שהושקע סה"כ - label_f_hour: "{{value}} שעה" - label_f_hour_plural: "{{value}} שעות" + label_f_hour: "%{value} שעה" + label_f_hour_plural: "%{value} שעות" label_time_tracking: מעקב זמנים label_change_plural: שינויים label_statistics: סטטיסטיקות @@ -709,15 +716,15 @@ label_date_from: מתאריך label_date_to: עד label_language_based: מבוסס שפה - label_sort_by: "מיין לפי {{value}}" + 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_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_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: סדרות שינויים @@ -736,7 +743,7 @@ label_registration_activation_by_email: הפעל חשבון באמצעות דוא"ל label_registration_manual_activation: הפעלת חשבון ידנית label_registration_automatic_activation: הפעלת חשבון אוטומטית - label_display_per_page: "בכל דף: {{value}} תוצאות" + label_display_per_page: "בכל דף: %{value} תוצאות" label_age: גיל label_change_properties: שנה מאפיינים label_general: כללי @@ -759,7 +766,7 @@ label_sort: מיון label_ascending: בסדר עולה label_descending: בסדר יורד - label_date_from_to: 'מתאריך {{start}} ועד תאריך {{end}}' + label_date_from_to: 'מתאריך %{start} ועד תאריך %{end}' label_wiki_content_added: נוסף דף ל־wiki label_wiki_content_updated: דף wiki עודכן label_group: קבוצה @@ -778,7 +785,7 @@ 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_api_access_key_created_on: 'מפתח גישה ל־API נוצר לפני %{value}' label_profile: פרופיל label_subtask_plural: תתי־משימות label_project_copy_notifications: שלח התראות דואר במהלך העתקת הפרויקט @@ -793,7 +800,7 @@ button_create_and_continue: צור ופתח חדש button_test: בדוק button_edit: ערוך - button_edit_associated_wikipage: "ערוך דף wiki מקושר: {{page_title}}" + button_edit_associated_wikipage: "ערוך דף wiki מקושר: %{page_title}" button_add: הוסף button_change: שנה button_apply: החל @@ -842,54 +849,54 @@ text_regexp_info: כגון. ^[A-Z0-9]+$ text_min_max_length_info: 0 משמעו ללא הגבלות text_project_destroy_confirmation: האם אתה בטוח שברצונך למחוק את הפרויקט ואת כל המידע הקשור אליו? - text_subprojects_destroy_warning: "תת־הפרויקט\ים: {{value}} ימחקו גם כן." + 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_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), מספרים ומקפים.
    ברגע שנשמר, לא ניתן לשנות את המזהה.' - text_caracters_maximum: "מקסימום {{count}} תווים." - text_caracters_minimum: "חייב להיות לפחות באורך של {{count}} תווים." - text_length_between: "אורך בין {{min}} ל {{max}} תווים." + 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_issue_added: "הנושא %{id} דווח (בידי %{author})." + text_issue_updated: "הנושא %{id} עודכן (בידי %{author})." text_wiki_destroy_confirmation: האם אתה בטוח שברצונך למחוק את הWIKI הזה ואת כל תוכנו? - text_issue_category_destroy_question: "כמה נושאים ({{count}}) מוצבים לקטגוריה הזו. מה ברצונך לעשות?" + 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_issues_destroy_confirmation: 'האם אתה בטוח שברצונך למחוק את הנושא\ים?' + text_status_changed_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_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_user_wrote: "%{value} כתב:" + text_enumeration_destroy_question: "%{count} אוביקטים מוצבים לערך זה." text_enumeration_category_reassign_to: 'הצב מחדש לערך הזה:' - text_email_delivery_not_configured: 'לא נקבעה תצורה לשליחת דואר, וההתראות כבויות.\nקבע את תצורת שרת ה־SMTP בקובץ /etc/redmine/<instance>/email.yml והתחל את האפליקציה מחדש ע"מ לאפשר אותם.' + text_email_delivery_not_configured: 'לא נקבעה תצורה לשליחת דואר, וההתראות כבויות.\nקבע את תצורת שרת ה־SMTP בקובץ /etc/redmine/<instance>/configuration.yml והתחל את האפליקציה מחדש ע"מ לאפשר אותם.' text_repository_usernames_mapping: "בחר או עדכן את משתמש Redmine הממופה לכל שם משתמש ביומן המאגר.\nמשתמשים בעלי שם או כתובת דואר זהה ב־Redmine ובמאגר ממופים באופן אוטומטי." text_diff_truncated: '... השינויים עוברים את מספר השורות המירבי לתצוגה, ולכן הם קוצצו.' text_custom_field_possible_values_info: שורה אחת לכל ערך - text_wiki_page_destroy_question: לדף זה יש {{descendants}} דפים בנים ותלויים. מה ברצונך לעשות? + text_wiki_page_destroy_question: לדף זה יש %{descendants} דפים בנים ותלויים. מה ברצונך לעשות? text_wiki_page_nullify_children: השאר דפים בנים כדפים ראשיים text_wiki_page_destroy_children: מחק את הדפים הבנים ואת כל התלויים בהם text_wiki_page_reassign_children: הצב מחדש דפים בנים לדף האב הנוכחי @@ -928,8 +935,50 @@ label_user_mail_option_none: No events field_member_of_group: Assignee's group field_assigned_to_role: Assignee's role - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: קידוד הודעות הפקדה + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/hr.yml --- a/config/locales/hr.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/hr.yml Mon Jul 25 14:23:37 2011 +0100 @@ -19,7 +19,10 @@ month_names: [~, Sijecanj, Veljaca, Ožujak, Travanj, Svibanj, Lipanj, Srpanj, Kolovoz, Rujan, Listopad, Studeni, Prosinac] abbr_month_names: [~, Sij, Velj, Ožu, Tra, Svi, Lip, Srp, Kol, Ruj, List, Stu, Pro] # Used in date_select and datime_select. - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -35,34 +38,34 @@ half_a_minute: "pola minute" less_than_x_seconds: one: "manje od sekunde" - other: "manje od {{count}} sekundi" + other: "manje od %{count} sekundi" x_seconds: one: "1 sekunda" - other: "{{count}} sekundi" + other: "%{count} sekundi" less_than_x_minutes: one: "manje od minute" - other: "manje od {{count}} minuta" + other: "manje od %{count} minuta" x_minutes: one: "1 minuta" - other: "{{count}} minuta" + other: "%{count} minuta" about_x_hours: one: "oko sat vremena" - other: "oko {{count}} sati" + other: "oko %{count} sati" x_days: one: "1 dan" - other: "{{count}} dana" + other: "%{count} dana" about_x_months: one: "oko 1 mjesec" - other: "oko {{count}} mjeseci" + other: "oko %{count} mjeseci" x_months: one: "mjesec" - other: "{{count}} mjeseci" + other: "%{count} mjeseci" about_x_years: one: "1 godina" - other: "{{count}} godina" + other: "%{count} godina" over_x_years: one: "preko 1 godine" - other: "preko {{count}} godina" + other: "preko %{count} godina" number: format: @@ -93,6 +96,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "nije ukljuceno u listu" exclusion: "je rezervirano" @@ -101,17 +108,17 @@ accepted: "mora biti prihvaćen" empty: "ne može biti prazno" blank: "ne može biti razmaka" - too_long: "je predug (maximum is {{count}} characters)" - too_short: "je prekratak (minimum is {{count}} characters)" - wrong_length: "je pogrešne dužine (should be {{count}} characters)" + too_long: "je predug (maximum is %{count} characters)" + too_short: "je prekratak (minimum is %{count} characters)" + wrong_length: "je pogrešne dužine (should be %{count} characters)" taken: "već je zauzeto" not_a_number: "nije broj" not_a_date: "nije ispravan datum" - greater_than: "mora biti veći od {{count}}" - greater_than_or_equal_to: "mora biti veći ili jednak {{count}}" - equal_to: "mora biti jednak {{count}}" - less_than: "mora biti manji od {{count}}" - less_than_or_equal_to: "mora bit manji ili jednak{{count}}" + greater_than: "mora biti veći od %{count}" + greater_than_or_equal_to: "mora biti veći ili jednak %{count}" + equal_to: "mora biti jednak %{count}" + less_than: "mora biti manji od %{count}" + less_than_or_equal_to: "mora bit manji ili jednak%{count}" odd: "mora biti neparan" even: "mora biti paran" greater_than_start_date: "mora biti veci nego pocetni datum" @@ -128,8 +135,8 @@ general_lang_name: 'Hrvatski' general_csv_separator: ',' general_csv_decimal_separator: '.' - general_csv_encoding: utf8 - general_pdf_encoding: utf8 + general_csv_encoding: UTF-8 + general_pdf_encoding: UTF-8 general_first_day_of_week: '7' notice_account_updated: Vaš profil je uspješno promijenjen. @@ -148,20 +155,20 @@ notice_file_not_found: Stranica kojoj ste pokušali pristupiti ne postoji ili je uklonjena. notice_locking_conflict: Podataci su ažurirani od strane drugog korisnika. notice_not_authorized: Niste ovlašteni za pristup ovoj stranici. - notice_email_sent: E-mail je poslan {{value}}" - notice_email_error: Dogodila se pogreška tijekom slanja E-maila ({{value}})" + notice_email_sent: E-mail je poslan %{value}" + notice_email_error: Dogodila se pogreška tijekom slanja E-maila (%{value})" notice_feeds_access_key_reseted: Vaš RSS pristup je resetovan. notice_api_access_key_reseted: Vaš API pristup je resetovan. - notice_failed_to_save_issues: "Neuspjelo spremanje {{count}} predmeta na {{total}} odabrane: {{ids}}." + notice_failed_to_save_issues: "Neuspjelo spremanje %{count} predmeta na %{total} odabrane: %{ids}." notice_no_issue_selected: "Niti jedan predmet nije odabran! Molim, odaberite predmete koje želite urediti." notice_account_pending: "Vaš korisnicki račun je otvoren, čeka odobrenje administratora." notice_default_data_loaded: Konfiguracija je uspješno učitana. notice_unable_delete_version: Nije moguće izbrisati verziju. notice_issue_done_ratios_updated: Issue done ratios updated. - error_can_t_load_default_data: "Zadanu konfiguracija nije učitana: {{value}}" + error_can_t_load_default_data: "Zadanu konfiguracija nije učitana: %{value}" error_scm_not_found: "Unos i/ili revizija nije pronađen." - error_scm_command_failed: "Dogodila se pogreška prilikom pokušaja pristupa: {{value}}" + error_scm_command_failed: "Dogodila se pogreška prilikom pokušaja pristupa: %{value}" error_scm_annotate: "Ne postoji ili ne može biti obilježen." error_issue_not_found_in_project: 'Nije pronađen ili ne pripada u ovaj projekt' error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.' @@ -172,25 +179,25 @@ 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}} Datoteka/e nije mogla biti spremljena." + warning_attachments_not_saved: "%{count} Datoteka/e nije mogla biti spremljena." - mail_subject_lost_password: "Vaša {{value}} zaporka" + mail_subject_lost_password: "Vaša %{value} zaporka" mail_body_lost_password: 'Kako biste promijenili Vašu zaporku slijedite poveznicu:' - mail_subject_register: "Aktivacija korisničog računa {{value}}" + mail_subject_register: "Aktivacija korisničog računa %{value}" mail_body_register: 'Da biste aktivirali svoj račun, kliknite na sljedeci link:' - mail_body_account_information_external: "Možete koristiti vaš račun {{value}} za prijavu." + mail_body_account_information_external: "Možete koristiti vaš račun %{value} za prijavu." mail_body_account_information: Vaši korisnički podaci - mail_subject_account_activation_request: "{{value}} predmet za aktivaciju korisničkog računa" - mail_body_account_activation_request: "Novi korisnik ({{value}}) je registriran. Njegov korisnički račun čeka vaše odobrenje:" - mail_subject_reminder: "{{count}} predmet(a) dospijeva sljedećih {{days}} dana" - mail_body_reminder: "{{count}} vama dodijeljen(ih) predmet(a) dospijeva u sljedećih {{days}} dana:" - 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}}." + mail_subject_account_activation_request: "%{value} predmet za aktivaciju korisničkog računa" + mail_body_account_activation_request: "Novi korisnik (%{value}) je registriran. Njegov korisnički račun čeka vaše odobrenje:" + mail_subject_reminder: "%{count} predmet(a) dospijeva sljedećih %{days} dana" + mail_body_reminder: "%{count} vama dodijeljen(ih) predmet(a) dospijeva u sljedećih %{days} dana:" + 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 pogreška - gui_validation_error_plural: "{{count}} pogrešaka" + gui_validation_error_plural: "%{count} pogrešaka" field_name: Ime field_description: Opis @@ -253,7 +260,8 @@ field_attr_lastname: Atribut prezimena field_attr_mail: Atribut e-pošte field_onthefly: "Izrada korisnika \"u hodu\"" - field_done_ratio: % Učinjeno + field_start_date: Pocetak + field_done_ratio: "% Učinjeno" field_auth_source: Vrsta prijavljivanja field_hide_mail: Sakrij moju adresu e-pošte field_comments: Komentar @@ -308,7 +316,6 @@ setting_cross_project_issue_relations: Dozvoli povezivanje predmeta izmedu različitih projekata setting_issue_list_default_columns: Stupci prikazani na listi predmeta setting_repositories_encodings: Kodna stranica - setting_commit_logs_encoding: Commit messages encoding setting_emails_footer: Zaglavlje e-pošte setting_protocol: Protokol setting_per_page_options: Objekata po stranici opcija @@ -407,14 +414,14 @@ label_x_projects: zero: no projects one: 1 project - other: "{{count}} projects" + other: "%{count} projects" label_project_all: Svi Projekti label_project_latest: Najnoviji projekt label_issue: Predmet label_issue_new: Novi predmet label_issue_plural: Predmeti label_issue_view_all: Pregled svih predmeta - label_issues_by: "Predmeti od {{value}}" + label_issues_by: "Predmeti od %{value}" label_issue_added: Predmet dodan label_issue_updated: Predmet promijenjen label_document: Dokument @@ -464,7 +471,7 @@ label_registered_on: Registrirano label_activity: Aktivnosti label_overall_activity: Aktivnosti - label_user_activity: "{{value}} ova/ina aktivnost" + label_user_activity: "%{value} ova/ina aktivnost" label_new: Novi label_logged_as: Prijavljeni ste kao label_environment: Okolina @@ -474,7 +481,7 @@ label_auth_source_plural: Načini prijavljivanja label_subproject_plural: Potprojekti label_subproject_new: Novi potprojekt - label_and_its_subprojects: "{{value}} i njegovi potprojekti" + label_and_its_subprojects: "%{value} i njegovi potprojekti" label_min_max_length: Min - Maks veličina label_list: Liste label_date: Datum @@ -485,8 +492,8 @@ label_text: Long text label_attribute: Atribut label_attribute_plural: Atributi - label_download: "{{count}} Download" - label_download_plural: "{{count}} Downloads" + label_download: "%{count} Download" + label_download_plural: "%{count} Downloads" label_no_data: Nema podataka za prikaz label_change_status: Promjena statusa label_history: Povijest @@ -518,17 +525,17 @@ label_closed_issues: Zatvoren label_closed_issues_plural: Zatvoreno label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{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" + other: "%{count} open" label_x_closed_issues_abbr: zero: 0 closed one: 1 closed - other: "{{count}} closed" + other: "%{count} closed" label_total: Ukupno label_permissions: Dozvole label_current_status: Trenutni status @@ -546,7 +553,7 @@ label_months_from: Mjeseci od label_gantt: Gantt label_internal: Interno - label_last_changes: "Posljednjih {{count}} promjena" + label_last_changes: "Posljednjih %{count} promjena" label_change_view_all: Prikaz svih promjena label_personalize_page: Prilagodite ovu stranicu label_comment: Komentar @@ -554,7 +561,7 @@ label_x_comments: zero: no comments one: 1 comment - other: "{{count}} comments" + other: "%{count} comments" label_comment_add: Dodaj komentar label_comment_added: Komentar dodan label_comment_delete: Brisanje komentara @@ -575,7 +582,7 @@ label_yesterday: jučer label_this_week: ovog tjedna label_last_week: prošlog tjedna - label_last_n_days: "zadnjih {{count}} dana" + label_last_n_days: "zadnjih %{count} dana" label_this_month: ovog mjeseca label_last_month: prošlog mjeseca label_this_year: ove godine @@ -589,13 +596,13 @@ label_repository: Skladište label_repository_plural: Skladišta label_browse: Pregled - label_modification: "{{count}} promjena" - label_modification_plural: "{{count}} promjena" + label_modification: "%{count} promjena" + label_modification_plural: "%{count} promjena" label_branch: Branch label_tag: Tag label_revision: Revizija label_revision_plural: Revizije - label_revision_id: "Revision {{value}}" + label_revision_id: "Revision %{value}" label_associated_revisions: Dodijeljene revizije label_added: dodano label_modified: promijenjen @@ -612,8 +619,8 @@ label_sort_lower: Premjesti prema dolje label_sort_lowest: Premjesti na dno label_roadmap: Putokaz - label_roadmap_due_in: "Završava se za {{value}}" - label_roadmap_overdue: "{{value}} kasni" + label_roadmap_due_in: "Završava se za %{value}" + label_roadmap_overdue: "%{value} kasni" label_roadmap_no_issues: Nema predmeta za ovu verziju label_search: Traži label_result_plural: Rezultati @@ -631,8 +638,8 @@ label_changes_details: Detalji svih promjena label_issue_tracking: Praćenje predmeta label_spent_time: Utrošeno vrijeme - label_f_hour: "{{value}} sata" - label_f_hour_plural: "{{value}} sati" + label_f_hour: "%{value} sata" + label_f_hour_plural: "%{value} sati" label_time_tracking: Praćenje vremena label_change_plural: Promjene label_statistics: Statistika @@ -681,15 +688,15 @@ label_date_from: Od label_date_to: Do label_language_based: Zasnovano na jeziku - label_sort_by: "Uredi po {{value}}" + label_sort_by: "Uredi po %{value}" label_send_test_email: Pošalji testno E-pismo label_feeds_access_key: RSS access key label_missing_feeds_access_key: Missing a RSS access key - label_feeds_access_key_created_on: "RSS kljuc za pristup je napravljen prije {{value}}" + label_feeds_access_key_created_on: "RSS kljuc za pristup je napravljen prije %{value}" label_module_plural: Moduli - label_added_time_by: "Promijenio {{author}} prije {{age}}" - label_updated_time_by: "Dodao/la {{author}} prije {{age}}" - label_updated_time: "Promijenjeno prije {{value}}" + label_added_time_by: "Promijenio %{author} prije %{age}" + label_updated_time_by: "Dodao/la %{author} prije %{age}" + label_updated_time: "Promijenjeno prije %{value}" label_jump_to_a_project: Prebaci se na projekt... label_file_plural: Datoteke label_changeset_plural: Promjene @@ -705,7 +712,7 @@ label_registration_activation_by_email: aktivacija putem e-pošte label_registration_manual_activation: ručna aktivacija label_registration_automatic_activation: automatska aktivacija - label_display_per_page: "Po stranici: {{value}}" + label_display_per_page: "Po stranici: %{value}" label_age: Starost label_change_properties: Promijeni svojstva label_general: Općenito @@ -728,7 +735,7 @@ label_sort: Sort label_ascending: Ascending label_descending: Descending - label_date_from_to: From {{start}} to {{end}} + 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 @@ -747,7 +754,7 @@ 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" + label_api_access_key_created_on: "API access key created %{value} ago" button_login: Prijavi button_submit: Pošalji @@ -807,54 +814,54 @@ text_regexp_info: eg. ^[A-Z0-9]+$ text_min_max_length_info: 0 znači bez ograničenja text_project_destroy_confirmation: Da li ste sigurni da želite izbrisati ovaj projekt i sve njegove podatke? - text_subprojects_destroy_warning: "Njegov(i) potprojekt(i): {{value}} će također biti obrisan." + text_subprojects_destroy_warning: "Njegov(i) potprojekt(i): %{value} će također biti obrisan." text_workflow_edit: Select a role and a tracker to edit the workflow text_are_you_sure: Da li ste sigurni? - text_journal_changed: "{{label}} promijenjen iz {{old}} u {{new}}" - text_journal_set_to: "{{label}} postavi na {{value}}" - text_journal_deleted: "{{label}} izbrisano ({{old}})" - text_journal_added: "{{label}} {{value}} added" + text_journal_changed: "%{label} promijenjen iz %{old} u %{new}" + text_journal_set_to: "%{label} postavi na %{value}" + text_journal_deleted: "%{label} izbrisano (%{old})" + text_journal_added: "%{label} %{value} added" text_tip_issue_begin_day: Zadaci koji počinju ovog dana text_tip_issue_end_day: zadaci koji se završavaju ovog dana text_tip_issue_begin_end_day: Zadaci koji počinju i završavaju se ovog dana text_project_identifier_info: 'mala slova (a-z), brojevi i crtice su dozvoljeni.
    Jednom snimljen identifikator se ne može mijenjati!' - text_caracters_maximum: "Najviše {{count}} znakova." - text_caracters_minimum: "Mora biti dugačko najmanje {{count}} znakova." - text_length_between: "Dužina izmedu {{min}} i {{max}} znakova." + text_caracters_maximum: "Najviše %{count} znakova." + text_caracters_minimum: "Mora biti dugačko najmanje %{count} znakova." + text_length_between: "Dužina izmedu %{min} i %{max} znakova." text_tracker_no_workflow: Tijek rada nije definiran za ovaj tracker text_unallowed_characters: Nedozvoljeni znakovi text_comma_separated: Višestruke vrijednosti su dozvoljene (razdvojene zarezom). text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages text_tracker_no_workflow: No workflow defined for this tracker text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages - text_issue_added: "Predmet {{id}} je prijavljen (prijavio {{author}})." - text_issue_updated: "Predmet {{id}} je promijenjen {{author}})." + text_issue_added: "Predmet %{id} je prijavljen (prijavio %{author})." + text_issue_updated: "Predmet %{id} je promijenjen %{author})." text_wiki_destroy_confirmation: Da li ste sigurni da želite izbrisati ovaj wiki i njegov sadržaj? - text_issue_category_destroy_question: "Neke predmeti ({{count}}) su dodijeljeni ovoj kategoriji. Što želite uraditi?" + text_issue_category_destroy_question: "Neke predmeti (%{count}) su dodijeljeni ovoj kategoriji. Što želite uraditi?" text_issue_category_destroy_assignments: Ukloni dodjeljivanje kategorija text_issue_category_reassign_to: Ponovo dodijeli predmete ovoj kategoriji text_user_mail_option: "Za neizabrane projekte, primit ćete obavjesti samo o stvarima koje pratite ili u kojima sudjelujete (npr. predmete koje ste vi napravili ili koje su vama dodjeljeni)." 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: Učitaj početnu konfiguraciju - text_status_changed_by_changeset: "Applied in changeset {{value}}." + text_status_changed_by_changeset: "Applied in changeset %{value}." text_issues_destroy_confirmation: 'Jeste li sigurni da želite obrisati izabrani/e predmet(e)?' text_select_project_modules: 'Odaberite module koji će biti omogućeni za ovaj projekt:' text_default_administrator_account_changed: Default administrator account changed text_file_repository_writable: Dozvoljeno pisanje u direktorij za privitke text_plugin_assets_writable: Plugin assets directory writable text_rmagick_available: RMagick dostupan (nije obavezno) - text_destroy_time_entries_question: "{{hours}} sati je prijavljeno za predmete koje želite obrisati. Što ćete učiniti?" + text_destroy_time_entries_question: "%{hours} sati je prijavljeno za predmete koje želite obrisati. Što ćete učiniti?" text_destroy_time_entries: Obriši prijavljene sate text_assign_time_entries_to_project: Pridruži prijavljene sate projektu text_reassign_time_entries: 'Premjesti prijavljene sate ovom predmetu:' - text_user_wrote: "{{value}} je napisao/la:" - text_enumeration_destroy_question: "{{count}} objekata je pridruženo toj vrijednosti." + 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' - text_wiki_page_destroy_question: "This page has {{descendants}} child page(s) and descendant(s). What do you want to do?" + 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" @@ -906,12 +913,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -919,7 +926,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -930,8 +937,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Commit messages encoding + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/hu.yml --- a/config/locales/hu.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/hu.yml Mon Jul 25 14:23:37 2011 +0100 @@ -16,7 +16,10 @@ abbr_day_names: [v., h., k., sze., cs., p., szo.] month_names: [~, január, február, március, április, május, június, július, augusztus, szeptember, október, november, december] abbr_month_names: [~, jan., febr., márc., ápr., máj., jún., júl., aug., szept., okt., nov., dec.] - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -33,38 +36,38 @@ less_than_x_seconds: # zero: 'kevesebb, mint 1 másodperc' one: 'kevesebb, mint 1 másodperc' - other: 'kevesebb, mint {{count}} másodperc' + other: 'kevesebb, mint %{count} másodperc' x_seconds: one: '1 másodperc' - other: '{{count}} másodperc' + other: '%{count} másodperc' less_than_x_minutes: # zero: 'kevesebb, mint 1 perc' one: 'kevesebb, mint 1 perc' - other: 'kevesebb, mint {{count}} perc' + other: 'kevesebb, mint %{count} perc' x_minutes: one: '1 perc' - other: '{{count}} perc' + other: '%{count} perc' about_x_hours: one: 'majdnem 1 óra' - other: 'majdnem {{count}} óra' + other: 'majdnem %{count} óra' x_days: one: '1 nap' - other: '{{count}} nap' + other: '%{count} nap' about_x_months: one: 'majdnem 1 hónap' - other: 'majdnem {{count}} hónap' + other: 'majdnem %{count} hónap' x_months: one: '1 hónap' - other: '{{count}} hónap' + other: '%{count} hónap' about_x_years: one: 'majdnem 1 év' - other: 'majdnem {{count}} év' + other: 'majdnem %{count} év' over_x_years: one: 'több, mint 1 év' - other: 'több, mint {{count}} év' + other: 'több, mint %{count} év' almost_x_years: one: "közel 1 év" - other: "közel {{count}} év" + other: "közel %{count} év" prompts: year: "Év" month: "Hónap" @@ -117,8 +120,8 @@ errors: template: header: - one: "1 hiba miatt nem menthető a következő: {{model}}" - other: "{{count}} hiba miatt nem menthető a következő: {{model}}" + one: "1 hiba miatt nem menthető a következő: %{model}" + other: "%{count} hiba miatt nem menthető a következő: %{model}" body: "Problémás mezők:" messages: inclusion: "nincs a listában" @@ -128,16 +131,16 @@ accepted: "nincs elfogadva" empty: "nincs megadva" blank: "nincs megadva" - too_long: "túl hosszú (nem lehet több {{count}} karakternél)" - too_short: "túl rövid (legalább {{count}} karakter kell legyen)" - wrong_length: "nem megfelelő hosszúságú ({{count}} karakter szükséges)" + too_long: "túl hosszú (nem lehet több %{count} karakternél)" + too_short: "túl rövid (legalább %{count} karakter kell legyen)" + wrong_length: "nem megfelelő hosszúságú (%{count} karakter szükséges)" taken: "már foglalt" not_a_number: "nem szám" - greater_than: "nagyobb kell legyen, mint {{count}}" - greater_than_or_equal_to: "legalább {{count}} kell legyen" - equal_to: "pontosan {{count}} kell legyen" - less_than: "kevesebb, mint {{count}} kell legyen" - less_than_or_equal_to: "legfeljebb {{count}} lehet" + greater_than: "nagyobb kell legyen, mint %{count}" + greater_than_or_equal_to: "legalább %{count} kell legyen" + equal_to: "pontosan %{count} kell legyen" + less_than: "kevesebb, mint %{count} kell legyen" + less_than_or_equal_to: "legfeljebb %{count} lehet" odd: "páratlan kell legyen" even: "páros kell legyen" greater_than_start_date: "nagyobbnak kell lennie, mint az indítás dátuma" @@ -155,7 +158,7 @@ general_csv_separator: ',' general_csv_decimal_separator: '.' general_csv_encoding: ISO-8859-2 - general_pdf_encoding: ISO-8859-2 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' notice_account_updated: A fiók adatai sikeresen frissítve. @@ -174,17 +177,17 @@ notice_file_not_found: Az oldal, amit meg szeretne nézni nem található, vagy átkerült egy másik helyre. notice_locking_conflict: Az adatot egy másik felhasználó idő közben módosította. notice_not_authorized: Nincs hozzáférési engedélye ehhez az oldalhoz. - notice_email_sent: "Egy e-mail üzenetet küldtünk a következő címre {{value}}" - notice_email_error: "Hiba történt a levél küldése közben ({{value}})" + notice_email_sent: "Egy e-mail üzenetet küldtünk a következő címre %{value}" + notice_email_error: "Hiba történt a levél küldése közben (%{value})" notice_feeds_access_key_reseted: Az RSS hozzáférési kulcsát újra generáltuk. - notice_failed_to_save_issues: "Nem sikerült a {{count}} feladat(ok) mentése a {{total}} -ban kiválasztva: {{ids}}." + notice_failed_to_save_issues: "Nem sikerült a %{count} feladat(ok) mentése a %{total} -ban kiválasztva: %{ids}." notice_no_issue_selected: "Nincs feladat kiválasztva! Kérem jelölje meg melyik feladatot szeretné szerkeszteni!" notice_account_pending: "A fiókja létrejött, és adminisztrátori jóváhagyásra vár." notice_default_data_loaded: Az alapértelmezett konfiguráció betöltése sikeresen megtörtént. - error_can_t_load_default_data: "Az alapértelmezett konfiguráció betöltése nem lehetséges: {{value}}" + error_can_t_load_default_data: "Az alapértelmezett konfiguráció betöltése nem lehetséges: %{value}" error_scm_not_found: "A bejegyzés, vagy revízió nem található a tárolóban." - error_scm_command_failed: "A tároló elérése közben hiba lépett fel: {{value}}" + error_scm_command_failed: "A tároló elérése közben hiba lépett fel: %{value}" error_scm_annotate: "A bejegyzés nem létezik, vagy nics jegyzetekkel ellátva." error_issue_not_found_in_project: 'A feladat nem található, vagy nem ehhez a projekthez tartozik' @@ -192,13 +195,13 @@ mail_body_lost_password: 'A Redmine jelszó megváltoztatásához, kattintson a következő linkre:' mail_subject_register: Redmine azonosító aktiválása mail_body_register: 'A Redmine azonosítója aktiválásához, kattintson a következő linkre:' - mail_body_account_information_external: "A {{value}} azonosító használatával bejelentkezhet a Redmine-ba." + mail_body_account_information_external: "A %{value} azonosító használatával bejelentkezhet a Redmine-ba." mail_body_account_information: Az Ön Redmine azonosítójának információi mail_subject_account_activation_request: Redmine azonosító aktiválási kérelem - mail_body_account_activation_request: "Egy új felhasználó ({{value}}) regisztrált, azonosítója jóváhasgyásra várakozik:" + mail_body_account_activation_request: "Egy új felhasználó (%{value}) regisztrált, azonosítója jóváhasgyásra várakozik:" gui_validation_error: 1 hiba - gui_validation_error_plural: "{{count}} hiba" + gui_validation_error_plural: "%{count} hiba" field_name: Név field_description: Leírás @@ -260,6 +263,7 @@ field_attr_lastname: Vezetéknév field_attr_mail: E-mail field_onthefly: On-the-fly felhasználó létrehozás + field_start_date: Kezdés dátuma field_done_ratio: Elkészült (%) field_auth_source: Azonosítási mód field_hide_mail: Rejtse el az e-mail címem @@ -334,14 +338,14 @@ label_x_projects: zero: nincsenek projektek one: 1 projekt - other: "{{count}} projekt" + other: "%{count} projekt" label_project_all: Az összes projekt label_project_latest: Legutóbbi projektek label_issue: Feladat label_issue_new: Új feladat label_issue_plural: Feladatok label_issue_view_all: Minden feladat - label_issues_by: "{{value}} feladatai" + label_issues_by: "%{value} feladatai" label_issue_added: Feladat hozzáadva label_issue_updated: Feladat frissítve label_document: Dokumentum @@ -398,7 +402,7 @@ label_auth_source_new: Új azonosítási mód label_auth_source_plural: Azonosítási módok label_subproject_plural: Alprojektek - label_and_its_subprojects: "{{value}} és alprojektjei" + label_and_its_subprojects: "%{value} és alprojektjei" label_min_max_length: Min - Max hossz label_list: Lista label_date: Dátum @@ -409,8 +413,8 @@ label_text: Hosszú szöveg label_attribute: Tulajdonság label_attribute_plural: Tulajdonságok - label_download: "{{count}} Letöltés" - label_download_plural: "{{count}} Letöltés" + label_download: "%{count} Letöltés" + label_download_plural: "%{count} Letöltés" label_no_data: Nincs megjeleníthető adat label_change_status: Státusz módosítása label_history: Történet @@ -441,17 +445,17 @@ label_closed_issues: lezárt label_closed_issues_plural: lezárt label_x_open_issues_abbr_on_total: - zero: nyitott 0 / {{total}} - one: nyitott 1 / {{total}} - other: "nyitott {{count}} / {{total}}" + zero: nyitott 0 / %{total} + one: nyitott 1 / %{total} + other: "nyitott %{count} / %{total}" label_x_open_issues_abbr: zero: 0 nyitott one: 1 nyitott - other: "{{count}} nyitott" + other: "%{count} nyitott" label_x_closed_issues_abbr: zero: 0 lezárt one: 1 lezárt - other: "{{count}} lezárt" + other: "%{count} lezárt" label_total: Összesen label_permissions: Jogosultságok label_current_status: Jelenlegi státusz @@ -469,7 +473,7 @@ label_months_from: hónap, kezdve label_gantt: Gantt label_internal: Belső - label_last_changes: "utolsó {{count}} változás" + label_last_changes: "utolsó %{count} változás" label_change_view_all: Minden változás megtekintése label_personalize_page: Az oldal testreszabása label_comment: Megjegyzés @@ -477,7 +481,7 @@ label_x_comments: zero: nincs megjegyzés one: 1 megjegyzés - other: "{{count}} megjegyzés" + other: "%{count} megjegyzés" label_comment_add: Megjegyzés hozzáadása label_comment_added: Megjegyzés hozzáadva label_comment_delete: Megjegyzések törlése @@ -496,7 +500,7 @@ label_yesterday: tegnap label_this_week: aktuális hét label_last_week: múlt hét - label_last_n_days: "az elmúlt {{count}} nap" + label_last_n_days: "az elmúlt %{count} nap" label_this_month: aktuális hónap label_last_month: múlt hónap label_this_year: aktuális év @@ -510,8 +514,8 @@ label_repository: Tároló label_repository_plural: Tárolók label_browse: Tallóz - label_modification: "{{count}} változás" - label_modification_plural: "{{count}} változás" + label_modification: "%{count} változás" + label_modification_plural: "%{count} változás" label_revision: Revízió label_revision_plural: Revíziók label_associated_revisions: Kapcsolt revíziók @@ -527,8 +531,8 @@ label_sort_lower: Eggyel lejjebb label_sort_lowest: Az aljára label_roadmap: Életút - label_roadmap_due_in: "Elkészültéig várhatóan még {{value}}" - label_roadmap_overdue: "{{value}} késésben" + label_roadmap_due_in: "Elkészültéig várhatóan még %{value}" + label_roadmap_overdue: "%{value} késésben" label_roadmap_no_issues: Nincsenek feladatok ehhez a verzióhoz label_search: Keresés label_result_plural: Találatok @@ -546,8 +550,8 @@ label_changes_details: Változások részletei label_issue_tracking: Feladat követés label_spent_time: Ráfordított idő - label_f_hour: "{{value}} óra" - label_f_hour_plural: "{{value}} óra" + label_f_hour: "%{value} óra" + label_f_hour_plural: "%{value} óra" label_time_tracking: Idő rögzítés label_change_plural: Változások label_statistics: Statisztikák @@ -595,12 +599,12 @@ label_date_from: 'Kezdet:' label_date_to: 'Vége:' label_language_based: A felhasználó nyelve alapján - label_sort_by: "{{value}} szerint rendezve" + label_sort_by: "%{value} szerint rendezve" label_send_test_email: Teszt e-mail küldése - label_feeds_access_key_created_on: "RSS hozzáférési kulcs létrehozva ennyivel ezelőtt: {{value}}" + label_feeds_access_key_created_on: "RSS hozzáférési kulcs létrehozva ennyivel ezelőtt: %{value}" label_module_plural: Modulok - label_added_time_by: "{{author}} adta hozzá ennyivel ezelőtt: {{age}}" - label_updated_time: "Utolsó módosítás ennyivel ezelőtt: {{value}}" + label_added_time_by: "%{author} adta hozzá ennyivel ezelőtt: %{age}" + label_updated_time: "Utolsó módosítás ennyivel ezelőtt: %{value}" label_jump_to_a_project: Ugrás projekthez... label_file_plural: Fájlok label_changeset_plural: Changesets @@ -616,7 +620,7 @@ label_registration_activation_by_email: Fiók aktiválása e-mailben label_registration_manual_activation: Manuális fiók aktiválás label_registration_automatic_activation: Automatikus fiók aktiválás - label_display_per_page: "Oldalanként: {{value}}" + label_display_per_page: "Oldalanként: %{value}" label_age: Kor label_change_properties: Tulajdonságok változtatása label_general: Általános @@ -678,36 +682,36 @@ text_regexp_info: pl. ^[A-Z0-9]+$ text_min_max_length_info: 0 = nincs korlátozás text_project_destroy_confirmation: Biztosan törölni szeretné a projektet és vele együtt minden kapcsolódó adatot ? - text_subprojects_destroy_warning: "Az alprojekt(ek): {{value}} szintén törlésre kerülnek." + text_subprojects_destroy_warning: "Az alprojekt(ek): %{value} szintén törlésre kerülnek." text_workflow_edit: Válasszon egy szerepkört, és egy feladat típust a workflow szerkesztéséhez text_are_you_sure: Biztos benne ? text_tip_issue_begin_day: a feladat ezen a napon kezdődik text_tip_issue_end_day: a feladat ezen a napon ér véget text_tip_issue_begin_end_day: a feladat ezen a napon kezdődik és ér véget text_project_identifier_info: 'Kis betűk (a-z), számok és kötőjel megengedett.
    Mentés után az azonosítót megváltoztatni nem lehet.' - text_caracters_maximum: "maximum {{count}} karakter." - text_caracters_minimum: "Legkevesebb {{count}} karakter hosszúnek kell lennie." - text_length_between: "Legalább {{min}} és legfeljebb {{max}} hosszú karakter." + text_caracters_maximum: "maximum %{count} karakter." + text_caracters_minimum: "Legkevesebb %{count} karakter hosszúnek kell lennie." + text_length_between: "Legalább %{min} és legfeljebb %{max} hosszú karakter." text_tracker_no_workflow: Nincs workflow definiálva ehhez a feladat típushoz text_unallowed_characters: Tiltott karakterek text_comma_separated: Több érték megengedett (vesszővel elválasztva) text_issues_ref_in_commit_messages: Hivatkozás feladatokra, feladatok javítása a commit üzenetekben - text_issue_added: "A feladatot {{id}} bejelentette: {{author}}." - text_issue_updated: "A feladatot {{id}} módosította: {{author}}." + text_issue_added: "A feladatot %{id} bejelentette: %{author}." + text_issue_updated: "A feladatot %{id} módosította: %{author}." text_wiki_destroy_confirmation: Biztosan törölni szeretné ezt a wiki-t minden tartalmával együtt ? - text_issue_category_destroy_question: "Néhány feladat ({{count}}) hozzá van rendelve ehhez a kategóriához. Mit szeretne tenni ?" + text_issue_category_destroy_question: "Néhány feladat (%{count}) hozzá van rendelve ehhez a kategóriához. Mit szeretne tenni ?" text_issue_category_destroy_assignments: Kategória hozzárendelés megszűntetése text_issue_category_reassign_to: Feladatok újra hozzárendelése másik kategóriához text_user_mail_option: "A nem kiválasztott projektekről csak akkor kap értesítést, ha figyelést kér rá, vagy részt vesz benne (pl. Ön a létrehozó, vagy a hozzárendelő)" text_no_configuration_data: "Szerepkörök, feladat típusok, feladat státuszok, és workflow adatok még nincsenek konfigurálva.\nErősen ajánlott, az alapértelmezett konfiguráció betöltése, és utána módosíthatja azt." text_load_default_configuration: Alapértelmezett konfiguráció betöltése - text_status_changed_by_changeset: "Applied in changeset {{value}}." + text_status_changed_by_changeset: "Applied in changeset %{value}." text_issues_destroy_confirmation: 'Biztos benne, hogy törölni szeretné a kijelölt feladato(ka)t ?' text_select_project_modules: 'Válassza ki az engedélyezett modulokat ehhez a projekthez:' text_default_administrator_account_changed: Alapértelmezett adminisztrátor fiók megváltoztatva text_file_repository_writable: Fájl tároló írható text_rmagick_available: RMagick elérhető (opcionális) - text_destroy_time_entries_question: "{{hours}} órányi munka van rögzítve a feladatokon, amiket törölni szeretne. Mit szeretne tenni ?" + text_destroy_time_entries_question: "%{hours} órányi munka van rögzítve a feladatokon, amiket törölni szeretne. Mit szeretne tenni ?" text_destroy_time_entries: A rögzített órák törlése text_assign_time_entries_to_project: A rögzített órák hozzárendelése a projekthez text_reassign_time_entries: 'A rögzített órák újra hozzárendelése másik feladathoz:' @@ -737,21 +741,20 @@ enumeration_issue_priorities: Feladat prioritások enumeration_doc_categories: Dokumentum kategóriák enumeration_activities: Tevékenységek (idő rögzítés) - mail_body_reminder: "{{count}} neked kiosztott feladat határidős az elkövetkező {{days}} napban:" - mail_subject_reminder: "{{count}} feladat határidős az elkövetkező {{days}} napokban" - text_user_wrote: "{{value}} írta:" + mail_body_reminder: "%{count} neked kiosztott feladat határidős az elkövetkező %{days} napban:" + mail_subject_reminder: "%{count} feladat határidős az elkövetkező %{days} napokban" + text_user_wrote: "%{value} írta:" label_duplicated_by: duplikálta setting_enabled_scm: Forráskódkezelő (SCM) engedélyezése text_enumeration_category_reassign_to: 'Újra hozzárendelés ehhez:' - text_enumeration_destroy_question: "{{count}} objektum van hozzárendelve ehhez az értékhez." + text_enumeration_destroy_question: "%{count} objektum van hozzárendelve ehhez az értékhez." label_incoming_emails: Beérkezett levelek 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 button_quote: Hozzászólás / Idézet setting_sequential_project_identifiers: Szekvenciális projekt azonosítók generálása notice_unable_delete_version: A verziót nem lehet törölni @@ -809,12 +812,12 @@ text_repository_usernames_mapping: "Állítsd be a felhasználó összerendeléseket a Redmine, és a tároló logban található felhasználók között.\nAz azonos felhasználó nevek összerendelése automatikusan megtörténik." permission_edit_own_messages: Saját üzenetek szerkesztése permission_delete_own_messages: Saját üzenetek törlése - label_user_activity: "{{value}} tevékenységei" - label_updated_time_by: "Módosította {{author}} ennyivel ezelőtt: {{age}}" + label_user_activity: "%{value} tevékenységei" + label_updated_time_by: "Módosította %{author} ennyivel ezelőtt: %{age}" text_diff_truncated: '... A diff fájl vége nem jelenik meg, mert hosszab, mint a megjeleníthető sorok száma.' setting_diff_max_lines_displayed: A megjelenítendő sorok száma (maximum) a diff fájloknál text_plugin_assets_writable: Plugin eszközök könyvtár írható - warning_attachments_not_saved: "{{count}} fájl mentése nem sikerült." + warning_attachments_not_saved: "%{count} fájl mentése nem sikerült." button_create_and_continue: Létrehozás és folytatás text_custom_field_possible_values_info: 'Értékenként egy sor' label_display: Megjelenés @@ -829,21 +832,21 @@ label_descending: Csökkenő label_sort: Rendezés label_ascending: Növekvő - label_date_from_to: "{{start}} -tól {{end}} -ig" + label_date_from_to: "%{start} -tól %{end} -ig" label_greater_or_equal: ">=" label_less_or_equal: "<=" - text_wiki_page_destroy_question: Ennek az oldalnak {{descendants}} gyermek-, és leszármazott oldala van. Mit szeretne tenni? + text_wiki_page_destroy_question: Ennek az oldalnak %{descendants} gyermek-, és leszármazott oldala van. Mit szeretne tenni? text_wiki_page_reassign_children: Az aloldalak hozzárendelése ehhez a szülő oldalhoz text_wiki_page_nullify_children: Az aloldalak megtartása, mint főoldalak text_wiki_page_destroy_children: Minden aloldal és leszármazottjának törlése setting_password_min_length: Minimum jelszó hosszúság field_group_by: Szerint csoportosítva - mail_subject_wiki_content_updated: "'{{id}}' wiki oldal frissítve" + mail_subject_wiki_content_updated: "'%{id}' wiki oldal frissítve" label_wiki_content_added: Wiki oldal hozzáadva - mail_subject_wiki_content_added: "Új wiki oldal: '{{id}}'" - mail_body_wiki_content_added: A '{{id}}' wiki oldalt {{author}} hozta létre. + mail_subject_wiki_content_added: "Új wiki oldal: '%{id}'" + mail_body_wiki_content_added: A '%{id}' wiki oldalt %{author} hozta létre. label_wiki_content_updated: Wiki oldal frissítve - mail_body_wiki_content_updated: A '{{id}}' wiki oldalt {{author}} frissítette. + mail_body_wiki_content_updated: A '%{id}' wiki oldalt %{author} frissítette. permission_add_project: Projekt létrehozása setting_new_project_user_role_id: Projekt létrehozási jog nem adminisztrátor felhasználóknak label_view_all_revisions: Minden revízió megtekintése @@ -851,14 +854,14 @@ label_branch: Branch error_no_tracker_in_project: Nincs feladat típus hozzárendelve ehhez a projekthez. Kérem ellenőrizze a projekt beállításait. error_no_default_issue_status: Nincs alapértelmezett feladat státusz beállítva. Kérem ellenőrizze a beállításokat (Itt találja "Adminisztráció -> Feladat státuszok"). - text_journal_changed: "{{label}} változott erről: {{old}} erre: {{new}}" - text_journal_set_to: "{{label}} új értéke: {{value}}" - text_journal_deleted: "{{label}} törölve ({{old}})" + text_journal_changed: "%{label} változott erről: %{old} erre: %{new}" + text_journal_set_to: "%{label} új értéke: %{value}" + text_journal_deleted: "%{label} törölve (%{old})" label_group_plural: Csoportok label_group: Csoport label_group_new: Új csoport label_time_entry_plural: Rögzített idő - text_journal_added: "{{label}} {{value}} hozzáadva" + text_journal_added: "%{label} %{value} hozzáadva" field_active: Aktív enumeration_system_activity: Rendszer Tevékenység permission_delete_issue_watchers: Megfigyelők törlése @@ -893,9 +896,9 @@ setting_start_of_week: A hét első napja permission_view_issues: Feladatok megtekintése label_display_used_statuses_only: Csak olyan feladat státuszok megjelenítése, amit ez a feladat típus használ - label_revision_id: Revízió {{value}} + label_revision_id: Revízió %{value} label_api_access_key: API hozzáférési kulcs - label_api_access_key_created_on: API hozzáférési kulcs létrehozva {{value}} ezelőtt + label_api_access_key_created_on: API hozzáférési kulcs létrehozva %{value} ezelőtt label_feeds_access_key: RSS hozzáférési kulcs notice_api_access_key_reseted: Az API hozzáférési kulcsa újragenerálva. setting_rest_api_enabled: REST web service engedélyezése @@ -918,7 +921,7 @@ error_can_not_delete_custom_field: Nem lehet törölni az egyéni mezőt permission_manage_subtasks: Alfeladatok kezelése label_profile: Profil - error_unable_to_connect: Nem lehet csatlakozni ({{value}}) + error_unable_to_connect: Nem lehet csatlakozni (%{value}) error_can_not_remove_role: Ez a szerepkör használatban van és ezért nem törölhető- field_parent_issue: Szülő feladat error_unable_delete_issue_status: Nem lehet törölni a feladat állapotát @@ -927,27 +930,69 @@ label_project_copy_notifications: Küldjön e-mail értesítéseket projektmásolás közben. field_principal: Felelős label_my_page_block: Saját kezdőlap-blokk - notice_failed_to_save_members: "Nem sikerült menteni a tago(ka)t: {{errors}}." + notice_failed_to_save_members: "Nem sikerült menteni a tago(ka)t: %{errors}." text_zoom_out: Kicsinyít text_zoom_in: Nagyít notice_unable_delete_time_entry: Az időrögzítés nem törölhető - label_overall_spent_time: Összes rászánt idő - field_time_entries: Log time + label_overall_spent_time: Összes ráfordított idő + field_time_entries: Idő rögzítés 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. - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header + project_module_calendar: Naptár + button_edit_associated_wikipage: "Hozzárendelt Wiki oldal szerkesztése: %{page_title}" + text_are_you_sure_with_children: A feladat törlése az összes alfeladattal együtt? + field_text: Szöveg mező + label_user_mail_option_only_owner: Csak arról, aminek én vagyok a tulajdonosa + setting_default_notification_option: Alapértelmezett értesítési beállítások + label_user_mail_option_only_my_events: Csak az általam megfigyelt dolgokról vagy amiben részt veszek + label_user_mail_option_only_assigned: Csak a hozzámrendelt dolgokról + label_user_mail_option_none: Semilyen eseményről + field_member_of_group: Hozzárendelt csoport + field_assigned_to_role: Hozzárendelt szerepkör + notice_not_authorized_archived_project: A projekt, amihez hozzá szeretnél férni archiválva lett. + label_principal_search: "Felhasználó vagy csoport keresése:" + label_user_search: "Felhasználó keresése:" + field_visible: Látható + setting_emails_header: Emailek fejléce + setting_commit_logtime_activity_id: A rögzített időhöz tartozó tevékenység + text_time_logged_by_changeset: Alkalmazva a %{value} changeset-ben. + setting_commit_logtime_enabled: Időrögzítés engedélyezése + notice_gantt_chart_truncated: A diagram le lett vágva, mert elérte a maximálisan megjeleníthető elemek számát (%{max}) + setting_gantt_items_limit: A gantt diagrammon megjeleníthető maximális elemek száma + field_warn_on_leaving_unsaved: Figyelmeztessen, nem mentett módosításokat tartalmazó oldal elhagyásakor + text_warn_on_leaving_unsaved: A jelenlegi oldal nem mentett módosításokat tartalmaz, ami elvész, ha elhagyja az oldalt. + label_my_queries: Egyéni lekérdezéseim + text_journal_changed_no_detail: "%{label} módosítva" + label_news_comment_added: Megjegyzés hozzáadva a hírhez + button_expand_all: Mindet kibont + button_collapse_all: Mindet összecsuk + label_additional_workflow_transitions_for_assignee: További átmenetek engedélyezettek, ha a felhasználó a hozzárendelt + label_additional_workflow_transitions_for_author: További átmenetek engedélyezettek, ha a felhasználó a szerző + label_bulk_edit_selected_time_entries: A kiválasztott idő bejegyzések csoportos szerkesztése + text_time_entries_destroy_confirmation: Biztos benne, hogy törölni szeretné a kiválasztott idő bejegyzés(eke)t? + label_role_anonymous: Anonymous + label_role_non_member: Nem tag + label_issue_note_added: Jegyzet hozzáadva + label_issue_status_updated: Állapot módosítva + label_issue_priority_updated: Prioritás módosítva + label_issues_visibility_own: A felhasználó által létrehozott vagy hozzárendelt feladatok + field_issues_visibility: Feladatok láthatósága + label_issues_visibility_all: Minden feladat + permission_set_own_issues_private: Saját feladatok beállítása nyilvánosra vagy privátra + field_is_private: Privát + permission_set_issues_private: Feladatok beállítása nyilvánosra vagy privátra + label_issues_visibility_public: Minden nem privát feladat + text_issues_destroy_descendants_confirmation: Ezzel törölni fog %{count} alfeladatot is. + field_commit_logs_encoding: Commit üzenetek kódlapja + field_scm_path_encoding: Elérési útvonal kódlapja + text_scm_path_encoding_note: "Alapértelmezett: UTF-8" + field_path_to_repository: A repository elérési útja + field_root_directory: Gyökér könyvtár + field_cvs_module: Modul + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Helyi repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Parancs + text_scm_command_version: Verzió + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/id.yml --- a/config/locales/id.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/id.yml Mon Jul 25 14:23:37 2011 +0100 @@ -14,7 +14,10 @@ month_names: [~, Januari, Februari, Maret, April, Mei, Juni, Juli, Agustus, September, Oktober, November, Desember] abbr_month_names: [~, Jan, Feb, Mar, Apr, Mei, Jun, Jul, Agu, Sep, Okt, Nov, Des] - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -30,37 +33,37 @@ half_a_minute: "setengah menit" less_than_x_seconds: one: "kurang dari sedetik" - other: "kurang dari {{count}} detik" + other: "kurang dari %{count} detik" x_seconds: one: "sedetik" - other: "{{count}} detik" + other: "%{count} detik" less_than_x_minutes: one: "kurang dari semenit" - other: "kurang dari {{count}} menit" + other: "kurang dari %{count} menit" x_minutes: one: "semenit" - other: "{{count}} menit" + other: "%{count} menit" about_x_hours: one: "sekitar sejam" - other: "sekitar {{count}} jam" + other: "sekitar %{count} jam" x_days: one: "sehari" - other: "{{count}} hari" + other: "%{count} hari" about_x_months: one: "sekitar sebulan" - other: "sekitar {{count}} bulan" + other: "sekitar %{count} bulan" x_months: one: "sebulan" - other: "{{count}} bulan" + other: "%{count} bulan" about_x_years: one: "sekitar setahun" - other: "sekitar {{count}} tahun" + other: "sekitar %{count} tahun" over_x_years: one: "lebih dari setahun" - other: "lebih dari {{count}} tahun" + other: "lebih dari %{count} tahun" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" number: format: @@ -95,6 +98,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "tidak termasuk dalam daftar" exclusion: "sudah dicadangkan" @@ -103,17 +110,17 @@ accepted: "harus disetujui" empty: "tidak boleh kosong" blank: "tidak boleh kosong" - too_long: "terlalu panjang (maksimum {{count}} karakter)" - too_short: "terlalu pendek (minimum {{count}} karakter)" - wrong_length: "panjangnya salah (seharusnya {{count}} karakter)" + too_long: "terlalu panjang (maksimum %{count} karakter)" + too_short: "terlalu pendek (minimum %{count} karakter)" + wrong_length: "panjangnya salah (seharusnya %{count} karakter)" taken: "sudah diambil" not_a_number: "bukan angka" not_a_date: "bukan tanggal" - greater_than: "harus lebih besar dari {{count}}" - greater_than_or_equal_to: "harus lebih besar atau sama dengan {{count}}" - equal_to: "harus sama dengan {{count}}" - less_than: "harus kurang dari {{count}}" - less_than_or_equal_to: "harus kurang atau sama dengan {{count}}" + greater_than: "harus lebih besar dari %{count}" + greater_than_or_equal_to: "harus lebih besar atau sama dengan %{count}" + equal_to: "harus sama dengan %{count}" + less_than: "harus kurang dari %{count}" + less_than_or_equal_to: "harus kurang atau sama dengan %{count}" odd: "harus ganjil" even: "harus genap" greater_than_start_date: "harus lebih besar dari tanggal mulai" @@ -131,7 +138,7 @@ general_csv_separator: ',' general_csv_decimal_separator: '.' general_csv_encoding: ISO-8859-1 - general_pdf_encoding: ISO-8859-1 + general_pdf_encoding: UTF-8 general_first_day_of_week: '7' notice_account_updated: Akun sudah berhasil diperbarui. @@ -150,18 +157,18 @@ notice_file_not_found: Berkas yang anda buka tidak ada atau sudah dihapus. notice_locking_conflict: Data sudah diubah oleh pengguna lain. notice_not_authorized: Anda tidak memiliki akses ke halaman ini. - notice_email_sent: "Email sudah dikirim ke {{value}}" - notice_email_error: "Terjadi kesalahan pada saat pengiriman email ({{value}})" + notice_email_sent: "Email sudah dikirim ke %{value}" + notice_email_error: "Terjadi kesalahan pada saat pengiriman email (%{value})" notice_feeds_access_key_reseted: RSS access key anda sudah direset. - notice_failed_to_save_issues: "Gagal menyimpan {{count}} masalah dari {{total}} yang dipilih: {{ids}}." + notice_failed_to_save_issues: "Gagal menyimpan %{count} masalah dari %{total} yang dipilih: %{ids}." notice_no_issue_selected: "Tidak ada masalah yang dipilih! Silakan pilih masalah yang akan anda sunting." notice_account_pending: "Akun anda sudah dibuat dan sekarang sedang menunggu persetujuan administrator." notice_default_data_loaded: Konfigurasi default sudah berhasil dimuat. notice_unable_delete_version: Tidak bisa menghapus versi. - error_can_t_load_default_data: "Konfigurasi default tidak bisa dimuat: {{value}}" + error_can_t_load_default_data: "Konfigurasi default tidak bisa dimuat: %{value}" error_scm_not_found: "Entri atau revisi tidak terdapat pada repositori." - error_scm_command_failed: "Terjadi kesalahan pada saat mengakses repositori: {{value}}" + error_scm_command_failed: "Terjadi kesalahan pada saat mengakses repositori: %{value}" error_scm_annotate: "Entri tidak ada, atau tidak dapat di anotasi." error_issue_not_found_in_project: 'Masalah tidak ada atau tidak tergabung dalam proyek ini.' error_no_tracker_in_project: 'Tidak ada pelacak yang diasosiasikan pada proyek ini. Silakan pilih Pengaturan Proyek.' @@ -169,25 +176,25 @@ error_can_not_reopen_issue_on_closed_version: 'Masalah yang ditujukan pada versi tertutup tidak bisa dibuka kembali' error_can_not_archive_project: Proyek ini tidak bisa diarsipkan - warning_attachments_not_saved: "{{count}} berkas tidak bisa disimpan." + warning_attachments_not_saved: "%{count} berkas tidak bisa disimpan." - mail_subject_lost_password: "Kata sandi {{value}} anda" + mail_subject_lost_password: "Kata sandi %{value} anda" mail_body_lost_password: 'Untuk mengubah kata sandi anda, klik tautan berikut::' - mail_subject_register: "Aktivasi akun {{value}} anda" + mail_subject_register: "Aktivasi akun %{value} anda" mail_body_register: 'Untuk mengaktifkan akun anda, klik tautan berikut:' - mail_body_account_information_external: "Anda dapat menggunakan akun {{value}} anda untuk login." + mail_body_account_information_external: "Anda dapat menggunakan akun %{value} anda untuk login." mail_body_account_information: Informasi akun anda - mail_subject_account_activation_request: "Permintaan aktivasi akun {{value}} " - mail_body_account_activation_request: "Pengguna baru ({{value}}) sudan didaftarkan. Akun tersebut menunggu persetujuan anda:" - mail_subject_reminder: "{{count}} masalah harus selesai pada hari berikutnya ({{days}})" - mail_body_reminder: "{{count}} masalah yang ditugaskan pada anda harus selesai dalam {{days}} hari kedepan:" - mail_subject_wiki_content_added: "'{{id}}' halaman wiki sudah ditambahkan" - mail_body_wiki_content_added: "The '{{id}}' halaman wiki sudah ditambahkan oleh {{author}}." - mail_subject_wiki_content_updated: "'{{id}}' halaman wiki sudah diperbarui" - mail_body_wiki_content_updated: "The '{{id}}' halaman wiki sudah diperbarui oleh {{author}}." + mail_subject_account_activation_request: "Permintaan aktivasi akun %{value} " + mail_body_account_activation_request: "Pengguna baru (%{value}) sudan didaftarkan. Akun tersebut menunggu persetujuan anda:" + mail_subject_reminder: "%{count} masalah harus selesai pada hari berikutnya (%{days})" + mail_body_reminder: "%{count} masalah yang ditugaskan pada anda harus selesai dalam %{days} hari kedepan:" + mail_subject_wiki_content_added: "'%{id}' halaman wiki sudah ditambahkan" + mail_body_wiki_content_added: "The '%{id}' halaman wiki sudah ditambahkan oleh %{author}." + mail_subject_wiki_content_updated: "'%{id}' halaman wiki sudah diperbarui" + mail_body_wiki_content_updated: "The '%{id}' halaman wiki sudah diperbarui oleh %{author}." gui_validation_error: 1 kesalahan - gui_validation_error_plural: "{{count}} kesalahan" + gui_validation_error_plural: "%{count} kesalahan" field_name: Nama @@ -251,7 +258,8 @@ field_attr_lastname: Atribut nama belakang field_attr_mail: Atribut email field_onthefly: Pembuatan pengguna seketika - field_done_ratio: % Selesai + field_start_date: Mulai + field_done_ratio: "% Selesai" field_auth_source: Mode otentikasi field_hide_mail: Sembunyikan email saya field_comments: Komentar @@ -307,7 +315,6 @@ setting_cross_project_issue_relations: Perbolehkan kaitan masalah proyek berbeda setting_issue_list_default_columns: Kolom default ditampilkan di daftar masalah setting_repositories_encodings: Repositories encodings - setting_commit_logs_encoding: Commit messages encoding setting_emails_footer: Footer untuk email setting_protocol: Protokol setting_per_page_options: Pilihan obyek per halaman @@ -398,14 +405,14 @@ label_x_projects: zero: tidak ada proyek one: 1 proyek - other: "{{count}} proyek" + other: "%{count} proyek" label_project_all: Semua Proyek label_project_latest: Proyek terakhir label_issue: Masalah label_issue_new: Masalah baru label_issue_plural: Masalah label_issue_view_all: tampilkan semua masalah - label_issues_by: "Masalah ditambahkan oleh {{value}}" + label_issues_by: "Masalah ditambahkan oleh %{value}" label_issue_added: Masalah ditambahan label_issue_updated: Masalah diperbarui label_document: Dokumen @@ -455,7 +462,7 @@ label_registered_on: Terdaftar pada label_activity: Kegiatan label_overall_activity: Kegiatan umum - label_user_activity: "kegiatan {{value}}" + label_user_activity: "kegiatan %{value}" label_new: Baru label_logged_as: Login sebagai label_environment: Lingkungan @@ -464,7 +471,7 @@ label_auth_source_new: Mode otentikasi baru label_auth_source_plural: Mode Otentikasi label_subproject_plural: Subproyek - label_and_its_subprojects: "{{value}} dan subproyeknya" + label_and_its_subprojects: "%{value} dan subproyeknya" label_min_max_length: Panjang Min - Maks label_list: Daftar label_date: Tanggal @@ -475,8 +482,8 @@ label_text: Long text label_attribute: Atribut label_attribute_plural: Atribut - label_download: "{{count}} Unduhan" - label_download_plural: "{{count}} Unduhan" + label_download: "%{count} Unduhan" + label_download_plural: "%{count} Unduhan" label_no_data: Tidak ada data untuk ditampilkan label_change_status: Status perubahan label_history: Riwayat @@ -508,17 +515,17 @@ label_closed_issues: selesai label_closed_issues_plural: selesai label_x_open_issues_abbr_on_total: - zero: 0 belum selesai / {{total}} - one: 1 belum selesai / {{total}} - other: "{{count}} terbuka / {{total}}" + zero: 0 belum selesai / %{total} + one: 1 belum selesai / %{total} + other: "%{count} terbuka / %{total}" label_x_open_issues_abbr: zero: 0 belum selesai one: 1 belum selesai - other: "{{count}} belum selesai" + other: "%{count} belum selesai" label_x_closed_issues_abbr: zero: 0 selesai one: 1 selesai - other: "{{count}} selesai" + other: "%{count} selesai" label_total: Total label_permissions: Perijinan label_current_status: Status sekarang @@ -536,7 +543,7 @@ label_months_from: dari bulan label_gantt: Gantt label_internal: Internal - label_last_changes: "{{count}} perubahan terakhir" + label_last_changes: "%{count} perubahan terakhir" label_change_view_all: Tampilkan semua perubahan label_personalize_page: Personalkan halaman ini label_comment: Komentar @@ -544,7 +551,7 @@ label_x_comments: zero: tak ada komentar one: 1 komentar - other: "{{count}} komentar" + other: "%{count} komentar" label_comment_add: Tambahkan komentar label_comment_added: Komentar ditambahkan label_comment_delete: Hapus komentar @@ -565,7 +572,7 @@ label_yesterday: kemarin label_this_week: minggu ini label_last_week: minggu lalu - label_last_n_days: "{{count}} hari terakhir" + label_last_n_days: "%{count} hari terakhir" label_this_month: bulan ini label_last_month: bulan lalu label_this_year: this year @@ -579,8 +586,8 @@ label_repository: Repositori label_repository_plural: Repositori label_browse: Jelajah - label_modification: "{{count}} perubahan" - label_modification_plural: "{{count}} perubahan" + label_modification: "%{count} perubahan" + label_modification_plural: "%{count} perubahan" label_branch: Cabang label_tag: Tag label_revision: Revisi @@ -601,8 +608,8 @@ label_sort_lower: Ke bawah label_sort_lowest: Ke paling bawah label_roadmap: Rencana kerja - label_roadmap_due_in: "Harus selesai dalam {{value}}" - label_roadmap_overdue: "{{value}} terlambat" + label_roadmap_due_in: "Harus selesai dalam %{value}" + label_roadmap_overdue: "%{value} terlambat" label_roadmap_no_issues: Tak ada masalah pada versi ini label_search: Cari label_result_plural: Hasil @@ -620,8 +627,8 @@ label_changes_details: Rincian semua perubahan label_issue_tracking: Pelacak masalah label_spent_time: Waktu terpakai - label_f_hour: "{{value}} jam" - label_f_hour_plural: "{{value}} jam" + label_f_hour: "%{value} jam" + label_f_hour_plural: "%{value} jam" label_time_tracking: Pelacak waktu label_change_plural: Perubahan label_statistics: Statistik @@ -670,13 +677,13 @@ label_date_from: Dari label_date_to: Sampai label_language_based: Berdasarkan bahasa pengguna - label_sort_by: "Urut berdasarkan {{value}}" + label_sort_by: "Urut berdasarkan %{value}" label_send_test_email: Kirim email percobaan - label_feeds_access_key_created_on: "RSS access key dibuat {{value}} yang lalu" + label_feeds_access_key_created_on: "RSS access key dibuat %{value} yang lalu" label_module_plural: Modul - label_added_time_by: "Ditambahkan oleh {{author}} {{age}} yang lalu" - label_updated_time_by: "Diperbarui oleh {{author}} {{age}} yang lalu" - label_updated_time: "Diperbarui oleh {{value}} yang lalu" + label_added_time_by: "Ditambahkan oleh %{author} %{age} yang lalu" + label_updated_time_by: "Diperbarui oleh %{author} %{age} yang lalu" + label_updated_time: "Diperbarui oleh %{value} yang lalu" label_jump_to_a_project: Pilih proyek... label_file_plural: Berkas label_changeset_plural: Set perubahan @@ -694,7 +701,7 @@ label_registration_activation_by_email: aktivasi akun melalui email label_registration_manual_activation: aktivasi akun secara manual label_registration_automatic_activation: aktivasi akun secara otomatis - label_display_per_page: "Per halaman: {{value}}" + label_display_per_page: "Per halaman: %{value}" label_age: Umur label_change_properties: Rincian perubahan label_general: Umum @@ -717,7 +724,7 @@ label_sort: Urut label_ascending: Menaik label_descending: Menurun - label_date_from_to: Dari {{start}} sampai {{end}} + label_date_from_to: Dari %{start} sampai %{end} label_wiki_content_added: Halaman wiki ditambahkan label_wiki_content_updated: Halaman wiki diperbarui label_group: Kelompok @@ -788,52 +795,52 @@ text_regexp_info: mis. ^[A-Z0-9]+$ text_min_max_length_info: 0 berarti tidak ada pembatasan text_project_destroy_confirmation: Apakah anda benar-benar akan menghapus proyek ini beserta data terkait ? - text_subprojects_destroy_warning: "Subproyek: {{value}} juga akan dihapus." + text_subprojects_destroy_warning: "Subproyek: %{value} juga akan dihapus." text_workflow_edit: Pilih peran dan pelacak untuk menyunting alur kerja text_are_you_sure: Anda yakin ? - text_journal_changed: "{{label}} berubah dari {{old}} menjadi {{new}}" - text_journal_set_to: "{{label}} di set ke {{value}}" - text_journal_deleted: "{{label}} dihapus ({{old}})" - text_journal_added: "{{label}} {{value}} ditambahkan" + text_journal_changed: "%{label} berubah dari %{old} menjadi %{new}" + text_journal_set_to: "%{label} di set ke %{value}" + text_journal_deleted: "%{label} dihapus (%{old})" + text_journal_added: "%{label} %{value} ditambahkan" text_tip_issue_begin_day: tugas dimulai hari itu text_tip_issue_end_day: tugas berakhir hari itu text_tip_issue_begin_end_day: tugas dimulai dan berakhir hari itu text_project_identifier_info: 'Yang diijinkan hanya huruf kecil (a-z), angka dan tanda minus.
    Sekali disimpan, pengenal tidak bisa diubah.' - text_caracters_maximum: "maximum {{count}} karakter." - text_caracters_minimum: "Setidaknya harus sepanjang {{count}} karakter." - text_length_between: "Panjang diantara {{min}} dan {{max}} karakter." + text_caracters_maximum: "maximum %{count} karakter." + text_caracters_minimum: "Setidaknya harus sepanjang %{count} karakter." + text_length_between: "Panjang diantara %{min} dan %{max} karakter." text_tracker_no_workflow: Tidak ada alur kerja untuk pelacak ini text_unallowed_characters: Karakter tidak diperbolehkan text_comma_separated: Beberapa nilai diperbolehkan (dipisahkan koma). text_issues_ref_in_commit_messages: Mereferensikan dan membetulkan masalah pada pesan komit - text_issue_added: "Masalah {{id}} sudah dilaporkan oleh {{author}}." - text_issue_updated: "Masalah {{id}} sudah diperbarui oleh {{author}}." + text_issue_added: "Masalah %{id} sudah dilaporkan oleh %{author}." + text_issue_updated: "Masalah %{id} sudah diperbarui oleh %{author}." text_wiki_destroy_confirmation: Apakah anda benar-benar akan menghapus wiki ini beserta semua isinya ? - text_issue_category_destroy_question: "Beberapa masalah ({{count}}) ditugaskan pada kategori ini. Apa yang anda lakukan ?" + text_issue_category_destroy_question: "Beberapa masalah (%{count}) ditugaskan pada kategori ini. Apa yang anda lakukan ?" text_issue_category_destroy_assignments: Hapus kategori penugasan text_issue_category_reassign_to: Tugaskan kembali masalah untuk kategori ini text_user_mail_option: "Untuk proyek yang tidak dipilih, anda hanya akan menerima notifikasi hal-hal yang anda pantau atau anda terlibat di dalamnya (misalnya masalah yang anda tulis atau ditugaskan pada anda)." text_no_configuration_data: "Peran, pelacak, status masalah dan alur kerja belum dikonfigur.\nSangat disarankan untuk memuat konfigurasi default. Anda akan bisa mengubahnya setelah konfigurasi dimuat." text_load_default_configuration: Muat konfigurasi default - text_status_changed_by_changeset: "Diterapkan di set perubahan {{value}}." + text_status_changed_by_changeset: "Diterapkan di set perubahan %{value}." text_issues_destroy_confirmation: 'Apakah anda yakin untuk menghapus masalah terpilih ?' text_select_project_modules: 'Pilih modul untuk diaktifkan pada proyek ini:' text_default_administrator_account_changed: Akun administrator default sudah berubah text_file_repository_writable: Direktori yang bisa ditulisi untuk lampiran text_plugin_assets_writable: Direktori yang bisa ditulisi untuk plugin asset text_rmagick_available: RMagick tersedia (optional) - text_destroy_time_entries_question: "{{hours}} jam sudah dilaporkan pada masalah yang akan anda hapus. Apa yang akan anda lakukan ?" + text_destroy_time_entries_question: "%{hours} jam sudah dilaporkan pada masalah yang akan anda hapus. Apa yang akan anda lakukan ?" text_destroy_time_entries: Hapus jam yang terlapor text_assign_time_entries_to_project: Tugaskan jam terlapor pada proyek text_reassign_time_entries: 'Tugaskan kembali jam terlapor pada masalah ini:' - text_user_wrote: "{{value}} menulis:" - text_enumeration_destroy_question: "{{count}} obyek ditugaskan untuk nilai ini." + 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' - text_wiki_page_destroy_question: "Halaman ini mempunyai {{descendants}} halaman anak dan turunannya. Apa yang akan anda lakukan ?" + text_wiki_page_destroy_question: "Halaman ini mempunyai %{descendants} halaman anak dan turunannya. Apa yang akan anda lakukan ?" text_wiki_page_nullify_children: "Biarkan halaman anak sebagai halaman teratas (root)" text_wiki_page_destroy_children: "Hapus halaman anak dan semua turunannya" text_wiki_page_reassign_children: "Tujukan halaman anak ke halaman induk yang ini" @@ -869,13 +876,13 @@ setting_issue_done_ratio: Calculate the issue done ratio with label_api_access_key: API access key text_line_separated: Multiple values allowed (one line for each value). - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} permission_view_issues: View Issues setting_issue_done_ratio_issue_status: Use the issue status error_issue_done_ratios_not_updated: Issue done ratios not updated. label_display_used_statuses_only: Only display statuses that are used by this tracker error_workflow_copy_target: Please select target tracker(s) and role(s) - label_api_access_key_created_on: API access key created {{value}} ago + label_api_access_key_created_on: API access key created %{value} ago label_feeds_access_key: RSS access key notice_api_access_key_reseted: Your API access key was reset. setting_rest_api_enabled: Enable REST web service @@ -907,12 +914,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -920,7 +927,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -931,8 +938,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Commit messages encoding + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/it.yml --- a/config/locales/it.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/it.yml Mon Jul 25 14:23:37 2011 +0100 @@ -1,6 +1,7 @@ # Italian translations for Ruby on Rails # by Claudio Poli (masterkain@gmail.com) # by Diego Pierotto (ita.translations@tiscali.it) +# by Emidio Stani (emidiostani@gmail.com) it: direction: ltr @@ -15,7 +16,10 @@ abbr_day_names: [Dom, Lun, Mar, Mer, Gio, Ven, Sab] month_names: [~, Gennaio, Febbraio, Marzo, Aprile, Maggio, Giugno, Luglio, Agosto, Settembre, Ottobre, Novembre, Dicembre] abbr_month_names: [~, Gen, Feb, Mar, Apr, Mag, Giu, Lug, Ago, Set, Ott, Nov, Dic] - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -37,37 +41,37 @@ half_a_minute: "mezzo minuto" less_than_x_seconds: one: "meno di un secondo" - other: "meno di {{count}} secondi" + other: "meno di %{count} secondi" x_seconds: one: "1 secondo" - other: "{{count}} secondi" + other: "%{count} secondi" less_than_x_minutes: one: "meno di un minuto" - other: "meno di {{count}} minuti" + other: "meno di %{count} minuti" x_minutes: one: "1 minuto" - other: "{{count}} minuti" + other: "%{count} minuti" about_x_hours: one: "circa un'ora" - other: "circa {{count}} ore" + other: "circa %{count} ore" x_days: one: "1 giorno" - other: "{{count}} giorni" + other: "%{count} giorni" about_x_months: one: "circa un mese" - other: "circa {{count}} mesi" + other: "circa %{count} mesi" x_months: one: "1 mese" - other: "{{count}} mesi" + other: "%{count} mesi" about_x_years: one: "circa un anno" - other: "circa {{count}} anni" + other: "circa %{count} anni" over_x_years: one: "oltre un anno" - other: "oltre {{count}} anni" + other: "oltre %{count} anni" almost_x_years: one: "quasi 1 anno" - other: "quasi {{count}} anni" + other: "quasi %{count} anni" number: format: @@ -100,8 +104,8 @@ errors: template: header: - one: "Non posso salvare questo {{model}}: 1 errore" - other: "Non posso salvare questo {{model}}: {{count}} errori." + one: "Non posso salvare questo %{model}: 1 errore" + other: "Non posso salvare questo %{model}: %{count} errori." body: "Per favore ricontrolla i seguenti campi:" messages: inclusion: "non è incluso nella lista" @@ -111,22 +115,22 @@ accepted: "deve essere accettata" empty: "non può essere vuoto" blank: "non può essere lasciato in bianco" - too_long: "è troppo lungo (il massimo è {{count}} lettere)" - too_short: "è troppo corto (il minimo è {{count}} lettere)" - wrong_length: "è della lunghezza sbagliata (deve essere di {{count}} lettere)" + too_long: "è troppo lungo (il massimo è %{count} lettere)" + too_short: "è troppo corto (il minimo è %{count} lettere)" + wrong_length: "è della lunghezza sbagliata (deve essere di %{count} lettere)" taken: "è già in uso" not_a_number: "non è un numero" - greater_than: "deve essere superiore a {{count}}" - greater_than_or_equal_to: "deve essere superiore o uguale a {{count}}" - equal_to: "deve essere uguale a {{count}}" - less_than: "deve essere meno di {{count}}" - less_than_or_equal_to: "deve essere meno o uguale a {{count}}" + greater_than: "deve essere superiore a %{count}" + greater_than_or_equal_to: "deve essere superiore o uguale a %{count}" + equal_to: "deve essere uguale a %{count}" + less_than: "deve essere meno di %{count}" + less_than_or_equal_to: "deve essere meno o uguale a %{count}" odd: "deve essere dispari" even: "deve essere pari" greater_than_start_date: "deve essere maggiore della data di partenza" not_same_project: "non appartiene allo stesso progetto" circular_dependency: "Questa relazione creerebbe una dipendenza circolare" - 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: "Una segnalazione non può essere collegata a una delle sue discendenti" actionview_instancetag_blank_option: Scegli @@ -135,17 +139,17 @@ general_text_no: 'no' general_text_yes: 'sì' general_lang_name: 'Italiano' - general_csv_separator: ',' - general_csv_decimal_separator: '.' + general_csv_separator: ';' + general_csv_decimal_separator: ',' general_csv_encoding: ISO-8859-1 - general_pdf_encoding: ISO-8859-1 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' - notice_account_updated: L'utente è stata aggiornato. + notice_account_updated: L'utente è stato aggiornato. notice_account_invalid_creditentials: Nome utente o password non validi. notice_account_password_updated: La password è stata aggiornata. notice_account_wrong_password: Password errata - notice_account_register_done: L'utente è stata creato. + notice_account_register_done: L'utente è stato creato. notice_account_unknown_email: Utente sconosciuto. notice_can_t_change_password: Questo utente utilizza un metodo di autenticazione esterno. Impossibile cambiare la password. notice_account_lost_email_sent: Ti è stata spedita una email con le istruzioni per cambiare la password. @@ -157,20 +161,20 @@ notice_file_not_found: La pagina desiderata non esiste o è stata rimossa. notice_locking_conflict: Le informazioni sono state modificate da un altro utente. notice_not_authorized: Non sei autorizzato ad accedere a questa pagina. - notice_email_sent: "Una email è stata spedita a {{value}}" - notice_email_error: "Si è verificato un errore durante l'invio di una email ({{value}})" + notice_email_sent: "Una email è stata spedita a %{value}" + notice_email_error: "Si è verificato un errore durante l'invio di una email (%{value})" notice_feeds_access_key_reseted: La tua chiave di accesso RSS è stata reimpostata. error_scm_not_found: "La risorsa e/o la versione non esistono nel repository." - error_scm_command_failed: "Si è verificato un errore durante l'accesso al repository: {{value}}" + error_scm_command_failed: "Si è verificato un errore durante l'accesso al repository: %{value}" - mail_subject_lost_password: "Password {{value}}" + mail_subject_lost_password: "Password %{value}" mail_body_lost_password: 'Per cambiare la password, usa il seguente collegamento:' - mail_subject_register: "Attivazione utente {{value}}" + mail_subject_register: "Attivazione utente %{value}" mail_body_register: "Per attivare l'utente, usa il seguente collegamento:" gui_validation_error: 1 errore - gui_validation_error_plural: "{{count}} errori" + gui_validation_error_plural: "%{count} errori" field_name: Nome field_description: Descrizione @@ -232,7 +236,8 @@ field_attr_lastname: Attributo cognome field_attr_mail: Attributo email field_onthefly: Creazione utente "al volo" - field_done_ratio: % completato + field_start_date: Inizio + field_done_ratio: "% completato" field_auth_source: Modalità di autenticazione field_hide_mail: Nascondi il mio indirizzo email field_comments: Commento @@ -281,7 +286,7 @@ label_x_projects: zero: nessun progetto one: 1 progetto - other: "{{count}} progetti" + other: "%{count} progetti" label_project_all: Tutti i progetti label_project_latest: Ultimi progetti registrati label_issue: Segnalazione @@ -349,8 +354,8 @@ label_text: Testo esteso label_attribute: Attributo label_attribute_plural: Attributi - label_download: "{{count}} Download" - label_download_plural: "{{count}} Download" + label_download: "%{count} Download" + label_download_plural: "%{count} Download" label_no_data: Nessun dato disponibile label_change_status: Cambia stato label_history: Cronologia @@ -379,17 +384,17 @@ label_closed_issues: chiusa label_closed_issues_plural: chiuse label_x_open_issues_abbr_on_total: - zero: 0 aperte / {{total}} - one: 1 aperta / {{total}} - other: "{{count}} aperte / {{total}}" + zero: 0 aperte / %{total} + one: 1 aperta / %{total} + other: "%{count} aperte / %{total}" label_x_open_issues_abbr: zero: 0 aperte one: 1 aperta - other: "{{count}} aperte" + other: "%{count} aperte" label_x_closed_issues_abbr: zero: 0 chiuse one: 1 chiusa - other: "{{count}} chiuse" + other: "%{count} chiuse" label_total: Totale label_permissions: Permessi label_current_status: Stato attuale @@ -406,7 +411,7 @@ label_months_from: mesi da label_gantt: Gantt label_internal: Interno - label_last_changes: "ultime {{count}} modifiche" + label_last_changes: "ultime %{count} modifiche" label_change_view_all: Tutte le modifiche label_personalize_page: Personalizza la pagina label_comment: Commento @@ -414,7 +419,7 @@ label_x_comments: zero: nessun commento one: 1 commento - other: "{{count}} commenti" + other: "%{count} commenti" label_comment_add: Aggiungi un commento label_comment_added: Commento aggiunto label_comment_delete: Elimina commenti @@ -438,8 +443,8 @@ label_day_plural: giorni label_repository: Repository label_browse: Sfoglia - label_modification: "{{count}} modifica" - label_modification_plural: "{{count}} modifiche" + label_modification: "%{count} modifica" + label_modification_plural: "%{count} modifiche" label_revision: Versione label_revision_plural: Versioni label_added: aggiunto @@ -454,15 +459,15 @@ label_sort_lower: Giù label_sort_lowest: Sposta in fondo label_roadmap: Roadmap - label_roadmap_due_in: "Da ultimare in {{value}}" - label_roadmap_overdue: "{{value}} di ritardo" + label_roadmap_due_in: "Da ultimare in %{value}" + label_roadmap_overdue: "%{value} di ritardo" label_roadmap_no_issues: Nessuna segnalazione per questa versione label_search: Ricerca label_result_plural: Risultati label_all_words: Tutte le parole label_wiki: Wiki label_wiki_edit: Modifica wiki - label_wiki_edit_plural: Modfiche wiki + label_wiki_edit_plural: Modifiche wiki label_wiki_page: Pagina Wiki label_wiki_page_plural: Pagine wiki label_index_by_title: Ordina per titolo @@ -473,8 +478,8 @@ label_changes_details: Particolari di tutti i cambiamenti label_issue_tracking: Tracking delle segnalazioni label_spent_time: Tempo impiegato - label_f_hour: "{{value}} ora" - label_f_hour_plural: "{{value}} ore" + label_f_hour: "%{value} ora" + label_f_hour_plural: "%{value} ore" label_time_tracking: Tracking del tempo label_change_plural: Modifiche label_statistics: Statistiche @@ -521,12 +526,12 @@ label_date_from: Da label_date_to: A label_language_based: Basato sul linguaggio - label_sort_by: "Ordina per {{value}}" + label_sort_by: "Ordina per %{value}" label_send_test_email: Invia una email di prova - label_feeds_access_key_created_on: "chiave di accesso RSS creata {{value}} fa" + label_feeds_access_key_created_on: "chiave di accesso RSS creata %{value} fa" label_module_plural: Moduli - label_added_time_by: "Aggiunto da {{author}} {{age}} fa" - label_updated_time: "Aggiornato {{value}} fa" + label_added_time_by: "Aggiunto da %{author} %{age} fa" + label_updated_time: "Aggiornato %{value} fa" label_jump_to_a_project: Vai al progetto... button_login: Entra @@ -576,16 +581,16 @@ text_tip_issue_end_day: attività che terminano in questa giornata text_tip_issue_begin_end_day: attività che iniziano e terminano in questa giornata text_project_identifier_info: "Lettere minuscole (a-z), numeri e trattini permessi.
    Una volta salvato, l'identificativo non può essere modificato." - text_caracters_maximum: "massimo {{count}} caratteri." - text_length_between: "Lunghezza compresa tra {{min}} e {{max}} caratteri." + text_caracters_maximum: "massimo %{count} caratteri." + text_length_between: "Lunghezza compresa tra %{min} e %{max} caratteri." text_tracker_no_workflow: Nessun workflow definito per questo tracker text_unallowed_characters: Caratteri non permessi text_comma_separated: Valori multipli permessi (separati da virgole). text_issues_ref_in_commit_messages: Segnalazioni di riferimento e chiusura nei messaggi di commit - text_issue_added: "E' stata segnalata l'anomalia {{id}} da {{author}}." - text_issue_updated: "L'anomalia {{id}} è stata aggiornata da {{author}}." + text_issue_added: "E' stata segnalata l'anomalia %{id} da %{author}." + text_issue_updated: "L'anomalia %{id} è stata aggiornata da %{author}." text_wiki_destroy_confirmation: Sicuro di voler eliminare questo wiki e tutti i suoi contenuti? - text_issue_category_destroy_question: "Alcune segnalazioni ({{count}}) risultano assegnate a questa categoria. Cosa vuoi fare ?" + text_issue_category_destroy_question: "Alcune segnalazioni (%{count}) risultano assegnate a questa categoria. Cosa vuoi fare ?" text_issue_category_destroy_assignments: Rimuovi le assegnazioni a questa categoria text_issue_category_reassign_to: Riassegna segnalazioni a questa categoria @@ -623,7 +628,7 @@ notice_no_issue_selected: "Nessuna segnalazione selezionata! Seleziona le segnalazioni che intendi modificare." label_bulk_edit_selected_issues: Modifica massiva delle segnalazioni selezionate label_no_change_option: (Nessuna modifica) - notice_failed_to_save_issues: "Impossibile salvare {{count}} segnalazioni su {{total}} selezionate: {{ids}}." + notice_failed_to_save_issues: "Impossibile salvare %{count} segnalazioni su %{total} selezionate: %{ids}." label_theme: Tema label_default: Predefinito label_search_titles_only: Cerca solo nei titoli @@ -635,37 +640,37 @@ setting_emails_footer: Piè di pagina email label_float: Decimale button_copy: Copia - mail_body_account_information_external: "Puoi utilizzare il tuo account {{value}} per accedere al sistema." + mail_body_account_information_external: "Puoi utilizzare il tuo account %{value} per accedere al sistema." mail_body_account_information: Le informazioni riguardanti il tuo account setting_protocol: Protocollo label_user_mail_no_self_notified: "Non voglio notifiche riguardanti modifiche da me apportate" setting_time_format: Formato ora label_registration_activation_by_email: attivazione account via email - mail_subject_account_activation_request: "{{value}} richiesta attivazione account" - mail_body_account_activation_request: "Un nuovo utente ({{value}}) ha effettuato la registrazione. Il suo account è in attesa di abilitazione da parte tua:" + mail_subject_account_activation_request: "%{value} richiesta attivazione account" + mail_body_account_activation_request: "Un nuovo utente (%{value}) ha effettuato la registrazione. Il suo account è in attesa di abilitazione da parte tua:" label_registration_automatic_activation: attivazione account automatica label_registration_manual_activation: attivazione account manuale notice_account_pending: "Il tuo account è stato creato ed è in attesa di attivazione da parte dell'amministratore." field_time_zone: Fuso orario - text_caracters_minimum: "Deve essere lungo almeno {{count}} caratteri." + text_caracters_minimum: "Deve essere lungo almeno %{count} caratteri." setting_bcc_recipients: Destinatari in copia nascosta (bcc) button_annotate: Annota - label_issues_by: "Segnalazioni di {{value}}" + label_issues_by: "Segnalazioni di %{value}" field_searchable: Ricercabile - label_display_per_page: "Per pagina: {{value}}" + label_display_per_page: "Per pagina: %{value}" setting_per_page_options: Opzioni oggetti per pagina label_age: Età notice_default_data_loaded: Configurazione predefinita caricata con successo. text_load_default_configuration: Carica la configurazione predefinita text_no_configuration_data: "Ruoli, tracker, stati delle segnalazioni e workflow non sono stati ancora configurati.\nE' vivamente consigliato caricare la configurazione predefinita. Potrai modificarla una volta caricata." - error_can_t_load_default_data: "Non è stato possibile caricare la configurazione predefinita : {{value}}" + error_can_t_load_default_data: "Non è stato possibile caricare la configurazione predefinita : %{value}" button_update: Aggiorna label_change_properties: Modifica le proprietà label_general: Generale label_repository_plural: Repository label_associated_revisions: Revisioni associate setting_user_format: Formato visualizzazione utenti - text_status_changed_by_changeset: "Applicata nel changeset {{value}}." + text_status_changed_by_changeset: "Applicata nel changeset %{value}." label_more: Altro text_issues_destroy_confirmation: 'Sei sicuro di voler eliminare le segnalazioni selezionate?' label_scm: SCM @@ -692,7 +697,7 @@ label_ldap_authentication: Autenticazione LDAP label_downloads_abbr: D/L label_this_month: questo mese - label_last_n_days: "ultimi {{count}} giorni" + label_last_n_days: "ultimi %{count} giorni" label_all_time: sempre label_this_year: quest'anno label_date_range: Intervallo di date @@ -701,7 +706,7 @@ label_last_month: ultimo mese label_add_another_file: Aggiungi un altro file label_optional_description: Descrizione opzionale - text_destroy_time_entries_question: "{{hours}} ore risultano spese sulle segnalazioni che stai per eliminare. Cosa vuoi fare ?" + text_destroy_time_entries_question: "%{hours} ore risultano spese sulle segnalazioni che stai per eliminare. Cosa vuoi fare ?" error_issue_not_found_in_project: 'La segnalazione non è stata trovata o non appartiene al progetto' text_assign_time_entries_to_project: Assegna le ore segnalate al progetto text_destroy_time_entries: Elimina le ore segnalate @@ -716,23 +721,22 @@ setting_default_projects_public: I nuovi progetti sono pubblici in modo predefinito error_scm_annotate: "L'oggetto non esiste o non può essere annotato." label_planning: Pianificazione - text_subprojects_destroy_warning: "Anche i suoi sottoprogetti: {{value}} verranno eliminati." - label_and_its_subprojects: "{{value}} ed i suoi sottoprogetti" - mail_body_reminder: "{{count}} segnalazioni che ti sono state assegnate scadranno nei prossimi {{days}} giorni:" - mail_subject_reminder: "{{count}} segnalazioni in scadenza nei prossimi {{days}} giorni" - text_user_wrote: "{{value}} ha scritto:" + text_subprojects_destroy_warning: "Anche i suoi sottoprogetti: %{value} verranno eliminati." + label_and_its_subprojects: "%{value} ed i suoi sottoprogetti" + mail_body_reminder: "%{count} segnalazioni che ti sono state assegnate scadranno nei prossimi %{days} giorni:" + mail_subject_reminder: "%{count} segnalazioni in scadenza nei prossimi %{days} giorni" + text_user_wrote: "%{value} ha scritto:" label_duplicated_by: duplicato da setting_enabled_scm: SCM abilitato text_enumeration_category_reassign_to: 'Riassegnale a questo valore:' - text_enumeration_destroy_question: "{{count}} oggetti hanno un assegnamento su questo valore." + text_enumeration_destroy_question: "%{count} oggetti hanno un assegnamento su questo valore." label_incoming_emails: Email in arrivo 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 button_quote: Quota setting_sequential_project_identifiers: Genera progetti con identificativi in sequenza notice_unable_delete_version: Impossibile eliminare la versione @@ -790,12 +794,12 @@ text_repository_usernames_mapping: "Seleziona per aggiornare la corrispondenza tra gli utenti Redmine e quelli presenti nel log del repository.\nGli utenti Redmine e repository con lo stesso note utente o email sono mappati automaticamente." permission_edit_own_messages: Modifica propri messaggi permission_delete_own_messages: Elimina propri messaggi - label_user_activity: "attività di {{value}}" - label_updated_time_by: "Aggiornato da {{author}} {{age}} fa" + label_user_activity: "attività di %{value}" + label_updated_time_by: "Aggiornato da %{author} %{age} fa" text_diff_truncated: '... Le differenze sono state troncate perchè superano il limite massimo visualizzabile.' setting_diff_max_lines_displayed: Limite massimo di differenze (linee) mostrate text_plugin_assets_writable: Directory attività dei plugins scrivibile - warning_attachments_not_saved: "{{count}} file non possono essere salvati." + warning_attachments_not_saved: "%{count} file non possono essere salvati." button_create_and_continue: Crea e continua text_custom_field_possible_values_info: 'Un valore per ogni riga' label_display: Mostra @@ -810,21 +814,21 @@ label_descending: Discendente label_sort: Ordina label_ascending: Ascendente - label_date_from_to: Da {{start}} a {{end}} + label_date_from_to: Da %{start} a %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: Questa pagina ha {{descendants}} pagine figlie. Cosa ne vuoi fare? + text_wiki_page_destroy_question: Questa pagina ha %{descendants} pagine figlie. Cosa ne vuoi fare? text_wiki_page_reassign_children: Riassegna le pagine figlie al padre di questa pagina text_wiki_page_nullify_children: Mantieni le pagine figlie come pagine radice text_wiki_page_destroy_children: Elimina le pagine figlie e tutta la discendenza setting_password_min_length: Lunghezza minima password field_group_by: Raggruppa risultati per - mail_subject_wiki_content_updated: "La pagina wiki '{{id}}' è stata aggiornata" + mail_subject_wiki_content_updated: "La pagina wiki '%{id}' è stata aggiornata" label_wiki_content_added: Aggiunta pagina al wiki - mail_subject_wiki_content_added: "La pagina '{{id}}' è stata aggiunta al wiki" - mail_body_wiki_content_added: La pagina '{{id}}' è stata aggiunta al wiki da {{author}}. + mail_subject_wiki_content_added: "La pagina '%{id}' è stata aggiunta al wiki" + mail_body_wiki_content_added: La pagina '%{id}' è stata aggiunta al wiki da %{author}. label_wiki_content_updated: Aggiornata pagina wiki - mail_body_wiki_content_updated: La pagina '{{id}}' wiki è stata aggiornata da{{author}}. + mail_body_wiki_content_updated: La pagina '%{id}' wiki è stata aggiornata da%{author}. permission_add_project: Crea progetto setting_new_project_user_role_id: Ruolo assegnato agli utenti non amministratori che creano un progetto label_view_all_revisions: Mostra tutte le revisioni @@ -832,14 +836,14 @@ label_branch: Branch error_no_tracker_in_project: Nessun tracker è associato a questo progetto. Per favore verifica le impostazioni del Progetto. error_no_default_issue_status: Nessuno stato predefinito delle segnalazioni è configurato. Per favore verifica le impostazioni (Vai in "Amministrazione -> Stati segnalazioni"). - text_journal_changed: "{{label}} modificata da {{old}} a {{new}}" - text_journal_set_to: "{{label}} impostata a {{value}}" - text_journal_deleted: "{{label}} eliminata ({{old}})" + text_journal_changed: "%{label} modificata da %{old} a %{new}" + text_journal_set_to: "%{label} impostata a %{value}" + text_journal_deleted: "%{label} eliminata (%{old})" label_group_plural: Gruppi label_group: Gruppo label_group_new: Nuovo gruppo label_time_entry_plural: Tempo impiegato - text_journal_added: "{{value}} {{label}} aggiunto" + text_journal_added: "%{value} %{label} aggiunto" field_active: Attivo enumeration_system_activity: Attività di sistema permission_delete_issue_watchers: Elimina osservatori @@ -874,9 +878,9 @@ setting_start_of_week: Avvia calendari il permission_view_issues: Mostra segnalazioni label_display_used_statuses_only: Mostra solo stati che vengono usati per questo tracker - label_revision_id: Revisione {{value}} + label_revision_id: Revisione %{value} label_api_access_key: Chiave di accesso API - label_api_access_key_created_on: Chiave di accesso API creata {{value}} fa + label_api_access_key_created_on: Chiave di accesso API creata %{value} fa label_feeds_access_key: Chiave di accesso RSS notice_api_access_key_reseted: La chiave di accesso API è stata reimpostata. setting_rest_api_enabled: Abilita il servizio web REST @@ -903,32 +907,74 @@ label_subtask_plural: Sottoattività label_project_copy_notifications: Invia notifiche email durante la copia del progetto error_can_not_delete_custom_field: Impossibile eliminare il campo personalizzato - error_unable_to_connect: Impossibile connettersi ({{value}}) + error_unable_to_connect: Impossibile connettersi (%{value}) error_can_not_remove_role: Questo ruolo è in uso e non può essere eliminato. error_can_not_delete_tracker: Questo tracker contiene segnalazioni e non può essere eliminato. field_principal: Principale label_my_page_block: La mia pagina di blocco - notice_failed_to_save_members: "Impossibile salvare il membro(i): {{errors}}." + notice_failed_to_save_members: "Impossibile salvare il membro(i): %{errors}." text_zoom_out: Riduci ingrandimento text_zoom_in: Aumenta ingrandimento notice_unable_delete_time_entry: Impossibile eliminare il valore time log. label_overall_spent_time: Totale tempo impiegato - field_time_entries: Log time + field_time_entries: Tempo di collegamento 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. - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header + project_module_calendar: Calendario + button_edit_associated_wikipage: "Modifica la pagina wiki associata: %{page_title}" + text_are_you_sure_with_children: Eliminare la segnalazione e tutte le discendenti? + field_text: Campo di testo + label_user_mail_option_only_owner: Solo se io sono il proprietario + setting_default_notification_option: Opzione di notifica predefinita + label_user_mail_option_only_my_events: Solo se sono un osservatore o sono coinvolto + label_user_mail_option_only_assigned: Solo quando mi assegnano attività + label_user_mail_option_none: Nessun evento + field_member_of_group: Gruppo dell'assegnatario + field_assigned_to_role: Ruolo dell'assegnatario + notice_not_authorized_archived_project: Il progetto a cui stai accedendo è stato archiviato. + label_principal_search: "Cerca utente o gruppo:" + label_user_search: "Cerca utente:" + field_visible: Visibile + setting_emails_header: Intestazione email + setting_commit_logtime_activity_id: Attività per il tempo di collegamento + text_time_logged_by_changeset: Usato nel changeset %{value}. + 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Codifica dei messaggi di commit + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/ja.yml --- a/config/locales/ja.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/ja.yml Mon Jul 25 14:23:37 2011 +0100 @@ -1,4 +1,4 @@ -# Japanese translations for Ruby on Rails +# Japanese translations for Ruby on Rails # by Akira Matsuda (ronnie@dio.jp) # AR error messages are basically taken from Ruby-GetText-Package. Thanks to Masao Mutoh. @@ -12,15 +12,18 @@ default: "%Y/%m/%d" short: "%m/%d" long: "%Y年%m月%d日(%a)" - + day_names: [日曜日, 月曜日, 火曜日, 水曜日, 木曜日, 金曜日, 土曜日] abbr_day_names: [日, 月, 火, 水, 木, 金, 土] - + # Don't forget the nil at the beginning; there's no such thing as a 0th month month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月] abbr_month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月] # Used in date_select and datime_select. - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -30,43 +33,43 @@ long: "%Y年%m月%d日(%a) %H時%M分%S秒 %Z" am: "午前" pm: "午後" - + datetime: distance_in_words: half_a_minute: "30秒前後" less_than_x_seconds: one: "1秒以内" - other: "{{count}}秒以内" + other: "%{count}秒以内" x_seconds: one: "1秒" - other: "{{count}}秒" + other: "%{count}秒" less_than_x_minutes: one: "1分以内" - other: "{{count}}分以内" + other: "%{count}分以内" x_minutes: one: "1分" - other: "{{count}}分" + other: "%{count}分" about_x_hours: one: "約1時間" - other: "約{{count}}時間" + other: "約%{count}時間" x_days: one: "1日" - other: "{{count}}日" + other: "%{count}日" about_x_months: one: "約1ヶ月" - other: "約{{count}}ヶ月" + other: "約%{count}ヶ月" x_months: one: "1ヶ月" - other: "{{count}}ヶ月" + other: "%{count}ヶ月" about_x_years: one: "約1年" - other: "約{{count}}年" + other: "約%{count}年" over_x_years: one: "1年以上" - other: "{{count}}年以上" + other: "%{count}年以上" almost_x_years: one: "ほぼ1年" - other: "ほぼ{{count}}年" + other: "ほぼ%{count}年" number: format: @@ -105,19 +108,18 @@ gb: "GB" tb: "TB" - # Used in array.to_sentence. support: array: sentence_connector: "及び" skip_last_comma: true - + activerecord: errors: template: header: - one: "{{model}} にエラーが発生しました。" - other: "{{model}} に {{count}} つのエラーが発生しました。" + one: "%{model} にエラーが発生しました。" + other: "%{model} に %{count} つのエラーが発生しました。" body: "次の項目を確認してください。" messages: @@ -128,17 +130,17 @@ accepted: "を受諾してください。" empty: "を入力してください。" blank: "を入力してください。" - too_long: "は{{count}}文字以内で入力してください。" - too_short: "は{{count}}文字以上で入力してください。" - wrong_length: "は{{count}}文字で入力してください。" + 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}}以下の値にしてください。" + 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: "を開始日より後にしてください" @@ -147,7 +149,7 @@ cant_link_an_issue_with_a_descendant: "指定したチケットとは親子関係になっているため関連づけられません" actionview_instancetag_blank_option: 選んでください - + general_text_No: 'いいえ' general_text_Yes: 'はい' general_text_no: 'いいえ' @@ -156,9 +158,17 @@ general_csv_separator: ',' general_csv_decimal_separator: '.' general_csv_encoding: CP932 + ## Redmine 1.2.0 現在、この値によって、pdfの出力のフォントを切り替えています。 + ## CRuby では CP932 にしてください。 + ## JRuby 1.6.2 (ruby-1.8.7-p330) では、CP932 ですと + ## Iconv::InvalidEncoding例外が発生します。 + ## JRuby では、SJIS か Shift_JIS にしてください。 + ## ご存知の通り、CP932 と SJIS は別物ですが、 + ## そこまでの検証はしていません。 + # general_pdf_encoding: SJIS general_pdf_encoding: CP932 general_first_day_of_week: '7' - + notice_account_updated: アカウントが更新されました。 notice_account_invalid_creditentials: ユーザ名もしくはパスワードが無効 notice_account_password_updated: パスワードが更新されました。 @@ -176,29 +186,30 @@ notice_locking_conflict: 別のユーザがデータを更新しています。 notice_not_authorized: このページにアクセスするには認証が必要です。 notice_not_authorized_archived_project: プロジェクトは書庫に保存されています。 - notice_email_sent: "{{value}} 宛にメールを送信しました。" - notice_email_error: "メール送信中にエラーが発生しました ({{value}})" + 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: "{{total}}件のうち{{count}}件のチケットが保存できませんでした: {{ids}}." - notice_failed_to_save_members: "メンバーの保存に失敗しました: {{errors}}." + notice_failed_to_save_issues: "%{total}件のうち%{count}件のチケットが保存できませんでした: %{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: チケットの進捗が更新されました。 - - error_can_t_load_default_data: "デフォルト設定がロードできませんでした: {{value}}" + notice_gantt_chart_truncated: ガントチャートは、最大表示項目数(%{max})を超えたたため切り捨てられました。 + + error_can_t_load_default_data: "デフォルト設定がロードできませんでした: %{value}" error_scm_not_found: リポジトリに、エントリ/リビジョンが存在しません。 - error_scm_command_failed: "リポジトリへアクセスしようとしてエラーになりました: {{value}}" + error_scm_command_failed: "リポジトリへアクセスしようとしてエラーになりました: %{value}" error_scm_annotate: "エントリが存在しない、もしくはアノテートできません。" error_issue_not_found_in_project: 'チケットが見つかりません、もしくはこのプロジェクトに属していません' error_unable_delete_issue_status: "チケットのステータスを削除できませんでした。" error_no_tracker_in_project: 'このプロジェクトにはトラッカーが登録されていません。プロジェクト設定を確認してください。' error_no_default_issue_status: 'デフォルトのチケットステータスが定義されていません。設定を確認してください(管理→チケットのステータス)。' error_can_not_delete_custom_field: 'カスタムフィールドを削除できません。' - error_unable_to_connect: "接続できません。 ({{value}})" + error_unable_to_connect: "接続できません。 (%{value})" error_can_not_remove_role: 'このロールは使用されています。削除できません。' error_can_not_reopen_issue_on_closed_version: '終了したバージョンにひも付けされたチケットの再オープンはできません。' error_can_not_archive_project: このプロジェクトは書庫に保存できません @@ -206,27 +217,27 @@ error_workflow_copy_source: 'コピー元となるトラッカーまたはロールを選択してください' error_workflow_copy_target: 'コピー先となるトラッカーとロールを選択してください' error_can_not_delete_tracker: 'このトラッカーは使用されています。削除できません。' - - warning_attachments_not_saved: "{{count}}個の添付ファイルが保存できませんでした。" - - mail_subject_lost_password: "{{value}} パスワード再発行" + + warning_attachments_not_saved: "%{count}個の添付ファイルが保存できませんでした。" + + mail_subject_lost_password: "%{value} パスワード再発行" mail_body_lost_password: 'パスワードを変更するには、以下のリンクをクリックしてください:' - mail_subject_register: "{{value}} アカウント登録の確認" + mail_subject_register: "%{value} アカウント登録の確認" mail_body_register: 'アカウント登録を完了するには、以下のアドレスをクリックしてください:' - mail_body_account_information_external: "{{value}} アカウントを使ってにログインできます。" + 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: "{{author}} によってWikiページ {{id}} が追加されました。" - mail_subject_wiki_content_updated: "Wikiページ {{id}} が更新されました" - mail_body_wiki_content_updated: "{{author}} によってWikiページ {{id}} が更新されました。" - + 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: "%{author} によってWikiページ %{id} が追加されました。" + mail_subject_wiki_content_updated: "Wikiページ %{id} が更新されました" + mail_body_wiki_content_updated: "%{author} によってWikiページ %{id} が更新されました。" + gui_validation_error: 1件のエラー - gui_validation_error_plural: "{{count}}件のエラー" - + gui_validation_error_plural: "%{count}件のエラー" + field_name: 名称 field_description: 説明 field_summary: サマリー @@ -288,6 +299,7 @@ field_attr_lastname: 苗字属性 field_attr_mail: メール属性 field_onthefly: あわせてユーザを作成 + field_start_date: 開始日 field_done_ratio: 進捗 % field_auth_source: 認証方式 field_hide_mail: メールアドレスを隠す @@ -322,7 +334,15 @@ field_member_of_group: 担当者のグループ field_assigned_to_role: 担当者のロール field_text: テキスト - + field_visible: 表示 + field_warn_on_leaving_unsaved: データを保存せずにページから移動するときに警告 + field_commit_logs_encoding: コミットメッセージのエンコーディング + field_scm_path_encoding: パスのエンコーディング + field_path_to_repository: リポジトリのパス + field_root_directory: ルートディレクトリ + field_cvsroot: CVSROOT + field_cvs_module: モジュール + setting_app_title: アプリケーションのタイトル setting_app_subtitle: アプリケーションのサブタイトル setting_welcome_text: ウェルカムメッセージ @@ -350,7 +370,7 @@ 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: ページ毎の表示件数 @@ -377,7 +397,10 @@ setting_start_of_week: 週の開始曜日 setting_rest_api_enabled: RESTによるWebサービスを有効にする 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: プロジェクトの編集 @@ -433,7 +456,7 @@ permission_delete_messages: メッセージの削除 permission_delete_own_messages: 自身が記入したメッセージの削除 permission_manage_subtasks: 子チケットの管理 - + project_module_issue_tracking: チケットトラッキング project_module_time_tracking: 時間トラッキング project_module_news: ニュース @@ -444,7 +467,7 @@ project_module_boards: フォーラム project_module_gantt: ガントチャート project_module_calendar: カレンダー - + label_user: ユーザ label_user_plural: ユーザ label_user_new: 新しいユーザ @@ -456,14 +479,14 @@ label_x_projects: zero: プロジェクトはありません one: 1プロジェクト - other: "{{count}}プロジェクト" + 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_view_all: すべてのチケットを見る + label_issues_by: "%{value} 別のチケット" label_issue_added: チケットが追加されました label_issue_updated: チケットが更新されました label_document: 文書 @@ -513,8 +536,8 @@ label_last_login: 最近の接続 label_registered_on: 登録日 label_activity: 活動 - label_overall_activity: 全ての活動 - label_user_activity: "{{value}} の活動" + label_overall_activity: すべての活動 + label_user_activity: "%{value} の活動" label_new: 新しく作成 label_logged_as: ログイン中: label_environment: 環境 @@ -524,7 +547,7 @@ label_auth_source_plural: 認証方式 label_subproject_plural: サブプロジェクト label_subproject_new: 新しいサブプロジェクト - label_and_its_subprojects: "{{value}} とサブプロジェクト" + label_and_its_subprojects: "%{value} とサブプロジェクト" label_min_max_length: 最小値 - 最大値の長さ label_list: リストから選択 label_date: 日付 @@ -535,8 +558,8 @@ label_text: 長いテキスト label_attribute: 属性 label_attribute_plural: 属性 - label_download: "{{count}}ダウンロード" - label_download_plural: "{{count}}ダウンロード" + label_download: "%{count}ダウンロード" + label_download_plural: "%{count}ダウンロード" label_no_data: 表示するデータがありません label_change_status: ステータスの変更 label_history: 履歴 @@ -551,8 +574,9 @@ label_news_new: ニュースを追加 label_news_plural: ニュース label_news_latest: 最新ニュース - label_news_view_all: 全てのニュースを見る + label_news_view_all: すべてのニュースを見る label_news_added: ニュースが追加されました + label_news_comment_added: ニュースにコメントが追加されました label_settings: 設定 label_overview: 概要 label_version: バージョン @@ -568,22 +592,22 @@ label_closed_issues: 完了 label_closed_issues_plural: 完了 label_x_open_issues_abbr_on_total: - zero: 0件未完了 / 全{{total}}件 - one: 1件未完了 / 全{{total}}件 - other: "{{count}}件未完了 / 全{{total}}件" + zero: 0件未完了 / 全%{total}件 + one: 1件未完了 / 全%{total}件 + other: "%{count}件未完了 / 全%{total}件" label_x_open_issues_abbr: zero: 0件未完了 one: 1件未完了 - other: "{{count}}件未完了" + other: "%{count}件未完了" label_x_closed_issues_abbr: zero: 0件完了 one: 1件完了 - other: "{{count}}件完了" + other: "%{count}件完了" label_total: 合計 label_permissions: 権限 label_current_status: 現在のステータス label_new_statuses_allowed: ステータスの移行先 - label_all: 全て + label_all: すべて label_none: なし label_nobody: 無記名 label_next: 次 @@ -596,21 +620,22 @@ label_months_from: ヶ月分 label_gantt: ガントチャート label_internal: 内部 - label_last_changes: "最新の変更 {{count}}件" - label_change_view_all: 全ての変更を見る + label_last_changes: "最新の変更 %{count}件" + label_change_view_all: すべての変更を見る label_personalize_page: このページをパーソナライズする label_comment: コメント label_comment_plural: コメント label_x_comments: zero: コメントがありません one: 1コメント - other: "{{count}}コメント" + other: "%{count}コメント" label_comment_add: コメント追加 label_comment_added: 追加されたコメント label_comment_delete: コメント削除 label_query: カスタムクエリ label_query_plural: カスタムクエリ label_query_new: 新しいクエリ + label_my_queries: マイカスタムクエリ label_filter_add: フィルタ追加 label_filter_plural: フィルタ label_equals: 等しい @@ -623,13 +648,13 @@ label_today: 今日 label_all_time: 全期間 label_yesterday: 昨日 - label_this_week: この週 + label_this_week: 今週 label_last_week: 先週 - label_last_n_days: "最後の{{count}}日間" + label_last_n_days: "直近%{count}日間" label_this_month: 今月 label_last_month: 先月 label_this_year: 今年 - label_date_range: 日付の範囲 + label_date_range: 期間 label_less_than_ago: が今日より○日前以降 label_more_than_ago: が今日より○日前以前 label_ago: 日前 @@ -639,13 +664,13 @@ label_repository: リポジトリ label_repository_plural: リポジトリ label_browse: ブラウズ - label_modification: "{{count}}点の変更" - label_modification_plural: "{{count}}点の変更" + label_modification: "%{count}点の変更" + label_modification_plural: "%{count}点の変更" label_branch: ブランチ label_tag: タグ label_revision: リビジョン label_revision_plural: リビジョン - label_revision_id: リビジョン {{value}} + label_revision_id: リビジョン %{value} label_associated_revisions: 関係しているリビジョン label_added: 追加 label_modified: 変更 @@ -655,15 +680,15 @@ label_latest_revision: 最新リビジョン label_latest_revision_plural: 最新リビジョン label_view_revisions: リビジョンを見る - label_view_all_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_due_in: "期日まで %{value}" + label_roadmap_overdue: "%{value} 遅れ" label_roadmap_no_issues: このバージョンに関するチケットはありません label_search: 検索 label_result_plural: 結果 @@ -681,9 +706,9 @@ label_changes_details: 全変更の詳細 label_issue_tracking: チケットトラッキング label_spent_time: 作業時間の記録 - label_overall_spent_time: 全ての作業時間の記録 - label_f_hour: "{{value}}時間" - label_f_hour_plural: "{{value}}時間" + label_overall_spent_time: すべての作業時間の記録 + label_f_hour: "%{value}時間" + label_f_hour_plural: "%{value}時間" label_time_tracking: 時間トラッキング label_change_plural: 変更 label_statistics: 統計 @@ -734,15 +759,15 @@ label_date_from: "日付指定: " label_date_to: から label_language_based: 既定の言語の設定に従う - label_sort_by: "並び替え {{value}}" + 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_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_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: 更新履歴 @@ -752,8 +777,8 @@ label_theme: テーマ label_default: 既定 label_search_titles_only: タイトルのみ - label_user_mail_option_all: "参加しているプロジェクトの全ての通知" - label_user_mail_option_selected: "選択したプロジェクトの全ての通知..." + 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: "自分が担当している事柄のみ" @@ -762,7 +787,7 @@ label_registration_activation_by_email: メールでアカウントを有効化 label_registration_manual_activation: 手動でアカウントを有効化 label_registration_automatic_activation: 自動でアカウントを有効化 - label_display_per_page: "1ページに: {{value}}" + label_display_per_page: "1ページに: %{value}" label_age: 年齢 label_change_properties: プロパティの変更 label_general: 全般 @@ -785,7 +810,7 @@ label_sort: ソート条件 label_ascending: 昇順 label_descending: 降順 - label_date_from_to: "{{start}}から{{end}}まで" + label_date_from_to: "%{start}から%{end}まで" label_wiki_content_added: Wikiページが追加されました label_wiki_content_updated: Wikiページが更新されました label_group: グループ @@ -804,21 +829,26 @@ 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_api_access_key_created_on: "APIアクセスキーは%{value}前に作成されました" label_subtask_plural: 子チケット label_project_copy_notifications: コピーしたチケットのメール通知を送信する - + label_principal_search: "ユーザまたはグループの検索:" + label_user_search: "ユーザの検索:" + label_git_report_last_commit: ファイルとディレクトリの最新コミットを表示する + button_login: ログイン button_submit: 変更 button_save: 保存 - button_check_all: 全てにチェックをつける - button_uncheck_all: 全てのチェックを外す + button_check_all: すべてにチェックをつける + button_uncheck_all: すべてのチェックを外す + button_expand_all: 展開 + button_collapse_all: 折りたたみ button_delete: 削除 button_create: 作成 button_create_and_continue: 連続作成 button_test: テスト button_edit: 編集 - button_edit_associated_wikipage: "関連するWikiページを編集: {{page_title}}" + button_edit_associated_wikipage: "関連するWikiページを編集: %{page_title}" button_add: 追加 button_change: 変更 button_apply: 適用 @@ -862,66 +892,76 @@ 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_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_are_you_sure_with_children: チケットとその子チケットすべてを削除しますか? + text_journal_changed: "%{label} を %{old} から %{new} に変更" + text_journal_changed_no_detail: "%{label} を更新" + 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)と数字とダッシュ(-)が使えます。
    一度保存すると、識別子は変更できません。' - text_caracters_maximum: "最大{{count}}文字です。" - text_caracters_minimum: "最低{{count}}文字の長さが必要です" - text_length_between: "長さは{{min}}から{{max}}文字までです。" + 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: (1行ごとに書くことで)複数の値を設定できます。 text_issues_ref_in_commit_messages: コミットメッセージ内でチケットの参照/修正 - text_issue_added: "チケット {{id}} が {{author}} によって報告されました。" - text_issue_updated: "チケット {{id}} が {{author}} によって更新されました。" - text_wiki_destroy_confirmation: 本当にこのwikiとその内容の全てを削除しますか? - text_issue_category_destroy_question: "{{count}}件のチケットがこのカテゴリに割り当てられています。" + text_issue_added: "チケット %{id} が %{author} によって報告されました。" + text_issue_updated: "チケット %{id} が %{author} によって更新されました。" + text_wiki_destroy_confirmation: 本当にこのwikiとその内容のすべてを削除しますか? + 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_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: Plugin assetsディレクトリに書き込み可能 text_rmagick_available: RMagickが使用可能 (オプション) - text_destroy_time_entries_question: このチケットの{{hours}}時間分の作業記録の扱いを選択してください。 + 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_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個ずつ記述してください。' - text_wiki_page_destroy_question: "この親ページの配下に{{descendants}}ページの子孫ページがあります。" + 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_own_membership_delete_confirmation: "一部またはすべての権限を自分自身から剥奪しようとしているため、このプロジェクトを編集できなくなる可能性があります。\n本当に続けますか?" text_zoom_in: 拡大 text_zoom_out: 縮小 - + text_warn_on_leaving_unsaved: このページから移動すると、保存されていないデータが失われます。 + text_scm_path_encoding_note: "デフォルト: UTF-8" + text_git_repository_note: "Bare、かつ、ローカルリポジトリ (例: /gitrepo, c:\gitrepo)" + text_mercurial_repository_note: "ローカルリポジトリ (例: /hgrepo, c:\hgrepo)" + text_scm_command: コマンド + text_scm_command_version: バージョン + text_scm_config: バージョン管理システムのコマンドをconfig/configuration.ymlで設定できます。設定後、Redmineを再起動してください。 + text_scm_command_not_available: バージョン管理システムのコマンドが利用できません。管理画面にて設定を確認してください。 + default_role_manager: 管理者 default_role_developer: 開発者 default_role_reporter: 報告者 @@ -948,8 +988,22 @@ enumeration_doc_categories: 文書カテゴリ enumeration_activities: 作業分類 (時間トラッキング) enumeration_system_activity: システム作業分類 - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header + label_additional_workflow_transitions_for_assignee: チケット担当者に追加で許可する遷移 + label_additional_workflow_transitions_for_author: チケット作成者に追加で許可する遷移 + label_bulk_edit_selected_time_entries: 作業時間の一括編集 + text_time_entries_destroy_confirmation: 本当に選択した作業時間を削除しますか? + + label_role_anonymous: Anonymous + label_role_non_member: Non member + + label_issue_note_added: 注記が追加されました + label_issue_status_updated: ステータスが更新されました + label_issue_priority_updated: 優先度が更新されました + label_issues_visibility_own: 作成者か担当者であるチケット + field_issues_visibility: 表示できるチケット + label_issues_visibility_all: すべてのチケット + permission_set_own_issues_private: 自分のチケットをプライベートに設定 + field_is_private: プライベート + permission_set_issues_private: チケットをプライベートに設定 + label_issues_visibility_public: プライベートチケット以外 + text_issues_destroy_descendants_confirmation: %{count}個の子チケットも削除されます。 diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/ko.yml --- a/config/locales/ko.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/ko.yml Mon Jul 25 14:23:37 2011 +0100 @@ -21,7 +21,10 @@ month_names: [~, 1월, 2월, 3월, 4월, 5월, 6월, 7월, 8월, 9월, 10월, 11월, 12월] abbr_month_names: [~, 1월, 2월, 3월, 4월, 5월, 6월, 7월, 8월, 9월, 10월, 11월, 12월] # Used in date_select and datime_select. - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -37,37 +40,37 @@ half_a_minute: "30초" less_than_x_seconds: one: "일초 이하" - other: "{{count}}초 이하" + other: "%{count}초 이하" x_seconds: one: "일초" - other: "{{count}}초" + other: "%{count}초" less_than_x_minutes: one: "일분 이하" - other: "{{count}}분 이하" + other: "%{count}분 이하" x_minutes: one: "일분" - other: "{{count}}분" + other: "%{count}분" about_x_hours: one: "약 한시간" - other: "약 {{count}}시간" + other: "약 %{count}시간" x_days: one: "하루" - other: "{{count}}일" + other: "%{count}일" about_x_months: one: "약 한달" - other: "약 {{count}}달" + other: "약 %{count}달" x_months: one: "한달" - other: "{{count}}달" + other: "%{count}달" about_x_years: one: "약 일년" - other: "약 {{count}}년" + other: "약 %{count}년" over_x_years: one: "일년 이상" - other: "{{count}}년 이상" + other: "%{count}년 이상" almost_x_years: one: "약 1년" - other: "약 {{count}}년" + other: "약 %{count}년" prompts: year: "년" month: "월" @@ -145,8 +148,8 @@ errors: template: header: - one: "한개의 오류가 발생해 {{model}}을(를) 저장하지 않았습니다." - other: "{{count}}개의 오류가 발생해 {{model}}을(를) 저장하지 않았습니다." + one: "한개의 오류가 발생해 %{model}을(를) 저장하지 않았습니다." + other: "%{count}개의 오류가 발생해 %{model}을(를) 저장하지 않았습니다." # The variable :count is also available body: "다음 항목에 문제가 발견했습니다:" @@ -158,16 +161,16 @@ accepted: "은 인정되어야 합니다" empty: "은 길이가 0이어서는 안됩니다." blank: "은 빈 값이어서는 안 됩니다" - too_long: "은 너무 깁니다 (최대 {{count}}자 까지)" - too_short: "은 너무 짧습니다 (최소 {{count}}자 까지)" - wrong_length: "은 길이가 틀렸습니다 ({{count}}자이어야 합니다.)" + too_long: "은 너무 깁니다 (최대 %{count}자 까지)" + too_short: "은 너무 짧습니다 (최소 %{count}자 까지)" + wrong_length: "은 길이가 틀렸습니다 (%{count}자이어야 합니다.)" taken: "은 이미 선택된 겁니다" not_a_number: "은 숫자가 아닙니다" - greater_than: "은 {{count}}보다 커야 합니다." - greater_than_or_equal_to: "은 {{count}}보다 크거나 같아야 합니다" - equal_to: "은 {{count}}(와)과 같아야 합니다" - less_than: "은 {{count}}보다 작어야 합니다" - less_than_or_equal_to: "은 {{count}}과 같거나 이하을 요구합니다" + 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: "는 시작날짜보다 커야 합니다" @@ -204,40 +207,40 @@ notice_file_not_found: 요청하신 페이지는 삭제되었거나 옮겨졌습니다. notice_locking_conflict: 다른 사용자에 의해서 데이터가 변경되었습니다. notice_not_authorized: 이 페이지에 접근할 권한이 없습니다. - notice_email_sent: "{{value}}님에게 메일이 발송되었습니다." - notice_email_error: "메일을 전송하는 과정에 오류가 발생했습니다. ({{value}})" + notice_email_sent: "%{value}님에게 메일이 발송되었습니다." + notice_email_error: "메일을 전송하는 과정에 오류가 발생했습니다. (%{value})" notice_feeds_access_key_reseted: RSS에 접근가능한 열쇠(key)가 생성되었습니다. - notice_failed_to_save_issues: "저장에 실패하였습니다: 실패 {{count}}(선택 {{total}}): {{ids}}." + notice_failed_to_save_issues: "저장에 실패하였습니다: 실패 %{count}(선택 %{total}): %{ids}." notice_no_issue_selected: "일감이 선택되지 않았습니다. 수정하기 원하는 일감을 선택하세요" notice_account_pending: "계정이 만들어졌으며 관리자 승인 대기중입니다." notice_default_data_loaded: 기본값을 성공적으로 읽어들였습니다. notice_unable_delete_version: 삭제할 수 없는 버전입니다. - error_can_t_load_default_data: "기본값을 읽어들일 수 없습니다.: {{value}}" + error_can_t_load_default_data: "기본값을 읽어들일 수 없습니다.: %{value}" error_scm_not_found: 항목이나 리비젼이 저장소에 존재하지 않습니다. - error_scm_command_failed: "저장소에 접근하는 도중에 오류가 발생하였습니다.: {{value}}" + error_scm_command_failed: "저장소에 접근하는 도중에 오류가 발생하였습니다.: %{value}" error_scm_annotate: "항목이 없거나 행별 이력을 볼 수 없습니다." error_issue_not_found_in_project: '일감이 없거나 이 프로젝트의 것이 아닙니다.' - warning_attachments_not_saved: "{{count}}개 파일을 저장할 수 없습니다." + warning_attachments_not_saved: "%{count}개 파일을 저장할 수 없습니다." - mail_subject_lost_password: "{{value}} 비밀번호" + mail_subject_lost_password: "%{value} 비밀번호" mail_body_lost_password: '비밀번호를 변경하려면 다음 링크를 클릭하세요.' - mail_subject_register: "{{value}} 계정 활성화" + mail_subject_register: "%{value} 계정 활성화" mail_body_register: '계정을 활성화하려면 링크를 클릭하세요.:' - mail_body_account_information_external: "로그인할 때 {{value}} 계정을 사용하실 수 있습니다." + mail_body_account_information_external: "로그인할 때 %{value} 계정을 사용하실 수 있습니다." mail_body_account_information: 계정 정보 - mail_subject_account_activation_request: "{{value}} 계정 활성화 요청" - mail_body_account_activation_request: "새 사용자({{value}})가 등록되었습니다. 관리자님의 승인을 기다리고 있습니다.:" - mail_body_reminder: "당신이 맡고 있는 일감 {{count}}개의 완료 기한이 {{days}}일 후 입니다." - mail_subject_reminder: "내일이 만기인 일감 {{count}}개 ({{days}})" - mail_subject_wiki_content_added: "위키페이지 '{{id}}'이(가) 추가되었습니다." - mail_subject_wiki_content_updated: "'위키페이지 {{id}}'이(가) 수정되었습니다." - mail_body_wiki_content_added: "{{author}}이(가) 위키페이지 '{{id}}'을(를) 추가하였습니다." - mail_body_wiki_content_updated: "{{author}}이(가) 위키페이지 '{{id}}'을(를) 수정하였습니다." + mail_subject_account_activation_request: "%{value} 계정 활성화 요청" + mail_body_account_activation_request: "새 사용자(%{value})가 등록되었습니다. 관리자님의 승인을 기다리고 있습니다.:" + mail_body_reminder: "당신이 맡고 있는 일감 %{count}개의 완료 기한이 %{days}일 후 입니다." + mail_subject_reminder: "내일이 만기인 일감 %{count}개 (%{days})" + mail_subject_wiki_content_added: "위키페이지 '%{id}'이(가) 추가되었습니다." + mail_subject_wiki_content_updated: "'위키페이지 %{id}'이(가) 수정되었습니다." + mail_body_wiki_content_added: "%{author}이(가) 위키페이지 '%{id}'을(를) 추가하였습니다." + mail_body_wiki_content_updated: "%{author}이(가) 위키페이지 '%{id}'을(를) 수정하였습니다." gui_validation_error: 에러 - gui_validation_error_plural: "{{count}}개 에러" + gui_validation_error_plural: "%{count}개 에러" field_name: 이름 field_description: 설명 @@ -299,6 +302,7 @@ field_attr_lastname: 성 속성 field_attr_mail: 메일 속성 field_onthefly: 동적 사용자 생성 + field_start_date: 시작시간 field_done_ratio: 진척도 field_auth_source: 인증 공급자 field_hide_mail: 메일 주소 숨기기 @@ -354,7 +358,6 @@ setting_cross_project_issue_relations: 다른 프로젝트의 일감과 연결하는 것을 허용 setting_issue_list_default_columns: 일감 목록에 표시할 항목 setting_repositories_encodings: 저장소 인코딩 - setting_commit_logs_encoding: 제출(commit) 기록 인코딩 setting_emails_footer: 메일 꼬리 setting_protocol: 프로토콜 setting_per_page_options: 목록에서, 한 페이지에 표시할 행 @@ -441,14 +444,14 @@ label_x_projects: zero: 없음 one: "한 프로젝트" - other: "{{count}}개 프로젝트" + 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_issues_by: "%{value}별 일감" label_issue_added: 일감 추가 label_issue_updated: 일감 수정 label_document: 문서 @@ -498,7 +501,7 @@ label_registered_on: 등록시각 label_activity: 작업내역 label_overall_activity: 전체 작업내역 - label_user_activity: "{{value}}의 작업내역" + label_user_activity: "%{value}의 작업내역" label_new: 새로 만들기 label_logged_as: '로그인계정:' label_environment: 환경 @@ -507,7 +510,7 @@ label_auth_source_new: 새 인증 공급자 label_auth_source_plural: 인증 공급자 label_subproject_plural: 하위 프로젝트 - label_and_its_subprojects: "{{value}}와 하위 프로젝트들" + label_and_its_subprojects: "%{value}와 하위 프로젝트들" label_min_max_length: 최소 - 최대 길이 label_list: 목록 label_date: 날짜 @@ -518,8 +521,8 @@ label_text: 텍스트 label_attribute: 속성 label_attribute_plural: 속성 - label_download: "{{count}}회 다운로드" - label_download_plural: "{{count}}회 다운로드" + label_download: "%{count}회 다운로드" + label_download_plural: "%{count}회 다운로드" label_no_data: 표시할 데이터가 없습니다. label_change_status: 상태 변경 label_history: 이력 @@ -550,17 +553,17 @@ label_closed_issues: 완료됨 label_closed_issues_plural: 완료됨 label_x_open_issues_abbr_on_total: - zero: "총 {{total}} 건 모두 완료" - one: "한 건 진행 중 / 총 {{total}} 건 중 " - other: "{{count}} 건 진행 중 / 총 {{total}} 건" + zero: "총 %{total} 건 모두 완료" + one: "한 건 진행 중 / 총 %{total} 건 중 " + other: "%{count} 건 진행 중 / 총 %{total} 건" label_x_open_issues_abbr: zero: 모두 완료 one: 한 건 진행 중 - other: "{{count}} 건 진행 중" + other: "%{count} 건 진행 중" label_x_closed_issues_abbr: zero: 모두 미완료 one: 한 건 완료 - other: "{{count}} 건 완료" + other: "%{count} 건 완료" label_total: 합계 label_permissions: 권한 label_current_status: 일감 상태 @@ -578,7 +581,7 @@ label_months_from: 개월 동안 | 다음부터 label_gantt: Gantt 챠트 label_internal: 내부 - label_last_changes: "최근 {{count}}개의 변경사항" + label_last_changes: "최근 %{count}개의 변경사항" label_change_view_all: 모든 변경 내역 보기 label_personalize_page: 입맛대로 구성하기 label_comment: 댓글 @@ -586,7 +589,7 @@ label_x_comments: zero: 댓글 없음 one: 한 개의 댓글 - other: "{{count}} 개의 댓글" + other: "%{count} 개의 댓글" label_comment_add: 댓글 추가 label_comment_added: 댓글이 추가되었습니다. label_comment_delete: 댓글 삭제 @@ -607,7 +610,7 @@ label_yesterday: 어제 label_this_week: 이번주 label_last_week: 지난 주 - label_last_n_days: "지난 {{count}} 일" + label_last_n_days: "지난 %{count} 일" label_this_month: 이번 달 label_last_month: 지난 달 label_this_year: 올해 @@ -621,8 +624,8 @@ label_repository: 저장소 label_repository_plural: 저장소 label_browse: 저장소 둘러보기 - label_modification: "{{count}} 변경" - label_modification_plural: "{{count}} 변경" + label_modification: "%{count} 변경" + label_modification_plural: "%{count} 변경" label_revision: 개정판 label_revision_plural: 개정판 label_associated_revisions: 관련된 개정판들 @@ -640,8 +643,8 @@ label_sort_lower: 아래로 label_sort_lowest: 맨 아래로 label_roadmap: 로드맵 - label_roadmap_due_in: "기한 {{value}}" - label_roadmap_overdue: "{{value}} 지연" + label_roadmap_due_in: "기한 %{value}" + label_roadmap_overdue: "%{value} 지연" label_roadmap_no_issues: 이 버전에 해당하는 일감 없음 label_search: 검색 label_result_plural: 결과 @@ -659,8 +662,8 @@ label_changes_details: 모든 상세 변경 내역 label_issue_tracking: 일감 추적 label_spent_time: 소요 시간 - label_f_hour: "{{value}} 시간" - label_f_hour_plural: "{{value}} 시간" + label_f_hour: "%{value} 시간" + label_f_hour_plural: "%{value} 시간" label_time_tracking: 시간추적 label_change_plural: 변경사항들 label_statistics: 통계 @@ -709,13 +712,13 @@ label_date_from: '기간:' label_date_to: ' ~ ' label_language_based: 언어설정에 따름 - label_sort_by: "{{value}}(으)로 정렬" + label_sort_by: "%{value}(으)로 정렬" label_send_test_email: 테스트 메일 보내기 - label_feeds_access_key_created_on: "피드 접근 키가 {{value}} 이전에 생성되었습니다." + label_feeds_access_key_created_on: "피드 접근 키가 %{value} 이전에 생성되었습니다." label_module_plural: 모듈 - label_added_time_by: "{{author}}이(가) {{age}} 전에 추가함" - label_updated_time_by: "{{author}}이(가) {{age}} 전에 변경" - label_updated_time: "{{value}} 전에 수정됨" + 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: 변경묶음 @@ -731,7 +734,7 @@ label_registration_activation_by_email: 메일로 계정을 활성화하기 label_registration_automatic_activation: 자동 계정 활성화 label_registration_manual_activation: 수동 계정 활성화 - label_display_per_page: "페이지당 줄수: {{value}}" + label_display_per_page: "페이지당 줄수: %{value}" label_age: 마지막 수정일 label_change_properties: 속성 변경 label_general: 일반 @@ -754,7 +757,7 @@ label_sort: 정렬 label_ascending: 오름차순 label_descending: 내림차순 - label_date_from_to: "{{start}}부터 {{end}}까지" + label_date_from_to: "%{start}부터 %{end}까지" label_wiki_content_added: 위키페이지 추가 label_wiki_content_updated: 위키페이지 수정 @@ -806,48 +809,48 @@ text_regexp_info: 예) ^[A-Z0-9]+$ text_min_max_length_info: 0 는 제한이 없음을 의미함 text_project_destroy_confirmation: 이 프로젝트를 삭제하고 모든 데이터를 지우시겠습니까? - text_subprojects_destroy_warning: "하위 프로젝트({{value}})이(가) 자동으로 지워질 것입니다." + text_subprojects_destroy_warning: "하위 프로젝트(%{value})이(가) 자동으로 지워질 것입니다." text_workflow_edit: 업무흐름 수정하려면 역할과 일감유형을 선택하세요. text_are_you_sure: 계속 진행 하시겠습니까? text_tip_issue_begin_day: 오늘 시작하는 업무(task) text_tip_issue_end_day: 오늘 종료하는 업무(task) text_tip_issue_begin_end_day: 오늘 시작하고 종료하는 업무(task) text_project_identifier_info: '영문 소문자(a-z) 및 숫자, 대쉬(-) 가능.
    저장된후에는 식별자 변경 불가능.' - text_caracters_maximum: "최대 {{count}} 글자 가능" - text_caracters_minimum: "최소한 {{count}} 글자 이상이어야 합니다." - text_length_between: "{{min}} 에서 {{max}} 글자" + text_caracters_maximum: "최대 %{count} 글자 가능" + text_caracters_minimum: "최소한 %{count} 글자 이상이어야 합니다." + text_length_between: "%{min} 에서 %{max} 글자" text_tracker_no_workflow: 이 일감 유형에는 업무흐름이 정의되지 않았습니다. text_unallowed_characters: 허용되지 않는 문자열 text_comma_separated: "구분자','를 이용해서 여러 개의 값을 입력할 수 있습니다." text_issues_ref_in_commit_messages: 제출 메시지에서 일감을 참조하거나 해결하기 - text_issue_added: "{{author}}이(가) 일감 {{id}}을(를) 보고하였습니다." - text_issue_updated: "{{author}}이(가) 일감 {{id}}을(를) 수정하였습니다." + text_issue_added: "%{author}이(가) 일감 %{id}을(를) 보고하였습니다." + text_issue_updated: "%{author}이(가) 일감 %{id}을(를) 수정하였습니다." text_wiki_destroy_confirmation: 이 위키와 모든 내용을 지우시겠습니까? - text_issue_category_destroy_question: "일부 일감들({{count}}개)이 이 범주에 지정되어 있습니다. 어떻게 하시겠습니까?" + 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_status_changed_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_question: 삭제하려는 일감에 %{hours} 시간이 보고되어 있습니다. 어떻게 하시겠습니까? text_destroy_time_entries: 보고된 시간을 삭제하기 text_assign_time_entries_to_project: 보고된 시간을 프로젝트에 할당하기 text_reassign_time_entries: '이 알림에 보고된 시간을 재할당하기:' - text_user_wrote: "{{value}}의 덧글:" + 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_enumeration_destroy_question: "%{count} 개의 일감이 이 값을 사용하고 있습니다." + text_email_delivery_not_configured: "이메일 전달이 설정되지 않았습니다. 그래서 알림이 비활성화되었습니다.\n SMTP서버를 config/configuration.yml에서 설정하고 어플리케이션을 다시 시작하십시오. 그러면 동작합니다." text_repository_usernames_mapping: "저장소 로그에서 발견된 각 사용자에 레드마인 사용자를 업데이트할때 선택합니다.\n레드마인과 저장소의 이름이나 이메일이 같은 사용자가 자동으로 연결됩니다." text_diff_truncated: '... 이 차이점은 표시할 수 있는 최대 줄수를 초과해서 이 차이점은 잘렸습니다.' text_custom_field_possible_values_info: '각 값 당 한 줄' - text_wiki_page_destroy_question: 이 페이지는 {{descendants}} 개의 하위 페이지와 관련 내용이 있습니다. 이 내용을 어떻게 하시겠습니까? + text_wiki_page_destroy_question: 이 페이지는 %{descendants} 개의 하위 페이지와 관련 내용이 있습니다. 이 내용을 어떻게 하시겠습니까? text_wiki_page_nullify_children: 하위 페이지를 최상위 페이지 아래로 지정 text_wiki_page_destroy_children: 모든 하위 페이지와 관련 내용을 삭제 text_wiki_page_reassign_children: 하위 페이지를 이 페이지 아래로 지정 @@ -884,14 +887,14 @@ 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}})" + 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}}이(가) 추가되었습니다." + text_journal_added: "%{label}에 %{value}이(가) 추가되었습니다." field_active: 사용중 enumeration_system_activity: 시스템 작업 permission_delete_issue_watchers: 일감지킴이 지우기 @@ -926,9 +929,9 @@ setting_start_of_week: 달력 시작 요일 permission_view_issues: 일감 보기 label_display_used_statuses_only: 이 일감유형에서 사용되는 상태만 보여주기 - label_revision_id: 개정판 {{value}} + label_revision_id: 개정판 %{value} label_api_access_key: API 접근키 - label_api_access_key_created_on: API 접근키가 {{value}} 전에 생성되었습니다. + label_api_access_key_created_on: API 접근키가 %{value} 전에 생성되었습니다. label_feeds_access_key: RSS 접근키 notice_api_access_key_reseted: API 접근키가 초기화되었습니다. setting_rest_api_enabled: REST 웹서비스 활성화 @@ -955,12 +958,12 @@ label_subtask_plural: 하위 일감 label_project_copy_notifications: 프로젝트 복사 중에 이메일 알림 보내기 error_can_not_delete_custom_field: 사용자 정의 필드를 삭제할 수 없습니다. - error_unable_to_connect: 연결할 수 없습니다(({{value}}) + error_unable_to_connect: 연결할 수 없습니다((%{value}) error_can_not_remove_role: 이 역할은 현재 사용 중이이서 삭제할 수 없습니다. - error_can_not_delete_tracker: 이 유형의 일감들이 있에서 삭제할 수 없습니다. + error_can_not_delete_tracker: 이 유형의 일감들이 있어서 삭제할 수 없습니다. field_principal: 신원 label_my_page_block: 내 페이지 출력화면 - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + notice_failed_to_save_members: "%{errors}:구성원을 저장 중 실패하였습니다" text_zoom_out: 더 작게 text_zoom_in: 더 크게 notice_unable_delete_time_entry: 시간 기록 항목을 삭제할 수 없습니다. @@ -968,19 +971,61 @@ field_time_entries: 기록된 시간 project_module_gantt: Gantt 챠트 project_module_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. - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header + button_edit_associated_wikipage: "연관된 위키 페이지 %{page_title} 수정" + text_are_you_sure_with_children: 일감과 모든 하위 일감들을 삭제하시겠습니까? + field_text: 텍스트 영역 + label_user_mail_option_only_owner: 내가 저자인 사항만 + setting_default_notification_option: 기본 알림 옵션 + label_user_mail_option_only_my_events: 내가 지켜보거나 속해있는 사항만 + label_user_mail_option_only_assigned: 내에게 할당된 사항만 + label_user_mail_option_none: 알림 없음 + field_member_of_group: 할당된 사람의 그룹 + field_assigned_to_role: 할당된 사람의 역할 + notice_not_authorized_archived_project: 접근하려는 프로젝트는 이미 잠금보관되어 있습니다. + label_principal_search: "사용자 및 그룹 찾기:" + label_user_search: "사용자 찾기::" + field_visible: 보이기 + setting_emails_header: 이메일 헤더 + setting_commit_logtime_activity_id: 기록된 시간에 적용할 작업분류 + text_time_logged_by_changeset: "변경묶음 %{value}에서 적용되었습니다." + 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: 제출(commit) 기록 인코딩 + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/lt.yml --- a/config/locales/lt.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/lt.yml Mon Jul 25 14:23:37 2011 +0100 @@ -22,7 +22,10 @@ month_names: [~, sausio, vasario, kovo, balandžio, gegužės, birželio, liepos, rugpjūčio, rugsėjo, spalio, lapkričio, gruodžio] abbr_month_names: [~, Sau, Vas, Kov, Bal, Geg, Bir, Lie, Rgp, Rgs, Spa, Lap, Grd] # Used in date_select and datime_select. - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -37,42 +40,42 @@ distance_in_words: half_a_minute: "pusė minutės" less_than_x_seconds: - one: "mažiau nei {{count}} sekundė" - few: "mažiau nei {{count}} sekundžių" - many: "mažiau nei {{count}} sekundžių" - other: "mažiau nei {{count}} sekundės" + one: "mažiau nei %{count} sekundė" + few: "mažiau nei %{count} sekundžių" + many: "mažiau nei %{count} sekundžių" + other: "mažiau nei %{count} sekundės" x_seconds: - one: "{{count}} sekundė" - few: "{{count}} sekundžių" - many: "{{count}} sekundžių" - other: "{{count}} sekundės" + one: "%{count} sekundė" + few: "%{count} sekundžių" + many: "%{count} sekundžių" + other: "%{count} sekundės" less_than_x_minutes: one: "mažiau nei minutė" - other: "mažiau nei {{count}} minutės" + other: "mažiau nei %{count} minutės" x_minutes: one: "1 minutė" - other: "{{count}} minutės" + other: "%{count} minutės" about_x_hours: one: "apie 1 valanda" - other: "apie {{count}} valandų" + other: "apie %{count} valandų" x_days: one: "1 diena" - other: "{{count}} dienų" + other: "%{count} dienų" about_x_months: one: "apie 1 mėnuo" - other: "apie {{count}} mėnesiai" + other: "apie %{count} mėnesiai" x_months: one: "1 mėnuo" - other: "{{count}} mėnesiai" + other: "%{count} mėnesiai" about_x_years: one: "apie 1 metai" - other: "apie {{count}} metų" + other: "apie %{count} metų" over_x_years: one: "virš 1 metų" - other: "virš {{count}} metų" + other: "virš %{count} metų" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" prompts: year: "Metai" month: "Mėnuo" @@ -137,10 +140,10 @@ errors: template: header: - one: "Išsaugant objektą {{model}} rasta {{count}} klaida" - few: "Išsaugant objektą {{model}} rasta {{count}} klaidų" - many: "Išsaugant objektą {{model}} rasta {{count}} klaidų" - other: "Išsaugant objektą {{model}} rastos {{count}} klaidos" + one: "Išsaugant objektą %{model} rasta %{count} klaida" + few: "Išsaugant objektą %{model} rasta %{count} klaidų" + many: "Išsaugant objektą %{model} rasta %{count} klaidų" + other: "Išsaugant objektą %{model} rastos %{count} klaidos" body: "Šiuose laukuose yra klaidų:" messages: @@ -152,28 +155,28 @@ empty: "negali būti tuščias" blank: "negali būti tuščias" too_long: - one: "per ilgas (daugiausiai {{count}} simbolius)" - few: "per ilgas (daugiausiai {{count}} simboliu)" - many: "per ilgas (daugiausiai {{count}} simboliu)" - other: "per ilgas (daugiausiai {{count}} simboliai)" + one: "per ilgas (daugiausiai %{count} simbolius)" + few: "per ilgas (daugiausiai %{count} simboliu)" + many: "per ilgas (daugiausiai %{count} simboliu)" + other: "per ilgas (daugiausiai %{count} simboliai)" too_short: - one: "per trumpas (mažiausiai {{count}} simbolius)" - few: "per trumpas (mažiausiai {{count}} simboliu)" - many: "per trumpas (mažiausiai {{count}} simboliu)" - other: "per trumpas (mažiausiai {{count}} simboliai)" + one: "per trumpas (mažiausiai %{count} simbolius)" + few: "per trumpas (mažiausiai %{count} simboliu)" + many: "per trumpas (mažiausiai %{count} simboliu)" + other: "per trumpas (mažiausiai %{count} simboliai)" wrong_length: - one: "neteisingo ilgio (turi būti lygiai {{count}} simbolius)" - few: "neteisingo ilgio (turi būti lygiai {{count}} simboliu)" - many: "neteisingo ilgio (turi būti lygiai {{count}} simboliu)" - other: "neteisingo ilgio (turi būti lygiai {{count}} simboliai)" + one: "neteisingo ilgio (turi būti lygiai %{count} simbolius)" + few: "neteisingo ilgio (turi būti lygiai %{count} simboliu)" + many: "neteisingo ilgio (turi būti lygiai %{count} simboliu)" + other: "neteisingo ilgio (turi būti lygiai %{count} simboliai)" taken: "jau užimtas" not_a_number: "ne skaičius" not_a_date: "is not a valid date" - greater_than: "turi būti didesnis už {{count}}" - greater_than_or_equal_to: "turi būti didesnis arba lygus {{count}}" - equal_to: "turi būti lygus {{count}}" - less_than: "turi būti mažesnis už {{count}}" - less_than_or_equal_to: "turi būti mažesnis arba lygus {{count}}" + greater_than: "turi būti didesnis už %{count}" + greater_than_or_equal_to: "turi būti didesnis arba lygus %{count}" + equal_to: "turi būti lygus %{count}" + less_than: "turi būti mažesnis už %{count}" + less_than_or_equal_to: "turi būti mažesnis arba lygus %{count}" odd: "turi būti nelyginis" even: "turi būti lyginis" greater_than_start_date: "turi būti didesnė negu pradžios data" @@ -210,18 +213,18 @@ notice_file_not_found: Puslapis, į kurį ketinate įeiti, neegzistuoja arba yra pašalintas. notice_locking_conflict: Duomenys atnaujinti kito vartotojo. notice_not_authorized: Jūs neturite teisių gauti prieigą prie šio puslapio. - notice_email_sent: "Laiškas išsiųstas {{value}}" - notice_email_error: "Laiško siuntimo metu įvyko klaida ({{value}})" + notice_email_sent: "Laiškas išsiųstas %{value}" + notice_email_error: "Laiško siuntimo metu įvyko klaida (%{value})" notice_feeds_access_key_reseted: Jūsų RSS raktas buvo atnaujintas. - notice_failed_to_save_issues: "Nepavyko išsaugoti {{count}} problemos(ų) iš {{total}} pasirinkto: {{ids}}." + notice_failed_to_save_issues: "Nepavyko išsaugoti %{count} problemos(ų) iš %{total} pasirinkto: %{ids}." notice_no_issue_selected: "Nepasirinkta nė viena problema! Prašom pažymėti problemą, kurią norite redaguoti." notice_account_pending: "Jūsų paskyra buvo sukurta ir dabar laukiama administratoriaus patvirtinimo." notice_default_data_loaded: Numatytoji konfiguracija sėkmingai užkrauta. notice_unable_delete_version: Neįmanoma panaikinti versiją - error_can_t_load_default_data: "Numatytoji konfiguracija negali būti užkrauta: {{value}}" + error_can_t_load_default_data: "Numatytoji konfiguracija negali būti užkrauta: %{value}" error_scm_not_found: "Duomenys ir/ar pakeitimai saugykloje(repozitorojoje) neegzistuoja." - error_scm_command_failed: "Įvyko klaida jungiantis prie saugyklos: {{value}}" + error_scm_command_failed: "Įvyko klaida jungiantis prie saugyklos: %{value}" error_scm_annotate: "Įrašas neegzistuoja arba negalima jo atvaizduoti." error_issue_not_found_in_project: 'Darbas nerastas arba nesurištas su šiuo projektu' error_no_tracker_in_project: No tracker is associated to this project. Please check the Project settings. @@ -229,25 +232,25 @@ error_can_not_reopen_issue_on_closed_version: Uždarytai versijai priskirtas darbas negali būti atnaujintas. error_can_not_archive_project: Šio projekto negalima suarchyvuoti - warning_attachments_not_saved: "{{count}} byla(ų) negali būti išsaugota." + warning_attachments_not_saved: "%{count} byla(ų) negali būti išsaugota." - mail_subject_lost_password: "Jūsų {{value}} slaptažodis" + mail_subject_lost_password: "Jūsų %{value} slaptažodis" mail_body_lost_password: 'Norėdami pakeisti slaptažodį, spauskite nuorodą:' - mail_subject_register: "Jūsų {{value}} paskyros aktyvavimas" + mail_subject_register: "Jūsų %{value} paskyros aktyvavimas" mail_body_register: 'Norėdami aktyvuoti paskyrą, spauskite nuorodą:' - mail_body_account_information_external: "Jūs galite naudoti Jūsų {{value}} paskyrą, norėdami prisijungti." + mail_body_account_information_external: "Jūs galite naudoti Jūsų %{value} paskyrą, norėdami prisijungti." mail_body_account_information: Informacija apie Jūsų paskyrą - mail_subject_account_activation_request: "{{value}} paskyros aktyvavimo prašymas" - mail_body_account_activation_request: "Užsiregistravo naujas vartotojas ({{value}}). Jo paskyra laukia jūsų patvirtinimo:" - mail_subject_reminder: "{{count}} darbas(ai) po kelių {{days}} dienų" - mail_body_reminder: "{{count}} darbas(ai), kurie yra jums priskirti, baigiasi po {{days}} dienų(os):" - mail_subject_wiki_content_added: "'{{id}}' pridėtas wiki puslapis" - mail_body_wiki_content_added: "The '{{id}}' wiki puslapi pridėjo {{author}}." - mail_subject_wiki_content_updated: "'{{id}}' atnaujintas wiki puslapis" - mail_body_wiki_content_updated: "The '{{id}}' wiki puslapį atnaujino {{author}}." + mail_subject_account_activation_request: "%{value} paskyros aktyvavimo prašymas" + mail_body_account_activation_request: "Užsiregistravo naujas vartotojas (%{value}). Jo paskyra laukia jūsų patvirtinimo:" + mail_subject_reminder: "%{count} darbas(ai) po kelių %{days} dienų" + mail_body_reminder: "%{count} darbas(ai), kurie yra jums priskirti, baigiasi po %{days} dienų(os):" + mail_subject_wiki_content_added: "'%{id}' pridėtas wiki puslapis" + mail_body_wiki_content_added: "The '%{id}' wiki puslapi pridėjo %{author}." + mail_subject_wiki_content_updated: "'%{id}' atnaujintas wiki puslapis" + mail_body_wiki_content_updated: "The '%{id}' wiki puslapį atnaujino %{author}." gui_validation_error: 1 klaida - gui_validation_error_plural: "{{count}} klaidų(os)" + gui_validation_error_plural: "%{count} klaidų(os)" field_name: Pavadinimas field_description: Aprašas @@ -310,7 +313,8 @@ field_attr_lastname: Pavardės priskiria field_attr_mail: Elektroninio pašto požymis field_onthefly: Automatinis vartotojų registravimas - field_done_ratio: % atlikta + field_start_date: Pradėti + field_done_ratio: "% atlikta" field_auth_source: Autentiškumo nustatymo būdas field_hide_mail: Paslėpkite mano elektroninio pašto adresą field_comments: Komentaras @@ -367,7 +371,6 @@ setting_cross_project_issue_relations: Leisti tarprojektinius darbų ryšius setting_issue_list_default_columns: Numatytosios skiltys darbų sąraše setting_repositories_encodings: Saugyklos koduotė - setting_commit_logs_encoding: Commit pranešimų koduotė setting_emails_footer: elektroninio pašto puslapinė poraštė setting_protocol: Protokolas setting_per_page_options: Įrašų puslapyje nustatimas @@ -458,14 +461,14 @@ label_x_projects: zero: nėra projektų one: 1 projektas - other: "{{count}} projektų" + other: "%{count} projektų" label_project_all: Visi Projektai label_project_latest: Paskutiniai projektai label_issue: Darbas label_issue_new: Naujas darbas label_issue_plural: Darbai label_issue_view_all: Peržiūrėti visus darbus - label_issues_by: "Darbai pagal {{value}}" + label_issues_by: "Darbai pagal %{value}" label_issue_added: Darbas pridėtas label_issue_updated: Darbas atnaujintas label_document: Dokumentas @@ -514,7 +517,7 @@ label_registered_on: Užregistruota label_activity: Veikla label_overall_activity: Visa veikla - label_user_activity: "{{value}}o veiksmai" + label_user_activity: "%{value}o veiksmai" label_new: Naujas label_logged_as: Prisijungęs kaip label_environment: Aplinka @@ -523,7 +526,7 @@ label_auth_source_new: Naujas autentiškumo nustatymo būdas label_auth_source_plural: Autentiškumo nustatymo būdai label_subproject_plural: Subprojektai - label_and_its_subprojects: "{{value}} projektas ir jo subprojektai" + label_and_its_subprojects: "%{value} projektas ir jo subprojektai" label_min_max_length: Min - Maks ilgis label_list: Sąrašas label_date: Data @@ -534,8 +537,8 @@ label_text: Ilgas tekstas label_attribute: Požymis label_attribute_plural: Požymiai - label_download: "{{count}} persiuntimas" - label_download_plural: "{{count}} persiuntimai" + label_download: "%{count} persiuntimas" + label_download_plural: "%{count} persiuntimai" label_no_data: Nėra ką atvaizduoti label_change_status: Pakeitimo būsena label_history: Istorija @@ -567,17 +570,17 @@ label_closed_issues: uždaryta label_closed_issues_plural: uždaryti label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{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" + other: "%{count} open" label_x_closed_issues_abbr: zero: 0 uždarytu one: 1 uždarytas - other: "{{count}} uždarytu" + other: "%{count} uždarytu" label_total: Bendra suma label_permissions: Leidimai label_current_status: Einamoji būsena @@ -595,7 +598,7 @@ label_months_from: mėnesiai nuo label_gantt: Gantt label_internal: Vidinis - label_last_changes: "paskutiniai {{count}}, pokyčiai" + label_last_changes: "paskutiniai %{count}, pokyčiai" label_change_view_all: Peržiūrėti visus pakeitimus label_personalize_page: Suasmeninti šį puslapį label_comment: Komentaras @@ -603,7 +606,7 @@ label_x_comments: zero: nėra komentarų one: 1 komentaras - other: "{{count}} komentarų" + other: "%{count} komentarų" label_comment_add: Pridėkite komentarą label_comment_added: Komentaras pridėtas label_comment_delete: Pašalinkite komentarus @@ -622,7 +625,7 @@ label_yesterday: vakar label_this_week: šią savaitę label_last_week: paskutinė savaitė - label_last_n_days: "paskutinių {{count}} dienų" + label_last_n_days: "paskutinių %{count} dienų" label_this_month: šis menuo label_last_month: paskutinis menuo label_this_year: šiemet @@ -636,8 +639,8 @@ label_repository: Saugykla label_repository_plural: Saugyklos label_browse: Naršyti - label_modification: "{{count}} pakeitimas" - label_modification_plural: "{{count}} pakeitimai" + label_modification: "%{count} pakeitimas" + label_modification_plural: "%{count} pakeitimai" label_revision: Revizija label_revision_plural: Revizijos label_associated_revisions: susijusios revizijos @@ -655,8 +658,8 @@ label_sort_lower: Perkelti žemyn label_sort_lowest: Perkelti į apačią label_roadmap: Veiklos grafikas - label_roadmap_due_in: "Baigiasi po {{value}}" - label_roadmap_overdue: "{{value}} vėluojama" + label_roadmap_due_in: "Baigiasi po %{value}" + label_roadmap_overdue: "%{value} vėluojama" label_roadmap_no_issues: Jokio darbo šiai versijai nėra label_search: Ieškoti label_result_plural: Rezultatai @@ -674,8 +677,8 @@ label_changes_details: Visų pakeitimų detalės label_issue_tracking: Darbų sekimas label_spent_time: Dirbtas laikas - label_f_hour: "{{value}} valanda" - label_f_hour_plural: "{{value}} valandų" + label_f_hour: "%{value} valanda" + label_f_hour_plural: "%{value} valandų" label_time_tracking: Laiko sekimas label_change_plural: Pakeitimai label_statistics: Statistika @@ -724,13 +727,13 @@ label_date_from: Nuo label_date_to: Iki label_language_based: Pagrįsta vartotojo kalba - label_sort_by: "Rūšiuoti pagal {{value}}" + label_sort_by: "Rūšiuoti pagal %{value}" label_send_test_email: Nusiųsti bandomąjį elektroninį laišką - label_feeds_access_key_created_on: "RSS prieigos raktas sukurtas prieš {{value}}" + label_feeds_access_key_created_on: "RSS prieigos raktas sukurtas prieš %{value}" label_module_plural: Moduliai - label_added_time_by: "Pridėjo {{author}} prieš {{age}}" - label_updated_time_by: "Atnaujino {{author}} {{age}} atgal" - label_updated_time: "Atnaujinta prieš {{value}}" + label_added_time_by: "Pridėjo %{author} prieš %{age}" + label_updated_time_by: "Atnaujino %{author} %{age} atgal" + label_updated_time: "Atnaujinta prieš %{value}" label_jump_to_a_project: Šuolis į projektą... label_file_plural: Bylos label_changeset_plural: Changesets @@ -746,7 +749,7 @@ label_registration_activation_by_email: "paskyros aktyvacija per e-paštą" label_registration_manual_activation: "rankinė paskyros aktyvacija" label_registration_automatic_activation: "automatinė paskyros aktyvacija" - label_display_per_page: "{{value}} įrašų puslapyje" + label_display_per_page: "%{value} įrašų puslapyje" label_age: Amžius label_change_properties: Pakeisti nustatymus label_general: Bendri @@ -770,7 +773,7 @@ label_descending: Descending label_sort: Rūšiuoti label_ascending: Ascending - label_date_from_to: From {{start}} to {{end}} + label_date_from_to: From %{start} to %{end} label_greater_or_equal: ">=" label_less_or_equal: <= label_wiki_content_added: Wiki puslapis pridėtas @@ -844,52 +847,52 @@ text_regexp_info: pvz. ^[A-Z0-9]+$ text_min_max_length_info: 0 reiškia jokių apribojimų text_project_destroy_confirmation: Ar esate įsitikinęs, kad jūs norite pašalinti šį projektą ir visus susijusius duomenis? - text_subprojects_destroy_warning: "Šis(ie) subprojektas(ai): {{value}} taip pat bus ištrintas(i)." + text_subprojects_destroy_warning: "Šis(ie) subprojektas(ai): %{value} taip pat bus ištrintas(i)." text_workflow_edit: Išrinkite vaidmenį ir pėdsekį, kad redaguotumėte darbų eigą text_are_you_sure: Ar esate įsitikinęs? - text_journal_changed: "{{label}} pakeista iš {{old}} į {{new}}" - text_journal_set_to: "{{label}} pakeista į {{value}}" - text_journal_deleted: "{{label}} ištrintas ({{old}})" - text_journal_added: "{{label}} {{value}} pridėtas" + text_journal_changed: "%{label} pakeista iš %{old} į %{new}" + text_journal_set_to: "%{label} pakeista į %{value}" + text_journal_deleted: "%{label} ištrintas (%{old})" + text_journal_added: "%{label} %{value} pridėtas" text_tip_issue_begin_day: užduotis, prasidedanti šią dieną text_tip_issue_end_day: užduotis, pasibaigianti šią dieną text_tip_issue_begin_end_day: užduotis, prasidedanti ir pasibaigianti šią dieną text_project_identifier_info: 'Mažosios raidės (a-z), skaičiai ir brūkšniai galimi.
    Išsaugojus, identifikuotojas negali būti keičiamas.' - text_caracters_maximum: "{{count}} simbolių maksimumas." - text_caracters_minimum: "Turi būti mažiausiai {{count}} simbolių ilgio." - text_length_between: "Ilgis tarp {{min}} ir {{max}} simbolių." + text_caracters_maximum: "%{count} simbolių maksimumas." + text_caracters_minimum: "Turi būti mažiausiai %{count} simbolių ilgio." + text_length_between: "Ilgis tarp %{min} ir %{max} simbolių." text_tracker_no_workflow: Jokia darbų eiga neapibrėžta šiam pėdsekiui text_unallowed_characters: Neleistini simboliai text_comma_separated: Leistinos kelios reikšmės (atskirtos kableliu). text_issues_ref_in_commit_messages: Darbų pavedimų(commit) nurodymas ir fiksavimas pranešimuose - text_issue_added: "Darbas {{id}} buvo praneštas (by {{author}})." - text_issue_updated: "Darbas {{id}} buvo atnaujintas (by {{author}})." + text_issue_added: "Darbas %{id} buvo praneštas (by %{author})." + text_issue_updated: "Darbas %{id} buvo atnaujintas (by %{author})." text_wiki_destroy_confirmation: Ar esate įsitikinęs, kad jūs norite pašalinti wiki ir visą jos turinį? - text_issue_category_destroy_question: "Kai kurie darbai ({{count}}) yra paskirti šiai kategorijai. Ką jūs norite daryti?" + text_issue_category_destroy_question: "Kai kurie darbai (%{count}) yra paskirti šiai kategorijai. Ką jūs norite daryti?" text_issue_category_destroy_assignments: Pašalinti kategorijos užduotis text_issue_category_reassign_to: Iš naujo priskirti darbus šiai kategorijai text_user_mail_option: "neišrinktiems projektams, jūs tiktai gausite pranešimus apie įvykius, kuriuos jūs stebite, arba į kuriuos esate įtrauktas (pvz. darbai, jūs esate autorius ar įgaliotinis)." text_no_configuration_data: "Vaidmenys, pėdsekiai, darbų būsenos ir darbų eiga dar nebuvo konfigūruoti.\nGriežtai rekomenduojam užkrauti numatytąją(default)konfiguraciją. Užkrovus, galėsite ją modifikuoti." text_load_default_configuration: Užkrauti numatytąj konfiguraciją - text_status_changed_by_changeset: "Pakeista {{value}} revizijoje." + text_status_changed_by_changeset: "Pakeista %{value} revizijoje." text_issues_destroy_confirmation: 'Ar jūs tikrai norite sunaikinti pažymėtą(us) darbą(us)?' text_select_project_modules: 'Parinkite modulius, kuriuos norite naudoti šiame projekte:' text_default_administrator_account_changed: Administratoriaus numatyta paskyra pakeista text_file_repository_writable: Į rinkmenu saugyklą galima saugoti (RW) text_plugin_assets_writable: Įskiepių 'assets' katalogas įrašomas text_rmagick_available: RMagick pasiekiamas (pasirinktinai) - text_destroy_time_entries_question: Naikinamam darbui priskirta {{hours}} valandų. Ką jūs noryte su jomis daryti? + text_destroy_time_entries_question: Naikinamam darbui priskirta %{hours} valandų. Ką jūs noryte su jomis daryti? text_destroy_time_entries: Ištrinti paskelbtas valandas text_assign_time_entries_to_project: Priskirti valandas prie projekto text_reassign_time_entries: 'Priskirti paskelbtas valandas šiam darbui:' - text_user_wrote: "{{value}} parašė:" - text_enumeration_destroy_question: "{{count}} objektai priskirti šiai reikšmei." + 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' - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? + text_wiki_page_destroy_question: This page has %{descendants} child page(s) and descendant(s). What do you want to do? text_wiki_page_reassign_children: Priskirkite iš naujo 'child' puslapius šiam puslapiui text_wiki_page_nullify_children: Laikyti child puslapius as root puslapius text_wiki_page_destroy_children: Pašalinti child puslapius ir jų sekinius @@ -934,9 +937,9 @@ label_update_issue_done_ratios: Update issue done ratios permission_view_issues: View Issues label_display_used_statuses_only: Only display statuses that are used by this tracker - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_api_access_key: API access key - label_api_access_key_created_on: API access key created {{value}} ago + label_api_access_key_created_on: API access key created %{value} ago label_feeds_access_key: RSS access key notice_api_access_key_reseted: Your API access key was reset. setting_rest_api_enabled: Enable REST web service @@ -963,12 +966,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -976,7 +979,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -987,8 +990,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Commit pranešimų koduotė + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/lv.yml --- a/config/locales/lv.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/lv.yml Mon Jul 25 14:23:37 2011 +0100 @@ -13,7 +13,10 @@ month_names: [~, Janvāris, Februāris, Marts, Aprīlis , Maijs, Jūnijs, Jūlijs, Augusts, Septembris, Oktobris, Novembris, Decembris] abbr_month_names: [~, Jan, Feb, Mar, Apr, Mai, Jūn, Jūl, Aug, Sep, Okt, Nov, Dec] - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -29,37 +32,37 @@ half_a_minute: "pus minūte" less_than_x_seconds: one: "mazāk kā 1 sekunde" - other: "mazāk kā {{count}} sekundes" + other: "mazāk kā %{count} sekundes" x_seconds: one: "1 sekunde" - other: "{{count}} sekundes" + other: "%{count} sekundes" less_than_x_minutes: one: "mazāk kā minūte" - other: "mazāk kā {{count}} minūtes" + other: "mazāk kā %{count} minūtes" x_minutes: one: "1 minūte" - other: "{{count}} minūtes" + other: "%{count} minūtes" about_x_hours: one: "aptuveni 1 stunda" - other: "aptuveni {{count}} stundas" + other: "aptuveni %{count} stundas" x_days: one: "1 diena" - other: "{{count}} dienas" + other: "%{count} dienas" about_x_months: one: "aptuveni 1 mēnesis" - other: "aptuveni {{count}} mēneši" + other: "aptuveni %{count} mēneši" x_months: one: "1 mēnesis" - other: "{{count}} mēneši" + other: "%{count} mēneši" about_x_years: one: "aptuveni 1 gads" - other: "aptuveni {{count}} gadi" + other: "aptuveni %{count} gadi" over_x_years: one: "ilgāk par 1 gadu" - other: "ilgāk par {{count}} gadiem" + other: "ilgāk par %{count} gadiem" almost_x_years: one: "gandrīz 1 gadu" - other: "gandrīz {{count}} gadus" + other: "gandrīz %{count} gadus" number: format: @@ -89,6 +92,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "nav iekļauts sarakstā" exclusion: "ir rezervēts" @@ -97,17 +104,17 @@ accepted: "jābūt akceptētam" empty: "nevar būt tukšs" blank: "nevar būt neaizpildīts" - too_long: "ir pārāk gara(š) (maksimālais garums ir {{count}} simboli)" - too_short: "ir pārāk īsa(s) (minimālais garums ir {{count}} simboli)" - wrong_length: "ir nepareiza garuma (vajadzētu būt {{count}} simboli)" + too_long: "ir pārāk gara(š) (maksimālais garums ir %{count} simboli)" + too_short: "ir pārāk īsa(s) (minimālais garums ir %{count} simboli)" + wrong_length: "ir nepareiza garuma (vajadzētu būt %{count} simboli)" taken: "eksistē" not_a_number: "nav skaitlis" not_a_date: "nav derīgs datums" - greater_than: "jābūt lielākam par {{count}}" - greater_than_or_equal_to: "jābūt lielākam vai vienādam ar {{count}}" - equal_to: "jābūt vienādam ar {{count}}" - less_than: "jābūt mazākam kā {{count}}" - less_than_or_equal_to: "jābūt mazākam vai vienādam ar {{count}}" + greater_than: "jābūt lielākam par %{count}" + greater_than_or_equal_to: "jābūt lielākam vai vienādam ar %{count}" + equal_to: "jābūt vienādam ar %{count}" + less_than: "jābūt mazākam kā %{count}" + less_than_or_equal_to: "jābūt mazākam vai vienādam ar %{count}" odd: "jāatšķirās" even: "jāsakrīt" greater_than_start_date: "jābūt vēlākam par sākuma datumu" @@ -144,20 +151,20 @@ notice_file_not_found: Lapa, ko Jūs mēģināt atvērt, neeksistē vai ir pārvietota. notice_locking_conflict: Datus ir atjaunojis cits lietotājs. notice_not_authorized: Jums nav tiesību piekļūt šai lapai. - notice_email_sent: "E-pasts tika nosūtīts uz {{value}}" - notice_email_error: "Kļūda sūtot e-pastu ({{value}})" + notice_email_sent: "E-pasts tika nosūtīts uz %{value}" + notice_email_error: "Kļūda sūtot e-pastu (%{value})" notice_feeds_access_key_reseted: Jūsu RSS pieejas atslēga tika iestatīta sākuma stāvoklī. notice_api_access_key_reseted: Jūsu API pieejas atslēga tika iestatīta sākuma stāvoklī. - notice_failed_to_save_issues: "Neizdevās saglabāt {{count}} uzdevumu(us) no {{total}} izvēlēti: {{ids}}." + notice_failed_to_save_issues: "Neizdevās saglabāt %{count} uzdevumu(us) no %{total} izvēlēti: %{ids}." notice_no_issue_selected: "Nav izvēlēts uzdevums! Lūdzu, atzīmējiet uzdevumus, kurus vēlaties rediģēt!" notice_account_pending: "Jūsu konts tika izveidots un šobrīd gaida administratora apstiprinājumu." notice_default_data_loaded: Noklusētā konfigurācija tika veiksmīgi ielādēta. notice_unable_delete_version: Neizdevās dzēst versiju. notice_issue_done_ratios_updated: Uzdevuma izpildes koeficients atjaunots. - error_can_t_load_default_data: "Nevar ielādēt noklusētos konfigurācijas datus: {{value}}" + error_can_t_load_default_data: "Nevar ielādēt noklusētos konfigurācijas datus: %{value}" error_scm_not_found: "Ieraksts vai versija nebija repozitorijā." - error_scm_command_failed: "Mēģinot piekļūt repozitorijam, notika kļūda: {{value}}" + error_scm_command_failed: "Mēģinot piekļūt repozitorijam, notika kļūda: %{value}" error_scm_annotate: "Ieraksts neeksistē vai tam nevar tikt pievienots paskaidrojums." error_issue_not_found_in_project: 'Uzdevums netika atrasts vai nepieder šim projektam.' error_no_tracker_in_project: 'Neviens trakeris nav saistīts ar šo projektu. Pārbaudiet projekta iestatījumus.' @@ -168,25 +175,25 @@ error_workflow_copy_source: 'Lūdzu izvēlieties avota trakeri vai lomu' error_workflow_copy_target: 'Lūdzu izvēlēties mērķa trakeri(us) un lomu(as)' - warning_attachments_not_saved: "{{count}} datnes netika saglabātas." + warning_attachments_not_saved: "%{count} datnes netika saglabātas." - mail_subject_lost_password: "Jūsu {{value}} parole" + mail_subject_lost_password: "Jūsu %{value} parole" mail_body_lost_password: 'Lai mainītu paroli, spiediet uz šīs saites:' - mail_subject_register: "Jūsu {{value}} konta aktivizācija" + mail_subject_register: "Jūsu %{value} konta aktivizācija" mail_body_register: 'Lai izveidotu kontu, spiediet uz šīs saites:' - mail_body_account_information_external: "Varat izmantot Jūsu {{value}} kontu, lai pieslēgtos." + mail_body_account_information_external: "Varat izmantot Jūsu %{value} kontu, lai pieslēgtos." mail_body_account_information: Jūsu konta informācija - mail_subject_account_activation_request: "{{value}} konta aktivizācijas pieprasījums" - mail_body_account_activation_request: "Jauns lietotājs ({{value}}) ir reģistrēts. Lietotāja konts gaida Jūsu apstiprinājumu:" - mail_subject_reminder: "{{count}} uzdevums(i) sagaidāms(i) tuvākajās {{days}} dienās" - mail_body_reminder: "{{count}} uzdevums(i), kurš(i) ir nozīmēts(i) Jums, sagaidāms(i) tuvākajās {{days}} dienās:" - mail_subject_wiki_content_added: "'{{id}}' Wiki lapa pievienota" - mail_body_wiki_content_added: "The '{{id}}' Wiki lapu pievienojis {{author}}." - mail_subject_wiki_content_updated: "'{{id}}' Wiki lapa atjaunota" - mail_body_wiki_content_updated: "The '{{id}}' Wiki lapu atjaunojis {{author}}." + mail_subject_account_activation_request: "%{value} konta aktivizācijas pieprasījums" + mail_body_account_activation_request: "Jauns lietotājs (%{value}) ir reģistrēts. Lietotāja konts gaida Jūsu apstiprinājumu:" + mail_subject_reminder: "%{count} uzdevums(i) sagaidāms(i) tuvākajās %{days} dienās" + mail_body_reminder: "%{count} uzdevums(i), kurš(i) ir nozīmēts(i) Jums, sagaidāms(i) tuvākajās %{days} dienās:" + mail_subject_wiki_content_added: "'%{id}' Wiki lapa pievienota" + mail_body_wiki_content_added: "The '%{id}' Wiki lapu pievienojis %{author}." + mail_subject_wiki_content_updated: "'%{id}' Wiki lapa atjaunota" + mail_body_wiki_content_updated: "The '%{id}' Wiki lapu atjaunojis %{author}." gui_validation_error: 1 kļūda - gui_validation_error_plural: "{{count}} kļūdas" + gui_validation_error_plural: "%{count} kļūdas" field_name: Nosaukums field_description: Apraksts @@ -248,7 +255,8 @@ field_attr_lastname: Uzvārda atribūts field_attr_mail: "E-pasta atribūts" field_onthefly: "Lietotāja izveidošana on-the-fly" - field_done_ratio: % padarīti + field_start_date: Sākuma datums + field_done_ratio: "% padarīti" field_auth_source: Pilnvarošanas režīms field_hide_mail: "Paslēpt manu e-pasta adresi" field_comments: Komentārs @@ -304,7 +312,6 @@ setting_cross_project_issue_relations: "Atļaut starp-projektu uzdevumu relācijas" setting_issue_list_default_columns: Noklusēti rādītās kolonnas uzdevumu sarakstā setting_repositories_encodings: Repozitoriju kodējumi - setting_commit_logs_encoding: Kodēt ziņojumus setting_emails_footer: "E-pastu kājene" setting_protocol: Protokols setting_per_page_options: Objekti vienā lapā @@ -406,14 +413,14 @@ label_x_projects: zero: nav projektu one: 1 projekts - other: "{{count}} projekti" + other: "%{count} projekti" label_project_all: Visi projekti label_project_latest: Jaunākie projekti label_issue: Uzdevums label_issue_new: Jauns uzdevums label_issue_plural: Uzdevumi label_issue_view_all: Skatīt visus uzdevumus - label_issues_by: "Kārtot pēc {{value}}" + label_issues_by: "Kārtot pēc %{value}" label_issue_added: Uzdevums pievienots label_issue_updated: Uzdevums atjaunots label_document: Dokuments @@ -463,7 +470,7 @@ label_registered_on: Reģistrējies label_activity: Aktivitāte label_overall_activity: Kopējās aktivitātes - label_user_activity: "Lietotāja {{value}} aktivitātes" + label_user_activity: "Lietotāja %{value} aktivitātes" label_new: Jauns label_logged_as: Pieslēdzies kā label_environment: Vide @@ -473,7 +480,7 @@ label_auth_source_plural: Pilnvarošanas režīmi label_subproject_plural: Apakšprojekti label_subproject_new: Jauns apakšprojekts - label_and_its_subprojects: "{{value}} un tā apakšprojekti" + label_and_its_subprojects: "%{value} un tā apakšprojekti" label_min_max_length: Minimālais - Maksimālais garums label_list: Saraksts label_date: Datums @@ -484,8 +491,8 @@ label_text: Garš teksts label_attribute: Atribūts label_attribute_plural: Atribūti - label_download: "{{count}} Lejupielāde" - label_download_plural: "{{count}} Lejupielādes" + label_download: "%{count} Lejupielāde" + label_download_plural: "%{count} Lejupielādes" label_no_data: Nav datu, ko parādīt label_change_status: Mainīt statusu label_history: Vēsture @@ -517,17 +524,17 @@ label_closed_issues: slēgts label_closed_issues_plural: slēgti label_x_open_issues_abbr_on_total: - zero: 0 atvērti / {{total}} - one: 1 atvērts / {{total}} - other: "{{count}} atvērti / {{total}}" + zero: 0 atvērti / %{total} + one: 1 atvērts / %{total} + other: "%{count} atvērti / %{total}" label_x_open_issues_abbr: zero: 0 atvērti one: 1 atvērts - other: "{{count}} atvērti" + other: "%{count} atvērti" label_x_closed_issues_abbr: zero: 0 slēgti one: 1 slēgts - other: "{{count}} slēgti" + other: "%{count} slēgti" label_total: Kopā label_permissions: Atļaujas label_current_status: Pašreizējais statuss @@ -545,7 +552,7 @@ label_months_from: mēneši no label_gantt: Ganta diagramma label_internal: Iekšējais - label_last_changes: "pēdējās {{count}} izmaiņas" + label_last_changes: "pēdējās %{count} izmaiņas" label_change_view_all: Skatīt visas izmaiņas label_personalize_page: Pielāgot šo lapu label_comment: Komentārs @@ -553,7 +560,7 @@ label_x_comments: zero: nav komentāru one: 1 komentārs - other: "{{count}} komentāri" + other: "%{count} komentāri" label_comment_add: Pievienot komentāru label_comment_added: Komentārs pievienots label_comment_delete: Dzēst komentārus @@ -574,7 +581,7 @@ label_yesterday: vakar label_this_week: šonedēļ label_last_week: pagājušo šonedēļ - label_last_n_days: "pēdējās {{count}} dienas" + label_last_n_days: "pēdējās %{count} dienas" label_this_month: šomēnes label_last_month: pagājušo mēnes label_this_year: šogad @@ -588,13 +595,13 @@ label_repository: Repozitorijs label_repository_plural: Repozitoriji label_browse: Pārlūkot - label_modification: "{{count}} izmaiņa" - label_modification_plural: "{{count}} izmaiņas" + label_modification: "%{count} izmaiņa" + label_modification_plural: "%{count} izmaiņas" label_branch: Zars label_tag: Birka label_revision: Revīzija label_revision_plural: Revīzijas - label_revision_id: "Revīzija {{value}}" + label_revision_id: "Revīzija %{value}" label_associated_revisions: Saistītās revīzijas label_added: pievienots label_modified: modificēts @@ -611,8 +618,8 @@ label_sort_lower: Pārvietot uz leju label_sort_lowest: Pārvietot vienu soli uz leju label_roadmap: Ceļvedis - label_roadmap_due_in: "Sagaidāms pēc {{value}}" - label_roadmap_overdue: "nokavēts {{value}}" + label_roadmap_due_in: "Sagaidāms pēc %{value}" + label_roadmap_overdue: "nokavēts %{value}" label_roadmap_no_issues: Šai versijai nav uzdevumu label_search: Meklēt label_result_plural: Rezultāti @@ -630,8 +637,8 @@ label_changes_details: Visu izmaiņu detaļas label_issue_tracking: Uzdevumu uzskaite label_spent_time: Pavadītais laiks - label_f_hour: "{{value}} stunda" - label_f_hour_plural: "{{value}} stundas" + label_f_hour: "%{value} stunda" + label_f_hour_plural: "%{value} stundas" label_time_tracking: Laika uzskaite label_change_plural: Izmaiņas label_statistics: Statistika @@ -682,15 +689,15 @@ label_date_from: No label_date_to: Kam label_language_based: Izmantot lietotāja valodu - label_sort_by: "Kārtot pēc {{value}}" + label_sort_by: "Kārtot pēc %{value}" label_send_test_email: "Sūtīt testa e-pastu" label_feeds_access_key: RSS piekļuves atslēga label_missing_feeds_access_key: Trūkst RSS piekļuves atslēgas - label_feeds_access_key_created_on: "RSS piekļuves atslēga izveidota pirms {{value}}" + label_feeds_access_key_created_on: "RSS piekļuves atslēga izveidota pirms %{value}" label_module_plural: Moduļi - label_added_time_by: "Pievienojis {{author}} pirms {{age}}" - label_updated_time_by: "Atjaunojis {{author}} pirms {{age}}" - label_updated_time: "Atjaunots pirms {{value}}" + label_added_time_by: "Pievienojis %{author} pirms %{age}" + label_updated_time_by: "Atjaunojis %{author} pirms %{age}" + label_updated_time: "Atjaunots pirms %{value}" label_jump_to_a_project: Pāriet uz projektu... label_file_plural: Datnes label_changeset_plural: Izmaiņu kopumi @@ -706,7 +713,7 @@ label_registration_activation_by_email: "konta aktivizācija caur e-pastu" label_registration_manual_activation: manuālā konta aktivizācija label_registration_automatic_activation: automātiskā konta aktivizācija - label_display_per_page: "Rādīt vienā lapā: {{value}}" + label_display_per_page: "Rādīt vienā lapā: %{value}" label_age: Vecums label_change_properties: Mainīt atribūtus label_general: Galvenais @@ -729,7 +736,7 @@ label_sort: Kārtot label_ascending: Augoši label_descending: Dilstoši - label_date_from_to: "No {{start}} līdz {{end}}" + label_date_from_to: "No %{start} līdz %{end}" label_wiki_content_added: Wiki lapa pievienota label_wiki_content_updated: Wiki lapa atjaunota label_group: Grupa @@ -748,7 +755,7 @@ label_display_used_statuses_only: "Rādīt tikai statusus, ko lieto šis trakeris" label_api_access_key: API pieejas atslēga label_missing_api_access_key: Trūkst API pieejas atslēga - label_api_access_key_created_on: "API pieejas atslēga izveidota pirms {{value}}" + label_api_access_key_created_on: "API pieejas atslēga izveidota pirms %{value}" button_login: Pieslēgties button_submit: Nosūtīt @@ -808,53 +815,53 @@ text_regexp_info: "piem. ^[A-Z0-9]+$" text_min_max_length_info: "0 nozīmē, ka nav ierobežojumu" text_project_destroy_confirmation: "Vai tiešām vēlaties dzēst šo projektu un ar to saistītos datus?" - text_subprojects_destroy_warning: "Tā apakšprojekts(i): {{value}} arī tiks dzēsts(i)." + text_subprojects_destroy_warning: "Tā apakšprojekts(i): %{value} arī tiks dzēsts(i)." text_workflow_edit: Lai labotu darba plūsmu, izvēlieties lomu un trakeri text_are_you_sure: "Vai esat pārliecināts?" - text_journal_changed: "{{label}} mainīts no {{old}} uz {{new}}" - text_journal_set_to: "{{label}} iestatīts uz {{value}}" - text_journal_deleted: "{{label}} dzēsts ({{old}})" - text_journal_added: "{{label}} {{value}} pievienots" + text_journal_changed: "%{label} mainīts no %{old} uz %{new}" + text_journal_set_to: "%{label} iestatīts uz %{value}" + text_journal_deleted: "%{label} dzēsts (%{old})" + text_journal_added: "%{label} %{value} pievienots" text_tip_issue_begin_day: uzdevums sākas šodien text_tip_issue_end_day: uzdevums beidzas šodien text_tip_issue_begin_end_day: uzdevums sākas un beidzas šodien text_project_identifier_info: 'Tikai mazie burti (a-z), cipari un domuzīmes ir atļauti.
    Kad saglabāts, identifikators nevar tikt mainīts.' - text_caracters_maximum: "{{count}} simboli maksimāli." - text_caracters_minimum: "Jābūt vismaz {{count}} simbolu garumā." - text_length_between: "Garums starp {{min}} un {{max}} simboliem." + text_caracters_maximum: "%{count} simboli maksimāli." + text_caracters_minimum: "Jābūt vismaz %{count} simbolu garumā." + text_length_between: "Garums starp %{min} un %{max} simboliem." text_tracker_no_workflow: Šim trakerim nav definēta darba plūsma text_unallowed_characters: Neatļauti simboli text_comma_separated: "Atļautas vairākas vērtības (atdalīt ar komatu)." text_line_separated: "Atļautas vairākas vērtības (rakstīt katru savā rindā)." text_issues_ref_in_commit_messages: "Izmaiņu salīdzināšana izejot no ziņojumiem" - text_issue_added: "Uzdevumu {{id}} pievienojis {{author}}." - text_issue_updated: "Uzdevumu {{id}} atjaunojis {{author}}." + text_issue_added: "Uzdevumu %{id} pievienojis %{author}." + text_issue_updated: "Uzdevumu %{id} atjaunojis %{author}." text_wiki_destroy_confirmation: "Vai esat drošs, ka vēlaties dzēst šo wiki un visu tās saturu?" - text_issue_category_destroy_question: "Daži uzdevumi ({{count}}) ir nozīmēti šai kategorijai. Ko Jūs vēlaties darīt?" + text_issue_category_destroy_question: "Daži uzdevumi (%{count}) ir nozīmēti šai kategorijai. Ko Jūs vēlaties darīt?" text_issue_category_destroy_assignments: Dzēst kategoriju nozīmējumus text_issue_category_reassign_to: Nozīmēt uzdevumus šai kategorijai text_user_mail_option: "No neizvēlētajiem projektiem Jūs saņemsiet ziņojumus e-pastā tikai par notikumiem, kuriem Jūs sekojat vai kuros esat iesaistīts." text_no_configuration_data: "Lomas, trakeri, uzdevumu statusi un darba plūsmas vēl nav konfigurētas.\nĻoti ieteicams ielādēt noklusēto konfigurāciju. Pēc ielādēšanas to būs iespējams modificēt." text_load_default_configuration: Ielādēt noklusēto konfigurāciju - text_status_changed_by_changeset: "Apstiprināts izmaiņu kopumā {{value}}." + text_status_changed_by_changeset: "Apstiprināts izmaiņu kopumā %{value}." text_issues_destroy_confirmation: 'Vai tiešām vēlaties dzēst izvēlēto uzdevumu(us)?' text_select_project_modules: 'Izvēlieties moduļus šim projektam:' text_default_administrator_account_changed: Noklusētais administratora konts mainīts text_file_repository_writable: Pielikumu direktorijā atļauts rakstīt text_plugin_assets_writable: Spraudņu kataloga direktorijā atļauts rakstīt text_rmagick_available: "RMagick pieejams (neobligāts)" - text_destroy_time_entries_question: "{{hours}} stundas tika ziņotas par uzdevumu, ko vēlaties dzēst. Ko darīt?" + text_destroy_time_entries_question: "%{hours} stundas tika ziņotas par uzdevumu, ko vēlaties dzēst. Ko darīt?" text_destroy_time_entries: Dzēst ziņotās stundas text_assign_time_entries_to_project: Piešķirt ziņotās stundas projektam text_reassign_time_entries: 'Piešķirt ziņotās stundas uzdevumam:' - text_user_wrote: "{{value}} rakstīja:" - text_enumeration_destroy_question: "{{count}} objekti ir piešķirti šai vērtībai." + 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ā' - text_wiki_page_destroy_question: "Šij lapai ir {{descendants}} apakšlapa(as) un pēcnācēji. Ko darīt?" + text_wiki_page_destroy_question: "Šij lapai ir %{descendants} apakšlapa(as) un pēcnācēji. Ko darīt?" text_wiki_page_nullify_children: "Paturēt apakšlapas kā pamatlapas" text_wiki_page_destroy_children: "Dzēst apakšlapas un visus pēcnācējus" text_wiki_page_reassign_children: "Piešķirt apakšlapas šai lapai" @@ -890,7 +897,7 @@ 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}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. field_parent_issue: Parent task error_unable_delete_issue_status: Unable to delete issue status @@ -899,7 +906,7 @@ label_project_copy_notifications: Send email notifications during the project copy field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -907,7 +914,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -917,9 +924,51 @@ 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. - field_start_date: Start date + 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 + 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Kodēt ziņojumus + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/mk.yml --- a/config/locales/mk.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/mk.yml Mon Jul 25 14:23:37 2011 +0100 @@ -17,7 +17,10 @@ month_names: [~, јануари, февруари, март, април, мај, јуни, јули, август, септември, октомври, ноември, декември] abbr_month_names: [~, јан, фев, мар, апр, мај, јун, јул, авг, сеп, окт, ное, дек] # Used in date_select and datime_select. - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -33,37 +36,37 @@ half_a_minute: "пола минута" less_than_x_seconds: one: "помалку од 1 секунда" - other: "помалку од {{count}} секунди" + other: "помалку од %{count} секунди" x_seconds: one: "1 секунда" - other: "{{count}} секунди" + other: "%{count} секунди" less_than_x_minutes: one: "помалку од 1 минута" - other: "помалку од {{count}} минути" + other: "помалку од %{count} минути" x_minutes: one: "1 минута" - other: "{{count}} минути" + other: "%{count} минути" about_x_hours: one: "околу 1 час" - other: "околу {{count}} часа" + other: "околу %{count} часа" x_days: one: "1 ден" - other: "{{count}} дена" + other: "%{count} дена" about_x_months: one: "околу 1 месец" - other: "околу {{count}} месеци" + other: "околу %{count} месеци" x_months: one: "1 месец" - other: "{{count}} месеци" + other: "%{count} месеци" about_x_years: one: "околу 1 година" - other: "околу {{count}} години" + other: "околу %{count} години" over_x_years: one: "преку 1 година" - other: "преку {{count}} години" + other: "преку %{count} години" almost_x_years: one: "скоро 1 година" - other: "скоро {{count}} години" + other: "скоро %{count} години" number: # Default format for numbers @@ -95,6 +98,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "не е вклучено во листата" exclusion: "е резервирано" @@ -103,17 +110,17 @@ accepted: "мора да е прифатено" empty: "неможе да е празно" blank: "неможе да е празно" - too_long: "е предолго (макс. {{count}} знаци)" - too_short: "е прекратко (мин. {{count}} знаци)" - wrong_length: "е погрешна должина (треба да е {{count}} знаци)" + 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}}" + 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: "мора да е поголема од почетната дата" @@ -150,12 +157,12 @@ 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 authorized to access this page. - notice_email_sent: "Е-порака е пратена на {{value}}" - notice_email_error: "Се случи грешка при праќање на е-пораката ({{value}})" + notice_email_sent: "Е-порака е пратена на %{value}" + notice_email_error: "Се случи грешка при праќање на е-пораката (%{value})" notice_feeds_access_key_reseted: Вашиот RSS клуч за пристап е reset. notice_api_access_key_reseted: Вашиот API клуч за пристап е reset. - notice_failed_to_save_issues: "Failed to save {{count}} issue(s) on {{total}} selected: {{ids}}." - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + notice_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}." + notice_failed_to_save_members: "Failed to save member(s): %{errors}." 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. @@ -163,9 +170,9 @@ notice_unable_delete_time_entry: Unable to delete time log entry. notice_issue_done_ratios_updated: Issue done ratios updated. - error_can_t_load_default_data: "Default configuration could not be loaded: {{value}}" + 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_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.' @@ -179,26 +186,26 @@ error_workflow_copy_source: 'Please select a source tracker or role' error_workflow_copy_target: 'Please select target tracker(s) and role(s)' error_unable_delete_issue_status: 'Unable to delete issue status' - error_unable_to_connect: "Unable to connect ({{value}})" - warning_attachments_not_saved: "{{count}} file(s) could not be saved." + error_unable_to_connect: "Unable to connect (%{value})" + warning_attachments_not_saved: "%{count} file(s) could not be saved." - mail_subject_lost_password: "Вашата {{value}} лозинка" + mail_subject_lost_password: "Вашата %{value} лозинка" mail_body_lost_password: 'To change your password, click on the following link:' - mail_subject_register: "Your {{value}} account activation" + 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_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: "Нов корисник ({{value}}) е регистриран. 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}}." + mail_subject_account_activation_request: "%{value} account activation request" + mail_body_account_activation_request: "Нов корисник (%{value}) е регистриран. 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 грешка - gui_validation_error_plural: "{{count}} грешки" + gui_validation_error_plural: "%{count} грешки" field_name: Име field_description: Опис @@ -261,7 +268,8 @@ field_attr_lastname: Lastname attribute field_attr_mail: Email attribute field_onthefly: Моментално (On-the-fly) креирање на корисници - field_done_ratio: % Завршено + field_start_date: Почеток + field_done_ratio: "% Завршено" field_auth_source: Режим на автентикација field_hide_mail: Криј ја мојата адреса на е-пошта field_comments: Коментар @@ -319,7 +327,6 @@ setting_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: Протокол setting_per_page_options: Objects per page options @@ -424,14 +431,14 @@ label_x_projects: zero: нема проекти one: 1 проект - other: "{{count}} проекти" + 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_issues_by: "Задачи по %{value}" label_issue_added: Задачата е додадена label_issue_updated: Задачата е ажурирана label_document: Документ @@ -482,7 +489,7 @@ label_registered_on: Регистриран на label_activity: Активност label_overall_activity: Севкупна активност - label_user_activity: "Активност на {{value}}" + label_user_activity: "Активност на %{value}" label_new: Нова label_logged_as: Најавени сте како label_environment: Опкружување @@ -492,7 +499,7 @@ label_auth_source_plural: Режими на автентикација label_subproject_plural: Подпроекти label_subproject_new: Нов подпроект - label_and_its_subprojects: "{{value}} и неговите подпроекти" + label_and_its_subprojects: "%{value} и неговите подпроекти" label_min_max_length: Мин. - Макс. должина label_list: Листа label_date: Дата @@ -503,8 +510,8 @@ label_text: Долг текст label_attribute: Атрибут label_attribute_plural: Атрибути - label_download: "{{count}} превземање" - label_download_plural: "{{count}} превземања" + label_download: "%{count} превземање" + label_download_plural: "%{count} превземања" label_no_data: Нема податоци за прикажување label_change_status: Промени статус label_history: Историја @@ -536,17 +543,17 @@ label_closed_issues: затворена label_closed_issues_plural: затворени label_x_open_issues_abbr_on_total: - zero: 0 отворени / {{total}} - one: 1 отворена / {{total}} - other: "{{count}} отворени / {{total}}" + zero: 0 отворени / %{total} + one: 1 отворена / %{total} + other: "%{count} отворени / %{total}" label_x_open_issues_abbr: zero: 0 отворени one: 1 отворена - other: "{{count}} отворени" + other: "%{count} отворени" label_x_closed_issues_abbr: zero: 0 затворени one: 1 затворена - other: "{{count}} затворени" + other: "%{count} затворени" label_total: Вкупно label_permissions: Овластувања label_current_status: Моментален статус @@ -564,7 +571,7 @@ label_months_from: месеци од label_gantt: Gantt label_internal: Internal - label_last_changes: "последни {{count}} промени" + label_last_changes: "последни %{count} промени" label_change_view_all: Прегледај ги сите промени label_personalize_page: Прилагоди ја странава label_comment: Коментар @@ -572,7 +579,7 @@ label_x_comments: zero: нема коментари one: 1 коментар - other: "{{count}} коментари" + other: "%{count} коментари" label_comment_add: Додади коментар label_comment_added: Коментарот е додаден label_comment_delete: Избриши коментари @@ -593,7 +600,7 @@ label_yesterday: вчера label_this_week: оваа недела label_last_week: минатата недела - label_last_n_days: "последните {{count}} дена" + label_last_n_days: "последните %{count} дена" label_this_month: овој месец label_last_month: минатиот месец label_this_year: оваа година @@ -607,13 +614,13 @@ label_repository: Складиште label_repository_plural: Складишта label_browse: Прелистувај - label_modification: "{{count}} промени" - label_modification_plural: "{{count}} промени" + label_modification: "%{count} промени" + label_modification_plural: "%{count} промени" label_branch: Гранка label_tag: Tag label_revision: Ревизија label_revision_plural: Ревизии - label_revision_id: "Ревизија {{value}}" + label_revision_id: "Ревизија %{value}" label_associated_revisions: Associated revisions label_added: added label_modified: modified @@ -630,8 +637,8 @@ label_sort_lower: Премести надоле label_sort_lowest: Премести најдоле label_roadmap: Roadmap - label_roadmap_due_in: "Due in {{value}}" - label_roadmap_overdue: "Касни {{value}}" + label_roadmap_due_in: "Due in %{value}" + label_roadmap_overdue: "Касни %{value}" label_roadmap_no_issues: Нема задачи за оваа верзија label_search: Барај label_result_plural: Резултати @@ -650,8 +657,8 @@ label_issue_tracking: Следење на задачи label_spent_time: Потрошено време label_overall_spent_time: Вкупно потрошено време - label_f_hour: "{{value}} час" - label_f_hour_plural: "{{value}} часа" + label_f_hour: "%{value} час" + label_f_hour_plural: "%{value} часа" label_time_tracking: Следење на време label_change_plural: Промени label_statistics: Статистики @@ -702,15 +709,15 @@ label_date_from: Од label_date_to: До label_language_based: Според јазикот на корисникот - label_sort_by: "Подреди според {{value}}" + 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_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_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: Changesets @@ -726,7 +733,7 @@ label_registration_activation_by_email: активација на профил преку е-пошта label_registration_manual_activation: мануелна активација на профил label_registration_automatic_activation: автоматска активација на профил - label_display_per_page: "По страна: {{value}}" + label_display_per_page: "По страна: %{value}" label_age: Age label_change_properties: Change properties label_general: Општо @@ -749,7 +756,7 @@ label_sort: Подреди label_ascending: Растечки label_descending: Опаѓачки - label_date_from_to: Од {{start}} до {{end}} + label_date_from_to: Од %{start} до %{end} label_wiki_content_added: Вики страница додадена label_wiki_content_updated: Вики страница ажурирана label_group: Група @@ -768,7 +775,7 @@ label_display_used_statuses_only: Only display statuses that are used by this tracker label_api_access_key: API клуч за пристап label_missing_api_access_key: Недостига API клуч за пристап - label_api_access_key_created_on: "API клучот за пристап е креиран пред {{value}}" + label_api_access_key_created_on: "API клучот за пристап е креиран пред %{value}" label_profile: Профил label_subtask_plural: Подзадачи label_project_copy_notifications: Праќај известувања по е-пошта при копирање на проект @@ -831,53 +838,53 @@ text_regexp_info: eg. ^[A-Z0-9]+$ text_min_max_length_info: 0 значи без ограничување text_project_destroy_confirmation: Дали сте сигурни дека сакате да го избришете проектот и сите поврзани податоци? - text_subprojects_destroy_warning: "Неговите подпроекти: {{value}} исто така ќе бидат избришани." + text_subprojects_destroy_warning: "Неговите подпроекти: %{value} исто така ќе бидат избришани." text_workflow_edit: Select a role and a tracker to edit the workflow text_are_you_sure: Дали сте сигурни? - text_journal_changed: "{{label}} променето од {{old}} во {{new}}" - text_journal_set_to: "{{label}} set to {{value}}" - text_journal_deleted: "{{label}} избришан ({{old}})" - text_journal_added: "{{label}} {{value}} додаден" + text_journal_changed: "%{label} променето од %{old} во %{new}" + text_journal_set_to: "%{label} set to %{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), бројки и dashes се дозволени
    По зачувувањето, идентификаторот неможе да се смени.' - text_caracters_maximum: "{{count}} знаци максимум." - text_caracters_minimum: "Мора да е најмалку {{count}} знаци долго." - text_length_between: "Должина помеѓу {{min}} и {{max}} знаци." + text_caracters_maximum: "%{count} знаци максимум." + text_caracters_minimum: "Мора да е најмалку %{count} знаци долго." + text_length_between: "Должина помеѓу %{min} и %{max} знаци." text_tracker_no_workflow: No workflow defined for this tracker text_unallowed_characters: Недозволени знаци text_comma_separated: Дозволени се повеќе вредности (разделени со запирка). text_line_separated: Дозволени се повеќе вредности (една линија за секоја вредност). text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages - text_issue_added: "Задачата {{id}} е пријавена од {{author}}." - text_issue_updated: "Задачата {{id}} е ажурирана од {{author}}." + text_issue_added: "Задачата %{id} е пријавена од %{author}." + text_issue_updated: "Задачата %{id} е ажурирана од %{author}." text_wiki_destroy_confirmation: Дали сте сигурни дека сакате да го избришете ова вики и целата негова содржина? - text_issue_category_destroy_question: "Некои задачи ({{count}}) се доделени на оваа категорија. Што сакате да правите?" + text_issue_category_destroy_question: "Некои задачи (%{count}) се доделени на оваа категорија. Што сакате да правите?" text_issue_category_destroy_assignments: Remove category assignments text_issue_category_reassign_to: Додели ги задачите на оваа категорија 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_status_changed_by_changeset: "Applied in changeset %{value}." text_issues_destroy_confirmation: 'Дали сте сигурни дека сакате да ги избришете избраните задачи?' text_select_project_modules: 'Изберете модули за овој проект:' text_default_administrator_account_changed: Default administrator account changed text_file_repository_writable: Во папката за прилози може да се запишува text_plugin_assets_writable: Во папката за додатоци може да се запишува text_rmagick_available: RMagick available (незадолжително) - 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_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: Додели ги пријавените часови на проектот text_reassign_time_entries: 'Reassign reported hours to this issue:' - text_user_wrote: "{{value}} напиша:" - text_enumeration_destroy_question: "{{count}} objects are assigned to this value." + 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' - text_wiki_page_destroy_question: "This page has {{descendants}} child page(s) and descendant(s). What do you want to do?" + 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" @@ -912,7 +919,7 @@ enumeration_activities: Активности (следење на време) enumeration_system_activity: Системска активност - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -922,9 +929,51 @@ 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. - field_start_date: Start date + 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 + 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Commit messages encoding + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/mn.yml --- a/config/locales/mn.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/mn.yml Mon Jul 25 14:23:37 2011 +0100 @@ -16,7 +16,10 @@ month_names: [~, 1-р сар, 2-р сар, 3-р сар, 4-р сар, 5-р сар, 6-р сар, 7-р сар, 8-р сар, 9-р сар, 10-р сар, 11-р сар, 12-р сар] abbr_month_names: [~, 1сар, 2сар, 3сар, 4сар, 5сар, 6сар, 7сар, 8сар, 9сар, 10сар, 11сар, 12сар] # Used in date_select and datime_select. - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -32,37 +35,37 @@ half_a_minute: "хагас минут" less_than_x_seconds: one: "секунд орчим" - other: "{{count}} секундээс бага хугацаа" + other: "%{count} секундээс бага хугацаа" x_seconds: one: "1 секунд" - other: "{{count}} секунд" + other: "%{count} секунд" less_than_x_minutes: one: "минутаас бага хугацаа" - other: "{{count}} минутаас бага хугацаа" + other: "%{count} минутаас бага хугацаа" x_minutes: one: "1 минут" - other: "{{count}} минут" + other: "%{count} минут" about_x_hours: one: "1 цаг орчим" - other: "ойролцоогоор {{count}} цаг" + other: "ойролцоогоор %{count} цаг" x_days: one: "1 өдөр" - other: "{{count}} өдөр" + other: "%{count} өдөр" about_x_months: one: "1 сар орчим" - other: "ойролцоогоор {{count}} сар" + other: "ойролцоогоор %{count} сар" x_months: one: "1 сар" - other: "{{count}} сар" + other: "%{count} сар" about_x_years: one: "ойролцоогоор 1 жил" - other: "ойролцоогоор {{count}} жил" + other: "ойролцоогоор %{count} жил" over_x_years: one: "1 жилээс их" - other: "{{count}} жилээс их" + other: "%{count} жилээс их" almost_x_years: one: "бараг 1 жил" - other: "бараг {{count}} жил" + other: "бараг %{count} жил" number: format: @@ -93,6 +96,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "жагсаалтад заагдаагүй байна" exclusion: "нөөцлөгдсөн" @@ -101,17 +108,17 @@ accepted: "хүлээж авах ёстой" empty: "хоосон байж болохгүй" blank: "бланк байж болохгүй" - too_long: "дэндүү урт байна (хамгийн ихдээ {{count}} тэмдэгт)" - too_short: "дэндүү богино байна (хамгийн багадаа {{count}} тэмдэгт)" - wrong_length: "буруу урттай байна (заавал {{count}} тэмдэгт)" + too_long: "дэндүү урт байна (хамгийн ихдээ %{count} тэмдэгт)" + too_short: "дэндүү богино байна (хамгийн багадаа %{count} тэмдэгт)" + wrong_length: "буруу урттай байна (заавал %{count} тэмдэгт)" taken: "аль хэдийнэ авсан байна" not_a_number: "тоо биш байна" not_a_date: "зөв огноо биш байна" - 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}}" + 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: "заавал сондгой" even: "заавал тэгш" greater_than_start_date: "must be greater than start date" @@ -148,20 +155,20 @@ notice_file_not_found: Таны үзэх гэсэн хуудас байхгүй юмуу устгагдсан байна. notice_locking_conflict: Өгөгдлийг өөр хүн өөрчилсөн байна. notice_not_authorized: Танд энэ хуудсыг үзэх эрх байхгүй байна. - notice_email_sent: "{{value}} - руу мэйл илгээлээ" - notice_email_error: "Мэйл илгээхэд алдаа гарлаа ({{value}})" + notice_email_sent: "%{value} - руу мэйл илгээлээ" + notice_email_error: "Мэйл илгээхэд алдаа гарлаа (%{value})" notice_feeds_access_key_reseted: Таны RSS хандалтын түлхүүрийг дахин эхлүүллээ. notice_api_access_key_reseted: Your API access key was reset. - notice_failed_to_save_issues: "{{total}} асуудал сонгогдсоноос {{count}} асуудлыг нь хадгалахад алдаа гарлаа: {{ids}}." + notice_failed_to_save_issues: "%{total} асуудал сонгогдсоноос %{count} асуудлыг нь хадгалахад алдаа гарлаа: %{ids}." notice_no_issue_selected: "Ямар ч асуудал сонгогдоогүй байна! Засварлах асуудлуудаа сонгоно уу." notice_account_pending: "Таны дансыг үүсгэж дууслаа, администратор баталгаажуулах хүртэл хүлээнэ үү." notice_default_data_loaded: Стандарт тохиргоог амжилттай ачааллаа. notice_unable_delete_version: Хувилбарыг устгах боломжгүй. notice_issue_done_ratios_updated: Issue done ratios updated. - error_can_t_load_default_data: "Стандарт тохиргоог ачаалж чадсангүй: {{value}}" + error_can_t_load_default_data: "Стандарт тохиргоог ачаалж чадсангүй: %{value}" error_scm_not_found: "Repository дотор тухайн бичлэг эсвэл хувилбарыг олсонгүй." - error_scm_command_failed: "Repository-д хандахад алдаа гарлаа: {{value}}" + error_scm_command_failed: "Repository-д хандахад алдаа гарлаа: %{value}" error_scm_annotate: "Бичлэг байхгүй байна, эсвэл бичлэгт тайлбар хавсаргаж болохгүй." error_issue_not_found_in_project: 'Сонгосон асуудал энэ төсөлд хамаардаггүй юм уу эсвэл системд байхгүй байна.' error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.' @@ -172,25 +179,25 @@ 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) файлыг хадгалж чадсангүй." + warning_attachments_not_saved: "%{count} file(s) файлыг хадгалж чадсангүй." - mail_subject_lost_password: "Таны {{value}} нууц үг" + mail_subject_lost_password: "Таны %{value} нууц үг" mail_body_lost_password: 'Нууц үгээ өөрчлөхийн тулд доорх холбоос дээр дарна уу:' - mail_subject_register: "Таны {{value}} дансыг идэвхжүүлэх" + mail_subject_register: "Таны %{value} дансыг идэвхжүүлэх" mail_body_register: 'Дансаа идэвхжүүлэхийн тулд доорх холбоос дээр дарна уу:' - mail_body_account_information_external: "Та өөрийнхөө {{value}} дансыг ашиглаж холбогдож болно." + 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}}' 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}}." + 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}' 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 алдаа - gui_validation_error_plural: "{{count}} алдаа" + gui_validation_error_plural: "%{count} алдаа" field_name: Нэр field_description: Тайлбар @@ -252,7 +259,8 @@ field_attr_lastname: Овог аттрибут field_attr_mail: Имэйл аттрибут field_onthefly: Хүссэн үедээ хэрэглэгч үүсгэх - field_done_ratio: %% Гүйцэтгэсэн + field_start_date: Эхлэл + field_done_ratio: "%% Гүйцэтгэсэн" field_auth_source: Нэвтрэх арга field_hide_mail: Миний имэйл хаягийг нуу field_comments: Тайлбар @@ -308,7 +316,6 @@ setting_cross_project_issue_relations: Төсөл хооронд асуудал хамааруулахыг зөвшөөрөх setting_issue_list_default_columns: Асуудлуудыг харуулах стандарт баганууд setting_repositories_encodings: Репозиторийн энкодинг - setting_commit_logs_encoding: Коммит хийх үед харуулах текстүүдийн энкодинг setting_emails_footer: Имэйлүүдийн хөл хэсэг setting_protocol: Протокол setting_per_page_options: Нэг хуудсанд байх обьектуудын тохиргоо @@ -410,14 +417,14 @@ label_x_projects: zero: төсөл байхгүй one: 1 төсөл - other: "{{count}} төслүүд" + 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_issues_by: "%{value} - н асуудлууд" label_issue_added: Асуудал нэмэгдлээ label_issue_updated: Асуудал өөрчлөгдлөө label_document: Бичиг баримт @@ -467,7 +474,7 @@ label_registered_on: Бүртгүүлсэн огноо label_activity: Үйл ажиллагаа label_overall_activity: Ерөнхий үйл ажиллагаа - label_user_activity: "{{value}}-ийн үйл ажиллагаа" + label_user_activity: "%{value}-ийн үйл ажиллагаа" label_new: Шинэ label_logged_as: Холбогдсон нэр label_environment: Орчин @@ -477,7 +484,7 @@ label_auth_source_plural: Нэвтрэх аргууд label_subproject_plural: Дэд төслүүд label_subproject_new: Шинэ дэд төсөл - label_and_its_subprojects: "{{value}} болон холбогдох дэд төслүүд" + label_and_its_subprojects: "%{value} болон холбогдох дэд төслүүд" label_min_max_length: Дээд - Доод урт label_list: Жагсаалт label_date: Огноо @@ -488,8 +495,8 @@ label_text: Урт текст label_attribute: Аттрибут label_attribute_plural: Аттрибутууд - label_download: "{{count}} Татаж авсан зүйл" - label_download_plural: "{{count}} Татаж авсан зүйлс" + label_download: "%{count} Татаж авсан зүйл" + label_download_plural: "%{count} Татаж авсан зүйлс" label_no_data: Үзүүлэх өгөгдөл байхгүй байна label_change_status: Төлвийг өөрчлөх label_history: Түүх @@ -522,17 +529,17 @@ label_closed_issues: хаалттай label_closed_issues_plural: хаалттай label_x_open_issues_abbr_on_total: - zero: 0 нээлттэй / {{total}} - one: 1 нээлттэй / {{total}} - other: "{{count}} нээлттэй / {{total}}" + zero: 0 нээлттэй / %{total} + one: 1 нээлттэй / %{total} + other: "%{count} нээлттэй / %{total}" label_x_open_issues_abbr: zero: 0 нээлттэй one: 1 нээлттэй - other: "{{count}} нээлттэй" + other: "%{count} нээлттэй" label_x_closed_issues_abbr: zero: 0 хаалттай one: 1 хаалттай - other: "{{count}} хаалттай" + other: "%{count} хаалттай" label_total: Нийт label_permissions: Зөвшөөрлүүд label_current_status: Одоогийн төлөв @@ -550,7 +557,7 @@ label_months_from: Саруудыг хаанаас label_gantt: Гант диаграм label_internal: Дотоод - label_last_changes: "сүүлийн {{count}} өөрчлөлтүүд" + label_last_changes: "сүүлийн %{count} өөрчлөлтүүд" label_change_view_all: Бүх өөрчлөлтүүдийг харах label_personalize_page: Энэ хуудсыг өөрт зориулан өөрчлөх label_comment: Тайлбар @@ -558,7 +565,7 @@ label_x_comments: zero: сэтгэгдэл байхгүй one: 1 сэтгэгдэлтэй - other: "{{count}} сэтгэгдэлтэй" + other: "%{count} сэтгэгдэлтэй" label_comment_add: Тайлбар нэмэх label_comment_added: Тайлбар нэмэгдлээ label_comment_delete: Тайлбарууд устгах @@ -579,7 +586,7 @@ label_yesterday: өчигдөр label_this_week: энэ долоо хоног label_last_week: өнгөрсөн долоо хоног - label_last_n_days: "сүүлийн {{count}} өдрүүд" + label_last_n_days: "сүүлийн %{count} өдрүүд" label_this_month: энэ сар label_last_month: сүүлийн сар label_this_year: энэ жил @@ -593,13 +600,13 @@ label_repository: Репозитори label_repository_plural: Репозиторууд label_browse: Үзэх - label_modification: "{{count}} өөрчлөлт" - label_modification_plural: "{{count}} өөрчлөлтүүд" + label_modification: "%{count} өөрчлөлт" + label_modification_plural: "%{count} өөрчлөлтүүд" label_branch: Салбар label_tag: Шошго label_revision: Хувилбар label_revision_plural: Хувилбарууд - label_revision_id: "{{value}} Хувилбар" + label_revision_id: "%{value} Хувилбар" label_associated_revisions: Хамааралтай хувилбарууд label_added: нэмэгдсэн label_modified: өөрчлөгдсөн @@ -616,8 +623,8 @@ label_sort_lower: Доош нь label_sort_lowest: Хамгийн доор label_roadmap: Хөтөч - label_roadmap_due_in: "{{value}} дотор дуусгах" - label_roadmap_overdue: "{{value}} оройтсон" + label_roadmap_due_in: "%{value} дотор дуусгах" + label_roadmap_overdue: "%{value} оройтсон" label_roadmap_no_issues: Энэ хувилбарт асуудал байхгүй байна label_search: Хайх label_result_plural: Үр дүн @@ -635,8 +642,8 @@ label_changes_details: Бүх өөрчлөлтүүдийн дэлгэрэнгүй label_issue_tracking: Асуудал хянах label_spent_time: Зарцуулсан хугацаа - label_f_hour: "{{value}} цаг" - label_f_hour_plural: "{{value}} цаг" + label_f_hour: "%{value} цаг" + label_f_hour_plural: "%{value} цаг" label_time_tracking: Хугацааг хянах label_change_plural: Өөрчлөлтүүд label_statistics: Статистик @@ -687,15 +694,15 @@ label_date_from: Хэзээнээс label_date_to: Хэдий хүртэл label_language_based: Хэрэглэгчийн хэлнас шалтгаалан - label_sort_by: "{{value}} талбараар нь эрэмбэлэх" + 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_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_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: Өөрчлөлтүүд @@ -711,7 +718,7 @@ label_registration_activation_by_email: дансыг имэйлээр идэвхжүүлэх label_registration_manual_activation: дансыг гараар идэвхжүүлэх label_registration_automatic_activation: дансыг автоматаар идэвхжүүлэх - label_display_per_page: 'Нэг хуудсанд: {{value}}' + label_display_per_page: 'Нэг хуудсанд: %{value}' label_age: Нас label_change_properties: Тохиргоог өөрчлөх label_general: Ерөнхий @@ -734,7 +741,7 @@ label_sort: Sort label_ascending: Ascending label_descending: Descending - label_date_from_to: From {{start}} to {{end}} + 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 @@ -753,7 +760,7 @@ 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" + label_api_access_key_created_on: "API access key created %{value} ago" button_login: Нэвтрэх button_submit: Илгээх @@ -813,53 +820,53 @@ text_regexp_info: eg. ^[A-Z0-9]+$ text_min_max_length_info: 0 гэвэл ямар ч хязгааргүй гэсэн үг text_project_destroy_confirmation: Та энэ төсөл болоод бусад мэдээллийг нь үнэхээр устгамаар байна уу ? - text_subprojects_destroy_warning: "Уг төслийн дэд төслүүд : {{value}} нь бас устгагдах болно." + text_subprojects_destroy_warning: "Уг төслийн дэд төслүүд : %{value} нь бас устгагдах болно." text_workflow_edit: Ажлын дарааллыг өөрчлөхийн тулд хандалтын эрх болон асуудлын чиглэлийг сонгоно уу text_are_you_sure: Та итгэлтэй байна уу ? - text_journal_changed: "{{label}} {{old}} байсан нь {{new}} болов" - text_journal_set_to: "{{label}} {{value}} болгож өөрчиллөө" - text_journal_deleted: "{{label}} устсан ({{old}})" - text_journal_added: "{{label}} {{value}} нэмэгдсэн" + 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), тоо and дундуур зураас ашиглаж болно.
    Нэгэнт хадгалсан хойно, төслийн глобал нэрийг өөрлчөх боломжгүй.' - text_caracters_maximum: "дээд тал нь {{count}} үсэг." - text_caracters_minimum: "Хамгийн багадаа ядаж {{count}} тэмдэгт байх." - text_length_between: "Урт нь багадаа {{min}}, ихдээ {{max}} тэмдэгт." + 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: Multiple values allowed (one line for each value). text_issues_ref_in_commit_messages: Коммитийн зурвасуудад хамааруулсан болон байнгын асуудлууд - text_issue_added: "Асуудал {{id}} - ийг хэрэглэгч {{author}} мэдэгдсэн байна." - text_issue_updated: "Асуудал {{id}} - ийг хэрэглэгч {{author}} өөрчилсөн байна." + text_issue_added: "Асуудал %{id} - ийг хэрэглэгч %{author} мэдэгдсэн байна." + text_issue_updated: "Асуудал %{id} - ийг хэрэглэгч %{author} өөрчилсөн байна." text_wiki_destroy_confirmation: Та энэ вики болон холбогдох бүх мэдээллийг үнэхээр устгамаар байна уу ? - text_issue_category_destroy_question: "Энэ ангилалд зарим асуудлууд ({{count}}) орсон байна. Та яах вэ ?" + 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_status_changed_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_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_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' - text_wiki_page_destroy_question: "This page has {{descendants}} child page(s) and descendant(s). What do you want to do?" + 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" @@ -900,12 +907,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -913,7 +920,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -923,9 +930,51 @@ 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. - field_start_date: Start date + 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 + 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Коммит хийх үед харуулах текстүүдийн энкодинг + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/nl.yml --- a/config/locales/nl.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/nl.yml Mon Jul 25 14:23:37 2011 +0100 @@ -5,25 +5,28 @@ # 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" + default: "%d-%m-%Y" + short: "%e %b" + long: "%d %B, %Y" - day_names: [Zondag, Maandag, Dinsdag, Woensdag, Donderdag, Vrijdag, Zaterdag] - abbr_day_names: [Zo, Ma, Di, Woe, Do, Vr, Zat] + day_names: [zondag, maandag, dinsdag, woensdag, donderdag, vrijdag, zaterdag] + abbr_day_names: [zo, ma, di, wo, do, vr, za] # Don't forget the nil at the beginning; there's no such thing as a 0th month - month_names: [~, Januari, Februari, Maart, April, Mei, Juni, Juli, Augustus, September, Oktober, November, December] - abbr_month_names: [~, Jan, Feb, Mar, Apr, Mei, Jun, Jul, Aug, Sep, Okt, Nov, Dec] + month_names: [~, januari, februari, maart, april, mei, juni, juli, augustus, september, oktober, november, december] + abbr_month_names: [~, jan, feb, mar, apr, mei, jun, jul, aug, sep, okt, nov, dec] # Used in date_select and datime_select. - order: [ :year, :month, :day ] + order: + - :day + - :month + - :year time: formats: default: "%a, %d %b %Y %H:%M:%S %z" time: "%H:%M" - short: "%d %b %H:%M" - long: "%B %d, %Y %H:%M" + short: "%e %b %H:%M" + long: "%d %B, %Y %H:%M" am: "am" pm: "pm" @@ -32,37 +35,37 @@ half_a_minute: "halve minuut" less_than_x_seconds: one: "minder dan een seconde" - other: "mindera dan {{count}} seconden" + other: "minder dan %{count} seconden" x_seconds: one: "1 seconde" - other: "{{count}} seconden" + other: "%{count} seconden" less_than_x_minutes: one: "minder dan een minuut" - other: "minder dan {{count}} minuten" + other: "minder dan %{count} minuten" x_minutes: one: "1 minuut" - other: "{{count}} minuten" + other: "%{count} minuten" about_x_hours: one: "ongeveer 1 uur" - other: "ongeveer {{count}} uren" + other: "ongeveer %{count} uren" x_days: one: "1 dag" - other: "{{count}} dagen" + other: "%{count} dagen" about_x_months: one: "ongeveer 1 maand" - other: "ongeveer {{count}} maanden" + other: "ongeveer %{count} maanden" x_months: one: "1 maand" - other: "{{count}} maanden" + other: "%{count} maanden" about_x_years: one: "ongeveer 1 jaar" - other: "ongeveer {{count}} jaren" + other: "ongeveer %{count} jaar" over_x_years: - one: "over 1 jaar" - other: "over {{count}} jaren" + one: "meer dan 1 jaar" + other: "meer dan %{count} jaar" almost_x_years: - one: "almost 1 year" - other: "almost {{count}} years" + one: "bijna 1 jaar" + other: "bijna %{count} jaar" number: format: @@ -92,6 +95,10 @@ activerecord: errors: + template: + header: + one: "Door een fout kon dit %{model} niet worden opgeslagen" + other: "Door %{count} fouten kon dit %{model} niet worden opgeslagen" messages: inclusion: "staat niet in de lijst" exclusion: "is gereserveerd" @@ -106,11 +113,11 @@ taken: "is al in gebruik" not_a_number: "is geen getal" not_a_date: "is geen valide datum" - greater_than: "moet groter zijn dan {{count}}" - greater_than_or_equal_to: "moet groter zijn of gelijk zijn aan {{count}}" - equal_to: "moet gelijk zijn aan {{count}}" - less_than: "moet minder zijn dan {{count}}" - less_than_or_equal_to: "moet minder dan of gelijk zijn aan {{count}}" + greater_than: "moet groter zijn dan %{count}" + greater_than_or_equal_to: "moet groter zijn of gelijk zijn aan %{count}" + equal_to: "moet gelijk zijn aan %{count}" + less_than: "moet minder zijn dan %{count}" + less_than_or_equal_to: "moet minder dan of gelijk zijn aan %{count}" odd: "moet oneven zijn" even: "moet even zijn" greater_than_start_date: "moet na de startdatum liggen" @@ -139,7 +146,7 @@ button_edit: Bewerk button_list: Lijst button_lock: Sluit - button_log_time: Log tijd + button_log_time: Registreer tijd button_login: Inloggen button_move: Verplaatsen button_quote: Citaat @@ -182,10 +189,10 @@ enumeration_activities: Activiteiten (tijdtracking) enumeration_doc_categories: Documentcategorieën enumeration_issue_priorities: Issueprioriteiten - error_can_t_load_default_data: "De standaard configuratie kon niet worden geladen: {{value}}" + error_can_t_load_default_data: "De standaard configuratie kon niet worden geladen: %{value}" error_issue_not_found_in_project: 'Deze issue is niet gevonden of behoort niet toe tot dit project.' error_scm_annotate: "Er kan geen commentaar toegevoegd worden." - error_scm_command_failed: "Er trad een fout op tijdens de poging om verbinding te maken met de repository: {{value}}" + error_scm_command_failed: "Er trad een fout op tijdens de poging om verbinding te maken met de repository: %{value}" error_scm_not_found: "Deze ingang of revisie bestaat niet in de repository." field_account: Account field_activity: Activiteit @@ -207,7 +214,7 @@ field_default_value: Standaardwaarde field_delay: Vertraging field_description: Beschrijving - field_done_ratio: % Gereed + field_done_ratio: "% Gereed" field_downloads: Downloads field_due_date: Verwachte datum gereed field_effective_date: Datum @@ -256,6 +263,7 @@ field_role: Rol field_searchable: Doorzoekbaar field_spent_on: Datum + field_start_date: Startdatum field_start_page: Startpagina field_status: Status field_subject: Onderwerp @@ -270,30 +278,30 @@ field_user: Gebruiker field_value: Waarde field_version: Versie - general_csv_decimal_separator: '.' + general_csv_decimal_separator: ',' general_csv_encoding: ISO-8859-1 - general_csv_separator: ',' + general_csv_separator: ';' general_first_day_of_week: '7' general_lang_name: 'Nederlands' - general_pdf_encoding: ISO-8859-1 + general_pdf_encoding: UTF-8 general_text_No: 'Nee' general_text_Yes: 'Ja' general_text_no: 'nee' general_text_yes: 'ja' gui_validation_error: 1 fout - gui_validation_error_plural: "{{count}} fouten" + gui_validation_error_plural: "%{count} fouten" label_activity: Activiteit label_add_another_file: Ander bestand toevoegen label_add_note: Voeg een notitie toe label_added: toegevoegd - label_added_time_by: "Toegevoegd door {{author}} {{age}} geleden" + label_added_time_by: "Toegevoegd door %{author} %{age} geleden" label_administration: Administratie label_age: Leeftijd label_ago: dagen geleden label_all: alle label_all_time: alles label_all_words: Alle woorden - label_and_its_subprojects: "{{value}} en zijn subprojecten." + label_and_its_subprojects: "%{value} en zijn subprojecten." label_applied_status: Toegekende status label_assigned_to_me_issues: Aan mij toegewezen issues label_associated_revisions: Geassociëerde revisies @@ -326,17 +334,17 @@ label_closed_issues: gesloten label_closed_issues_plural: gesloten label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{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" + other: "%{count} open" label_x_closed_issues_abbr: zero: 0 closed one: 1 closed - other: "{{count}} closed" + other: "%{count} closed" label_comment: Commentaar label_comment_add: Voeg commentaar toe label_comment_added: Commentaar toegevoegd @@ -345,7 +353,7 @@ label_x_comments: zero: no comments one: 1 comment - other: "{{count}} comments" + other: "%{count} comments" label_commits_per_author: Commits per auteur label_commits_per_month: Commits per maand label_confirmation: Bevestiging @@ -369,13 +377,13 @@ label_diff_inline: inline label_diff_side_by_side: naast elkaar label_disabled: uitgeschakeld - label_display_per_page: "Per pagina: {{value}}" + label_display_per_page: "Per pagina: %{value}" label_document: Document label_document_added: Document toegevoegd label_document_new: Nieuw document label_document_plural: Documenten - label_download: "{{count}} Download" - label_download_plural: "{{count}} Downloads" + label_download: "%{count} Download" + label_download_plural: "%{count} Downloads" label_downloads_abbr: D/L label_duplicated_by: gedupliceerd door label_duplicates: dupliceert @@ -387,10 +395,10 @@ label_equals: is gelijk label_example: Voorbeeld label_export_to: Exporteer naar - label_f_hour: "{{value}} uur" - label_f_hour_plural: "{{value}} uren" + label_f_hour: "%{value} uur" + label_f_hour_plural: "%{value} uren" label_feed_plural: Feeds - label_feeds_access_key_created_on: "RSS toegangssleutel {{value}} geleden gemaakt." + label_feeds_access_key_created_on: "RSS toegangssleutel %{value} geleden gemaakt." label_file_added: Bericht toegevoegd label_file_plural: Bestanden label_filter_add: Voeg filter toe @@ -428,13 +436,13 @@ label_issue_updated: Issue bijgewerkt label_issue_view_all: Bekijk alle issues label_issue_watchers: Monitoren - label_issues_by: "Issues door {{value}}" + label_issues_by: "Issues door %{value}" label_jump_to_a_project: Ga naar een project... label_language_based: Taal gebaseerd - label_last_changes: "laatste {{count}} wijzigingen" + label_last_changes: "laatste %{count} wijzigingen" label_last_login: Laatste bezoek label_last_month: laatste maand - label_last_n_days: "{{count}} dagen geleden" + label_last_n_days: "%{count} dagen geleden" label_last_week: vorige week label_latest_revision: Meest recente revisie label_latest_revision_plural: Meest recente revisies @@ -455,8 +463,8 @@ label_message_plural: Berichten label_message_posted: Bericht toegevoegd label_min_max_length: Min-max lengte - label_modification: "{{count}} wijziging" - label_modification_plural: "{{count}} wijzigingen" + label_modification: "%{count} wijziging" + label_modification_plural: "%{count} wijzigingen" label_modified: gewijzigd label_module_plural: Modules label_month: Maand @@ -507,11 +515,11 @@ label_x_projects: zero: no projects one: 1 project - other: "{{count}} projects" + other: "%{count} projects" label_public_projects: Publieke projecten - label_query: Eigen zoekvraag - label_query_new: Nieuwe zoekvraag - label_query_plural: Eigen zoekvragen + label_query: Eigen zoekopdracht + label_query_new: Nieuwe zoekopdracht + label_query_plural: Eigen zoekopdrachten label_read: Lees... label_register: Registreer label_registered_on: Geregistreerd op @@ -534,9 +542,9 @@ label_revision: Revisie label_revision_plural: Revisies label_roadmap: Roadmap - label_roadmap_due_in: "Voldaan in {{value}}" + label_roadmap_due_in: "Voldaan in %{value}" label_roadmap_no_issues: Geen issues voor deze versie - label_roadmap_overdue: "{{value}} over tijd" + label_roadmap_overdue: "%{value} over tijd" label_role: Rol label_role_and_permissions: Rollen en permissies label_role_new: Nieuwe rol @@ -548,7 +556,7 @@ label_send_test_email: Stuur een test e-mail label_settings: Instellingen label_show_completed_versions: Toon afgeronde versies - label_sort_by: "Sorteer op {{value}}" + label_sort_by: "Sorteer op %{value}" label_sort_higher: Verplaats naar boven label_sort_highest: Verplaats naar begin label_sort_lower: Verplaats naar beneden @@ -572,12 +580,12 @@ label_tracker: Tracker label_tracker_new: Nieuwe tracker label_tracker_plural: Trackers - label_updated_time: "{{value}} geleden bijgewerkt" - label_updated_time_by: "{{age}} geleden bijgewerkt door {{author}}" + label_updated_time: "%{value} geleden bijgewerkt" + label_updated_time_by: "%{age} geleden bijgewerkt door %{author}" label_used_by: Gebruikt door label_user: Gebruiker - label_user_activity: "{{value}}'s activiteit" - label_user_mail_no_self_notified: "Ik wil niet op de hoogte gehouden worden van wijzigingen die ik zelf maak." + label_user_activity: "%{value}'s activiteit" + label_user_mail_no_self_notified: Ik wil niet op de hoogte gehouden worden van mijn eigen wijzigingen label_user_mail_option_all: "Bij elk gebeurtenis in al mijn projecten..." label_user_mail_option_selected: "Enkel bij elke gebeurtenis op het geselecteerde project..." label_user_new: Nieuwe gebruiker @@ -597,16 +605,16 @@ label_workflow: Workflow label_year: Jaar label_yesterday: gisteren - mail_body_account_activation_request: "Een nieuwe gebruiker ({{value}}) is geregistreerd. Zijn account wacht op uw akkoord:" + mail_body_account_activation_request: "Een nieuwe gebruiker (%{value}) is geregistreerd. Zijn account wacht op uw akkoord:" mail_body_account_information: Uw account gegevens - mail_body_account_information_external: "U kunt uw account ({{value}}) gebruiken om in te loggen." + mail_body_account_information_external: "U kunt uw account (%{value}) gebruiken om in te loggen." mail_body_lost_password: 'Gebruik de volgende link om uw wachtwoord te wijzigen:' mail_body_register: 'Gebruik de volgende link om uw account te activeren:' - mail_body_reminder: "{{count}} issue(s) die aan u toegewezen zijn en voldaan moeten zijn in de komende {{days}} dagen:" - mail_subject_account_activation_request: "{{value}} accountactivatieverzoek" - mail_subject_lost_password: "uw {{value}} wachtwoord" - mail_subject_register: "uw {{value}} accountactivatie" - mail_subject_reminder: "{{count}} issue(s) die voldaan moeten zijn in de komende {{days}} dagen." + mail_body_reminder: "%{count} issue(s) die aan u toegewezen zijn en voldaan moeten zijn in de komende %{days} dagen:" + mail_subject_account_activation_request: "%{value} accountactivatieverzoek" + mail_subject_lost_password: "uw %{value} wachtwoord" + mail_subject_register: "uw %{value} accountactivatie" + mail_subject_reminder: "%{count} issue(s) die voldaan moeten zijn in de komende %{days} dagen." notice_account_activated: uw account is geactiveerd. u kunt nu inloggen. notice_account_invalid_creditentials: Incorrecte gebruikersnaam of wachtwoord notice_account_lost_email_sent: Er is een e-mail naar u verstuurd met instructies over het kiezen van een nieuw wachtwoord. @@ -618,9 +626,9 @@ notice_account_wrong_password: Incorrect wachtwoord notice_can_t_change_password: Dit account gebruikt een externe bron voor authenticatie. Het is niet mogelijk om het wachtwoord te veranderen. notice_default_data_loaded: Standaard configuratie succesvol geladen. - notice_email_error: "Er is een fout opgetreden tijdens het versturen van ({{value}})" - notice_email_sent: "Een e-mail werd verstuurd naar {{value}}" - notice_failed_to_save_issues: "Fout bij bewaren van {{count}} issue(s) ({{total}} geselecteerd): {{ids}}." + notice_email_error: "Er is een fout opgetreden tijdens het versturen van (%{value})" + notice_email_sent: "Een e-mail werd verstuurd naar %{value}" + notice_failed_to_save_issues: "Fout bij bewaren van %{count} issue(s) (%{total} geselecteerd): %{ids}." notice_feeds_access_key_reseted: Je RSS toegangssleutel werd gereset. notice_file_not_found: De pagina die u probeerde te benaderen bestaat niet of is verwijderd. notice_locking_conflict: De gegevens zijn gewijzigd door een andere gebruiker. @@ -695,7 +703,6 @@ setting_autologin: Automatisch inloggen setting_bcc_recipients: Blind carbon copy ontvangers (bcc) setting_commit_fix_keywords: Gefixeerde trefwoorden - setting_commit_logs_encoding: Encodering van commit berichten setting_commit_ref_keywords: Refererende trefwoorden setting_cross_project_issue_relations: Sta crossproject issuerelaties toe setting_date_format: Datumformaat @@ -714,7 +721,7 @@ setting_mail_from: Afzender e-mail adres setting_mail_handler_api_enabled: Schakel WS in voor inkomende mail. setting_mail_handler_api_key: API sleutel - setting_per_page_options: Objects per pagina-opties + setting_per_page_options: Aantal objecten per pagina (opties) setting_plain_text_mail: platte tekst (geen HTML) setting_protocol: Protocol setting_repositories_encodings: Repositories coderingen @@ -731,25 +738,25 @@ status_registered: geregistreerd text_are_you_sure: Weet u het zeker? text_assign_time_entries_to_project: Gerapporteerde uren toevoegen aan dit project - text_caracters_maximum: "{{count}} van maximum aantal tekens." - text_caracters_minimum: "Moet minstens {{count}} karakters lang zijn." + text_caracters_maximum: "%{count} van maximum aantal tekens." + text_caracters_minimum: "Moet minstens %{count} karakters lang zijn." text_comma_separated: Meerdere waarden toegestaan (kommagescheiden). text_default_administrator_account_changed: Standaard beheerderaccount gewijzigd 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_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. Mededelingen 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_enumeration_destroy_question: "%{count} objecten zijn toegewezen aan deze waarde." text_file_repository_writable: Bestandsrepository beschrijfbaar - text_issue_added: "Issue {{id}} is gerapporteerd (door {{author}})." + text_issue_added: "Issue %{id} is gerapporteerd (door %{author})." text_issue_category_destroy_assignments: Verwijder toewijzingen aan deze categorie - text_issue_category_destroy_question: "Er zijn issues ({{count}}) aan deze categorie toegewezen. Wat wilt u hiermee doen ?" + text_issue_category_destroy_question: "Er zijn issues (%{count}) aan deze categorie toegewezen. Wat wilt u hiermee doen ?" text_issue_category_reassign_to: Issues opnieuw toewijzen aan deze categorie - text_issue_updated: "Issue {{id}} is gewijzigd (door {{author}})." + text_issue_updated: "Issue %{id} is gewijzigd (door %{author})." text_issues_destroy_confirmation: 'Weet u zeker dat u deze issue(s) wil verwijderen?' text_issues_ref_in_commit_messages: Opzoeken en aanpassen van issues in commitberichten - text_length_between: "Lengte tussen {{min}} en {{max}} tekens." + text_length_between: "Lengte tussen %{min} en %{max} tekens." text_load_default_configuration: Laad de standaardconfiguratie text_min_max_length_info: 0 betekent geen restrictie text_no_configuration_data: "Rollen, trackers, issue statussen en workflows zijn nog niet geconfigureerd.\nHet is ten zeerste aangeraden om de standaard configuratie in te laden. U kunt deze aanpassen nadat deze is ingeladen." @@ -762,18 +769,18 @@ text_rmagick_available: RMagick beschikbaar (optioneel) text_select_mail_notifications: Selecteer acties waarvoor mededelingen via mail moeten worden verstuurd. text_select_project_modules: 'Selecteer de modules die u wilt gebruiken voor dit project:' - text_status_changed_by_changeset: "Toegepast in changeset {{value}}." - text_subprojects_destroy_warning: "De subprojecten: {{value}} zullen ook verwijderd worden." + text_status_changed_by_changeset: "Toegepast in changeset %{value}." + text_subprojects_destroy_warning: "De subprojecten: %{value} zullen ook verwijderd worden." text_tip_issue_begin_day: issue die op deze dag begint text_tip_issue_begin_end_day: issue die op deze dag begint en eindigt text_tip_issue_end_day: issue die op deze dag eindigt text_tracker_no_workflow: Geen workflow gedefinieerd voor deze tracker text_unallowed_characters: Niet toegestane tekens - text_user_mail_option: "Bij niet-geselecteerde projecten zult u enkel notificaties ontvangen voor issues die u monitort of waar u bij betrokken bent (als auteur of toegewezen persoon)." - text_user_wrote: "{{value}} schreef:" + text_user_mail_option: "Bij niet-geselecteerde projecten zult u enkel mededelingen ontvangen voor issues die u monitort of waar u bij betrokken bent (als auteur of toegewezen persoon)." + text_user_wrote: "%{value} schreef:" text_wiki_destroy_confirmation: Weet u zeker dat u deze wiki en zijn inhoud wenst te verwijderen? text_workflow_edit: Selecteer een rol en een tracker om de workflow te wijzigen - warning_attachments_not_saved: "{{count}} bestand(en) konden niet opgeslagen worden." + warning_attachments_not_saved: "%{count} bestand(en) konden niet opgeslagen worden." button_create_and_continue: Maak en ga verder text_custom_field_possible_values_info: 'Per lijn een waarde' label_display: Toon @@ -788,21 +795,21 @@ label_descending: Aflopend label_sort: Sorteer label_ascending: Oplopend - label_date_from_to: Van {{start}} tot {{end}} + label_date_from_to: Van %{start} tot %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: Deze pagina heeft {{descendants}} subpagina's en onderliggende pagina's?. Wil wil je ermee doen? + text_wiki_page_destroy_question: Deze pagina heeft %{descendants} subpagina's en onderliggende pagina's?. Wat wilt u hiermee doen? text_wiki_page_reassign_children: Alle subpagina's toewijzen aan deze hoofdpagina text_wiki_page_nullify_children: Behoud subpagina's als hoofdpagina's text_wiki_page_destroy_children: Verwijder alle subpagina's en onderliggende pagina's setting_password_min_length: Minimum wachtwoord lengte field_group_by: Groepeer resultaten per - mail_subject_wiki_content_updated: "'{{id}}' wiki pagina is bijgewerkt" + mail_subject_wiki_content_updated: "'%{id}' wiki pagina is bijgewerkt" label_wiki_content_added: Wiki pagina toegevoegd - mail_subject_wiki_content_added: "'{{id}}' wiki pagina is toegevoegd" - mail_body_wiki_content_added: The '{{id}}' wiki pagina is toegevoegd door {{author}}. + mail_subject_wiki_content_added: "'%{id}' wiki pagina is toegevoegd" + mail_body_wiki_content_added: De '%{id}' wiki pagina is toegevoegd door %{author}. label_wiki_content_updated: Wiki pagina bijgewerkt - mail_body_wiki_content_updated: The '{{id}}' wiki pagina is bijgewerkt door {{author}}. + mail_body_wiki_content_updated: De '%{id}' wiki pagina is bijgewerkt door %{author}. permission_add_project: Maak project setting_new_project_user_role_id: Rol van gebruiker die een project maakt label_view_all_revisions: Bekijk alle revisies @@ -810,14 +817,14 @@ label_branch: Branch error_no_tracker_in_project: Geen tracker is geassocieerd met dit project. Check de project instellingen. error_no_default_issue_status: Geen standaard issue status ingesteld. Check de configuratie (Ga naar "Administratie -> Issue statussen"). - text_journal_changed: "{{label}} gewijzigd van {{old}} naar {{new}}" - text_journal_set_to: "{{label}} gewijzigd naar {{value}}" - text_journal_deleted: "{{label}} verwijderd ({{old}})" + text_journal_changed: "%{label} gewijzigd van %{old} naar %{new}" + text_journal_set_to: "%{label} gewijzigd naar %{value}" + text_journal_deleted: "%{label} verwijderd (%{old})" label_group_plural: Groepen label_group: Groep label_group_new: Nieuwe groep label_time_entry_plural: Bestede tijd - text_journal_added: "{{label}} {{value}} toegevoegd" + text_journal_added: "%{label} %{value} toegevoegd" field_active: Actief enumeration_system_activity: Systeem Activiteit permission_delete_issue_watchers: Verwijder volgers @@ -852,9 +859,9 @@ setting_start_of_week: Week begint op permission_view_issues: Bekijk Issues label_display_used_statuses_only: Laat alleen statussen zien die gebruikt worden door deze tracker - label_revision_id: Revisie {{value}} + label_revision_id: Revisie %{value} label_api_access_key: API access key - label_api_access_key_created_on: API access key gemaakt {{value}} geleden + label_api_access_key_created_on: API access key gemaakt %{value} geleden label_feeds_access_key: RSS access key notice_api_access_key_reseted: Uw API access key was gereset. setting_rest_api_enabled: Activeer REST web service @@ -881,32 +888,74 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Stuur email notificaties voor de project kopie error_can_not_delete_custom_field: Verwijderen niet mogelijk van custom field - error_unable_to_connect: Geen connectie ({{value}}) + error_unable_to_connect: Geen connectie (%{value}) error_can_not_remove_role: Deze rol is in gebruik en kan niet worden verwijderd. error_can_not_delete_tracker: Deze tracker bevat nog issues en kan niet worden verwijderd. field_principal: Principal label_my_page_block: Mijn pagina block - notice_failed_to_save_members: "Niet gelukt om lid/leden op te slaan: {{errors}}." + notice_failed_to_save_members: "Niet gelukt om lid/leden op te slaan: %{errors}." text_zoom_out: Zoom uit text_zoom_in: Zoom in notice_unable_delete_time_entry: Verwijderen niet mogelijk van tijd log invoer. label_overall_spent_time: Totaal bestede tijd - field_time_entries: Log tijd + field_time_entries: Registreer tijd project_module_gantt: Gantt project_module_calendar: Kalender - 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 + button_edit_associated_wikipage: "Bewerk bijbehorende wiki pagina: %{page_title}" + text_are_you_sure_with_children: Verwijder issue en alle onderliggende issues? + field_text: Tekst veld + label_user_mail_option_only_owner: Alleen voor dingen waarvan ik de auteur ben + setting_default_notification_option: Standaard instelling voor mededelingen + label_user_mail_option_only_my_events: Alleen voor dingen die ik volg of bij betrokken ben + label_user_mail_option_only_assigned: Alleen voor dingen die aan mij zijn toegewezen + label_user_mail_option_none: Bij geen enkele gebeurtenis 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. - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible + notice_not_authorized_archived_project: Het project dat u wilt bezoeken is gearchiveerd. + label_principal_search: "Zoek naar gebruiker of groep:" + label_user_search: "Zoek naar gebruiker:" + field_visible: Zichtbaar setting_emails_header: Emails header + setting_commit_logtime_activity_id: Standaard activiteit voor tijdregistratie + text_time_logged_by_changeset: Toegepast in changeset %{value}. + setting_commit_logtime_enabled: Activeer tijdregistratie + notice_gantt_chart_truncated: De gantt chart is ingekort omdat het meer objecten bevat dan kan worden weergegeven, (%{max}) + setting_gantt_items_limit: Max. aantal objecten op gantt chart + field_warn_on_leaving_unsaved: Waarschuw me wanneer ik een pagina verlaat waarvan de tekst niet opgeslagen is + text_warn_on_leaving_unsaved: De huidige pagina bevat tekst die niet is opgeslagen en dit zal verloren gaan als u deze pagina nu verlaat. + label_my_queries: Mijn aangepaste zoekopdrachten + text_journal_changed_no_detail: "%{label} updated" + label_news_comment_added: Commentaar toegevoegd aan een nieuwsitem + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Encodering van commit berichten + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/no.yml --- a/config/locales/no.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/no.yml Mon Jul 25 14:23:37 2011 +0100 @@ -13,7 +13,10 @@ abbr_day_names: [søn, man, tir, ons, tor, fre, lør] month_names: [~, januar, februar, mars, april, mai, juni, juli, august, september, oktober, november, desember] abbr_month_names: [~, jan, feb, mar, apr, mai, jun, jul, aug, sep, okt, nov, des] - order: [:day, :month, :year] + order: + - :day + - :month + - :year time: formats: default: "%A, %e. %B %Y, %H:%M" @@ -27,37 +30,37 @@ half_a_minute: "et halvt minutt" less_than_x_seconds: one: "mindre enn 1 sekund" - other: "mindre enn {{count}} sekunder" + other: "mindre enn %{count} sekunder" x_seconds: one: "1 sekund" - other: "{{count}} sekunder" + other: "%{count} sekunder" less_than_x_minutes: one: "mindre enn 1 minutt" - other: "mindre enn {{count}} minutter" + other: "mindre enn %{count} minutter" x_minutes: one: "1 minutt" - other: "{{count}} minutter" + other: "%{count} minutter" about_x_hours: one: "rundt 1 time" - other: "rundt {{count}} timer" + other: "rundt %{count} timer" x_days: one: "1 dag" - other: "{{count}} dager" + other: "%{count} dager" about_x_months: one: "rundt 1 måned" - other: "rundt {{count}} måneder" + other: "rundt %{count} måneder" x_months: one: "1 måned" - other: "{{count}} måneder" + other: "%{count} måneder" about_x_years: one: "rundt 1 år" - other: "rundt {{count}} år" + other: "rundt %{count} år" over_x_years: one: "over 1 år" - other: "over {{count}} år" + other: "over %{count} år" almost_x_years: one: "nesten 1 år" - other: "nesten {{count}} år" + other: "nesten %{count} år" number: format: precision: 2 @@ -86,7 +89,7 @@ activerecord: errors: template: - header: "kunne ikke lagre {{model}} på grunn av {{count}} feil." + header: "kunne ikke lagre %{model} på grunn av %{count} feil." body: "det oppstod problemer i følgende felt:" messages: inclusion: "er ikke inkludert i listen" @@ -96,16 +99,16 @@ accepted: "må være akseptert" empty: "kan ikke være tom" blank: "kan ikke være blank" - too_long: "er for lang (maksimum {{count}} tegn)" - too_short: "er for kort (minimum {{count}} tegn)" - wrong_length: "er av feil lengde (maksimum {{count}} tegn)" + too_long: "er for lang (maksimum %{count} tegn)" + too_short: "er for kort (minimum %{count} tegn)" + wrong_length: "er av feil lengde (maksimum %{count} tegn)" taken: "er allerede i bruk" not_a_number: "er ikke et tall" - greater_than: "må være større enn {{count}}" - greater_than_or_equal_to: "må være større enn eller lik {{count}}" - equal_to: "må være lik {{count}}" - less_than: "må være mindre enn {{count}}" - less_than_or_equal_to: "må være mindre enn eller lik {{count}}" + greater_than: "må være større enn %{count}" + greater_than_or_equal_to: "må være større enn eller lik %{count}" + equal_to: "må være lik %{count}" + less_than: "må være mindre enn %{count}" + less_than_or_equal_to: "må være mindre enn eller lik %{count}" odd: "må være oddetall" even: "må være partall" greater_than_start_date: "må være større enn startdato" @@ -124,7 +127,7 @@ general_csv_separator: ',' general_csv_decimal_separator: '.' general_csv_encoding: ISO-8859-1 - general_pdf_encoding: ISO-8859-1 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' notice_account_updated: Kontoen er oppdatert. @@ -143,33 +146,33 @@ notice_file_not_found: Siden du forsøkte å vise eksisterer ikke, eller er slettet. notice_locking_conflict: Data har blitt oppdatert av en annen bruker. notice_not_authorized: Du har ikke adgang til denne siden. - notice_email_sent: "En e-post er sendt til {{value}}" - notice_email_error: "En feil oppstod under sending av e-post ({{value}})" + notice_email_sent: "En e-post er sendt til %{value}" + notice_email_error: "En feil oppstod under sending av e-post (%{value})" notice_feeds_access_key_reseted: Din RSS-tilgangsnøkkel er nullstilt. - notice_failed_to_save_issues: "Lykkes ikke å lagre {{count}} sak(er) på {{total}} valgt: {{ids}}." + notice_failed_to_save_issues: "Lykkes ikke å lagre %{count} sak(er) på %{total} valgt: %{ids}." notice_no_issue_selected: "Ingen sak valgt! Vennligst merk sakene du vil endre." notice_account_pending: "Din konto ble opprettet og avventer nå administrativ godkjenning." notice_default_data_loaded: Standardkonfigurasjonen lastet inn. - error_can_t_load_default_data: "Standardkonfigurasjonen kunne ikke lastes inn: {{value}}" + error_can_t_load_default_data: "Standardkonfigurasjonen kunne ikke lastes inn: %{value}" error_scm_not_found: "Elementet og/eller revisjonen eksisterer ikke i depoet." - error_scm_command_failed: "En feil oppstod under tilkobling til depoet: {{value}}" + error_scm_command_failed: "En feil oppstod under tilkobling til depoet: %{value}" error_scm_annotate: "Elementet eksisterer ikke, eller kan ikke noteres." error_issue_not_found_in_project: 'Saken eksisterer ikke, eller hører ikke til dette prosjektet' - mail_subject_lost_password: "Ditt {{value}} passord" + mail_subject_lost_password: "Ditt %{value} passord" mail_body_lost_password: 'Klikk følgende lenke for å endre ditt passord:' - mail_subject_register: "{{value}} kontoaktivering" + mail_subject_register: "%{value} kontoaktivering" mail_body_register: 'Klikk følgende lenke for å aktivere din konto:' - mail_body_account_information_external: "Du kan bruke din {{value}}-konto for å logge inn." + mail_body_account_information_external: "Du kan bruke din %{value}-konto for å logge inn." mail_body_account_information: Informasjon om din konto - mail_subject_account_activation_request: "{{value}} kontoaktivering" - mail_body_account_activation_request: "En ny bruker ({{value}}) er registrert, og avventer din godkjenning:" - mail_subject_reminder: "{{count}} sak(er) har frist de kommende {{days}} dagene" - mail_body_reminder: "{{count}} sak(er) som er tildelt deg har frist de kommende {{days}} dager:" + mail_subject_account_activation_request: "%{value} kontoaktivering" + mail_body_account_activation_request: "En ny bruker (%{value}) er registrert, og avventer din godkjenning:" + mail_subject_reminder: "%{count} sak(er) har frist de kommende %{days} dagene" + mail_body_reminder: "%{count} sak(er) som er tildelt deg har frist de kommende %{days} dager:" gui_validation_error: 1 feil - gui_validation_error_plural: "{{count}} feil" + gui_validation_error_plural: "%{count} feil" field_name: Navn field_description: Beskrivelse @@ -231,7 +234,8 @@ field_attr_lastname: Etternavnsattributt field_attr_mail: E-post-attributt field_onthefly: On-the-fly brukeropprettelse - field_done_ratio: % Ferdig + field_start_date: Start + field_done_ratio: "% Ferdig" field_auth_source: Autentifikasjonsmodus field_hide_mail: Skjul min e-post-adresse field_comments: Kommentarer @@ -305,14 +309,14 @@ label_x_projects: zero: ingen prosjekter one: 1 prosjekt - other: "{{count}} prosjekter" + other: "%{count} prosjekter" label_project_all: Alle prosjekter label_project_latest: Siste prosjekter label_issue: Sak label_issue_new: Ny sak label_issue_plural: Saker label_issue_view_all: Vis alle saker - label_issues_by: "Saker etter {{value}}" + label_issues_by: "Saker etter %{value}" label_issue_added: Sak lagt til label_issue_updated: Sak oppdatert label_document: Dokument @@ -369,7 +373,7 @@ label_auth_source_new: Ny autentifikasjonmodus label_auth_source_plural: Autentifikasjonsmoduser label_subproject_plural: Underprosjekter - label_and_its_subprojects: "{{value}} og dets underprosjekter" + label_and_its_subprojects: "%{value} og dets underprosjekter" label_min_max_length: Min.-maks. lengde label_list: Liste label_date: Dato @@ -380,8 +384,8 @@ label_text: Lang tekst label_attribute: Attributt label_attribute_plural: Attributter - label_download: "{{count}} Nedlasting" - label_download_plural: "{{count}} Nedlastinger" + label_download: "%{count} Nedlasting" + label_download_plural: "%{count} Nedlastinger" label_no_data: Ingen data å vise label_change_status: Endre status label_history: Historikk @@ -412,17 +416,17 @@ label_closed_issues: lukket label_closed_issues_plural: lukkede label_x_open_issues_abbr_on_total: - zero: 0 åpne / {{total}} - one: 1 åpen / {{total}} - other: "{{count}} åpne / {{total}}" + zero: 0 åpne / %{total} + one: 1 åpen / %{total} + other: "%{count} åpne / %{total}" label_x_open_issues_abbr: zero: 0 åpne one: 1 åpen - other: "{{count}} åpne" + other: "%{count} åpne" label_x_closed_issues_abbr: zero: 0 lukka one: 1 lukka - other: "{{count}} lukka" + other: "%{count} lukka" label_total: Totalt label_permissions: Godkjenninger label_current_status: Nåværende status @@ -440,7 +444,7 @@ label_months_from: måneder fra label_gantt: Gantt label_internal: Intern - label_last_changes: "siste {{count}} endringer" + label_last_changes: "siste %{count} endringer" label_change_view_all: Vis alle endringer label_personalize_page: Tilpass denne siden label_comment: Kommentar @@ -448,7 +452,7 @@ label_x_comments: zero: no kommentarer one: 1 kommentar - other: "{{count}} kommentarer" + other: "%{count} kommentarer" label_comment_add: Legg til kommentar label_comment_added: Kommentar lagt til label_comment_delete: Slett kommentar @@ -467,7 +471,7 @@ label_yesterday: i går label_this_week: denne uken label_last_week: sist uke - label_last_n_days: "siste {{count}} dager" + label_last_n_days: "siste %{count} dager" label_this_month: denne måneden label_last_month: siste måned label_this_year: dette året @@ -481,8 +485,8 @@ label_repository: Depot label_repository_plural: Depoter label_browse: Utforsk - label_modification: "{{count}} endring" - label_modification_plural: "{{count}} endringer" + label_modification: "%{count} endring" + label_modification_plural: "%{count} endringer" label_revision: Revisjon label_revision_plural: Revisjoner label_associated_revisions: Assosierte revisjoner @@ -498,8 +502,8 @@ label_sort_lower: Flytt ned label_sort_lowest: Flytt til bunnen label_roadmap: Veikart - label_roadmap_due_in: "Frist om {{value}}" - label_roadmap_overdue: "{{value}} over fristen" + label_roadmap_due_in: "Frist om %{value}" + label_roadmap_overdue: "%{value} over fristen" label_roadmap_no_issues: Ingen saker for denne versjonen label_search: Søk label_result_plural: Resultater @@ -517,8 +521,8 @@ label_changes_details: Detaljer om alle endringer label_issue_tracking: Sakssporing label_spent_time: Brukt tid - label_f_hour: "{{value}} time" - label_f_hour_plural: "{{value}} timer" + label_f_hour: "%{value} time" + label_f_hour_plural: "%{value} timer" label_time_tracking: Tidssporing label_change_plural: Endringer label_statistics: Statistikk @@ -567,12 +571,12 @@ label_date_from: Fra label_date_to: Til label_language_based: Basert på brukerens språk - label_sort_by: "Sorter etter {{value}}" + label_sort_by: "Sorter etter %{value}" label_send_test_email: Send en e-post-test - label_feeds_access_key_created_on: "RSS tilgangsnøkkel opprettet for {{value}} siden" + label_feeds_access_key_created_on: "RSS tilgangsnøkkel opprettet for %{value} siden" label_module_plural: Moduler - label_added_time_by: "Lagt til av {{author}} for {{age}} siden" - label_updated_time: "Oppdatert for {{value}} siden" + label_added_time_by: "Lagt til av %{author} for %{age} siden" + label_updated_time: "Oppdatert for %{value} siden" label_jump_to_a_project: Gå til et prosjekt... label_file_plural: Filer label_changeset_plural: Endringssett @@ -588,7 +592,7 @@ label_registration_activation_by_email: kontoaktivering pr. e-post label_registration_manual_activation: manuell kontoaktivering label_registration_automatic_activation: automatisk kontoaktivering - label_display_per_page: "Pr. side: {{value}}" + label_display_per_page: "Pr. side: %{value}" label_age: Alder label_change_properties: Endre egenskaper label_general: Generell @@ -650,40 +654,40 @@ text_regexp_info: eg. ^[A-Z0-9]+$ text_min_max_length_info: 0 betyr ingen begrensning text_project_destroy_confirmation: Er du sikker på at du vil slette dette prosjekter og alle relatert data ? - text_subprojects_destroy_warning: "Underprojekt(ene): {{value}} vil også bli slettet." + text_subprojects_destroy_warning: "Underprojekt(ene): %{value} vil også bli slettet." text_workflow_edit: Velg en rolle og en sakstype for å endre arbeidsflyten text_are_you_sure: Er du sikker ? text_tip_issue_begin_day: oppgaven starter denne dagen text_tip_issue_end_day: oppgaven avsluttes denne dagen text_tip_issue_begin_end_day: oppgaven starter og avsluttes denne dagen text_project_identifier_info: 'Små bokstaver (a-z), nummer og bindestrek tillatt.
    Identifikatoren kan ikke endres etter den er lagret.' - text_caracters_maximum: "{{count}} tegn maksimum." - text_caracters_minimum: "Må være minst {{count}} tegn langt." - text_length_between: "Lengde mellom {{min}} og {{max}} tegn." + text_caracters_maximum: "%{count} tegn maksimum." + text_caracters_minimum: "Må være minst %{count} tegn langt." + text_length_between: "Lengde mellom %{min} og %{max} tegn." text_tracker_no_workflow: Ingen arbeidsflyt definert for denne sakstypen text_unallowed_characters: Ugyldige tegn text_comma_separated: Flere verdier tillat (kommaseparert). text_issues_ref_in_commit_messages: Referering og retting av saker i innsendingsmelding - text_issue_added: "Issue {{id}} has been reported by {{author}}." - text_issue_updated: "Issue {{id}} has been updated by {{author}}." + text_issue_added: "Issue %{id} has been reported by %{author}." + text_issue_updated: "Issue %{id} has been updated by %{author}." text_wiki_destroy_confirmation: Er du sikker på at du vil slette denne wikien og alt innholdet ? - text_issue_category_destroy_question: "Noen saker ({{count}}) er lagt til i denne kategorien. Hva vil du gjøre ?" + text_issue_category_destroy_question: "Noen saker (%{count}) er lagt til i denne kategorien. Hva vil du gjøre ?" text_issue_category_destroy_assignments: Fjern bruk av kategorier text_issue_category_reassign_to: Overfør sakene til denne kategorien text_user_mail_option: "For ikke-valgte prosjekter vil du bare motta varsling om ting du overvåker eller er involveret i (eks. saker du er forfatter av eller er tildelt)." text_no_configuration_data: "Roller, arbeidsflyt, sakstyper og -statuser er ikke konfigurert enda.\nDet anbefales sterkt å laste inn standardkonfigurasjonen. Du vil kunne endre denne etter den er innlastet." text_load_default_configuration: Last inn standardkonfigurasjonen - text_status_changed_by_changeset: "Brukt i endringssett {{value}}." + text_status_changed_by_changeset: "Brukt i endringssett %{value}." text_issues_destroy_confirmation: 'Er du sikker på at du vil slette valgte sak(er) ?' text_select_project_modules: 'Velg moduler du vil aktivere for dette prosjektet:' text_default_administrator_account_changed: Standard administrator-konto er endret text_file_repository_writable: Fil-arkivet er skrivbart text_rmagick_available: RMagick er tilgjengelig (valgfritt) - text_destroy_time_entries_question: "{{hours}} timer er ført på sakene du er i ferd med å slette. Hva vil du gjøre ?" + text_destroy_time_entries_question: "%{hours} timer er ført på sakene du er i ferd med å slette. Hva vil du gjøre ?" text_destroy_time_entries: Slett førte timer text_assign_time_entries_to_project: Overfør førte timer til prosjektet text_reassign_time_entries: 'Overfør førte timer til denne saken:' - text_user_wrote: "{{value}} skrev:" + text_user_wrote: "%{value} skrev:" default_role_manager: Leder default_role_developer: Utvikler @@ -711,15 +715,14 @@ enumeration_doc_categories: Dokument-kategorier enumeration_activities: Aktiviteter (tidssporing) text_enumeration_category_reassign_to: 'Endre dem til denne verdien:' - text_enumeration_destroy_question: "{{count}} objekter er endret til denne verdien." + text_enumeration_destroy_question: "%{count} objekter er endret til denne verdien." label_incoming_emails: Innkommende e-post 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 button_quote: Sitat setting_sequential_project_identifiers: Generer sekvensielle prosjekt-IDer notice_unable_delete_version: Kan ikke slette versjonen @@ -777,12 +780,12 @@ 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: Edit own messages permission_delete_own_messages: Delete own messages - label_user_activity: "{{value}}'s activity" - label_updated_time_by: "Updated by {{author}} {{age}} ago" + label_user_activity: "%{value}'s activity" + label_updated_time_by: "Updated by %{author} %{age} ago" text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' setting_diff_max_lines_displayed: Max number of diff lines displayed text_plugin_assets_writable: Plugin assets directory writable - warning_attachments_not_saved: "{{count}} file(s) could not be saved." + warning_attachments_not_saved: "%{count} file(s) could not be saved." button_create_and_continue: Create and continue text_custom_field_possible_values_info: 'One line for each value' label_display: Display @@ -797,21 +800,21 @@ label_descending: Descending label_sort: Sort label_ascending: Ascending - label_date_from_to: From {{start}} to {{end}} + label_date_from_to: From %{start} to %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? + text_wiki_page_destroy_question: This page has %{descendants} child page(s) and descendant(s). What do you want to do? text_wiki_page_reassign_children: Reassign child pages to this parent page text_wiki_page_nullify_children: Keep child pages as root pages text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated" label_wiki_content_added: Wiki page added - 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_added: "'%{id}' wiki page has been added" + mail_body_wiki_content_added: The '%{id}' wiki page has been added by %{author}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '%{id}' wiki page has been updated by %{author}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -819,14 +822,14 @@ label_branch: Branch 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"). - 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_changed: "%{label} changed from %{old} to %{new}" + text_journal_set_to: "%{label} set to %{value}" + text_journal_deleted: "%{label} deleted (%{old})" label_group_plural: Groups label_group: Group label_group_new: New group label_time_entry_plural: Spent time - text_journal_added: "{{label}} {{value}} added" + text_journal_added: "%{label} %{value} added" field_active: Active enumeration_system_activity: System Activity permission_delete_issue_watchers: Delete watchers @@ -861,9 +864,9 @@ setting_start_of_week: Start calendars on permission_view_issues: View Issues label_display_used_statuses_only: Only display statuses that are used by this tracker - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_api_access_key: API access key - label_api_access_key_created_on: API access key created {{value}} ago + label_api_access_key_created_on: API access key created %{value} ago label_feeds_access_key: RSS access key notice_api_access_key_reseted: Your API access key was reset. setting_rest_api_enabled: Enable REST web service @@ -890,12 +893,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -903,7 +906,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -914,8 +917,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Tegnkoding for innsendingsmeldinger + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/pl.yml --- a/config/locales/pl.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/pl.yml Mon Jul 25 14:23:37 2011 +0100 @@ -45,7 +45,10 @@ month_names: [~, Styczeń, Luty, Marzec, Kwiecień, Maj, Czerwiec, Lipiec, Sierpień, Wrzesień, Październik, Listopad, Grudzień] abbr_month_names: [~, sty, lut, mar, kwi, maj, cze, lip, sie, wrz, paź, lis, gru] - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -61,50 +64,50 @@ half_a_minute: "pół minuty" less_than_x_seconds: one: "mniej niż sekundę" - few: "mniej niż {{count}} sekundy" - other: "mniej niż {{count}} sekund" + few: "mniej niż %{count} sekundy" + other: "mniej niż %{count} sekund" x_seconds: one: "sekundę" - few: "{{count}} sekundy" - other: "{{count}} sekund" + few: "%{count} sekundy" + other: "%{count} sekund" less_than_x_minutes: one: "mniej niż minutę" - few: "mniej niż {{count}} minuty" - other: "mniej niż {{count}} minut" + few: "mniej niż %{count} minuty" + other: "mniej niż %{count} minut" x_minutes: one: "minutę" - few: "{{count}} minuty" - other: "{{count}} minut" + few: "%{count} minuty" + other: "%{count} minut" about_x_hours: one: "około godziny" - other: "około {{count}} godzin" + other: "około %{count} godzin" x_days: one: "1 dzień" - other: "{{count}} dni" + other: "%{count} dni" about_x_months: one: "około miesiąca" - other: "około {{count}} miesięcy" + other: "około %{count} miesięcy" x_months: one: "1 miesiąc" - few: "{{count}} miesiące" - other: "{{count}} miesięcy" + few: "%{count} miesiące" + other: "%{count} miesięcy" about_x_years: one: "około roku" - other: "około {{count}} lat" + other: "około %{count} lat" over_x_years: one: "ponad rok" - few: "ponad {{count}} lata" - other: "ponad {{count}} lat" + few: "ponad %{count} lata" + other: "ponad %{count} lat" almost_x_years: one: "prawie rok" - other: "prawie {{count}} lata" + other: "prawie %{count} lata" activerecord: errors: template: header: - one: "{{model}} nie został zachowany z powodu jednego błędu" - other: "{{model}} nie został zachowany z powodu {{count}} błędów" + one: "%{model} nie został zachowany z powodu jednego błędu" + other: "%{model} nie został zachowany z powodu %{count} błędów" body: "Błędy dotyczą następujących pól:" messages: inclusion: "nie znajduje się na liście dopuszczalnych wartości" @@ -114,16 +117,16 @@ accepted: "musi być zaakceptowane" empty: "nie może być puste" blank: "nie może być puste" - too_long: "jest za długie (maksymalnie {{count}} znaków)" - too_short: "jest za krótkie (minimalnie {{count}} znaków)" - wrong_length: "jest nieprawidłowej długości (powinna wynosić {{count}} znaków)" + too_long: "jest za długie (maksymalnie %{count} znaków)" + too_short: "jest za krótkie (minimalnie %{count} znaków)" + wrong_length: "jest nieprawidłowej długości (powinna wynosić %{count} znaków)" taken: "jest już zajęte" not_a_number: "nie jest liczbą" - greater_than: "musi być większe niż {{count}}" - greater_than_or_equal_to: "musi być większe lub równe {{count}}" - equal_to: "musi być równe {{count}}" - less_than: "musi być mniejsze niż {{count}}" - less_than_or_equal_to: "musi być mniejsze lub równe {{count}}" + greater_than: "musi być większe niż %{count}" + greater_than_or_equal_to: "musi być większe lub równe %{count}" + equal_to: "musi być równe %{count}" + less_than: "musi być mniejsze niż %{count}" + less_than_or_equal_to: "musi być mniejsze lub równe %{count}" odd: "musi być nieparzyste" even: "musi być parzyste" greater_than_start_date: "musi być większe niż początkowa data" @@ -203,10 +206,10 @@ enumeration_activities: Działania (śledzenie czasu) enumeration_doc_categories: Kategorie dokumentów enumeration_issue_priorities: Priorytety zagadnień - error_can_t_load_default_data: "Domyślna konfiguracja nie może być załadowana: {{value}}" + error_can_t_load_default_data: "Domyślna konfiguracja nie może być załadowana: %{value}" error_issue_not_found_in_project: 'Zaganienie nie zostało znalezione lub nie należy do tego projektu' error_scm_annotate: "Wpis nie istnieje lub nie można do niego dodawać adnotacji." - error_scm_command_failed: "Wystąpił błąd przy próbie dostępu do repozytorium: {{value}}" + error_scm_command_failed: "Wystąpił błąd przy próbie dostępu do repozytorium: %{value}" error_scm_not_found: "Obiekt lub wersja nie zostały znalezione w repozytorium." field_account: Konto field_activity: Aktywność @@ -228,7 +231,7 @@ field_default_value: Domyślny field_delay: Opóźnienie field_description: Opis - field_done_ratio: % Wykonane + field_done_ratio: "% Wykonane" field_downloads: Pobrań field_due_date: Data oddania field_effective_date: Data @@ -277,6 +280,7 @@ field_role: Rola field_searchable: Przeszukiwalne field_spent_on: Data + field_start_date: Start field_start_page: Strona startowa field_status: Status field_subject: Temat @@ -293,9 +297,9 @@ field_version: Wersja field_vf_personnel: Personel field_vf_watcher: Obserwator - general_csv_decimal_separator: '.' + general_csv_decimal_separator: ',' general_csv_encoding: UTF-8 - general_csv_separator: ',' + general_csv_separator: ';' general_first_day_of_week: '1' general_lang_name: 'Polski' general_pdf_encoding: UTF-8 @@ -304,21 +308,21 @@ general_text_no: 'nie' general_text_yes: 'tak' gui_validation_error: 1 błąd - gui_validation_error_plural234: "{{count}} błędy" - gui_validation_error_plural5: "{{count}} błędów" - gui_validation_error_plural: "{{count}} błędów" + gui_validation_error_plural234: "%{count} błędy" + gui_validation_error_plural5: "%{count} błędów" + gui_validation_error_plural: "%{count} błędów" label_activity: Aktywność label_add_another_file: Dodaj kolejny plik label_add_note: Dodaj notatkę label_added: dodane - label_added_time_by: "Dodane przez {{author}} {{age}} temu" + label_added_time_by: "Dodane przez %{author} %{age} temu" label_administration: Administracja label_age: Wiek label_ago: dni temu label_all: wszystko label_all_time: cały czas label_all_words: Wszystkie słowa - label_and_its_subprojects: "{{value}} i podprojekty" + label_and_its_subprojects: "%{value} i podprojekty" label_applied_status: Stosowany status label_assigned_to_me_issues: Zagadnienia przypisane do mnie label_associated_revisions: Skojarzone rewizje @@ -333,7 +337,7 @@ label_auth_source_plural: Tryby identyfikacji label_authentication: Identyfikacja label_blocked_by: zablokowane przez - label_blocks: blokady + label_blocks: blokuje label_board: Forum label_board_new: Nowe forum label_board_plural: Fora @@ -353,17 +357,17 @@ label_closed_issues_plural5: zamknięte label_closed_issues_plural: zamknięte label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{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" + other: "%{count} open" label_x_closed_issues_abbr: zero: 0 closed one: 1 closed - other: "{{count}} closed" + other: "%{count} closed" label_comment: Komentarz label_comment_add: Dodaj komentarz label_comment_added: Komentarz dodany @@ -374,7 +378,7 @@ label_x_comments: zero: no comments one: 1 comment - other: "{{count}} comments" + other: "%{count} comments" label_commits_per_author: Zatwierdzenia według autorów label_commits_per_month: Zatwierdzenia według miesięcy label_confirmation: Potwierdzenie @@ -398,18 +402,18 @@ label_diff_inline: w linii label_diff_side_by_side: obok siebie label_disabled: zablokowany - label_display_per_page: "Na stronę: {{value}}" + label_display_per_page: "Na stronę: %{value}" label_document: Dokument label_document_added: Dodano dokument label_document_new: Nowy dokument label_document_plural: Dokumenty - label_download: "{{count}} Pobranie" - label_download_plural234: "{{count}} Pobrania" - label_download_plural5: "{{count}} Pobrań" - label_download_plural: "{{count}} Pobrania" + label_download: "%{count} Pobranie" + label_download_plural234: "%{count} Pobrania" + label_download_plural5: "%{count} Pobrań" + label_download_plural: "%{count} Pobrania" label_downloads_abbr: Pobieranie label_duplicated_by: zduplikowane przez - label_duplicates: duplikaty + label_duplicates: duplikuje label_end_to_end: koniec do końca label_end_to_start: koniec do początku label_enumeration_new: Nowa wartość @@ -418,10 +422,10 @@ label_equals: równa się label_example: Przykład label_export_to: Eksportuj do - label_f_hour: "{{value}} godzina" - label_f_hour_plural: "{{value}} godzin" + label_f_hour: "%{value} godzina" + label_f_hour_plural: "%{value} godzin" label_feed_plural: Ilość RSS - label_feeds_access_key_created_on: "Klucz dostępu RSS stworzony {{value}} dni temu" + label_feeds_access_key_created_on: "Klucz dostępu RSS stworzony %{value} dni temu" label_file_added: Dodano plik label_file_plural: Pliki label_filter_add: Dodaj filtr @@ -459,13 +463,13 @@ label_issue_updated: Uaktualniono zagadnienie label_issue_view_all: Zobacz wszystkie zagadnienia label_issue_watchers: Obserwatorzy - label_issues_by: "Zagadnienia wprowadzone przez {{value}}" + label_issues_by: "Zagadnienia wprowadzone przez %{value}" label_jump_to_a_project: Skocz do projektu... label_language_based: Na podstawie języka - label_last_changes: "ostatnie {{count}} zmian" + label_last_changes: "ostatnie %{count} zmian" label_last_login: Ostatnie połączenie label_last_month: ostatni miesiąc - label_last_n_days: "ostatnie {{count}} dni" + label_last_n_days: "ostatnie %{count} dni" label_last_week: ostatni tydzień label_latest_revision: Najnowsza rewizja label_latest_revision_plural: Najnowsze rewizje @@ -486,10 +490,10 @@ label_message_plural: Wiadomości label_message_posted: Dodano wiadomość label_min_max_length: Min - Maks długość - label_modification: "{{count}} modyfikacja" - label_modification_plural234: "{{count}} modyfikacje" - label_modification_plural5: "{{count}} modyfikacji" - label_modification_plural: "{{count}} modyfikacje" + label_modification: "%{count} modyfikacja" + label_modification_plural234: "%{count} modyfikacje" + label_modification_plural5: "%{count} modyfikacji" + label_modification_plural: "%{count} modyfikacje" label_modified: zmodyfikowane label_module_plural: Moduły label_month: Miesiąc @@ -544,7 +548,7 @@ label_x_projects: zero: brak projektów one: jeden projekt - other: "{{count}} projektów" + other: "%{count} projektów" label_public_projects: Projekty publiczne label_query: Kwerenda label_query_new: Nowa kwerenda @@ -573,7 +577,7 @@ label_roadmap: Mapa label_roadmap_due_in: W czasie label_roadmap_no_issues: Brak zagadnień do tej wersji - label_roadmap_overdue: "{{value}} spóźnienia" + label_roadmap_overdue: "%{value} spóźnienia" label_role: Rola label_role_and_permissions: Role i Uprawnienia label_role_new: Nowa rola @@ -585,7 +589,7 @@ label_send_test_email: Wyślij próbny email label_settings: Ustawienia label_show_completed_versions: Pokaż kompletne wersje - label_sort_by: "Sortuj po {{value}}" + label_sort_by: "Sortuj po %{value}" label_sort_higher: Do góry label_sort_highest: Przesuń na górę label_sort_lower: Do dołu @@ -609,7 +613,7 @@ label_tracker: Typ zagadnienia label_tracker_new: Nowy typ zagadnienia label_tracker_plural: Typy zagadnień - label_updated_time: "Zaktualizowane {{value}} temu" + label_updated_time: "Zaktualizowane %{value} temu" label_used_by: Używane przez label_user: Użytkownik label_user_mail_no_self_notified: "Nie chcę powiadomień o zmianach, które sam wprowadzam." @@ -632,16 +636,16 @@ label_workflow: Przepływ label_year: Rok label_yesterday: wczoraj - mail_body_account_activation_request: "Zarejestrowano nowego użytkownika: ({{value}}). Konto oczekuje na twoje zatwierdzenie:" + mail_body_account_activation_request: "Zarejestrowano nowego użytkownika: (%{value}). Konto oczekuje na twoje zatwierdzenie:" mail_body_account_information: Twoje konto - mail_body_account_information_external: "Możesz użyć twojego {{value}} konta do zalogowania." + mail_body_account_information_external: "Możesz użyć twojego %{value} konta do zalogowania." mail_body_lost_password: 'W celu zmiany swojego hasła użyj poniższego odnośnika:' mail_body_register: 'W celu aktywacji Twojego konta, użyj poniższego odnośnika:' - mail_body_reminder: "Wykaz przypisanych do Ciebie zagadnień, których termin wypada w ciągu następnych {{count}} dni" - mail_subject_account_activation_request: "Zapytanie aktywacyjne konta {{value}}" - mail_subject_lost_password: "Twoje hasło do {{value}}" - mail_subject_register: "Aktywacja konta w {{value}}" - mail_subject_reminder: "Uwaga na terminy, masz zagadnienia do obsłużenia w ciągu następnych {{count}} dni! ({{days}})" + mail_body_reminder: "Wykaz przypisanych do Ciebie zagadnień, których termin wypada w ciągu następnych %{count} dni" + mail_subject_account_activation_request: "Zapytanie aktywacyjne konta %{value}" + mail_subject_lost_password: "Twoje hasło do %{value}" + mail_subject_register: "Aktywacja konta w %{value}" + mail_subject_reminder: "Uwaga na terminy, masz zagadnienia do obsłużenia w ciągu następnych %{count} dni! (%{days})" notice_account_activated: Twoje konto zostało aktywowane. Możesz się zalogować. notice_account_invalid_creditentials: Zły użytkownik lub hasło notice_account_lost_email_sent: Email z instrukcjami zmiany hasła został wysłany do Ciebie. @@ -653,9 +657,9 @@ notice_account_wrong_password: Złe hasło notice_can_t_change_password: To konto ma zewnętrzne źródło identyfikacji. Nie możesz zmienić hasła. notice_default_data_loaded: Domyślna konfiguracja została pomyślnie załadowana. - notice_email_error: "Wystąpił błąd w trakcie wysyłania maila ({{value}})" - notice_email_sent: "Email został wysłany do {{value}}" - notice_failed_to_save_issues: "Błąd podczas zapisu zagadnień {{count}} z {{total}} zaznaczonych: {{ids}}." + notice_email_error: "Wystąpił błąd w trakcie wysyłania maila (%{value})" + notice_email_sent: "Email został wysłany do %{value}" + notice_failed_to_save_issues: "Błąd podczas zapisu zagadnień %{count} z %{total} zaznaczonych: %{ids}." notice_feeds_access_key_reseted: Twój klucz dostępu RSS został zrestetowany. notice_file_not_found: Strona do której próbujesz się dostać nie istnieje lub została usunięta. notice_locking_conflict: Dane poprawione przez innego użytkownika. @@ -730,7 +734,6 @@ setting_autologin: Auto logowanie setting_bcc_recipients: Odbiorcy kopii tajnej (kt/bcc) setting_commit_fix_keywords: Słowa zmieniające status - setting_commit_logs_encoding: Kodowanie komentarzy zatwierdzeń setting_commit_ref_keywords: Słowa tworzące powiązania setting_cross_project_issue_relations: Zezwól na powiązania zagadnień między projektami setting_date_format: Format daty @@ -765,24 +768,24 @@ status_registered: zarejestrowany text_are_you_sure: Jesteś pewien ? text_assign_time_entries_to_project: Przypisz wpisy dziennika do projektu - text_caracters_maximum: "{{count}} znaków maksymalnie." - text_caracters_minimum: "Musi być nie krótsze niż {{count}} znaków." + text_caracters_maximum: "%{count} znaków maksymalnie." + text_caracters_minimum: "Musi być nie krótsze niż %{count} znaków." text_comma_separated: Wielokrotne wartości dozwolone (rozdzielone przecinkami). 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_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/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_enumeration_destroy_question: "%{count} obiektów jest przypisana do tej wartości." text_file_repository_writable: Zapisywalne repozytorium plików - text_issue_added: "Zagadnienie {{id}} zostało wprowadzone (by {{author}})." + text_issue_added: "Zagadnienie %{id} zostało wprowadzone (by %{author})." text_issue_category_destroy_assignments: Usuń przydziały kategorii - text_issue_category_destroy_question: "Zagadnienia ({{count}}) są przypisane do tej kategorii. Co chcesz zrobić?" + text_issue_category_destroy_question: "Zagadnienia (%{count}) są przypisane do tej kategorii. Co chcesz zrobić?" text_issue_category_reassign_to: Przydziel zagadnienie do tej kategorii - text_issue_updated: "Zagadnienie {{id}} zostało zaktualizowane (by {{author}})." + text_issue_updated: "Zagadnienie %{id} zostało zaktualizowane (by %{author})." text_issues_destroy_confirmation: 'Czy jestes pewien, że chcesz usunąć wskazane zagadnienia?' text_issues_ref_in_commit_messages: Odwołania do zagadnień w komentarzach zatwierdzeń - text_length_between: "Długość pomiędzy {{min}} i {{max}} znaków." + text_length_between: "Długość pomiędzy %{min} i %{max} znaków." text_load_default_configuration: Załaduj domyślną konfigurację text_min_max_length_info: 0 oznacza brak restrykcji text_no_configuration_data: "Role użytkowników, typy zagadnień, statusy zagadnień oraz przepływ pracy nie zostały jeszcze skonfigurowane.\nJest wysoce rekomendowane by załadować domyślną konfigurację. Po załadowaniu będzie możliwość edycji tych danych." @@ -794,24 +797,24 @@ text_rmagick_available: RMagick dostępne (opcjonalnie) text_select_mail_notifications: Zaznacz czynności przy których użytkownik powinien być powiadomiony mailem. text_select_project_modules: 'Wybierz moduły do aktywacji w tym projekcie:' - text_status_changed_by_changeset: "Zastosowane w zmianach {{value}}." - text_subprojects_destroy_warning: "Podprojekt(y): {{value}} zostaną także usunięte." + text_status_changed_by_changeset: "Zastosowane w zmianach %{value}." + text_subprojects_destroy_warning: "Podprojekt(y): %{value} zostaną także usunięte." text_tip_issue_begin_day: zadanie zaczynające się dzisiaj text_tip_issue_begin_end_day: zadanie zaczynające i kończące się dzisiaj text_tip_issue_end_day: zadanie kończące się dzisiaj text_tracker_no_workflow: Brak przepływu zdefiniowanego dla tego typu zagadnienia text_unallowed_characters: Niedozwolone znaki text_user_mail_option: "W przypadku niezaznaczonych projektów, będziesz otrzymywał powiadomienia tylko na temat zagadnień, które obserwujesz, lub w których bierzesz udział (np. jesteś autorem lub adresatem)." - text_user_wrote: "{{value}} napisał:" + text_user_wrote: "%{value} napisał:" text_wiki_destroy_confirmation: Jesteś pewien, że chcesz usunąć to wiki i całą jego zawartość ? text_workflow_edit: Zaznacz rolę i typ zagadnienia do edycji przepływu - label_user_activity: "Aktywność: {{value}}" - label_updated_time_by: "Uaktualnione przez {{author}} {{age}} temu" + label_user_activity: "Aktywność: %{value}" + label_updated_time_by: "Uaktualnione przez %{author} %{age} temu" text_diff_truncated: '... Ten plik różnic został przycięty ponieważ jest zbyt długi.' setting_diff_max_lines_displayed: Maksymalna liczba linii różnicy do pokazania text_plugin_assets_writable: Zapisywalny katalog zasobów wtyczek - warning_attachments_not_saved: "{{count}} załącznik(ów) nie zostało zapisanych." + warning_attachments_not_saved: "%{count} załącznik(ów) nie zostało zapisanych." field_editable: Edytowalne label_display: Wygląd button_create_and_continue: Stwórz i dodaj kolejne @@ -826,21 +829,21 @@ label_descending: Malejąco label_sort: Sortuj label_ascending: Rosnąco - label_date_from_to: Od {{start}} do {{end}} + label_date_from_to: Od %{start} do %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: Ta strona posiada podstrony ({{descendants}}). Co chcesz zrobić? + text_wiki_page_destroy_question: Ta strona posiada podstrony (%{descendants}). Co chcesz zrobić? text_wiki_page_reassign_children: Podepnij je do strony nadrzędnej względem usuwanej text_wiki_page_nullify_children: Przesuń je na szczyt hierarchii text_wiki_page_destroy_children: Usuń wszystkie podstrony setting_password_min_length: Minimalna długość hasła field_group_by: Grupuj wyniki wg - mail_subject_wiki_content_updated: "Strona wiki '{{id}}' została uaktualniona" + mail_subject_wiki_content_updated: "Strona wiki '%{id}' została uaktualniona" label_wiki_content_added: Dodano stronę wiki - mail_subject_wiki_content_added: "Strona wiki '{{id}}' została dodana" - mail_body_wiki_content_added: Strona wiki '{{id}}' została dodana przez {{author}}. + mail_subject_wiki_content_added: "Strona wiki '%{id}' została dodana" + mail_body_wiki_content_added: Strona wiki '%{id}' została dodana przez %{author}. label_wiki_content_updated: Uaktualniono stronę wiki - mail_body_wiki_content_updated: Strona wiki '{{id}}' została uaktualniona przez {{author}}. + mail_body_wiki_content_updated: Strona wiki '%{id}' została uaktualniona przez %{author}. permission_add_project: Tworzenie projektu setting_new_project_user_role_id: Rola nadawana twórcom projektów, którzy nie posiadają uprawnień administatora label_view_all_revisions: Pokaż wszystkie rewizje @@ -848,14 +851,14 @@ label_branch: Gałąź error_no_tracker_in_project: Projekt nie posiada powiązanych typów zagadnień. Sprawdź ustawienia projektu. error_no_default_issue_status: Nie zdefiniowano domyślnego statusu zagadnień. Sprawdź konfigurację (Przejdź do "Administracja -> Statusy zagadnień). - text_journal_changed: "Zmieniono {{label}} z {{old}} na {{new}}" - text_journal_set_to: "Ustawiono {{label}} na {{value}}" - text_journal_deleted: "Usunięto {{label}} ({{old}})" + text_journal_changed: "Zmieniono %{label} z %{old} na %{new}" + text_journal_set_to: "Ustawiono %{label} na %{value}" + text_journal_deleted: "Usunięto %{label} (%{old})" label_group_plural: Grupy label_group: Grupa label_group_new: Nowa grupa label_time_entry_plural: Przepracowany czas - text_journal_added: "Dodano {{label}} {{value}}" + text_journal_added: "Dodano %{label} %{value}" field_active: Aktywne enumeration_system_activity: Aktywność Systemowa button_copy_and_follow: Kopiuj i przejdź do kopii zagadnienia @@ -864,12 +867,12 @@ button_show: Pokaż error_can_not_archive_project: Ten projekt nie może zostać zarchiwizowany error_can_not_reopen_issue_on_closed_version: Zagadnienie przydzielone do zakończonej wersji nie może zostać ponownie otwarte - error_issue_done_ratios_not_updated: % wykonania zagadnienia nie został uaktualniony. + error_issue_done_ratios_not_updated: "% wykonania zagadnienia nie został uaktualniony." error_workflow_copy_source: Proszę wybrać źródłowy typ zagadnienia lub rolę error_workflow_copy_target: Proszę wybrać docelowe typ(y) zagadnień i rolę(e) field_sharing: Współdzielenie label_api_access_key: Klucz dostępu do API - label_api_access_key_created_on: Klucz dostępu do API został utworzony {{value}} temu + label_api_access_key_created_on: Klucz dostępu do API został utworzony %{value} temu label_close_versions: Zamknij ukończone wersje label_copy_same_as_target: Jak cel label_copy_source: Źródło @@ -878,7 +881,7 @@ label_feeds_access_key: Klucz dostępu do RSS label_missing_api_access_key: Brakuje klucza dostępu do API label_missing_feeds_access_key: Brakuje klucza dostępu do RSS - label_revision_id: Rewizja {{value}} + label_revision_id: Rewizja %{value} label_subproject_new: Nowy podprojekt label_update_issue_done_ratios: Uaktualnij % wykonania label_user_anonymous: Anonimowy @@ -895,7 +898,7 @@ setting_default_projects_modules: Domyślnie włączone moduły dla nowo tworzonych projektów setting_gravatar_default: Domyślny obraz Gravatar setting_issue_done_ratio: Obliczaj postęp realizacji zagadnień za pomocą - setting_issue_done_ratio_issue_field: % Wykonania zagadnienia + setting_issue_done_ratio_issue_field: "% Wykonania zagadnienia" setting_issue_done_ratio_issue_status: Statusu zagadnienia setting_mail_handler_body_delimiters: Przycinaj e-maile po jednej z tych linii setting_rest_api_enabled: Uaktywnij usługę sieciową REST @@ -920,12 +923,12 @@ label_subtask_plural: Podzagadnienia label_project_copy_notifications: Wyślij powiadomienia mailowe przy kopiowaniu projektu error_can_not_delete_custom_field: Nie można usunąć tego pola - error_unable_to_connect: Nie można połączyć ({{value}}) + error_unable_to_connect: Nie można połączyć (%{value}) error_can_not_remove_role: Ta rola przypisana jest niektórym użytkownikom i nie może zostać usunięta. error_can_not_delete_tracker: Ten typ przypisany jest do części zagadnień i nie może zostać usunięty. field_principal: Przełożony label_my_page_block: Elementy - notice_failed_to_save_members: "Nie można zapisać uczestników: {{errors}}." + notice_failed_to_save_members: "Nie można zapisać uczestników: %{errors}." text_zoom_out: Zmniejsz czcionkę text_zoom_in: Powiększ czcionkę notice_unable_delete_time_entry: Nie można usunąć wpisu z dziennika. @@ -933,7 +936,7 @@ field_time_entries: Dziennik project_module_gantt: Diagram Gantta project_module_calendar: Kalendarz - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -944,8 +947,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Kodowanie komentarzy zatwierdzeń + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/pt-BR.yml --- a/config/locales/pt-BR.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/pt-BR.yml Mon Jul 25 14:23:37 2011 +0100 @@ -12,7 +12,10 @@ abbr_day_names: [Dom, Seg, Ter, Qua, Qui, Sex, Sáb] month_names: [~, Janeiro, Fevereiro, Março, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro] abbr_month_names: [~, Jan, Fev, Mar, Abr, Mai, Jun, Jul, Ago, Set, Out, Nov, Dez] - order: [:day,:month,:year] + order: + - :day + - :month + - :year time: formats: @@ -33,46 +36,46 @@ half_a_minute: 'meio minuto' less_than_x_seconds: one: 'menos de 1 segundo' - other: 'menos de {{count}} segundos' + other: 'menos de %{count} segundos' x_seconds: one: '1 segundo' - other: '{{count}} segundos' + other: '%{count} segundos' less_than_x_minutes: one: 'menos de um minuto' - other: 'menos de {{count}} minutos' + other: 'menos de %{count} minutos' x_minutes: one: '1 minuto' - other: '{{count}} minutos' + other: '%{count} minutos' about_x_hours: one: 'aproximadamente 1 hora' - other: 'aproximadamente {{count}} horas' + other: 'aproximadamente %{count} horas' x_days: one: '1 dia' - other: '{{count}} dias' + other: '%{count} dias' about_x_months: one: 'aproximadamente 1 mês' - other: 'aproximadamente {{count}} meses' + other: 'aproximadamente %{count} meses' x_months: one: '1 mês' - other: '{{count}} meses' + other: '%{count} meses' about_x_years: one: 'aproximadamente 1 ano' - other: 'aproximadamente {{count}} anos' + other: 'aproximadamente %{count} anos' over_x_years: one: 'mais de 1 ano' - other: 'mais de {{count}} anos' + other: 'mais de %{count} anos' almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" # numeros number: @@ -118,7 +121,7 @@ template: header: one: "model não pode ser salvo: 1 erro" - other: "model não pode ser salvo: {{count}} erros." + other: "model não pode ser salvo: %{count} erros." body: "Por favor, verifique os seguintes campos:" messages: inclusion: "não está incluso na lista" @@ -128,16 +131,16 @@ accepted: "precisa ser aceito" empty: "não pode ficar vazio" blank: "não pode ficar vazio" - too_long: "é muito longo (máximo: {{count}} caracteres)" - too_short: "é muito curto (mínimon: {{count}} caracteres)" - wrong_length: "deve ter {{count}} caracteres" + too_long: "é muito longo (máximo: %{count} caracteres)" + too_short: "é muito curto (mínimon: %{count} caracteres)" + wrong_length: "deve ter %{count} caracteres" taken: "não está disponível" not_a_number: "não é um número" - greater_than: "precisa ser maior do que {{count}}" - greater_than_or_equal_to: "precisa ser maior ou igual a {{count}}" - equal_to: "precisa ser igual a {{count}}" - less_than: "precisa ser menor do que {{count}}" - less_than_or_equal_to: "precisa ser menor ou igual a {{count}}" + greater_than: "precisa ser maior do que %{count}" + greater_than_or_equal_to: "precisa ser maior ou igual a %{count}" + equal_to: "precisa ser igual a %{count}" + less_than: "precisa ser menor do que %{count}" + less_than_or_equal_to: "precisa ser menor ou igual a %{count}" odd: "precisa ser ímpar" even: "precisa ser par" greater_than_start_date: "deve ser maior que a data inicial" @@ -155,7 +158,7 @@ general_csv_separator: ';' general_csv_decimal_separator: ',' general_csv_encoding: ISO-8859-1 - general_pdf_encoding: ISO-8859-1 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' notice_account_updated: Conta atualizada com sucesso. @@ -174,35 +177,35 @@ notice_file_not_found: A página que você está tentando acessar não existe ou foi excluída. notice_locking_conflict: Os dados foram atualizados por outro usuário. notice_not_authorized: Você não está autorizado a acessar esta página. - notice_email_sent: "Um e-mail foi enviado para {{value}}" - notice_email_error: "Ocorreu um erro ao enviar o e-mail ({{value}})" + notice_email_sent: "Um e-mail foi enviado para %{value}" + notice_email_error: "Ocorreu um erro ao enviar o e-mail (%{value})" notice_feeds_access_key_reseted: Sua chave RSS foi reconfigurada. - notice_failed_to_save_issues: "Problema ao salvar {{count}} tarefa(s) de {{total}} selecionadas: {{ids}}." + notice_failed_to_save_issues: "Problema ao salvar %{count} tarefa(s) de %{total} selecionadas: %{ids}." notice_no_issue_selected: "Nenhuma tarefa selecionada! Por favor, marque as tarefas que você deseja editar." notice_account_pending: "Sua conta foi criada e está aguardando aprovação do administrador." notice_default_data_loaded: Configuração padrão carregada com sucesso. - error_can_t_load_default_data: "A configuração padrão não pode ser carregada: {{value}}" + error_can_t_load_default_data: "A configuração padrão não pode ser carregada: %{value}" error_scm_not_found: "A entrada e/ou a revisão não existe no repositório." - error_scm_command_failed: "Ocorreu um erro ao tentar acessar o repositório: {{value}}" + error_scm_command_failed: "Ocorreu um erro ao tentar acessar o repositório: %{value}" error_scm_annotate: "Esta entrada não existe ou não pode ser anotada." error_issue_not_found_in_project: 'A tarefa não foi encontrada ou não pertence a este projeto' error_no_tracker_in_project: 'Não há um tipo de tarefa associado a este projeto. Favor verificar as configurações do projeto.' error_no_default_issue_status: 'A situação padrão para tarefa não está definida. Favor verificar sua configuração (Vá em "Administração -> Situação da tarefa").' - mail_subject_lost_password: "Sua senha do {{value}}." + mail_subject_lost_password: "Sua senha do %{value}." mail_body_lost_password: 'Para mudar sua senha, clique no link abaixo:' - mail_subject_register: "Ativação de conta do {{value}}." + mail_subject_register: "Ativação de conta do %{value}." mail_body_register: 'Para ativar sua conta, clique no link abaixo:' - mail_body_account_information_external: "Você pode usar sua conta do {{value}} para entrar." + mail_body_account_information_external: "Você pode usar sua conta do %{value} para entrar." mail_body_account_information: Informações sobre sua conta - mail_subject_account_activation_request: "{{value}} - Requisição de ativação de conta" - mail_body_account_activation_request: "Um novo usuário ({{value}}) se registrou. A conta está aguardando sua aprovação:" - mail_subject_reminder: "{{count}} tarefa(s) com data prevista para os próximos {{days}} dias" - mail_body_reminder: "{{count}} tarefa(s) para você com data prevista para os próximos {{days}} dias:" + mail_subject_account_activation_request: "%{value} - Requisição de ativação de conta" + mail_body_account_activation_request: "Um novo usuário (%{value}) se registrou. A conta está aguardando sua aprovação:" + mail_subject_reminder: "%{count} tarefa(s) com data prevista para os próximos %{days} dias" + mail_body_reminder: "%{count} tarefa(s) para você com data prevista para os próximos %{days} dias:" gui_validation_error: 1 erro - gui_validation_error_plural: "{{count}} erros" + gui_validation_error_plural: "%{count} erros" field_name: Nome field_description: Descrição @@ -264,7 +267,8 @@ field_attr_lastname: Atributo para sobrenome field_attr_mail: Atributo para e-mail field_onthefly: Criar usuários dinamicamente ("on-the-fly") - field_done_ratio: % Terminado + field_start_date: Início + field_done_ratio: "% Terminado" field_auth_source: Modo de autenticação field_hide_mail: Ocultar meu e-mail field_comments: Comentário @@ -313,8 +317,7 @@ setting_cross_project_issue_relations: Permitir relacionar tarefas entre projetos setting_issue_list_default_columns: Colunas padrão visíveis na lista de tarefas setting_repositories_encodings: Codificação dos repositórios - setting_commit_logs_encoding: Codificação das mensagens de commit - setting_emails_footer: Rodapé dos e-mails + setting_emails_footer: Rodapé do e-mail setting_protocol: Protocolo setting_per_page_options: Número de itens exibidos por página setting_user_format: Formato de exibição de nome de usuário @@ -343,16 +346,19 @@ label_x_projects: zero: nenhum projeto one: 1 projeto - other: "{{count}} projetos" + other: "%{count} projetos" label_project_all: Todos os projetos label_project_latest: Últimos projetos label_issue: Tarefa label_issue_new: Nova tarefa label_issue_plural: Tarefas label_issue_view_all: Ver todas as tarefas - label_issues_by: "Tarefas por {{value}}" + label_issues_by: "Tarefas por %{value}" label_issue_added: Tarefa adicionada label_issue_updated: Tarefa atualizada + label_issue_note_added: Nota adicionada + label_issue_status_updated: Situação atualizada + label_issue_priority_updated: Prioridade atualizada label_document: Documento label_document_new: Novo documento label_document_plural: Documentos @@ -407,7 +413,7 @@ label_auth_source_new: Novo modo de autenticação label_auth_source_plural: Modos de autenticação label_subproject_plural: Sub-projetos - label_and_its_subprojects: "{{value}} e seus sub-projetos" + label_and_its_subprojects: "%{value} e seus sub-projetos" label_min_max_length: Tamanho mín-máx label_list: Lista label_date: Data @@ -418,8 +424,8 @@ label_text: Texto longo label_attribute: Atributo label_attribute_plural: Atributos - label_download: "{{count}} Download" - label_download_plural: "{{count}} Downloads" + label_download: "%{count} Download" + label_download_plural: "%{count} Downloads" label_no_data: Nenhuma informação disponível label_change_status: Alterar situação label_history: Histórico @@ -450,17 +456,17 @@ label_closed_issues: Fechada label_closed_issues_plural: Fechadas label_x_open_issues_abbr_on_total: - zero: 0 aberta / {{total}} - one: 1 aberta / {{total}} - other: "{{count}} abertas / {{total}}" + zero: 0 aberta / %{total} + one: 1 aberta / %{total} + other: "%{count} abertas / %{total}" label_x_open_issues_abbr: zero: 0 aberta one: 1 aberta - other: "{{count}} abertas" + other: "%{count} abertas" label_x_closed_issues_abbr: zero: 0 fechada one: 1 fechada - other: "{{count}} fechadas" + other: "%{count} fechadas" label_total: Total label_permissions: Permissões label_current_status: Situação atual @@ -478,7 +484,7 @@ label_months_from: meses a partir de label_gantt: Gantt label_internal: Interno - label_last_changes: "últimas {{count}} alterações" + label_last_changes: "últimas %{count} alterações" label_change_view_all: Mostrar todas as alterações label_personalize_page: Personalizar esta página label_comment: Comentário @@ -486,7 +492,7 @@ label_x_comments: zero: nenhum comentário one: 1 comentário - other: "{{count}} comentários" + other: "%{count} comentários" label_comment_add: Adicionar comentário label_comment_added: Comentário adicionado label_comment_delete: Excluir comentário @@ -505,7 +511,7 @@ label_yesterday: ontem label_this_week: esta semana label_last_week: última semana - label_last_n_days: "últimos {{count}} dias" + label_last_n_days: "últimos %{count} dias" label_this_month: este mês label_last_month: último mês label_this_year: este ano @@ -519,8 +525,8 @@ label_repository: Repositório label_repository_plural: Repositórios label_browse: Procurar - label_modification: "{{count}} alteração" - label_modification_plural: "{{count}} alterações" + label_modification: "%{count} alteração" + label_modification_plural: "%{count} alterações" label_revision: Revisão label_revision_plural: Revisões label_associated_revisions: Revisões associadas @@ -536,8 +542,8 @@ label_sort_lower: Mover para baixo label_sort_lowest: Mover para o fim label_roadmap: Planejamento - label_roadmap_due_in: "Previsto para {{value}}" - label_roadmap_overdue: "{{value}} atrasado" + label_roadmap_due_in: "Previsto para %{value}" + label_roadmap_overdue: "%{value} atrasado" label_roadmap_no_issues: Sem tarefas para esta versão label_search: Busca label_result_plural: Resultados @@ -555,9 +561,9 @@ label_changes_details: Detalhes de todas as alterações label_issue_tracking: Tarefas label_spent_time: Tempo gasto - label_f_hour: "{{value}} hora" - label_f_hour_plural: "{{value}} horas" - label_time_tracking: Controle de horas + label_f_hour: "%{value} hora" + label_f_hour_plural: "%{value} horas" + label_time_tracking: Registro de horas label_change_plural: Alterações label_statistics: Estatísticas label_commits_per_month: Commits por mês @@ -605,12 +611,12 @@ label_date_from: De label_date_to: Para label_language_based: Com base no idioma do usuário - label_sort_by: "Ordenar por {{value}}" + label_sort_by: "Ordenar por %{value}" label_send_test_email: Enviar um e-mail de teste - label_feeds_access_key_created_on: "chave de acesso RSS criada {{value}} atrás" + label_feeds_access_key_created_on: "chave de acesso RSS criada %{value} atrás" label_module_plural: Módulos - label_added_time_by: "Adicionado por {{author}} {{age}} atrás" - label_updated_time: "Atualizado {{value}} atrás" + label_added_time_by: "Adicionado por %{author} %{age} atrás" + label_updated_time: "Atualizado %{value} atrás" label_jump_to_a_project: Ir para o projeto... label_file_plural: Arquivos label_changeset_plural: Changesets @@ -626,7 +632,7 @@ label_registration_activation_by_email: ativação de conta por e-mail label_registration_manual_activation: ativação manual de conta label_registration_automatic_activation: ativação automática de conta - label_display_per_page: "Por página: {{value}}" + label_display_per_page: "Por página: %{value}" label_age: Idade label_change_properties: Alterar propriedades label_general: Geral @@ -692,43 +698,43 @@ text_regexp_info: ex. ^[A-Z0-9]+$ text_min_max_length_info: 0 = sem restrição text_project_destroy_confirmation: Você tem certeza que deseja excluir este projeto e todos os dados relacionados? - text_subprojects_destroy_warning: "Seu(s) subprojeto(s): {{value}} também serão excluídos." + text_subprojects_destroy_warning: "Seu(s) subprojeto(s): %{value} também serão excluídos." text_workflow_edit: Selecione um papel e um tipo de tarefa para editar o fluxo de trabalho text_are_you_sure: Você tem certeza? text_tip_issue_begin_day: tarefa inicia neste dia text_tip_issue_end_day: tarefa termina neste dia text_tip_issue_begin_end_day: tarefa inicia e termina neste dia text_project_identifier_info: 'Letras minúsculas (a-z), números e hífens permitidos.
    Uma vez salvo, o identificador não poderá ser alterado.' - text_caracters_maximum: "máximo {{count}} caracteres" - text_caracters_minimum: "deve ter ao menos {{count}} caracteres." - text_length_between: "deve ter entre {{min}} e {{max}} caracteres." + text_caracters_maximum: "máximo %{count} caracteres" + text_caracters_minimum: "deve ter ao menos %{count} caracteres." + text_length_between: "deve ter entre %{min} e %{max} caracteres." text_tracker_no_workflow: Sem fluxo de trabalho definido para este tipo. text_unallowed_characters: Caracteres não permitidos text_comma_separated: Múltiplos valores são permitidos (separados por vírgula). text_issues_ref_in_commit_messages: Referenciando tarefas nas mensagens de commit - text_issue_added: "Tarefa {{id}} incluída (por {{author}})." - text_issue_updated: "Tarefa {{id}} alterada (por {{author}})." + text_issue_added: "Tarefa %{id} incluída (por %{author})." + text_issue_updated: "Tarefa %{id} alterada (por %{author})." text_wiki_destroy_confirmation: Você tem certeza que deseja excluir este wiki e TODO o seu conteúdo? - text_issue_category_destroy_question: "Algumas tarefas ({{count}}) estão atribuídas a esta categoria. O que você deseja fazer?" + text_issue_category_destroy_question: "Algumas tarefas (%{count}) estão atribuídas a esta categoria. O que você deseja fazer?" text_issue_category_destroy_assignments: Remover atribuições da categoria text_issue_category_reassign_to: Redefinir tarefas para esta categoria text_user_mail_option: "Para projetos (não selecionados), você somente receberá notificações sobre o que você está observando ou está envolvido (ex. tarefas das quais você é o autor ou que estão atribuídas a você)" text_no_configuration_data: "Os Papéis, tipos de tarefas, situação de tarefas e fluxos de trabalho não foram configurados ainda.\nÉ altamente recomendado carregar as configurações padrão. Você poderá modificar estas configurações assim que carregadas." text_load_default_configuration: Carregar a configuração padrão - text_status_changed_by_changeset: "Aplicado no changeset {{value}}." + text_status_changed_by_changeset: "Aplicado no changeset %{value}." text_issues_destroy_confirmation: 'Você tem certeza que deseja excluir a(s) tarefa(s) selecionada(s)?' text_select_project_modules: 'Selecione módulos para habilitar para este projeto:' text_default_administrator_account_changed: Conta padrão do administrador alterada text_file_repository_writable: Repositório com permissão de escrita text_rmagick_available: RMagick disponível (opcional) - text_destroy_time_entries_question: "{{hours}} horas de trabalho foram registradas nas tarefas que você está excluindo. O que você deseja fazer?" + text_destroy_time_entries_question: "%{hours} horas de trabalho foram registradas nas tarefas que você está excluindo. O que você deseja fazer?" text_destroy_time_entries: Excluir horas de trabalho text_assign_time_entries_to_project: Atribuir estas horas de trabalho para outro projeto text_reassign_time_entries: 'Atribuir horas reportadas para esta tarefa:' - text_user_wrote: "{{value}} escreveu:" - text_enumeration_destroy_question: "{{count}} objetos estão atribuídos a este valor." + 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 @@ -754,7 +760,7 @@ enumeration_issue_priorities: Prioridade das tarefas enumeration_doc_categories: Categorias de documento - enumeration_activities: Atividades (time tracking) + enumeration_activities: Atividades (registro de horas) notice_unable_delete_version: Não foi possível excluir a versão label_renamed: renomeado label_copied: copiado @@ -810,12 +816,12 @@ text_repository_usernames_mapping: "Seleciona ou atualiza os usuários do Redmine mapeando para cada usuário encontrado no log do repositório.\nUsuários com o mesmo login ou e-mail no Redmine e no repositório serão mapeados automaticamente." permission_edit_own_messages: Editar próprias mensagens permission_delete_own_messages: Excluir próprias mensagens - label_user_activity: "Atividade de {{value}}" - label_updated_time_by: "Atualizado por {{author}} há {{age}}" + label_user_activity: "Atividade de %{value}" + label_updated_time_by: "Atualizado por %{author} há %{age}" text_diff_truncated: '... Este diff foi truncado porque excede o tamanho máximo que pode ser exibido.' setting_diff_max_lines_displayed: Número máximo de linhas exibidas no diff text_plugin_assets_writable: Diretório de plugins gravável - warning_attachments_not_saved: "{{count}} arquivo(s) não puderam ser salvo(s)." + warning_attachments_not_saved: "%{count} arquivo(s) não puderam ser salvo(s)." button_create_and_continue: Criar e continuar text_custom_field_possible_values_info: 'Uma linha para cada valor' label_display: Exibição @@ -830,34 +836,34 @@ label_descending: Descendente label_sort: Ordenar label_ascending: Ascendente - label_date_from_to: De {{start}} até {{end}} + label_date_from_to: De %{start} até %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: Esta página tem {{descendants}} página(s) filha(s) e descendente(s). O que você quer fazer? + text_wiki_page_destroy_question: Esta página tem %{descendants} página(s) filha(s) e descendente(s). O que você quer fazer? text_wiki_page_reassign_children: Reatribuir páginas filhas para esta página pai text_wiki_page_nullify_children: Manter as páginas filhas como páginas raízes text_wiki_page_destroy_children: Excluir páginas filhas e todas suas descendentes setting_password_min_length: Comprimento mínimo para senhas field_group_by: Agrupar por - mail_subject_wiki_content_updated: "A página wiki '{{id}}' foi atualizada" + mail_subject_wiki_content_updated: "A página wiki '%{id}' foi atualizada" label_wiki_content_added: Página wiki adicionada - mail_subject_wiki_content_added: "A página wiki '{{id}}' foi adicionada" - mail_body_wiki_content_added: A página wiki '{{id}}' foi adicionada por {{author}}. + mail_subject_wiki_content_added: "A página wiki '%{id}' foi adicionada" + mail_body_wiki_content_added: A página wiki '%{id}' foi adicionada por %{author}. label_wiki_content_updated: Página wiki atualizada - mail_body_wiki_content_updated: A página wiki '{{id}}' foi atualizada por {{author}}. + mail_body_wiki_content_updated: A página wiki '%{id}' foi atualizada por %{author}. permission_add_project: Criar projeto setting_new_project_user_role_id: Papel atribuído a um usuário não-administrador que cria um projeto label_view_all_revisions: Ver todas as revisões label_tag: Etiqueta label_branch: Ramo - text_journal_changed: "{{label}} alterado de {{old}} para {{new}}" - text_journal_set_to: "{{label}} ajustado para {{value}}" - text_journal_deleted: "{{label}} excluído ({{old}})" + text_journal_changed: "%{label} alterado de %{old} para %{new}" + text_journal_set_to: "%{label} ajustado para %{value}" + text_journal_deleted: "%{label} excluído (%{old})" label_group_plural: Grupos label_group: Grupo label_group_new: Novo grupo label_time_entry_plural: Tempos gastos - text_journal_added: "{{label}} {{value}} adicionado" + text_journal_added: "%{label} %{value} adicionado" field_active: Ativo enumeration_system_activity: Atividade do sistema permission_delete_issue_watchers: Excluir observadores @@ -893,10 +899,10 @@ field_watcher: Observador permission_view_issues: Ver tarefas label_display_used_statuses_only: Somente exibir situações que são usadas por este tipo de tarefa - label_revision_id: Revisão {{value}} + label_revision_id: Revisão %{value} label_api_access_key: Chave de acesso a API button_show: Exibir - label_api_access_key_created_on: Chave de acesso a API criado a {{value}} atrás + label_api_access_key_created_on: Chave de acesso a API criado a %{value} atrás label_feeds_access_key: Chave de acesso ao RSS notice_api_access_key_reseted: Sua chave de acesso a API foi redefinida. setting_rest_api_enabled: Habilitar REST web service @@ -923,32 +929,72 @@ label_subtask_plural: Subtarefas label_project_copy_notifications: Enviar notificações por e-mail ao copiar projeto error_can_not_delete_custom_field: Não foi possível excluir o campo personalizado - error_unable_to_connect: Não foi possível conectar ({{value}}) + error_unable_to_connect: Não foi possível conectar (%{value}) error_can_not_remove_role: Este papel está em uso e não pode ser excluído. error_can_not_delete_tracker: Este tipo de tarefa está atribuído a alguma(s) tarefa(s) e não pode ser excluído. field_principal: Principal label_my_page_block: Meu bloco de página - notice_failed_to_save_members: "Falha ao gravar membro(s): {{errors}}." + notice_failed_to_save_members: "Falha ao gravar membro(s): %{errors}." text_zoom_out: Afastar zoom text_zoom_in: Aproximar zoom notice_unable_delete_time_entry: Não foi possível excluir a entrada no registro de horas trabalhadas. label_overall_spent_time: Tempo gasto geral - field_time_entries: Log time + field_time_entries: Registro de horas project_module_gantt: Gantt project_module_calendar: Calendário - button_edit_associated_wikipage: "Editar página wiki relacionada: {{page_title}}" + button_edit_associated_wikipage: "Editar página wiki relacionada: %{page_title}" text_are_you_sure_with_children: Excluir a tarefa e suas subtarefas? field_text: Campo de texto label_user_mail_option_only_owner: Somente para as coisas que eu criei setting_default_notification_option: Opção padrão de notificação label_user_mail_option_only_my_events: Somente para as coisas que eu esteja observando ou esteja envolvido label_user_mail_option_only_assigned: Somente para as coisas que estejam atribuídas a mim - 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. - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header + label_user_mail_option_none: Sem eventos + field_member_of_group: Grupo do responsável + field_assigned_to_role: Papel do responsável + notice_not_authorized_archived_project: O projeto que você está tentando acessar foi arquivado. + label_principal_search: "Pesquisar por usuários ou grupos:" + label_user_search: "Pesquisar por usuário:" + field_visible: Visível + setting_emails_header: Cabeçalho do e-mail + setting_commit_logtime_activity_id: Atividade para registrar horas + text_time_logged_by_changeset: Aplicado no changeset %{value}. + setting_commit_logtime_enabled: Habilitar registro de horas + notice_gantt_chart_truncated: O gráfico foi cortado por exceder o tamanho máximo de linhas que podem ser exibidas (%{max}) + setting_gantt_items_limit: Número máximo de itens exibidos no gráfico gatt + field_warn_on_leaving_unsaved: Alertar-me ao sarir de uma página sem salvar o texto + text_warn_on_leaving_unsaved: A página atual contem texto que não foi salvo e será perdido se você sair desta página. + label_my_queries: Minhas consultas personalizadas + text_journal_changed_no_detail: "%{label} atualizado(a)" + label_news_comment_added: Notícia recebeu um comentário + button_expand_all: Expandir tudo + button_collapse_all: Recolher tudo + label_additional_workflow_transitions_for_assignee: Transições adicionais permitidas quando o usuário é o responsável pela tarefa + label_additional_workflow_transitions_for_author: Transições adicionais permitidas quando o usuário é o autor + + label_bulk_edit_selected_time_entries: Alteração em massa do registro de horas + text_time_entries_destroy_confirmation: Tem certeza que quer excluir o(s) registro(s) de horas selecionado(s)? + label_role_anonymous: Anônimo + label_role_non_member: Não Membro + label_issues_visibility_own: Tarefas criadas ou atribuídas ao usuário + field_issues_visibility: Visibilidade das tarefas + label_issues_visibility_all: Todas as tarefas + permission_set_own_issues_private: Alterar as próprias tarefas para públicas ou privadas + field_is_private: Privado + permission_set_issues_private: Alterar tarefas para públicas ou privadas + label_issues_visibility_public: Todas as tarefas não privadas + text_issues_destroy_descendants_confirmation: Isto também irá excluir %{count} subtarefa(s). + field_commit_logs_encoding: Codificação das mensagens de commit + field_scm_path_encoding: Codificação do caminho + text_scm_path_encoding_note: "Padrão: UTF-8" + field_path_to_repository: Caminho para o repositório + field_root_directory: Diretório raiz + field_cvs_module: Módulo + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: "repositório local (ex.: /hgrepo, c:\hgrepo)" + text_scm_command: Comando + text_scm_command_version: Versão + label_git_report_last_commit: Relatar última alteração para arquivos e diretórios + text_scm_config: Você pode configurar seus comandos de versionamento em config/configurations.yml. Por favor reinicie a aplicação após alterá-lo. + text_scm_command_not_available: Comando de versionamento não disponível. Por favor verifique as configurações no painel de administração. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/pt.yml --- a/config/locales/pt.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/pt.yml Mon Jul 25 14:23:37 2011 +0100 @@ -1,5 +1,6 @@ # Portuguese localization for Ruby on Rails # by Ricardo Otero +# by Alberto Ferreira pt: support: array: @@ -17,7 +18,10 @@ abbr_day_names: [Dom, Seg, Ter, Qua, Qui, Sex, Sáb] month_names: [~, Janeiro, Fevereiro, Março, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro] abbr_month_names: [~, Jan, Fev, Mar, Abr, Mai, Jun, Jul, Ago, Set, Out, Nov, Dez] - order: [:day, :month, :year] + order: + - :day + - :month + - :year time: formats: @@ -33,37 +37,37 @@ half_a_minute: "meio minuto" less_than_x_seconds: one: "menos de 1 segundo" - other: "menos de {{count}} segundos" + other: "menos de %{count} segundos" x_seconds: one: "1 segundo" - other: "{{count}} segundos" + other: "%{count} segundos" less_than_x_minutes: one: "menos de um minuto" - other: "menos de {{count}} minutos" + other: "menos de %{count} minutos" x_minutes: one: "1 minuto" - other: "{{count}} minutos" + other: "%{count} minutos" about_x_hours: one: "aproximadamente 1 hora" - other: "aproximadamente {{count}} horas" + other: "aproximadamente %{count} horas" x_days: one: "1 dia" - other: "{{count}} dias" + other: "%{count} dias" about_x_months: one: "aproximadamente 1 mês" - other: "aproximadamente {{count}} meses" + other: "aproximadamente %{count} meses" x_months: one: "1 mês" - other: "{{count}} meses" + other: "%{count} meses" about_x_years: one: "aproximadamente 1 ano" - other: "aproximadamente {{count}} anos" + other: "aproximadamente %{count} anos" over_x_years: one: "mais de 1 ano" - other: "mais de {{count}} anos" + other: "mais de %{count} anos" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" number: format: @@ -102,8 +106,8 @@ errors: template: header: - one: "Não foi possível guardar {{model}}: 1 erro" - other: "Não foi possível guardar {{model}}: {{count}} erros" + one: "Não foi possível guardar %{model}: 1 erro" + other: "Não foi possível guardar %{model}: %{count} erros" body: "Por favor, verifique os seguintes campos:" messages: inclusion: "não está incluído na lista" @@ -113,16 +117,16 @@ accepted: "precisa de ser aceite" empty: "não pode estar em branco" blank: "não pode estar em branco" - too_long: "tem demasiados caracteres (máximo: {{count}} caracteres)" - too_short: "tem poucos caracteres (mínimo: {{count}} caracteres)" - wrong_length: "não é do tamanho correcto (necessita de ter {{count}} caracteres)" + too_long: "tem demasiados caracteres (máximo: %{count} caracteres)" + too_short: "tem poucos caracteres (mínimo: %{count} caracteres)" + wrong_length: "não é do tamanho correcto (necessita de ter %{count} caracteres)" taken: "não está disponível" not_a_number: "não é um número" - greater_than: "tem de ser maior do que {{count}}" - greater_than_or_equal_to: "tem de ser maior ou igual a {{count}}" - equal_to: "tem de ser igual a {{count}}" - less_than: "tem de ser menor do que {{count}}" - less_than_or_equal_to: "tem de ser menor ou igual a {{count}}" + greater_than: "tem de ser maior do que %{count}" + greater_than_or_equal_to: "tem de ser maior ou igual a %{count}" + equal_to: "tem de ser igual a %{count}" + less_than: "tem de ser menor do que %{count}" + less_than_or_equal_to: "tem de ser menor ou igual a %{count}" odd: "tem de ser ímpar" even: "tem de ser par" greater_than_start_date: "deve ser maior que a data inicial" @@ -141,7 +145,7 @@ general_csv_separator: ';' general_csv_decimal_separator: ',' general_csv_encoding: ISO-8859-15 - general_pdf_encoding: ISO-8859-15 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' notice_account_updated: A conta foi actualizada com sucesso. @@ -160,34 +164,34 @@ notice_file_not_found: A página que está a tentar aceder não existe ou foi removida. notice_locking_conflict: Os dados foram actualizados por outro utilizador. notice_not_authorized: Não está autorizado a visualizar esta página. - notice_email_sent: "Foi enviado um e-mail para {{value}}" - notice_email_error: "Ocorreu um erro ao enviar o e-mail ({{value}})" + notice_email_sent: "Foi enviado um e-mail para %{value}" + notice_email_error: "Ocorreu um erro ao enviar o e-mail (%{value})" notice_feeds_access_key_reseted: A sua chave de RSS foi inicializada. - notice_failed_to_save_issues: "Não foi possível guardar {{count}} tarefa(s) das {{total}} seleccionadas: {{ids}}." + notice_failed_to_save_issues: "Não foi possível guardar %{count} tarefa(s) das %{total} seleccionadas: %{ids}." notice_no_issue_selected: "Nenhuma tarefa seleccionada! Por favor, seleccione as tarefas que quer editar." notice_account_pending: "A sua conta foi criada e está agora à espera de aprovação do administrador." notice_default_data_loaded: Configuração padrão carregada com sucesso. notice_unable_delete_version: Não foi possível apagar a versão. - error_can_t_load_default_data: "Não foi possível carregar a configuração padrão: {{value}}" + error_can_t_load_default_data: "Não foi possível carregar a configuração padrão: %{value}" error_scm_not_found: "A entrada ou revisão não foi encontrada no repositório." - error_scm_command_failed: "Ocorreu um erro ao tentar aceder ao repositório: {{value}}" + error_scm_command_failed: "Ocorreu um erro ao tentar aceder ao repositório: %{value}" error_scm_annotate: "A entrada não existe ou não pode ser anotada." error_issue_not_found_in_project: 'A tarefa não foi encontrada ou não pertence a este projecto.' - mail_subject_lost_password: "Palavra-chave de {{value}}" + mail_subject_lost_password: "Palavra-chave de %{value}" mail_body_lost_password: 'Para mudar a sua palavra-chave, clique na ligação abaixo:' - mail_subject_register: "Activação de conta de {{value}}" + mail_subject_register: "Activação de conta de %{value}" mail_body_register: 'Para activar a sua conta, clique na ligação abaixo:' - mail_body_account_information_external: "Pode utilizar a conta {{value}} para autenticar-se." + mail_body_account_information_external: "Pode utilizar a conta %{value} para autenticar-se." mail_body_account_information: Informação da sua conta - mail_subject_account_activation_request: "Pedido de activação da conta {{value}}" - mail_body_account_activation_request: "Um novo utilizador ({{value}}) registou-se. A sua conta está à espera de aprovação:" - mail_subject_reminder: "{{count}} tarefa(s) para entregar nos próximos {{days}} dias" - mail_body_reminder: "{{count}} tarefa(s) que estão atribuídas a si estão agendadas para estarem completas nos próximos {{days}} dias:" + mail_subject_account_activation_request: "Pedido de activação da conta %{value}" + mail_body_account_activation_request: "Um novo utilizador (%{value}) registou-se. A sua conta está à espera de aprovação:" + mail_subject_reminder: "%{count} tarefa(s) para entregar nos próximos %{days} dias" + mail_body_reminder: "%{count} tarefa(s) que estão atribuídas a si estão agendadas para estarem completas nos próximos %{days} dias:" gui_validation_error: 1 erro - gui_validation_error_plural: "{{count}} erros" + gui_validation_error_plural: "%{count} erros" field_name: Nome field_description: Descrição @@ -228,7 +232,7 @@ field_homepage: Página field_is_public: Público field_parent: Sub-projecto de - field_is_in_roadmap: Tarefas mostradas no roadmap + field_is_in_roadmap: Tarefas mostradas no mapa de planificação field_login: Nome de utilizador field_mail_notification: Notificações por e-mail field_admin: Administrador @@ -248,8 +252,9 @@ field_attr_firstname: Atributo nome próprio field_attr_lastname: Atributo último nome field_attr_mail: Atributo e-mail - field_onthefly: Criação de utilizadores na hora - field_done_ratio: % Completo + field_onthefly: Criação imediata de utilizadores + field_start_date: Início + field_done_ratio: "% Completo" field_auth_source: Modo de autenticação field_hide_mail: Esconder endereço de e-mail field_comments: Comentário @@ -263,7 +268,7 @@ field_is_filter: Usado como filtro field_issue_to: Tarefa relacionada field_delay: Atraso - field_assignable: As tarefas podem ser associados a esta função + field_assignable: As tarefas podem ser associadas a esta função field_redirect_existing_links: Redireccionar ligações existentes field_estimated_hours: Tempo estimado field_column_names: Colunas @@ -298,7 +303,6 @@ setting_cross_project_issue_relations: Permitir relações entre tarefas de projectos diferentes setting_issue_list_default_columns: Colunas na lista de tarefas por omissão setting_repositories_encodings: Encodings dos repositórios - setting_commit_logs_encoding: Encoding das mensagens de commit setting_emails_footer: Rodapé do e-mails setting_protocol: Protocolo setting_per_page_options: Opções de objectos por página @@ -328,14 +332,14 @@ label_x_projects: zero: no projects one: 1 project - other: "{{count}} projects" + other: "%{count} projects" label_project_all: Todos os projectos label_project_latest: Últimos projectos label_issue: Tarefa label_issue_new: Nova tarefa label_issue_plural: Tarefas label_issue_view_all: Ver todas as tarefas - label_issues_by: "Tarefas por {{value}}" + label_issues_by: "Tarefas por %{value}" label_issue_added: Tarefa adicionada label_issue_updated: Tarefa actualizada label_document: Documento @@ -392,7 +396,7 @@ label_auth_source_new: Novo modo de autenticação label_auth_source_plural: Modos de autenticação label_subproject_plural: Sub-projectos - label_and_its_subprojects: "{{value}} e sub-projectos" + label_and_its_subprojects: "%{value} e sub-projectos" label_min_max_length: Tamanho mínimo-máximo label_list: Lista label_date: Data @@ -403,8 +407,8 @@ label_text: Texto longo label_attribute: Atributo label_attribute_plural: Atributos - label_download: "{{count}} Download" - label_download_plural: "{{count}} Downloads" + label_download: "%{count} Download" + label_download_plural: "%{count} Downloads" label_no_data: Sem dados para mostrar label_change_status: Mudar estado label_history: Histórico @@ -435,17 +439,17 @@ label_closed_issues: fechado label_closed_issues_plural: fechados label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{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" + other: "%{count} open" label_x_closed_issues_abbr: zero: 0 closed one: 1 closed - other: "{{count}} closed" + other: "%{count} closed" label_total: Total label_permissions: Permissões label_current_status: Estado actual @@ -463,7 +467,7 @@ label_months_from: meses de label_gantt: Gantt label_internal: Interno - label_last_changes: "últimas {{count}} alterações" + label_last_changes: "últimas %{count} alterações" label_change_view_all: Ver todas as alterações label_personalize_page: Personalizar esta página label_comment: Comentário @@ -471,7 +475,7 @@ label_x_comments: zero: no comments one: 1 comment - other: "{{count}} comments" + other: "%{count} comments" label_comment_add: Adicionar comentário label_comment_added: Comentário adicionado label_comment_delete: Apagar comentários @@ -490,7 +494,7 @@ label_yesterday: ontem label_this_week: esta semana label_last_week: semana passada - label_last_n_days: "últimos {{count}} dias" + label_last_n_days: "últimos %{count} dias" label_this_month: este mês label_last_month: mês passado label_this_year: este ano @@ -504,8 +508,8 @@ label_repository: Repositório label_repository_plural: Repositórios label_browse: Navegar - label_modification: "{{count}} alteração" - label_modification_plural: "{{count}} alterações" + label_modification: "%{count} alteração" + label_modification_plural: "%{count} alterações" label_revision: Revisão label_revision_plural: Revisões label_associated_revisions: Revisões associadas @@ -522,9 +526,9 @@ label_sort_higher: Mover para cima label_sort_lower: Mover para baixo label_sort_lowest: Mover para o fim - label_roadmap: Roadmap - label_roadmap_due_in: "Termina em {{value}}" - label_roadmap_overdue: "Atrasado {{value}}" + label_roadmap: Planificação + label_roadmap_due_in: "Termina em %{value}" + label_roadmap_overdue: "Atrasado %{value}" label_roadmap_no_issues: Sem tarefas para esta versão label_search: Procurar label_result_plural: Resultados @@ -542,8 +546,8 @@ label_changes_details: Detalhes de todas as mudanças label_issue_tracking: Tarefas label_spent_time: Tempo gasto - label_f_hour: "{{value}} hora" - label_f_hour_plural: "{{value}} horas" + label_f_hour: "%{value} hora" + label_f_hour_plural: "%{value} horas" label_time_tracking: Registo de tempo label_change_plural: Mudanças label_statistics: Estatísticas @@ -592,12 +596,12 @@ label_date_from: De label_date_to: Para label_language_based: Baseado na língua do utilizador - label_sort_by: "Ordenar por {{value}}" + label_sort_by: "Ordenar por %{value}" label_send_test_email: enviar um e-mail de teste - label_feeds_access_key_created_on: "Chave RSS criada há {{value}} atrás" + label_feeds_access_key_created_on: "Chave RSS criada há %{value} atrás" label_module_plural: Módulos - label_added_time_by: "Adicionado por {{author}} há {{age}} atrás" - label_updated_time: "Alterado há {{value}} atrás" + label_added_time_by: "Adicionado por %{author} há %{age} atrás" + label_updated_time: "Alterado há %{value} atrás" label_jump_to_a_project: Ir para o projecto... label_file_plural: Ficheiros label_changeset_plural: Changesets @@ -613,7 +617,7 @@ label_registration_activation_by_email: Activação da conta por e-mail label_registration_manual_activation: Activação manual da conta label_registration_automatic_activation: Activação automática da conta - label_display_per_page: "Por página: {{value}}" + label_display_per_page: "Por página: %{value}" label_age: Idade label_change_properties: Mudar propriedades label_general: Geral @@ -679,43 +683,43 @@ text_regexp_info: ex. ^[A-Z0-9]+$ text_min_max_length_info: 0 siginifica sem restrição text_project_destroy_confirmation: Tem a certeza que deseja apagar o projecto e todos os dados relacionados? - text_subprojects_destroy_warning: "O(s) seu(s) sub-projecto(s): {{value}} também será/serão apagado(s)." + text_subprojects_destroy_warning: "O(s) seu(s) sub-projecto(s): %{value} também será/serão apagado(s)." text_workflow_edit: Seleccione uma função e um tipo de tarefa para editar o fluxo de trabalho text_are_you_sure: Tem a certeza? text_tip_issue_begin_day: tarefa a começar neste dia text_tip_issue_end_day: tarefa a acabar neste dia text_tip_issue_begin_end_day: tarefa a começar e acabar neste dia text_project_identifier_info: 'Apenas são permitidos letras minúsculas (a-z), números e hífens.
    Uma vez guardado, o identificador não poderá ser alterado.' - text_caracters_maximum: "máximo {{count}} caracteres." - text_caracters_minimum: "Deve ter pelo menos {{count}} caracteres." - text_length_between: "Deve ter entre {{min}} e {{max}} caracteres." + text_caracters_maximum: "máximo %{count} caracteres." + text_caracters_minimum: "Deve ter pelo menos %{count} caracteres." + text_length_between: "Deve ter entre %{min} e %{max} caracteres." text_tracker_no_workflow: Sem fluxo de trabalho definido para este tipo de tarefa. text_unallowed_characters: Caracteres não permitidos text_comma_separated: Permitidos múltiplos valores (separados por vírgula). text_issues_ref_in_commit_messages: Referenciando e fechando tarefas em mensagens de commit - text_issue_added: "Tarefa {{id}} foi criada por {{author}}." - text_issue_updated: "Tarefa {{id}} foi actualizada por {{author}}." + text_issue_added: "Tarefa %{id} foi criada por %{author}." + text_issue_updated: "Tarefa %{id} foi actualizada por %{author}." text_wiki_destroy_confirmation: Tem a certeza que deseja apagar este wiki e todo o seu conteúdo? - text_issue_category_destroy_question: "Algumas tarefas ({{count}}) estão atribuídas a esta categoria. O que quer fazer?" + text_issue_category_destroy_question: "Algumas tarefas (%{count}) estão atribuídas a esta categoria. O que quer fazer?" text_issue_category_destroy_assignments: Remover as atribuições à categoria text_issue_category_reassign_to: Re-atribuir as tarefas para esta categoria text_user_mail_option: "Para projectos não seleccionados, apenas receberá notificações acerca de coisas que está a observar ou está envolvido (ex. tarefas das quais foi o criador ou lhes foram atribuídas)." text_no_configuration_data: "Perfis, tipos de tarefas, estados das tarefas e workflows ainda não foram configurados.\nÉ extremamente recomendado carregar as configurações padrão. Será capaz de as modificar depois de estarem carregadas." text_load_default_configuration: Carregar as configurações padrão - text_status_changed_by_changeset: "Aplicado no changeset {{value}}." + text_status_changed_by_changeset: "Aplicado no changeset %{value}." text_issues_destroy_confirmation: 'Tem a certeza que deseja apagar a(s) tarefa(s) seleccionada(s)?' text_select_project_modules: 'Seleccione os módulos a activar para este projecto:' text_default_administrator_account_changed: Conta default de administrador alterada. text_file_repository_writable: Repositório de ficheiros com permissões de escrita text_rmagick_available: RMagick disponível (opcional) - text_destroy_time_entries_question: "{{hours}} horas de trabalho foram atribuídas a estas tarefas que vai apagar. O que deseja fazer?" + text_destroy_time_entries_question: "%{hours} horas de trabalho foram atribuídas a estas tarefas que vai apagar. O que deseja fazer?" text_destroy_time_entries: Apagar as horas text_assign_time_entries_to_project: Atribuir as horas ao projecto text_reassign_time_entries: 'Re-atribuir as horas para esta tarefa:' - text_user_wrote: "{{value}} escreveu:" - text_enumeration_destroy_question: "{{count}} objectos estão atribuídos a este valor." + 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 @@ -794,12 +798,12 @@ text_repository_usernames_mapping: "Seleccionar ou actualizar o utilizador de Redmine mapeado a cada nome de utilizador encontrado no repositório.\nUtilizadores com o mesmo nome de utilizador ou email no Redmine e no repositório são mapeados automaticamente." permission_edit_own_messages: Editar as próprias mensagens permission_delete_own_messages: Apagar as próprias mensagens - label_user_activity: "Actividade de {{value}}" - label_updated_time_by: "Actualizado por {{author}} há {{age}}" + label_user_activity: "Actividade de %{value}" + label_updated_time_by: "Actualizado por %{author} há %{age}" text_diff_truncated: '... Este diff foi truncado porque excede o tamanho máximo que pode ser mostrado.' setting_diff_max_lines_displayed: Número máximo de linhas de diff mostradas text_plugin_assets_writable: Escrita na pasta de activos dos módulos de extensão possível - warning_attachments_not_saved: "Não foi possível gravar {{count}} ficheiro(s) ." + warning_attachments_not_saved: "Não foi possível gravar %{count} ficheiro(s) ." button_create_and_continue: Criar e continuar text_custom_field_possible_values_info: 'Uma linha para cada valor' label_display: Mostrar @@ -814,21 +818,21 @@ label_descending: Descendente label_sort: Ordenar label_ascending: Ascendente - label_date_from_to: De {{start}} a {{end}} + label_date_from_to: De %{start} a %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: Esta página tem {{descendants}} página(s) subordinada(s) e descendente(s). O que deseja fazer? + text_wiki_page_destroy_question: Esta página tem %{descendants} página(s) subordinada(s) e descendente(s). O que deseja fazer? text_wiki_page_reassign_children: Reatribuir páginas subordinadas a esta página principal text_wiki_page_nullify_children: Manter páginas subordinadas como páginas raíz text_wiki_page_destroy_children: Apagar as páginas subordinadas e todos os seus descendentes setting_password_min_length: Tamanho mínimo de palavra-chave field_group_by: Agrupar resultados por - mail_subject_wiki_content_updated: "A página Wiki '{{id}}' foi actualizada" + mail_subject_wiki_content_updated: "A página Wiki '%{id}' foi actualizada" label_wiki_content_added: Página Wiki adicionada - mail_subject_wiki_content_added: "A página Wiki '{{id}}' foi adicionada" - mail_body_wiki_content_added: A página Wiki '{{id}}' foi adicionada por {{author}}. + mail_subject_wiki_content_added: "A página Wiki '%{id}' foi adicionada" + mail_body_wiki_content_added: A página Wiki '%{id}' foi adicionada por %{author}. label_wiki_content_updated: Página Wiki actualizada - mail_body_wiki_content_updated: A página Wiki '{{id}}' foi actualizada por {{author}}. + mail_body_wiki_content_updated: A página Wiki '%{id}' foi actualizada por %{author}. permission_add_project: Criar projecto setting_new_project_user_role_id: Função atribuída a um utilizador não-administrador que cria um projecto label_view_all_revisions: Ver todas as revisões @@ -840,10 +844,10 @@ label_group: Grupo label_group_new: Novo grupo label_time_entry_plural: Tempo registado - text_journal_changed: "{{label}} alterado de {{old}} para {{new}}" - text_journal_set_to: "{{label}} configurado como {{value}}" - text_journal_deleted: "{{label}} apagou ({{old}})" - text_journal_added: "{{label}} {{value}} adicionado" + text_journal_changed: "%{label} alterado de %{old} para %{new}" + text_journal_set_to: "%{label} configurado como %{value}" + text_journal_deleted: "%{label} apagou (%{old})" + text_journal_added: "%{label} %{value} adicionado" field_active: Activo enumeration_system_activity: Actividade de sistema permission_delete_issue_watchers: Apagar observadores @@ -878,9 +882,9 @@ setting_start_of_week: Iniciar calendários a permission_view_issues: Ver tarefas label_display_used_statuses_only: Só exibir estados empregues por este tipo de tarefa - label_revision_id: Revisão {{value}} + label_revision_id: Revisão %{value} label_api_access_key: Chave de acesso API - label_api_access_key_created_on: Chave de acesso API criada há {{value}} + label_api_access_key_created_on: Chave de acesso API criada há %{value} label_feeds_access_key: Chave de acesso RSS notice_api_access_key_reseted: A sua chave de acesso API foi reinicializada. setting_rest_api_enabled: Activar serviço Web REST @@ -907,12 +911,12 @@ label_subtask_plural: Sub-tarefa label_project_copy_notifications: Enviar notificações por e-mail durante a cópia do projecto error_can_not_delete_custom_field: Não foi possível apagar o campo personalizado - error_unable_to_connect: Não foi possível ligar ({{value}}) + error_unable_to_connect: Não foi possível ligar (%{value}) error_can_not_remove_role: Esta função está actualmente em uso e não pode ser apagada. error_can_not_delete_tracker: Existem ainda tarefas nesta categoria. Não é possível apagar este tipo de tarefa. field_principal: Principal label_my_page_block: Bloco da minha página - notice_failed_to_save_members: "Erro ao guardar o(s) membro(s): {{errors}}." + notice_failed_to_save_members: "Erro ao guardar o(s) membro(s): %{errors}." text_zoom_out: Ampliar text_zoom_in: Reduzir notice_unable_delete_time_entry: Não foi possível apagar a entrada de tempo registado. @@ -920,19 +924,61 @@ field_time_entries: Tempo registado project_module_gantt: Gantt project_module_calendar: Calendário - button_edit_associated_wikipage: "Editar página Wiki associada: {{page_title}}" + button_edit_associated_wikipage: "Editar página Wiki associada: %{page_title}" text_are_you_sure_with_children: Apagar tarefa e todas as sub-tarefas? - 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. - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header + field_text: Campo de texto + label_user_mail_option_only_owner: Apenas para tarefas das quais sou proprietário + setting_default_notification_option: Opção predefinida de notificação + label_user_mail_option_only_my_events: Apenas para tarefas que observo ou em que estou envolvido + label_user_mail_option_only_assigned: Apenas para tarefas que me foram atribuídas + label_user_mail_option_none: Sem eventos + field_member_of_group: Grupo do detentor de atribuição + field_assigned_to_role: Papel do detentor de atribuição + notice_not_authorized_archived_project: O projecto a que tentou aceder foi arquivado. + label_principal_search: "Procurar utilizador ou grupo:" + label_user_search: "Procurar utilizador:" + field_visible: Visível + setting_emails_header: Cabeçalho dos e-mails + setting_commit_logtime_activity_id: Actividade para tempo registado + text_time_logged_by_changeset: Aplicado no conjunto de alterações %{value}. + setting_commit_logtime_enabled: Activar registo de tempo + notice_gantt_chart_truncated: O gráfico foi truncado porque excede o número máximo de itens visível (%{máx.}) + setting_gantt_items_limit: Número máximo de itens exibidos no gráfico 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Encoding das mensagens de commit + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/ro.yml --- a/config/locales/ro.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/ro.yml Mon Jul 25 14:23:37 2011 +0100 @@ -14,7 +14,10 @@ month_names: [~, Ianuarie, Februarie, Martie, Aprilie, Mai, Iunie, Iulie, August, Septembrie, Octombrie, Noiembrie, Decembrie] abbr_month_names: [~, Ian, Feb, Mar, Apr, Mai, Iun, Iul, Aug, Sep, Oct, Noi, Dec] # Used in date_select and datime_select. - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -30,37 +33,37 @@ half_a_minute: "jumătate de minut" less_than_x_seconds: one: "mai puțin de o secundă" - other: "mai puțin de {{count}} secunde" + other: "mai puțin de %{count} secunde" x_seconds: one: "o secundă" - other: "{{count}} secunde" + other: "%{count} secunde" less_than_x_minutes: one: "mai puțin de un minut" - other: "mai puțin de {{count}} minute" + other: "mai puțin de %{count} minute" x_minutes: one: "un minut" - other: "{{count}} minute" + other: "%{count} minute" about_x_hours: one: "aproximativ o oră" - other: "aproximativ {{count}} ore" + other: "aproximativ %{count} ore" x_days: one: "o zi" - other: "{{count}} zile" + other: "%{count} zile" about_x_months: one: "aproximativ o lună" - other: "aproximativ {{count}} luni" + other: "aproximativ %{count} luni" x_months: one: "o luna" - other: "{{count}} luni" + other: "%{count} luni" about_x_years: one: "aproximativ un an" - other: "aproximativ {{count}} ani" + other: "aproximativ %{count} ani" over_x_years: one: "peste un an" - other: "peste {{count}} ani" + other: "peste %{count} ani" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" number: human: @@ -86,6 +89,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "nu este inclus în listă" exclusion: "este rezervat" @@ -100,11 +107,11 @@ taken: "a fost luat deja" not_a_number: "nu este un număr" not_a_date: "nu este o dată validă" - greater_than: "trebuie să fie mai mare de {{count}}" - greater_than_or_equal_to: "trebuie să fie mai mare sau egal cu {{count}}" + greater_than: "trebuie să fie mai mare de %{count}" + greater_than_or_equal_to: "trebuie să fie mai mare sau egal cu %{count}" equal_to: "trebuie să fie egal cu {count}}" - less_than: "trebuie să fie mai mic decat {{count}}" - less_than_or_equal_to: "trebuie să fie mai mic sau egal cu {{count}}" + less_than: "trebuie să fie mai mic decat %{count}" + less_than_or_equal_to: "trebuie să fie mai mic sau egal cu %{count}" odd: "trebuie să fie impar" even: "trebuie să fie par" greater_than_start_date: "trebuie să fie după data de început" @@ -141,36 +148,36 @@ notice_file_not_found: Pagina pe care doriți să o accesați nu există sau a fost ștearsă. notice_locking_conflict: Datele au fost actualizate de alt utilizator. notice_not_authorized: Nu sunteți autorizat sa accesați această pagină. - notice_email_sent: "S-a trimis un email către {{value}}" - notice_email_error: "A intervenit o eroare la trimiterea de email ({{value}})" + notice_email_sent: "S-a trimis un email către %{value}" + notice_email_error: "A intervenit o eroare la trimiterea de email (%{value})" notice_feeds_access_key_reseted: Cheia de acces RSS a fost resetată. - notice_failed_to_save_issues: "Nu s-au putut salva {{count}} tichete din cele {{total}} selectate: {{ids}}." + notice_failed_to_save_issues: "Nu s-au putut salva %{count} tichete din cele %{total} selectate: %{ids}." notice_no_issue_selected: "Niciun tichet selectat! Vă rugăm să selectați tichetele pe care doriți să le editați." notice_account_pending: "Contul dumneavoastră a fost creat și așteaptă aprobarea administratorului." notice_default_data_loaded: S-a încărcat configurația implicită. notice_unable_delete_version: Nu se poate șterge versiunea. - error_can_t_load_default_data: "Nu s-a putut încărca configurația implicită: {{value}}" + error_can_t_load_default_data: "Nu s-a putut încărca configurația implicită: %{value}" error_scm_not_found: "Nu s-a găsit articolul sau revizia în depozit." - error_scm_command_failed: "A intervenit o eroare la accesarea depozitului: {{value}}" + error_scm_command_failed: "A intervenit o eroare la accesarea depozitului: %{value}" error_scm_annotate: "Nu există sau nu poate fi adnotată." error_issue_not_found_in_project: 'Tichetul nu a fost găsit sau nu aparține acestui proiect' - warning_attachments_not_saved: "Nu s-au putut salva {{count}} fișiere." + warning_attachments_not_saved: "Nu s-au putut salva %{count} fișiere." - mail_subject_lost_password: "Parola dumneavoastră: {{value}}" + mail_subject_lost_password: "Parola dumneavoastră: %{value}" mail_body_lost_password: 'Pentru a schimba parola, accesați:' - mail_subject_register: "Activarea contului {{value}}" + mail_subject_register: "Activarea contului %{value}" mail_body_register: 'Pentru activarea contului, accesați:' mail_body_account_information_external: "Puteți folosi contul „{value}}” pentru a vă autentifica." mail_body_account_information: Informații despre contul dumneavoastră - mail_subject_account_activation_request: "Cerere de activare a contului {{value}}" - mail_body_account_activation_request: "S-a înregistrat un utilizator nou ({{value}}). Contul așteaptă aprobarea dumneavoastră:" - mail_subject_reminder: "{{count}} tichete trebuie rezolvate în următoarele {{days}} zile" - mail_body_reminder: "{{count}} tichete atribuite dumneavoastră trebuie rezolvate în următoarele {{days}} zile:" + mail_subject_account_activation_request: "Cerere de activare a contului %{value}" + mail_body_account_activation_request: "S-a înregistrat un utilizator nou (%{value}). Contul așteaptă aprobarea dumneavoastră:" + mail_subject_reminder: "%{count} tichete trebuie rezolvate în următoarele %{days} zile" + mail_body_reminder: "%{count} tichete atribuite dumneavoastră trebuie rezolvate în următoarele %{days} zile:" gui_validation_error: o eroare - gui_validation_error_plural: "{{count}} erori" + gui_validation_error_plural: "%{count} erori" field_name: Nume field_description: Descriere @@ -232,6 +239,7 @@ field_attr_lastname: Atribut nume field_attr_mail: Atribut email field_onthefly: Creare utilizator pe loc + field_start_date: Data începerii field_done_ratio: Realizat (%) field_auth_source: Mod autentificare field_hide_mail: Nu se afișează adresa de email @@ -286,7 +294,6 @@ setting_cross_project_issue_relations: Permite legături de tichete între proiecte setting_issue_list_default_columns: Coloane implicite afișate în lista de tichete setting_repositories_encodings: Codare pentru depozit - setting_commit_logs_encoding: Codare pentru mesaje setting_emails_footer: Subsol email setting_protocol: Protocol setting_per_page_options: Număr de obiecte pe pagină @@ -370,14 +377,14 @@ label_x_projects: zero: niciun proiect one: un proiect - other: "{{count}} proiecte" + other: "%{count} proiecte" label_project_all: Toate proiectele label_project_latest: Proiecte noi label_issue: Tichet label_issue_new: Tichet nou label_issue_plural: Tichete label_issue_view_all: Afișează toate tichetele - label_issues_by: "Sortează după {{value}}" + label_issues_by: "Sortează după %{value}" label_issue_added: Adaugat label_issue_updated: Actualizat label_document: Document @@ -427,7 +434,7 @@ label_registered_on: Înregistrat la label_activity: Activitate label_overall_activity: Activitate - vedere de ansamblu - label_user_activity: "Activitate {{value}}" + label_user_activity: "Activitate %{value}" label_new: Nou label_logged_as: Autentificat ca label_environment: Mediu @@ -436,7 +443,7 @@ label_auth_source_new: Nou label_auth_source_plural: Moduri de autentificare label_subproject_plural: Sub-proiecte - label_and_its_subprojects: "{{value}} și sub-proiecte" + label_and_its_subprojects: "%{value} și sub-proiecte" label_min_max_length: lungime min - max label_list: Listă label_date: Dată @@ -447,8 +454,8 @@ label_text: Text lung label_attribute: Atribut label_attribute_plural: Atribute - label_download: "{{count}} descărcare" - label_download_plural: "{{count}} descărcări" + label_download: "%{count} descărcare" + label_download_plural: "%{count} descărcări" label_no_data: Nu există date de afișat label_change_status: Schimbă starea label_history: Istoric @@ -479,17 +486,17 @@ label_closed_issues: închis label_closed_issues_plural: închise label_x_open_issues_abbr_on_total: - zero: 0 deschise / {{total}} - one: 1 deschis / {{total}} - other: "{{count}} deschise / {{total}}" + zero: 0 deschise / %{total} + one: 1 deschis / %{total} + other: "%{count} deschise / %{total}" label_x_open_issues_abbr: zero: 0 deschise one: 1 deschis - other: "{{count}} deschise" + other: "%{count} deschise" label_x_closed_issues_abbr: zero: 0 închise one: 1 închis - other: "{{count}} închise" + other: "%{count} închise" label_total: Total label_permissions: Permisiuni label_current_status: Stare curentă @@ -507,7 +514,7 @@ label_months_from: luni de la label_gantt: Gantt label_internal: Intern - label_last_changes: "ultimele {{count}} schimbări" + label_last_changes: "ultimele %{count} schimbări" label_change_view_all: Afișează toate schimbările label_personalize_page: Personalizează aceasta pagina label_comment: Comentariu @@ -515,7 +522,7 @@ label_x_comments: zero: fara comentarii one: 1 comentariu - other: "{{count}} comentarii" + other: "%{count} comentarii" label_comment_add: Adaugă un comentariu label_comment_added: Adăugat label_comment_delete: Șterge comentariul @@ -534,7 +541,7 @@ label_yesterday: ieri label_this_week: săptămâna aceasta label_last_week: săptămâna trecută - label_last_n_days: "ultimele {{count}} zile" + label_last_n_days: "ultimele %{count} zile" label_this_month: luna aceasta label_last_month: luna trecută label_this_year: anul acesta @@ -548,8 +555,8 @@ label_repository: Depozit label_repository_plural: Depozite label_browse: Afișează - label_modification: "{{count}} schimbare" - label_modification_plural: "{{count}} schimbări" + label_modification: "%{count} schimbare" + label_modification_plural: "%{count} schimbări" label_revision: Revizie label_revision_plural: Revizii label_associated_revisions: Revizii asociate @@ -567,8 +574,8 @@ label_sort_lower: În jos label_sort_lowest: Ultima label_roadmap: Planificare - label_roadmap_due_in: "De terminat în {{value}}" - label_roadmap_overdue: "Întârziat cu {{value}}" + label_roadmap_due_in: "De terminat în %{value}" + label_roadmap_overdue: "Întârziat cu %{value}" label_roadmap_no_issues: Nu există tichete pentru această versiune label_search: Caută label_result_plural: Rezultate @@ -586,8 +593,8 @@ label_changes_details: Detaliile tuturor schimbărilor label_issue_tracking: Urmărire tichete label_spent_time: Timp alocat - label_f_hour: "{{value}} oră" - label_f_hour_plural: "{{value}} ore" + label_f_hour: "%{value} oră" + label_f_hour_plural: "%{value} ore" label_time_tracking: Urmărire timp de lucru label_change_plural: Schimbări label_statistics: Statistici @@ -636,13 +643,13 @@ label_date_from: De la label_date_to: La label_language_based: Un funcție de limba de afișare a utilizatorului - label_sort_by: "Sortează după {{value}}" + label_sort_by: "Sortează după %{value}" label_send_test_email: Trimite email de test - label_feeds_access_key_created_on: "Cheie de acces creată acum {{value}}" + label_feeds_access_key_created_on: "Cheie de acces creată acum %{value}" label_module_plural: Module - label_added_time_by: "Adăugat de {{author}} acum {{age}}" - label_updated_time_by: "Actualizat de {{author}} acum {{age}}" - label_updated_time: "Actualizat acum {{value}}" + label_added_time_by: "Adăugat de %{author} acum %{age}" + label_updated_time_by: "Actualizat de %{author} acum %{age}" + label_updated_time: "Actualizat acum %{value}" label_jump_to_a_project: Alege proiectul... label_file_plural: Fișiere label_changeset_plural: Schimbări @@ -658,7 +665,7 @@ label_registration_activation_by_email: activare cont prin email label_registration_manual_activation: activare manuală a contului label_registration_automatic_activation: activare automată a contului - label_display_per_page: "pe pagină: {{value}}" + label_display_per_page: "pe pagină: %{value}" label_age: vechime label_change_properties: Schimbă proprietățile label_general: General @@ -682,7 +689,7 @@ label_sort: Sortează label_ascending: Crescător label_descending: Descrescător - label_date_from_to: De la {{start}} la {{end}} + label_date_from_to: De la %{start} la %{end} button_login: Autentificare @@ -733,44 +740,44 @@ text_regexp_info: ex. ^[A-Z0-9]+$ text_min_max_length_info: 0 înseamnă fără restricții text_project_destroy_confirmation: Sigur doriți să ștergeți proiectul și toate datele asociate? - text_subprojects_destroy_warning: "Se vor șterge și sub-proiectele: {{value}}." + text_subprojects_destroy_warning: "Se vor șterge și sub-proiectele: %{value}." text_workflow_edit: Selectați un rol și un tip de tichet pentru a edita modul de lucru text_are_you_sure: Sunteți sigur(ă)? text_tip_issue_begin_day: sarcină care începe în această zi text_tip_issue_end_day: sarcină care se termină în această zi text_tip_issue_begin_end_day: sarcină care începe și se termină în această zi text_project_identifier_info: 'Sunt permise doar litere mici (a-z), numere și cratime.
    Odată salvat, identificatorul nu mai poate fi modificat.' - text_caracters_maximum: "maxim {{count}} caractere." - text_caracters_minimum: "Trebuie să fie minim {{count}} caractere." - text_length_between: "Lungime între {{min}} și {{max}} caractere." + text_caracters_maximum: "maxim %{count} caractere." + text_caracters_minimum: "Trebuie să fie minim %{count} caractere." + text_length_between: "Lungime între %{min} și %{max} caractere." text_tracker_no_workflow: Nu sunt moduri de lucru pentru acest tip de tichet text_unallowed_characters: Caractere nepermise text_comma_separated: Sunt permise mai multe valori (separate cu virgulă). text_issues_ref_in_commit_messages: Referire la tichete și rezolvare în textul mesajului - text_issue_added: "Tichetul {{id}} a fost adăugat de {{author}}." - text_issue_updated: "Tichetul {{id}} a fost actualizat de {{author}}." + text_issue_added: "Tichetul %{id} a fost adăugat de %{author}." + text_issue_updated: "Tichetul %{id} a fost actualizat de %{author}." text_wiki_destroy_confirmation: Sigur doriți ștergerea Wiki și a conținutului asociat? - text_issue_category_destroy_question: "Această categorie conține ({{count}}) tichete. Ce doriți să faceți?" + text_issue_category_destroy_question: "Această categorie conține (%{count}) tichete. Ce doriți să faceți?" text_issue_category_destroy_assignments: Șterge apartenența la categorie. text_issue_category_reassign_to: Atribuie tichetele la această categorie text_user_mail_option: "Pentru proiectele care nu sunt selectate, veți primi notificări doar pentru ceea ce urmăriți sau în ce sunteți implicat (ex: tichete create de dumneavoastră sau care vă sunt atribuite)." text_no_configuration_data: "Nu s-au configurat încă rolurile, stările tichetelor și modurile de lucru.\nEste recomandat să încărcați configurația implicită. O veți putea modifica ulterior." text_load_default_configuration: Încarcă configurația implicită - text_status_changed_by_changeset: "Aplicat în setul {{value}}." + text_status_changed_by_changeset: "Aplicat în setul %{value}." text_issues_destroy_confirmation: 'Sigur doriți să ștergeți tichetele selectate?' text_select_project_modules: 'Selectați modulele active pentru acest proiect:' text_default_administrator_account_changed: S-a schimbat contul administratorului implicit text_file_repository_writable: Se poate scrie în directorul de atașamente text_plugin_assets_writable: Se poate scrie în directorul de plugin-uri text_rmagick_available: Este disponibil RMagick (opțional) - text_destroy_time_entries_question: "{{hours}} ore sunt înregistrate la tichetele pe care doriți să le ștergeți. Ce doriți sa faceți?" + text_destroy_time_entries_question: "%{hours} ore sunt înregistrate la tichetele pe care doriți să le ștergeți. Ce doriți sa faceți?" text_destroy_time_entries: Șterge orele înregistrate text_assign_time_entries_to_project: Atribuie orele la proiect text_reassign_time_entries: 'Atribuie orele înregistrate la tichetul:' - text_user_wrote: "{{value}} a scris:" - text_enumeration_destroy_question: "Această valoare are {{count}} obiecte." + 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' @@ -802,18 +809,18 @@ enumeration_activities: Activități (timp de lucru) label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: Această pagină are {{descendants}} pagini anterioare și descendenți. Ce doriți să faceți? + text_wiki_page_destroy_question: Această pagină are %{descendants} pagini anterioare și descendenți. Ce doriți să faceți? text_wiki_page_reassign_children: Atribuie paginile la această pagină text_wiki_page_nullify_children: Menține paginile ca și pagini inițiale (root) text_wiki_page_destroy_children: Șterge paginile și descendenții setting_password_min_length: Lungime minimă parolă field_group_by: Grupează după - mail_subject_wiki_content_updated: "Pagina wiki '{{id}}' a fost actualizată" + mail_subject_wiki_content_updated: "Pagina wiki '%{id}' a fost actualizată" label_wiki_content_added: Adăugat - mail_subject_wiki_content_added: "Pagina wiki '{{id}}' a fost adăugată" - mail_body_wiki_content_added: Pagina wiki '{{id}}' a fost adăugată de {{author}}. + mail_subject_wiki_content_added: "Pagina wiki '%{id}' a fost adăugată" + mail_body_wiki_content_added: Pagina wiki '%{id}' a fost adăugată de %{author}. label_wiki_content_updated: Actualizat - mail_body_wiki_content_updated: Pagina wiki '{{id}}' a fost actualizată de {{author}}. + mail_body_wiki_content_updated: Pagina wiki '%{id}' a fost actualizată de %{author}. permission_add_project: Crează proiect setting_new_project_user_role_id: Rol atribuit utilizatorului non-admin care crează un proiect. label_view_all_revisions: Arată toate reviziile @@ -821,14 +828,14 @@ label_branch: Branch error_no_tracker_in_project: Nu există un tracker asociat cu proiectul. Verificați vă rog setările proiectului. error_no_default_issue_status: Nu există un status implicit al tichetelor. Verificați vă rog configurația (Mergeți la "Administrare -> Stări tichete"). - text_journal_changed: "{{label}} schimbat din {{old}} în {{new}}" - text_journal_set_to: "{{label}} setat ca {{value}}" - text_journal_deleted: "{{label}} șters ({{old}})" + text_journal_changed: "%{label} schimbat din %{old} în %{new}" + text_journal_set_to: "%{label} setat ca %{value}" + text_journal_deleted: "%{label} șters (%{old})" label_group_plural: Grupuri label_group: Grup label_group_new: Grup nou label_time_entry_plural: Timp alocat - text_journal_added: "{{label}} {{value}} added" + text_journal_added: "%{label} %{value} added" field_active: Active enumeration_system_activity: System Activity permission_delete_issue_watchers: Delete watchers @@ -863,9 +870,9 @@ setting_start_of_week: Start calendars on permission_view_issues: View Issues label_display_used_statuses_only: Only display statuses that are used by this tracker - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_api_access_key: API access key - label_api_access_key_created_on: API access key created {{value}} ago + label_api_access_key_created_on: API access key created %{value} ago label_feeds_access_key: RSS access key notice_api_access_key_reseted: Your API access key was reset. setting_rest_api_enabled: Enable REST web service @@ -892,12 +899,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -905,7 +912,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -916,8 +923,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Codare pentru mesaje + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/ru.yml --- a/config/locales/ru.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/ru.yml Mon Jul 25 14:23:37 2011 +0100 @@ -28,7 +28,10 @@ abbr_month_names: [~, янв., февр., марта, апр., мая, июня, июля, авг., сент., окт., нояб., дек.] standalone_abbr_month_names: [~, янв., февр., март, апр., май, июнь, июль, авг., сент., окт., нояб., дек.] - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -89,60 +92,60 @@ distance_in_words: half_a_minute: "меньше минуты" less_than_x_seconds: - one: "меньше {{count}} секунды" - few: "меньше {{count}} секунд" - many: "меньше {{count}} секунд" - other: "меньше {{count}} секунды" + one: "меньше %{count} секунды" + few: "меньше %{count} секунд" + many: "меньше %{count} секунд" + other: "меньше %{count} секунды" x_seconds: - one: "{{count}} секунда" - few: "{{count}} секунды" - many: "{{count}} секунд" - other: "{{count}} секунды" + one: "%{count} секунда" + few: "%{count} секунды" + many: "%{count} секунд" + other: "%{count} секунды" less_than_x_minutes: - one: "меньше {{count}} минуты" - few: "меньше {{count}} минут" - many: "меньше {{count}} минут" - other: "меньше {{count}} минуты" + one: "меньше %{count} минуты" + few: "меньше %{count} минут" + many: "меньше %{count} минут" + other: "меньше %{count} минуты" x_minutes: - one: "{{count}} минуту" - few: "{{count}} минуты" - many: "{{count}} минут" - other: "{{count}} минуты" + one: "%{count} минуту" + few: "%{count} минуты" + many: "%{count} минут" + other: "%{count} минуты" about_x_hours: - one: "около {{count}} часа" - few: "около {{count}} часов" - many: "около {{count}} часов" - other: "около {{count}} часа" + one: "около %{count} часа" + few: "около %{count} часов" + many: "около %{count} часов" + other: "около %{count} часа" x_days: - one: "{{count}} день" - few: "{{count}} дня" - many: "{{count}} дней" - other: "{{count}} дня" + one: "%{count} день" + few: "%{count} дня" + many: "%{count} дней" + other: "%{count} дня" about_x_months: - one: "около {{count}} месяца" - few: "около {{count}} месяцев" - many: "около {{count}} месяцев" - other: "около {{count}} месяца" + one: "около %{count} месяца" + few: "около %{count} месяцев" + many: "около %{count} месяцев" + other: "около %{count} месяца" x_months: - one: "{{count}} месяц" - few: "{{count}} месяца" - many: "{{count}} месяцев" - other: "{{count}} месяца" + one: "%{count} месяц" + few: "%{count} месяца" + many: "%{count} месяцев" + other: "%{count} месяца" about_x_years: - one: "около {{count}} года" - few: "около {{count}} лет" - many: "около {{count}} лет" - other: "около {{count}} лет" + one: "около %{count} года" + few: "около %{count} лет" + many: "около %{count} лет" + other: "около %{count} лет" over_x_years: - one: "больше {{count}} года" - few: "больше {{count}} лет" - many: "больше {{count}} лет" - other: "больше {{count}} лет" + one: "больше %{count} года" + few: "больше %{count} лет" + many: "больше %{count} лет" + other: "больше %{count} лет" almost_x_years: one: "почти 1 год" - few: "почти {{count}} года" - many: "почти {{count}} лет" - other: "почти {{count}} года" + few: "почти %{count} года" + many: "почти %{count} лет" + other: "почти %{count} года" prompts: year: "Год" month: "Месяц" @@ -155,10 +158,10 @@ errors: template: header: - one: "{{model}}: сохранение не удалось из-за {{count}} ошибки" - few: "{{model}}: сохранение не удалось из-за {{count}} ошибок" - many: "{{model}}: сохранение не удалось из-за {{count}} ошибок" - other: "{{model}}: сохранение не удалось из-за {{count}} ошибки" + one: "%{model}: сохранение не удалось из-за %{count} ошибки" + few: "%{model}: сохранение не удалось из-за %{count} ошибок" + many: "%{model}: сохранение не удалось из-за %{count} ошибок" + other: "%{model}: сохранение не удалось из-за %{count} ошибки" body: "Проблемы возникли со следующими полями:" @@ -171,27 +174,27 @@ empty: "не может быть пустым" blank: "не может быть пустым" too_long: - one: "слишком большой длины (не может быть больше чем {{count}} символ)" - few: "слишком большой длины (не может быть больше чем {{count}} символа)" - many: "слишком большой длины (не может быть больше чем {{count}} символов)" - other: "слишком большой длины (не может быть больше чем {{count}} символа)" + one: "слишком большой длины (не может быть больше чем %{count} символ)" + few: "слишком большой длины (не может быть больше чем %{count} символа)" + many: "слишком большой длины (не может быть больше чем %{count} символов)" + other: "слишком большой длины (не может быть больше чем %{count} символа)" too_short: - one: "недостаточной длины (не может быть меньше {{count}} символа)" - few: "недостаточной длины (не может быть меньше {{count}} символов)" - many: "недостаточной длины (не может быть меньше {{count}} символов)" - other: "недостаточной длины (не может быть меньше {{count}} символа)" + one: "недостаточной длины (не может быть меньше %{count} символа)" + few: "недостаточной длины (не может быть меньше %{count} символов)" + many: "недостаточной длины (не может быть меньше %{count} символов)" + other: "недостаточной длины (не может быть меньше %{count} символа)" wrong_length: - one: "неверной длины (может быть длиной ровно {{count}} символ)" - few: "неверной длины (может быть длиной ровно {{count}} символа)" - many: "неверной длины (может быть длиной ровно {{count}} символов)" - other: "неверной длины (может быть длиной ровно {{count}} символа)" + one: "неверной длины (может быть длиной ровно %{count} символ)" + few: "неверной длины (может быть длиной ровно %{count} символа)" + many: "неверной длины (может быть длиной ровно %{count} символов)" + other: "неверной длины (может быть длиной ровно %{count} символа)" taken: "уже существует" not_a_number: "не является числом" - greater_than: "может иметь значение большее {{count}}" - greater_than_or_equal_to: "может иметь значение большее или равное {{count}}" - equal_to: "может иметь лишь значение, равное {{count}}" - less_than: "может иметь значение меньшее чем {{count}}" - less_than_or_equal_to: "может иметь значение меньшее или равное {{count}}" + 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: "должна быть позднее даты начала" @@ -230,7 +233,7 @@ button_delete: Удалить button_download: Загрузить button_edit: Редактировать - button_edit_associated_wikipage: "Редактировать связанную wiki-страницу: {{page_title}}" + button_edit_associated_wikipage: "Редактировать связанную wiki-страницу: %{page_title}" button_list: Список button_lock: Заблокировать button_login: Вход @@ -261,7 +264,7 @@ default_issue_status_closed: Закрыта default_issue_status_feedback: Обратная связь default_issue_status_new: Новая - default_issue_status_rejected: Отказ + default_issue_status_rejected: Отклонена default_issue_status_resolved: Решена default_priority_high: Высокий default_priority_immediate: Немедленный @@ -272,7 +275,7 @@ default_role_manager: Менеджер default_role_reporter: Генератор отчетов default_tracker_bug: Ошибка - default_tracker_feature: Изменение + default_tracker_feature: Улучшение default_tracker_support: Поддержка enumeration_activities: Действия (учет времени) @@ -282,12 +285,12 @@ error_can_not_remove_role: Эта роль используется и не может быть удалена. error_can_not_delete_custom_field: Невозможно удалить настраиваемое поле error_can_not_delete_tracker: Этот трекер содержит задачи и не может быть удален. - error_can_t_load_default_data: "Конфигурация по умолчанию не была загружена: {{value}}" + error_can_t_load_default_data: "Конфигурация по умолчанию не была загружена: %{value}" error_issue_not_found_in_project: Задача не была найдена или не прикреплена к этому проекту error_scm_annotate: "Данные отсутствуют или не могут быть подписаны." - error_scm_command_failed: "Ошибка доступа к хранилищу: {{value}}" + error_scm_command_failed: "Ошибка доступа к хранилищу: %{value}" error_scm_not_found: Хранилище не содержит записи и/или исправления. - error_unable_to_connect: Невозможно подключиться ({{value}}) + error_unable_to_connect: Невозможно подключиться (%{value}) error_unable_delete_issue_status: Невозможно удалить статус задачи field_account: Учетная запись @@ -313,7 +316,6 @@ field_description: Описание field_done_ratio: Готовность в % field_downloads: Загрузки - field_start_date: Дата начала field_due_date: Дата выполнения field_editable: Редактируемый field_effective_date: Дата @@ -364,6 +366,7 @@ field_role: Роль field_searchable: Доступно для поиска field_spent_on: Дата + field_start_date: Начата field_start_page: Стартовая страница field_status: Статус field_subject: Тема @@ -382,9 +385,9 @@ field_version: Версия field_watcher: Наблюдатель - general_csv_decimal_separator: '.' + general_csv_decimal_separator: ',' general_csv_encoding: UTF-8 - general_csv_separator: ',' + general_csv_separator: ';' general_first_day_of_week: '1' general_lang_name: 'Russian (Русский)' general_pdf_encoding: UTF-8 @@ -394,13 +397,13 @@ general_text_Yes: 'Да' gui_validation_error: 1 ошибка - gui_validation_error_plural: "{{count}} ошибок" - gui_validation_error_plural2: "{{count}} ошибки" - gui_validation_error_plural5: "{{count}} ошибок" + gui_validation_error_plural: "%{count} ошибок" + gui_validation_error_plural2: "%{count} ошибки" + gui_validation_error_plural5: "%{count} ошибок" label_activity: Активность label_add_another_file: Добавить ещё один файл - label_added_time_by: "Добавил(а) {{author}} {{age}} назад" + label_added_time_by: "Добавил(а) %{author} %{age} назад" label_added: добавлено label_add_note: Добавить замечание label_administration: Администрирование @@ -409,7 +412,7 @@ label_all_time: всё время label_all_words: Все слова label_all: все - label_and_its_subprojects: "{{value}} и все подпроекты" + label_and_its_subprojects: "%{value} и все подпроекты" label_applied_status: Применимый статус label_ascending: По возрастанию label_assigned_to_me_issues: Мои задачи @@ -465,7 +468,7 @@ label_custom_field_new: Новое настраиваемое поле label_custom_field_plural: Настраиваемые поля label_date_from: С - label_date_from_to: С {{start}} по {{end}} + label_date_from_to: С %{start} по %{end} label_date_range: временной интервал label_date_to: по label_date: Дата @@ -479,15 +482,15 @@ label_diff_side_by_side: рядом label_disabled: отключено label_display: Отображение - label_display_per_page: "На страницу: {{value}}" + label_display_per_page: "На страницу: %{value}" label_document: Документ label_document_added: Добавлен документ label_document_new: Новый документ label_document_plural: Документы - label_download: "{{count}} загрузка" - label_download_plural: "{{count}} скачиваний" - label_download_plural2: "{{count}} загрузки" - label_download_plural5: "{{count}} загрузок" + label_download: "%{count} загрузка" + label_download_plural: "%{count} скачиваний" + label_download_plural2: "%{count} загрузки" + label_download_plural5: "%{count} загрузок" label_downloads_abbr: Скачиваний label_duplicated_by: дублируется label_duplicates: дублирует @@ -500,15 +503,15 @@ label_example: Пример label_export_to: Экспортировать в label_feed_plural: RSS - label_feeds_access_key_created_on: "Ключ доступа RSS создан {{value}} назад" - label_f_hour: "{{value}} час" - label_f_hour_plural: "{{value}} часов" + label_feeds_access_key_created_on: "Ключ доступа RSS создан %{value} назад" + label_f_hour: "%{value} час" + label_f_hour_plural: "%{value} часов" label_file_added: Добавлен файл label_file_plural: Файлы label_filter_add: Добавить фильтр label_filter_plural: Фильтры label_float: С плавающей точкой - label_follows: следующая + label_follows: предыдущая label_gantt: Диаграмма Ганта label_general: Общее label_generate_key: Сгенерировать ключ @@ -534,7 +537,7 @@ label_issue_category: Категория задачи label_issue_new: Новая задача label_issue_plural: Задачи - label_issues_by: "Сортировать по {{value}}" + label_issues_by: "Сортировать по %{value}" label_issue_status_new: Новый статус label_issue_status_plural: Статусы задачи label_issue_status: Статус задачи @@ -544,10 +547,10 @@ label_issue_watchers: Наблюдатели label_jump_to_a_project: Перейти к проекту... label_language_based: На основе языка - label_last_changes: "менее {{count}} изменений" + label_last_changes: "менее %{count} изменений" label_last_login: Последнее подключение label_last_month: последний месяц - label_last_n_days: "последние {{count}} дней" + label_last_n_days: "последние %{count} дней" label_last_week: последняя неделю label_latest_revision: Последняя редакция label_latest_revision_plural: Последние редакции @@ -570,10 +573,10 @@ label_message_posted: Добавлено сообщение label_me: мне label_min_max_length: Минимальная - максимальная длина - label_modification: "{{count}} изменение" - label_modification_plural: "{{count}} изменений" - label_modification_plural2: "{{count}} изменения" - label_modification_plural5: "{{count}} изменений" + label_modification: "%{count} изменение" + label_modification_plural: "%{count} изменений" + label_modification_plural2: "%{count} изменения" + label_modification_plural5: "%{count} изменений" label_modified: изменено label_module_plural: Модули label_months_from: месяцев(ца) с @@ -606,7 +609,7 @@ label_optional_description: Описание (опционально) label_options: Опции label_overall_activity: Сводная активность - label_overview: Просмотр + label_overview: Обзор label_password_lost: Восстановление пароля label_permissions_report: Отчет о правах доступа label_permissions: Права доступа @@ -615,7 +618,7 @@ label_planning: Планирование label_please_login: Пожалуйста, войдите. label_plugins: Модули - label_precedes: предыдущая + label_precedes: следующая label_preferences: Предпочтения label_preview: Предварительный просмотр label_previous: Предыдущий @@ -654,9 +657,9 @@ label_revision: Редакция label_revision_plural: Редакции label_roadmap: Оперативный план - label_roadmap_due_in: "В срок {{value}}" + label_roadmap_due_in: "В срок %{value}" label_roadmap_no_issues: Нет задач для данной версии - label_roadmap_overdue: "опоздание {{value}}" + label_roadmap_overdue: "опоздание %{value}" label_role: Роль label_role_and_permissions: Роли и права доступа label_role_new: Новая роль @@ -669,7 +672,7 @@ label_settings: Настройки label_show_completed_versions: Показывать завершенные версии label_sort: Сортировать - label_sort_by: "Сортировать по {{value}}" + label_sort_by: "Сортировать по %{value}" label_sort_higher: Вверх label_sort_highest: В начало label_sort_lower: Вниз @@ -695,11 +698,11 @@ label_tracker: Трекер label_tracker_new: Новый трекер label_tracker_plural: Трекеры - label_updated_time: "Обновлено {{value}} назад" - label_updated_time_by: "Обновлено {{author}} {{age}} назад" + label_updated_time: "Обновлено %{value} назад" + label_updated_time_by: "Обновлено %{author} %{age} назад" label_used_by: Используется label_user: Пользователь - label_user_activity: "Активность пользователя {{value}}" + label_user_activity: "Активность пользователя %{value}" label_user_mail_no_self_notified: "Не извещать об изменениях, которые я сделал сам" label_user_mail_option_all: "О всех событиях во всех моих проектах" label_user_mail_option_selected: "О всех событиях только в выбранном проекте..." @@ -724,46 +727,46 @@ label_x_closed_issues_abbr: zero: "0 закрыто" one: "1 закрыт" - few: "{{count}} закрыто" - many: "{{count}} закрыто" - other: "{{count}} закрыто" + few: "%{count} закрыто" + many: "%{count} закрыто" + other: "%{count} закрыто" label_x_comments: zero: "нет комментариев" one: "1 комментарий" - few: "{{count}} комментария" - many: "{{count}} комментариев" - other: "{{count}} комментариев" + few: "%{count} комментария" + many: "%{count} комментариев" + other: "%{count} комментариев" label_x_open_issues_abbr: zero: "0 открыто" one: "1 открыт" - few: "{{count}} открыто" - many: "{{count}} открыто" - other: "{{count}} открыто" + few: "%{count} открыто" + many: "%{count} открыто" + other: "%{count} открыто" label_x_open_issues_abbr_on_total: - zero: "0 открыто / {{total}}" - one: "1 открыт / {{total}}" - few: "{{count}} открыто / {{total}}" - many: "{{count}} открыто / {{total}}" - other: "{{count}} открыто / {{total}}" + zero: "0 открыто / %{total}" + one: "1 открыт / %{total}" + few: "%{count} открыто / %{total}" + many: "%{count} открыто / %{total}" + other: "%{count} открыто / %{total}" label_x_projects: zero: "нет проектов" one: "1 проект" - few: "{{count}} проекта" - many: "{{count}} проектов" - other: "{{count}} проектов" + few: "%{count} проекта" + many: "%{count} проектов" + other: "%{count} проектов" label_year: Год label_yesterday: вчера - mail_body_account_activation_request: "Зарегистрирован новый пользователь ({{value}}). Учетная запись ожидает Вашего утверждения:" + mail_body_account_activation_request: "Зарегистрирован новый пользователь (%{value}). Учетная запись ожидает Вашего утверждения:" mail_body_account_information: Информация о Вашей учетной записи - mail_body_account_information_external: "Вы можете использовать Вашу {{value}} учетную запись для входа." + mail_body_account_information_external: "Вы можете использовать Вашу %{value} учетную запись для входа." mail_body_lost_password: 'Для изменения пароля зайдите по следующей ссылке:' mail_body_register: 'Для активации учетной записи зайдите по следующей ссылке:' - mail_body_reminder: "{{count}} назначенных на Вас задач на следующие {{days}} дней:" - mail_subject_account_activation_request: "Запрос на активацию пользователя в системе {{value}}" - mail_subject_lost_password: "Ваш {{value}} пароль" - mail_subject_register: "Активация учетной записи {{value}}" - mail_subject_reminder: "{{count}} назначенных на Вас задач в ближайшие {{days}} дней" + mail_body_reminder: "%{count} назначенных на Вас задач на следующие %{days} дней:" + mail_subject_account_activation_request: "Запрос на активацию пользователя в системе %{value}" + mail_subject_lost_password: "Ваш %{value} пароль" + mail_subject_register: "Активация учетной записи %{value}" + mail_subject_reminder: "%{count} назначенных на Вас задач в ближайшие %{days} дней" notice_account_activated: Ваша учетная запись активирована. Вы можете войти. notice_account_invalid_creditentials: Неправильное имя пользователя или пароль @@ -776,10 +779,10 @@ notice_account_wrong_password: Неверный пароль notice_can_t_change_password: Для данной учетной записи используется источник внешней аутентификации. Невозможно изменить пароль. notice_default_data_loaded: Была загружена конфигурация по умолчанию. - notice_email_error: "Во время отправки письма произошла ошибка ({{value}})" - notice_email_sent: "Отправлено письмо {{value}}" - notice_failed_to_save_issues: "Не удалось сохранить {{count}} пункт(ов) из {{total}} выбранных: {{ids}}." - notice_failed_to_save_members: "Не удалось сохранить участника(ов): {{errors}}." + notice_email_error: "Во время отправки письма произошла ошибка (%{value})" + notice_email_sent: "Отправлено письмо %{value}" + notice_failed_to_save_issues: "Не удалось сохранить %{count} пункт(ов) из %{total} выбранных: %{ids}." + notice_failed_to_save_members: "Не удалось сохранить участника(ов): %{errors}." notice_feeds_access_key_reseted: Ваш ключ доступа RSS был перезапущен. notice_file_not_found: Страница, на которую Вы пытаетесь зайти, не существует или удалена. notice_locking_conflict: Информация обновлена другим пользователем. @@ -860,10 +863,9 @@ setting_attachment_max_size: Максимальный размер вложения setting_autofetch_changesets: Автоматически следить за изменениями хранилища setting_autologin: Автоматический вход - setting_bcc_recipients: Использовать скрытые списки (bcc) + setting_bcc_recipients: Использовать скрытые списки (BCC) setting_cache_formatted_text: Кешировать форматированный текст setting_commit_fix_keywords: Назначение ключевых слов - setting_commit_logs_encoding: Кодировка комментариев в хранилище setting_commit_ref_keywords: Ключевые слова для поиска setting_cross_project_issue_relations: Разрешить пересечение задач по проектам setting_date_format: Формат даты @@ -872,7 +874,7 @@ setting_default_projects_public: Новые проекты являются общедоступными setting_diff_max_lines_displayed: Максимальное число строк для diff setting_display_subprojects_issues: Отображение подпроектов по умолчанию - setting_emails_footer: Подстрочные примечания Email + setting_emails_footer: Подстрочные примечания письма setting_enabled_scm: Разрешенные SCM setting_feeds_limit: Ограничение количества заголовков для RSS потока setting_file_max_size_displayed: Максимальный размер текстового файла для отображения @@ -906,29 +908,29 @@ text_are_you_sure_with_children: Удалить задачу и все ее подзадачи? text_are_you_sure: Подтвердите text_assign_time_entries_to_project: Прикрепить зарегистрированное время к проекту - text_caracters_maximum: "Максимум {{count}} символов(а)." - text_caracters_minimum: "Должно быть не менее {{count}} символов." + text_caracters_maximum: "Максимум %{count} символов(а)." + text_caracters_minimum: "Должно быть не менее %{count} символов." text_comma_separated: Допустимы несколько значений (через запятую). text_custom_field_possible_values_info: 'По одному значению в каждой строке' text_default_administrator_account_changed: Учетная запись администратора по умолчанию изменена - text_destroy_time_entries_question: Вы собираетесь удалить {{hours}} часа(ов), прикрепленных за этой задачей. + 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_enumeration_destroy_question: "%{count} объект(а,ов) связаны с этим значением." text_file_repository_writable: Хранилище с доступом на запись - text_issue_added: "По задаче {{id}} был создан отчет ({{author}})." + text_issue_added: "По задаче %{id} был создан отчет (%{author})." text_issue_category_destroy_assignments: Удалить назначения категории - text_issue_category_destroy_question: "Несколько задач ({{count}}) назначено в данную категорию. Что Вы хотите предпринять?" + text_issue_category_destroy_question: "Несколько задач (%{count}) назначено в данную категорию. Что Вы хотите предпринять?" text_issue_category_reassign_to: Переназначить задачи для данной категории text_issues_destroy_confirmation: 'Вы уверены, что хотите удалить выбранные задачи?' text_issues_ref_in_commit_messages: Сопоставление и изменение статуса задач исходя из текста сообщений - text_issue_updated: "Задача {{id}} была обновлена ({{author}})." - text_journal_changed: "Параметр {{label}} изменился с {{old}} на {{new}}" - text_journal_deleted: "Значение {{old}} параметра {{label}} удалено" - text_journal_set_to: "Параметр {{label}} изменился на {{value}}" - text_length_between: "Длина между {{min}} и {{max}} символов." + text_issue_updated: "Задача %{id} была обновлена (%{author})." + text_journal_changed: "Параметр %{label} изменился с %{old} на %{new}" + text_journal_deleted: "Значение %{old} параметра %{label} удалено" + text_journal_set_to: "Параметр %{label} изменился на %{value}" + text_length_between: "Длина между %{min} и %{max} символов." text_load_default_configuration: Загрузить конфигурацию по умолчанию text_min_max_length_info: 0 означает отсутствие запретов text_no_configuration_data: "Роли, трекеры, статусы задач и оперативный план не были сконфигурированы.\nНастоятельно рекомендуется загрузить конфигурацию по-умолчанию. Вы сможете её изменить потом." @@ -941,31 +943,31 @@ text_rmagick_available: Доступно использование RMagick (опционально) text_select_mail_notifications: Выберите действия, на которые будет отсылаться уведомление на электронную почту. text_select_project_modules: 'Выберите модули, которые будут использованы в проекте:' - text_status_changed_by_changeset: "Реализовано в {{value}} редакции." - text_subprojects_destroy_warning: "Подпроекты: {{value}} также будут удалены." + text_status_changed_by_changeset: "Реализовано в %{value} редакции." + text_subprojects_destroy_warning: "Подпроекты: %{value} также будут удалены." text_tip_issue_begin_day: дата начала задачи text_tip_issue_begin_end_day: начало задачи и окончание ее в этот день text_tip_issue_end_day: дата завершения задачи text_tracker_no_workflow: Для этого трекера последовательность действий не определена text_unallowed_characters: Запрещенные символы text_user_mail_option: "Для невыбранных проектов, Вы будете получать уведомления только о том что просматриваете или в чем участвуете (например, вопросы, автором которых Вы являетесь или которые Вам назначены)." - text_user_wrote: "{{value}} писал(а):" + text_user_wrote: "%{value} писал(а):" text_wiki_destroy_confirmation: Вы уверены, что хотите удалить данную Wiki и все ее содержимое? text_workflow_edit: Выберите роль и трекер для редактирования последовательности состояний - warning_attachments_not_saved: "{{count}} файл(ов) невозможно сохранить." - text_wiki_page_destroy_question: Эта страница имеет {{descendants}} дочерних страниц и их потомков. Что вы хотите сделать? + warning_attachments_not_saved: "%{count} файл(ов) невозможно сохранить." + text_wiki_page_destroy_question: Эта страница имеет %{descendants} дочерних страниц и их потомков. Что вы хотите сделать? text_wiki_page_reassign_children: Переопределить дочерние страницы на текущую страницу text_wiki_page_nullify_children: Сделать дочерние страницы главными страницами text_wiki_page_destroy_children: Удалить дочерние страницы и всех их потомков setting_password_min_length: Минимальная длина пароля field_group_by: Группировать результаты по - mail_subject_wiki_content_updated: "Wiki-страница '{{id}}' была обновлена" + mail_subject_wiki_content_updated: "Wiki-страница '%{id}' была обновлена" label_wiki_content_added: Добавлена wiki-страница - mail_subject_wiki_content_added: "Wiki-страница '{{id}}' была добавлена" - mail_body_wiki_content_added: "{{author}} добавил(а) wiki-страницу '{{id}}'." + mail_subject_wiki_content_added: "Wiki-страница '%{id}' была добавлена" + mail_body_wiki_content_added: "%{author} добавил(а) wiki-страницу '%{id}'." label_wiki_content_updated: Обновлена wiki-страница - mail_body_wiki_content_updated: "{{author}} обновил(а) wiki-страницу '{{id}}'." + mail_body_wiki_content_updated: "%{author} обновил(а) wiki-страницу '%{id}'." permission_add_project: Создание проекта setting_new_project_user_role_id: Роль, назначаемая пользователю, создавшему проект label_view_all_revisions: Показать все ревизии @@ -977,7 +979,7 @@ label_group: Группа label_group_new: Новая группа label_time_entry_plural: Затраченное время - text_journal_added: "{{label}} {{value}} добавлен" + text_journal_added: "%{label} %{value} добавлен" field_active: Активно enumeration_system_activity: Системная активность permission_delete_issue_watchers: Удаление наблюдателей @@ -1012,10 +1014,10 @@ setting_start_of_week: День начала недели label_api_access_key: Ключ доступа к API text_line_separated: Разрешено несколько значений (по одному значению в строку). - label_revision_id: Ревизия {{value}} + label_revision_id: Ревизия %{value} permission_view_issues: Просмотр задач label_display_used_statuses_only: Отображать только те статусы, которые используются в этом трекере - label_api_access_key_created_on: Ключ доступ к API был создан {{value}} назад + label_api_access_key_created_on: Ключ доступ к API был создан %{value} назад label_feeds_access_key: Ключ доступа к RSS notice_api_access_key_reseted: Ваш ключ доступа к API был сброшен. setting_rest_api_enabled: Включить веб-сервис REST @@ -1036,13 +1038,55 @@ text_zoom_in: Приблизить notice_unable_delete_time_entry: Невозможно удалить запись журнала. label_overall_spent_time: Всего затрачено времени - label_user_mail_option_none: Нет событий field_member_of_group: Группа назначенного field_assigned_to_role: Роль назначенного notice_not_authorized_archived_project: Запрашиваемый проект был архивирован. + label_principal_search: "Найти пользователя или группу:" + label_user_search: "Найти пользователя:" + field_visible: Видимый + setting_emails_header: Заголовок письма - 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: Активность для учета времени + text_time_logged_by_changeset: Учтено в редакции %{value}. + setting_commit_logtime_enabled: Включить учет времени + notice_gantt_chart_truncated: Диаграмма будет усечена, поскольку превышено максимальное кол-во элементов, которые могут отображаться (%{max}) + setting_gantt_items_limit: Максимальное кол-во элементов отображаемых на диаграмме Ганта + field_warn_on_leaving_unsaved: Предупреждать при закратии страницы с несохраненным текстом + text_warn_on_leaving_unsaved: Текущая страница содержит несохраненный текст, который будет потерян, если вы покинете эту страницу. + label_my_queries: Мои сохраненные запросы + text_journal_changed_no_detail: "%{label} обновлено" + label_news_comment_added: Добавлен комментарий к новости + button_expand_all: Развернуть все + button_collapse_all: Свернуть все + label_additional_workflow_transitions_for_assignee: Дополнительные переходы, когда пользователь является исполнителем + label_additional_workflow_transitions_for_author: Дополнительные переходы, когда пользователь является автором + label_bulk_edit_selected_time_entries: Массовое изменение выбранных записей затраченного времени времени + text_time_entries_destroy_confirmation: Вы уверены что хотите удалить выбраные записи затраченного времени? + label_role_anonymous: Аноним + label_role_non_member: Не участник + label_issue_note_added: Примечание добавлено + label_issue_status_updated: Статус обновлен + label_issue_priority_updated: Приоритет обновлен + label_issues_visibility_own: Задачи созданные или назначенные пользователю + field_issues_visibility: Видимость задач + label_issues_visibility_all: Все задачи + permission_set_own_issues_private: Устанавливать видимость (общая/частная) для собственных задач + field_is_private: Частная + permission_set_issues_private: Устанавливать видимость (общая/частная) для задач + label_issues_visibility_public: Только общие задачи + text_issues_destroy_descendants_confirmation: Так же будет удалено %{count} задачи. + field_commit_logs_encoding: Кодировка комментариев в хранилище + field_scm_path_encoding: Кодировка пути + text_scm_path_encoding_note: "По умолчанию: UTF-8" + field_path_to_repository: Путь к репозиторию + field_root_directory: Корневую директорию + field_cvs_module: Модуль + field_cvsroot: CVSROOT + text_git_repository_note: Локальный и bare репозиторий (например, /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Локальный репозиторий (например, /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/sk.yml --- a/config/locales/sk.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/sk.yml Mon Jul 25 14:23:37 2011 +0100 @@ -16,7 +16,10 @@ month_names: [~, Január, Február, Marec, Apríl, Máj, Jún, Júl, August, September, Október, November, December] abbr_month_names: [~, Jan, Feb, Mar, Apr, Máj, Jún, Júl, Aug, Sep, Okt, Nov, Dec] # Used in date_select and datime_select. - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -32,37 +35,37 @@ half_a_minute: "pol minúty" less_than_x_seconds: one: "menej ako 1 sekunda" - other: "menej ako {{count}} sekúnd" + other: "menej ako %{count} sekúnd" x_seconds: one: "1 sekunda" - other: "{{count}} sekúnd" + other: "%{count} sekúnd" less_than_x_minutes: one: "menej ako minúta" - other: "menej ako {{count}} minút" + other: "menej ako %{count} minút" x_minutes: one: "1 minuta" - other: "{{count}} minút" + other: "%{count} minút" about_x_hours: one: "okolo 1 hodiny" - other: "okolo {{count}} hodín" + other: "okolo %{count} hodín" x_days: one: "1 deň" - other: "{{count}} dní" + other: "%{count} dní" about_x_months: one: "okolo 1 mesiaca" - other: "okolo {{count}} mesiace/ov" + other: "okolo %{count} mesiace/ov" x_months: one: "1 mesiac" - other: "{{count}} mesiace/ov" + other: "%{count} mesiace/ov" about_x_years: one: "okolo 1 roka" - other: "okolo {{count}} roky/ov" + other: "okolo %{count} roky/ov" over_x_years: one: "cez 1 rok" - other: "cez {{count}} roky/ov" + other: "cez %{count} roky/ov" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" number: human: @@ -88,6 +91,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "nieje zahrnuté v zozname" exclusion: "je rezervované" @@ -102,11 +109,11 @@ taken: "je už použité" not_a_number: "nieje číslo" not_a_date: "nieje platný dátum" - greater_than: "musí byť väčšíe ako {{count}}" - greater_than_or_equal_to: "musí byť väčšie alebo rovné {{count}}" - equal_to: "musí byť rovné {{count}}" - less_than: "musí byť menej ako {{count}}" - less_than_or_equal_to: "musí byť menej alebo rovné {{count}}" + greater_than: "musí byť väčšíe ako %{count}" + greater_than_or_equal_to: "musí byť väčšie alebo rovné %{count}" + equal_to: "musí byť rovné %{count}" + less_than: "musí byť menej ako %{count}" + less_than_or_equal_to: "musí byť menej alebo rovné %{count}" odd: "musí byť nepárne" even: "musí byť párne" greater_than_start_date: "musí byť neskôr ako počiatočný dátum" @@ -146,30 +153,30 @@ notice_locking_conflict: Údaje boli zmenené iným užívateľom. notice_scm_error: Položka a/alebo revízia neexistuje v repozitári. notice_not_authorized: Nemáte dostatočné práva pre zobrazenie tejto stránky. - notice_email_sent: "Na adresu {{value}} bol odeslaný email" - notice_email_error: "Pri odosielaní emailu nastala chyba ({{value}})" + notice_email_sent: "Na adresu %{value} bol odeslaný email" + notice_email_error: "Pri odosielaní emailu nastala chyba (%{value})" notice_feeds_access_key_reseted: Váš klúč pre prístup k Atomu bol resetovaný. - notice_failed_to_save_issues: "Nastala chyba pri ukládaní {{count}} úloh na {{total}} zvolený: {{ids}}." + notice_failed_to_save_issues: "Nastala chyba pri ukládaní %{count} úloh na %{total} zvolený: %{ids}." notice_no_issue_selected: "Nebola zvolená žiadná úloha. Prosím, zvoľte úlohy, ktoré chcete upraviť" notice_account_pending: "Váš účet bol vytvorený, teraz čaká na schválenie administrátorom." notice_default_data_loaded: Výchozia konfigurácia úspešne nahraná. - error_can_t_load_default_data: "Výchozia konfigurácia nebola nahraná: {{value}}" + error_can_t_load_default_data: "Výchozia konfigurácia nebola nahraná: %{value}" error_scm_not_found: "Položka a/alebo revízia neexistuje v repozitári." - error_scm_command_failed: "Pri pokuse o prístup k repozitári došlo k chybe: {{value}}" + error_scm_command_failed: "Pri pokuse o prístup k repozitári došlo k chybe: %{value}" error_issue_not_found_in_project: 'Úloha nebola nájdená alebo nepatrí k tomuto projektu' - mail_subject_lost_password: "Vaše heslo ({{value}})" + mail_subject_lost_password: "Vaše heslo (%{value})" mail_body_lost_password: 'Pre zmenu vašeho hesla kliknite na následujúci odkaz:' - mail_subject_register: "Aktivácia účtu ({{value}})" + mail_subject_register: "Aktivácia účtu (%{value})" mail_body_register: 'Pre aktiváciu vašeho účtu kliknite na následujúci odkaz:' - mail_body_account_information_external: "Pomocou vašeho účtu {{value}} se môžete prihlásiť." + mail_body_account_information_external: "Pomocou vašeho účtu %{value} se môžete prihlásiť." mail_body_account_information: Informácie o vašom účte - mail_subject_account_activation_request: "Aktivácia {{value}} účtu" - mail_body_account_activation_request: "Bol zaregistrovaný nový uživateľ {{value}}. Aktivácia jeho účtu závisí na vašom potvrdení." + mail_subject_account_activation_request: "Aktivácia %{value} účtu" + mail_body_account_activation_request: "Bol zaregistrovaný nový uživateľ %{value}. Aktivácia jeho účtu závisí na vašom potvrdení." gui_validation_error: 1 chyba - gui_validation_error_plural: "{{count}} chyb(y)" + gui_validation_error_plural: "%{count} chyb(y)" field_name: Názov field_description: Popis @@ -231,7 +238,8 @@ field_attr_lastname: Priezvisko (atribut) field_attr_mail: Email (atribut) field_onthefly: Automatické vytváranie užívateľov - field_done_ratio: % hotovo + field_start_date: Začiatok + field_done_ratio: "% hotovo" field_auth_source: Autentifikačný mód field_hide_mail: Nezobrazovať môj email field_comments: Komentár @@ -304,14 +312,14 @@ label_x_projects: zero: žiadne projekty one: 1 projekt - other: "{{count}} projekty/ov" + other: "%{count} projekty/ov" label_project_all: Všetky projekty label_project_latest: Posledné projekty label_issue: Úloha label_issue_new: Nová úloha label_issue_plural: Úlohy label_issue_view_all: Všetky úlohy - label_issues_by: "Úlohy od užívateľa {{value}}" + label_issues_by: "Úlohy od užívateľa %{value}" label_issue_added: Úloha pridaná label_issue_updated: Úloha aktualizovaná label_document: Dokument @@ -378,8 +386,8 @@ label_text: Dlhý text label_attribute: Atribut label_attribute_plural: Atributy - label_download: "{{count}} Download" - label_download_plural: "{{count}} Downloady" + label_download: "%{count} Download" + label_download_plural: "%{count} Downloady" label_no_data: Žiadné položky label_change_status: Zmeniť stav label_history: História @@ -410,17 +418,17 @@ label_closed_issues: Uzavrený label_closed_issues_plural: Uzavrené label_x_open_issues_abbr_on_total: - zero: 0 otvorených z celkovo {{total}} - one: 1 otvorený z celkovo {{total}} - other: "{{count}} otvorené/ých z celkovo {{total}}" + zero: 0 otvorených z celkovo %{total} + one: 1 otvorený z celkovo %{total} + other: "%{count} otvorené/ých z celkovo %{total}" label_x_open_issues_abbr: zero: 0 otvorených one: 1 otvorený - other: "{{count}} otvorené/ých" + other: "%{count} otvorené/ých" label_x_closed_issues_abbr: zero: 0 zavretých one: 1 zavretý - other: "{{count}} zavreté/ých" + other: "%{count} zavreté/ých" label_total: Celkovo label_permissions: Práva label_current_status: Aktuálny stav @@ -438,7 +446,7 @@ label_months_from: mesiacov od label_gantt: Ganttov graf label_internal: Interný - label_last_changes: "posledných {{count}} zmien" + label_last_changes: "posledných %{count} zmien" label_change_view_all: Zobraziť všetky zmeny label_personalize_page: Prispôsobiť túto stránku label_comment: Komentár @@ -446,7 +454,7 @@ label_x_comments: zero: žiaden komentár one: 1 komentár - other: "{{count}} komentáre/ov" + other: "%{count} komentáre/ov" label_comment_add: Pridať komentár label_comment_added: Komentár pridaný label_comment_delete: Odstrániť komentár @@ -465,7 +473,7 @@ label_yesterday: včera label_this_week: tento týždeň label_last_week: minulý týždeň - label_last_n_days: "posledných {{count}} dní" + label_last_n_days: "posledných %{count} dní" label_this_month: tento mesiac label_last_month: minulý mesiac label_this_year: tento rok @@ -479,8 +487,8 @@ label_repository: Repozitár label_repository_plural: Repozitáre label_browse: Prechádzať - label_modification: "{{count}} zmena" - label_modification_plural: "{{count}} zmien" + label_modification: "%{count} zmena" + label_modification_plural: "%{count} zmien" label_revision: Revízia label_revision_plural: Revízií label_associated_revisions: Súvisiace verzie @@ -496,8 +504,8 @@ label_sort_lower: Presunúť dole label_sort_lowest: Presunúť na koniec label_roadmap: Plán - label_roadmap_due_in: "Zostáva {{value}}" - label_roadmap_overdue: "{{value}} neskoro" + label_roadmap_due_in: "Zostáva %{value}" + label_roadmap_overdue: "%{value} neskoro" label_roadmap_no_issues: Pre túto verziu niesú žiadne úlohy label_search: Hľadať label_result_plural: Výsledky @@ -515,8 +523,8 @@ label_changes_details: Detail všetkých zmien label_issue_tracking: Sledovanie úloh label_spent_time: Strávený čas - label_f_hour: "{{value}} hodina" - label_f_hour_plural: "{{value}} hodín" + label_f_hour: "%{value} hodina" + label_f_hour_plural: "%{value} hodín" label_time_tracking: Sledovánie času label_change_plural: Zmeny label_statistics: Štatistiky @@ -564,12 +572,12 @@ label_date_from: Od label_date_to: Do label_language_based: Podľa výchozieho jazyka - label_sort_by: "Zoradenie podľa {{value}}" + label_sort_by: "Zoradenie podľa %{value}" label_send_test_email: Poslať testovací email - label_feeds_access_key_created_on: "Prístupový klúč pre RSS bol vytvorený pred {{value}}" + label_feeds_access_key_created_on: "Prístupový klúč pre RSS bol vytvorený pred %{value}" label_module_plural: Moduly - label_added_time_by: "Pridané užívateľom {{author}} pred {{age}}" - label_updated_time: "Aktualizované pred {{value}}" + label_added_time_by: "Pridané užívateľom %{author} pred %{age}" + label_updated_time: "Aktualizované pred %{value}" label_jump_to_a_project: Zvoliť projekt... label_file_plural: Súbory label_changeset_plural: Sady zmien @@ -585,7 +593,7 @@ label_registration_activation_by_email: aktivácia účtu emailom label_registration_manual_activation: manuálna aktivácia účtu label_registration_automatic_activation: automatická aktivácia účtu - label_display_per_page: "{{value}} na stránku" + label_display_per_page: "%{value} na stránku" label_age: Vek label_change_properties: Zmeniť vlastnosti label_general: Všeobecné @@ -652,23 +660,23 @@ text_tip_issue_end_day: úloha končí v tento deň text_tip_issue_begin_end_day: úloha začína a končí v tento deň text_project_identifier_info: 'Povolené znaky sú malé písmena (a-z), čísla a pomlčka.
    Po uložení už nieje možné identifikátor zmeniť.' - text_caracters_maximum: "{{count}} znakov maximálne." - text_caracters_minimum: "Musí byť aspoň {{count}} znaky/ov dlhé." - text_length_between: "Dĺžka medzi {{min}} až {{max}} znakmi." + text_caracters_maximum: "%{count} znakov maximálne." + text_caracters_minimum: "Musí byť aspoň %{count} znaky/ov dlhé." + text_length_between: "Dĺžka medzi %{min} až %{max} znakmi." text_tracker_no_workflow: Pre tuto frontu nieje definovaný žiadný workflow text_unallowed_characters: Nepovolené znaky text_comma_separated: Je povolené viacero hodnôt (oddelené navzájom čiarkou). text_issues_ref_in_commit_messages: Odkazovať a upravovať úlohy v správach s následovnym obsahom - text_issue_added: "úloha {{id}} bola vytvorená užívateľom {{author}}." - text_issue_updated: "Úloha {{id}} byla aktualizovaná užívateľom {{author}}." + text_issue_added: "úloha %{id} bola vytvorená užívateľom %{author}." + text_issue_updated: "Úloha %{id} byla aktualizovaná užívateľom %{author}." text_wiki_destroy_confirmation: Naozaj si prajete odstrániť túto Wiki a celý jej obsah? - text_issue_category_destroy_question: "Niektoré úlohy ({{count}}) sú priradené k tejto kategórii. Čo chtete s nimi spraviť?" + text_issue_category_destroy_question: "Niektoré úlohy (%{count}) sú priradené k tejto kategórii. Čo chtete s nimi spraviť?" text_issue_category_destroy_assignments: Zrušiť priradenie ku kategórii text_issue_category_reassign_to: Priradiť úlohy do tejto kategórie text_user_mail_option: "U projektov, které neboli vybrané, budete dostávať oznamenie iba o vašich či o sledovaných položkách (napr. o položkách, ktorých ste autor, alebo ku ktorým ste priradený/á)." text_no_configuration_data: "Role, fronty, stavy úloh ani workflow neboli zatiaľ nakonfigurované.\nVelmi doporučujeme nahrať východziu konfiguráciu. Potom si môžete všetko upraviť" text_load_default_configuration: Nahrať východziu konfiguráciu - text_status_changed_by_changeset: "Aktualizované v sade zmien {{value}}." + text_status_changed_by_changeset: "Aktualizované v sade zmien %{value}." text_issues_destroy_confirmation: 'Naozaj si prajete odstrániť všetky zvolené úlohy?' text_select_project_modules: 'Aktivne moduly v tomto projekte:' text_default_administrator_account_changed: Zmenené výchozie nastavenie administrátorského účtu @@ -706,23 +714,22 @@ enumeration_activities: Aktivity (sledovanie času) error_scm_annotate: "Položka neexistuje alebo nemôže byť komentovaná." label_planning: Plánovanie - text_subprojects_destroy_warning: "Jeho podprojekt(y): {{value}} budú takisto vymazané." - label_and_its_subprojects: "{{value}} a jeho podprojekty" - mail_body_reminder: "{{count}} úloha(y), ktorá(é) je(sú) vám priradený(é), ma(jú) byť hotova(é) za {{days}} dní:" - mail_subject_reminder: "{{count}} úloha(y) ma(jú) byť hotova(é) za pár {{days}} dní" - text_user_wrote: "{{value}} napísal:" + text_subprojects_destroy_warning: "Jeho podprojekt(y): %{value} budú takisto vymazané." + label_and_its_subprojects: "%{value} a jeho podprojekty" + mail_body_reminder: "%{count} úloha(y), ktorá(é) je(sú) vám priradený(é), ma(jú) byť hotova(é) za %{days} dní:" + mail_subject_reminder: "%{count} úloha(y) ma(jú) byť hotova(é) za pár %{days} dní" + text_user_wrote: "%{value} napísal:" label_duplicated_by: duplikovaný setting_enabled_scm: Zapnúť SCM text_enumeration_category_reassign_to: 'Prenastaviť na túto hodnotu:' - text_enumeration_destroy_question: "{{count}} objekty sú nastavené na túto hodnotu." + text_enumeration_destroy_question: "%{count} objekty sú nastavené na túto hodnotu." label_incoming_emails: Príchádzajúce emaily 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 button_quote: Citácia setting_sequential_project_identifiers: Generovať sekvenčné identifikátory projektov notice_unable_delete_version: Verzia nemôže byť zmazaná @@ -780,12 +787,12 @@ permission_delete_own_messages: Mazanie vlastných správ text_repository_usernames_mapping: "Vyberte alebo upravte mapovanie medzi užívateľmi systému Redmine a užívateľskými menami nájdenými v logu repozitára.\nUžívatelia s rovnakým prihlasovacím menom alebo emailom v systéme Redmine a repozitára sú mapovaní automaticky." label_example: Príklad - label_user_activity: "Aktivita užívateľa {{value}}" - label_updated_time_by: "Aktualizované užívateľom {{author}} pred {{age}}" + label_user_activity: "Aktivita užívateľa %{value}" + label_updated_time_by: "Aktualizované užívateľom %{author} pred %{age}" text_diff_truncated: '... Tento rozdielový výpis bol skratený, pretože prekračuje maximálnu veľkosť, ktorá môže byť zobrazená.' setting_diff_max_lines_displayed: Maximálne množstvo zobrazených riadkov rozdielového výpisu text_plugin_assets_writable: Adresár pre pluginy s možnosťou zápisu - warning_attachments_not_saved: "{{count}} súbor(y) nemohol(li) byť uložené." + warning_attachments_not_saved: "%{count} súbor(y) nemohol(li) byť uložené." field_editable: Editovateľné label_display: Zobrazenie button_create_and_continue: Vytvoriť a pokračovať @@ -800,22 +807,22 @@ label_descending: Zostupné label_sort: Zoradenie label_ascending: Rastúce - label_date_from_to: Od {{start}} do {{end}} + label_date_from_to: Od %{start} do %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: Táto stránka má {{descendants}} podstránku/y a potomka/ov. Čo chcete vykonať? + text_wiki_page_destroy_question: Táto stránka má %{descendants} podstránku/y a potomka/ov. Čo chcete vykonať? text_wiki_page_reassign_children: Preradiť podstránky k tejto hlavnej stránke text_wiki_page_nullify_children: Zachovať podstránky ako hlavné stránky text_wiki_page_destroy_children: Vymazať podstránky a všetkých ich potomkov setting_password_min_length: Minimálna dĺžka hesla field_group_by: Skupinové výsledky podľa - mail_subject_wiki_content_updated: "'{{id}}' Wiki stránka bola aktualizovaná" + mail_subject_wiki_content_updated: "'%{id}' Wiki stránka bola aktualizovaná" label_wiki_content_added: Wiki stránka pridaná - mail_subject_wiki_content_added: "'{{id}}' Wiki stránka bola pridaná" - mail_body_wiki_content_added: The '{{id}}' Wiki stránka bola pridaná užívateľom {{author}}. + mail_subject_wiki_content_added: "'%{id}' Wiki stránka bola pridaná" + mail_body_wiki_content_added: The '%{id}' Wiki stránka bola pridaná užívateľom %{author}. permission_add_project: Vytvorenie projektu label_wiki_content_updated: Wiki stránka aktualizovaná - mail_body_wiki_content_updated: Wiki stránka '{{id}}' bola aktualizovaná užívateľom {{author}}. + mail_body_wiki_content_updated: Wiki stránka '%{id}' bola aktualizovaná užívateľom %{author}. setting_repositories_encodings: Kódovanie repozitára setting_new_project_user_role_id: Rola dána non-admin užívateľovi, ktorý vytvorí projekt label_view_all_revisions: Zobraziť všetkz revízie @@ -823,14 +830,14 @@ label_branch: Vetva error_no_tracker_in_project: K tomuto projektu nieje priradená žiadna fronta. Prosím skontrolujte nastavenie projektu. error_no_default_issue_status: Nieje definovaný východzí stav úlohy. Prosím skontrolujte vase nastavenie (Choďte na "Administrácia -> Stavz úloh"). - text_journal_changed: "{{label}} zmenené z {{old}} na {{new}}" - text_journal_set_to: "{{label}} nastavené na {{value}}" - text_journal_deleted: "{{label}} zmazané ({{old}})" + text_journal_changed: "%{label} zmenené z %{old} na %{new}" + text_journal_set_to: "%{label} nastavené na %{value}" + text_journal_deleted: "%{label} zmazané (%{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}} pridané" + text_journal_added: "%{label} %{value} pridané" field_active: Aktívne enumeration_system_activity: Aktivita systému permission_delete_issue_watchers: Odstrániť pozorovateľov @@ -865,9 +872,9 @@ setting_start_of_week: Štart pracovného týždňa v permission_view_issues: Zobraziť úlohy label_display_used_statuses_only: Zobraziť len stavy, ktoré sú priradené k tejto fronte - label_revision_id: Revízia {{value}} + label_revision_id: Revízia %{value} label_api_access_key: API prístupový kľúč - label_api_access_key_created_on: API prístupový kľúč vytvorený pred {{value}} + label_api_access_key_created_on: API prístupový kľúč vytvorený pred %{value} label_feeds_access_key: RSS prístupový kľúč notice_api_access_key_reseted: Váš API prístupový kľúč bol resetovaný. setting_rest_api_enabled: Zapnúť REST web službu @@ -894,12 +901,12 @@ label_subtask_plural: Podúlohy label_project_copy_notifications: Zaslať emailové upozornenie behom kopírovania projektu error_can_not_delete_custom_field: Nieje možné vymazať užívateľské pole - error_unable_to_connect: Nieje možné vymazať ({{value}}) + error_unable_to_connect: Nieje možné vymazať (%{value}) error_can_not_remove_role: Táto roľa sa používa a nemôže byť vymazaná. error_can_not_delete_tracker: Táto fronta obsahuje úlohy a nemôže byť vymazaná. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -907,7 +914,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -918,8 +925,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Kódovanie prenášaných správ + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/sl.yml --- a/config/locales/sl.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/sl.yml Mon Jul 25 14:23:37 2011 +0100 @@ -16,7 +16,10 @@ 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 ] + order: + - :year + - :month + - :day time: formats: @@ -32,37 +35,37 @@ half_a_minute: "half a minute" less_than_x_seconds: one: "less than 1 second" - other: "less than {{count}} seconds" + other: "less than %{count} seconds" x_seconds: one: "1 second" - other: "{{count}} seconds" + other: "%{count} seconds" less_than_x_minutes: one: "less than a minute" - other: "less than {{count}} minutes" + other: "less than %{count} minutes" x_minutes: one: "1 minute" - other: "{{count}} minutes" + other: "%{count} minutes" about_x_hours: one: "about 1 hour" - other: "about {{count}} hours" + other: "about %{count} hours" x_days: one: "1 day" - other: "{{count}} days" + other: "%{count} days" about_x_months: one: "about 1 month" - other: "about {{count}} months" + other: "about %{count} months" x_months: one: "1 month" - other: "{{count}} months" + other: "%{count} months" about_x_years: one: "about 1 year" - other: "about {{count}} years" + other: "about %{count} years" over_x_years: one: "over 1 year" - other: "over {{count}} years" + other: "over %{count} years" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" number: format: @@ -92,6 +95,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "ni vključen na seznamu" exclusion: "je rezerviran" @@ -106,11 +113,11 @@ taken: "je že zaseden" not_a_number: "ni število" not_a_date: "ni veljaven datum" - 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}}" + 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: "mora biti kasnejši kot začeten datum" @@ -128,7 +135,7 @@ general_csv_separator: ',' general_csv_decimal_separator: '.' general_csv_encoding: UTF-8 - general_pdf_encoding: UFT-8 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' notice_account_updated: Račun je bil uspešno posodobljen. @@ -147,34 +154,34 @@ notice_file_not_found: Stran na katero se želite povezati ne obstaja ali pa je bila umaknjena. notice_locking_conflict: Drug uporabnik je posodobil podatke. notice_not_authorized: Nimate privilegijev za dostop do te strani. - notice_email_sent: "E-poštno sporočilo je bilo poslano {{value}}" - notice_email_error: "Ob pošiljanju e-sporočila je prišlo do napake ({{value}})" + notice_email_sent: "E-poštno sporočilo je bilo poslano %{value}" + notice_email_error: "Ob pošiljanju e-sporočila je prišlo do napake (%{value})" notice_feeds_access_key_reseted: Vaš RSS dostopni ključ je bil ponastavljen. - notice_failed_to_save_issues: "Neuspelo shranjevanje {{count}} zahtevka na {{total}} izbranem: {{ids}}." + notice_failed_to_save_issues: "Neuspelo shranjevanje %{count} zahtevka na %{total} izbranem: %{ids}." notice_no_issue_selected: "Izbran ni noben zahtevek! Prosimo preverite zahtevke, ki jih želite urediti." notice_account_pending: "Vaš račun je bil ustvarjen in čaka na potrditev s strani administratorja." notice_default_data_loaded: Privzete nastavitve so bile uspešno naložene. notice_unable_delete_version: Verzije ni bilo mogoče izbrisati. - error_can_t_load_default_data: "Privzetih nastavitev ni bilo mogoče naložiti: {{value}}" + error_can_t_load_default_data: "Privzetih nastavitev ni bilo mogoče naložiti: %{value}" error_scm_not_found: "Vnos ali revizija v shrambi ni bila najdena ." - error_scm_command_failed: "Med vzpostavljem povezave s shrambo je prišlo do napake: {{value}}" + error_scm_command_failed: "Med vzpostavljem povezave s shrambo je prišlo do napake: %{value}" error_scm_annotate: "Vnos ne obstaja ali pa ga ni mogoče komentirati." error_issue_not_found_in_project: 'Zahtevek ni bil najden ali pa ne pripada temu projektu' - mail_subject_lost_password: "Vaše {{value}} geslo" + mail_subject_lost_password: "Vaše %{value} geslo" mail_body_lost_password: 'Za spremembo glesla kliknite na naslednjo povezavo:' - mail_subject_register: "Aktivacija {{value}} vašega računa" + mail_subject_register: "Aktivacija %{value} vašega računa" mail_body_register: 'Za aktivacijo vašega računa kliknite na naslednjo povezavo:' - mail_body_account_information_external: "Za prijavo lahko uporabite vaš {{value}} račun." + mail_body_account_information_external: "Za prijavo lahko uporabite vaš %{value} račun." mail_body_account_information: Informacije o vašem računu - mail_subject_account_activation_request: "{{value}} zahtevek za aktivacijo računa" - mail_body_account_activation_request: "Registriral se je nov uporabnik ({{value}}). Račun čaka na vašo odobritev:" - mail_subject_reminder: "{{count}} zahtevek(zahtevki) zapadejo v naslednjih {{days}} dneh" - mail_body_reminder: "{{count}} zahtevek(zahtevki), ki so vam dodeljeni bodo zapadli v naslednjih {{days}} dneh:" + mail_subject_account_activation_request: "%{value} zahtevek za aktivacijo računa" + mail_body_account_activation_request: "Registriral se je nov uporabnik (%{value}). Račun čaka na vašo odobritev:" + mail_subject_reminder: "%{count} zahtevek(zahtevki) zapadejo v naslednjih %{days} dneh" + mail_body_reminder: "%{count} zahtevek(zahtevki), ki so vam dodeljeni bodo zapadli v naslednjih %{days} dneh:" gui_validation_error: 1 napaka - gui_validation_error_plural: "{{count}} napak" + gui_validation_error_plural: "%{count} napak" field_name: Ime field_description: Opis @@ -236,7 +243,8 @@ field_attr_lastname: Oznaka za priimek field_attr_mail: Oznaka za e-naslov field_onthefly: Sprotna izdelava uporabnikov - field_done_ratio: % Narejeno + field_start_date: Začetek + field_done_ratio: "% Narejeno" field_auth_source: Način overovljanja field_hide_mail: Skrij moj e-naslov field_comments: Komentar @@ -286,7 +294,6 @@ setting_cross_project_issue_relations: Dovoli povezave zahtevkov med različnimi projekti setting_issue_list_default_columns: Privzeti stolpci prikazani na seznamu zahtevkov setting_repositories_encodings: Kodiranje shrambe - setting_commit_logs_encoding: Kodiranje sporočil ob predaji setting_emails_footer: Noga e-sporočil setting_protocol: Protokol setting_per_page_options: Število elementov na stran @@ -367,14 +374,14 @@ label_x_projects: zero: no projects one: 1 project - other: "{{count}} projects" + other: "%{count} projects" label_project_all: Vsi projekti label_project_latest: Zadnji projekti label_issue: Zahtevek label_issue_new: Nov zahtevek label_issue_plural: Zahtevki label_issue_view_all: Poglej vse zahtevke - label_issues_by: "Zahtevki od {{value}}" + label_issues_by: "Zahtevki od %{value}" label_issue_added: Zahtevek dodan label_issue_updated: Zahtevek posodobljen label_document: Dokument @@ -423,7 +430,7 @@ label_registered_on: Registriran label_activity: Aktivnost label_overall_activity: Celotna aktivnost - label_user_activity: "Aktivnost {{value}}" + label_user_activity: "Aktivnost %{value}" label_new: Nov label_logged_as: Prijavljen(a) kot label_environment: Okolje @@ -432,7 +439,7 @@ label_auth_source_new: Nov način overovitve label_auth_source_plural: Načini overovitve label_subproject_plural: Podprojekti - label_and_its_subprojects: "{{value}} in njegovi podprojekti" + label_and_its_subprojects: "%{value} in njegovi podprojekti" label_min_max_length: Min - Max dolžina label_list: Seznam label_date: Datum @@ -443,8 +450,8 @@ label_text: Dolgo besedilo label_attribute: Lastnost label_attribute_plural: Lastnosti - label_download: "{{count}} Prenos" - label_download_plural: "{{count}} Prenosi" + label_download: "%{count} Prenos" + label_download_plural: "%{count} Prenosi" label_no_data: Ni podatkov za prikaz label_change_status: Spremeni stanje label_history: Zgodovina @@ -475,17 +482,17 @@ label_closed_issues: zapri zahtevek label_closed_issues_plural: zapri zahtevke label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{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" + other: "%{count} open" label_x_closed_issues_abbr: zero: 0 closed one: 1 closed - other: "{{count}} closed" + other: "%{count} closed" label_total: Skupaj label_permissions: Dovoljenja label_current_status: Trenutno stanje @@ -503,7 +510,7 @@ label_months_from: mesecev od label_gantt: Gantt label_internal: Notranji - label_last_changes: "zadnjih {{count}} sprememb" + label_last_changes: "zadnjih %{count} sprememb" label_change_view_all: Poglej vse spremembe label_personalize_page: Individualiziraj to stran label_comment: Komentar @@ -511,7 +518,7 @@ label_x_comments: zero: no comments one: 1 comment - other: "{{count}} comments" + other: "%{count} comments" label_comment_add: Dodaj komentar label_comment_added: Komentar dodan label_comment_delete: Izbriši komentarje @@ -530,7 +537,7 @@ label_yesterday: včeraj label_this_week: ta teden label_last_week: pretekli teden - label_last_n_days: "zadnjih {{count}} dni" + label_last_n_days: "zadnjih %{count} dni" label_this_month: ta mesec label_last_month: zadnji mesec label_this_year: to leto @@ -544,8 +551,8 @@ label_repository: Shramba label_repository_plural: Shrambe label_browse: Prebrskaj - label_modification: "{{count}} sprememba" - label_modification_plural: "{{count}} spremembe" + label_modification: "%{count} sprememba" + label_modification_plural: "%{count} spremembe" label_revision: Revizija label_revision_plural: Revizije label_associated_revisions: Povezane revizije @@ -563,8 +570,8 @@ label_sort_lower: Premakni dol label_sort_lowest: Premakni na dno label_roadmap: Načrt - label_roadmap_due_in: "Do {{value}}" - label_roadmap_overdue: "{{value}} zakasnel" + label_roadmap_due_in: "Do %{value}" + label_roadmap_overdue: "%{value} zakasnel" label_roadmap_no_issues: Ni zahtevkov za to verzijo label_search: Išči label_result_plural: Rezultati @@ -582,8 +589,8 @@ label_changes_details: Podrobnosti o vseh spremembah label_issue_tracking: Sledenje zahtevkom label_spent_time: Porabljen čas - label_f_hour: "{{value}} ura" - label_f_hour_plural: "{{value}} ur" + label_f_hour: "%{value} ura" + label_f_hour_plural: "%{value} ur" label_time_tracking: Sledenje času label_change_plural: Spremembe label_statistics: Statistika @@ -632,13 +639,13 @@ label_date_from: Do label_date_to: Do label_language_based: Glede na uporabnikov jezik - label_sort_by: "Razporedi po {{value}}" + label_sort_by: "Razporedi po %{value}" label_send_test_email: Pošlji testno e-pismo - label_feeds_access_key_created_on: "RSS dostopni ključ narejen {{value}} nazaj" + label_feeds_access_key_created_on: "RSS dostopni ključ narejen %{value} nazaj" label_module_plural: Moduli - label_added_time_by: "Dodan {{author}} {{age}} nazaj" - label_updated_time_by: "Posodobljen od {{author}} {{age}} nazaj" - label_updated_time: "Posodobljen {{value}} nazaj" + label_added_time_by: "Dodan %{author} %{age} nazaj" + label_updated_time_by: "Posodobljen od %{author} %{age} nazaj" + label_updated_time: "Posodobljen %{value} nazaj" label_jump_to_a_project: Skoči na projekt... label_file_plural: Datoteke label_changeset_plural: Zapisi sprememb @@ -654,7 +661,7 @@ label_registration_activation_by_email: aktivacija računa po e-pošti label_registration_manual_activation: ročna aktivacija računa label_registration_automatic_activation: samodejna aktivacija računa - label_display_per_page: "Na stran: {{value}}" + label_display_per_page: "Na stran: %{value}" label_age: Starost label_change_properties: Sprememba lastnosti label_general: Splošno @@ -721,43 +728,43 @@ text_regexp_info: npr. ^[A-Z0-9]+$ text_min_max_length_info: 0 pomeni brez omejitev text_project_destroy_confirmation: Ali ste prepričani da želite izbrisati izbrani projekt in vse z njim povezane podatke? - text_subprojects_destroy_warning: "Njegov(i) podprojekt(i): {{value}} bodo prav tako izbrisani." + text_subprojects_destroy_warning: "Njegov(i) podprojekt(i): %{value} bodo prav tako izbrisani." text_workflow_edit: Izberite vlogo in zahtevek za urejanje poteka dela text_are_you_sure: Ali ste prepričani? text_tip_issue_begin_day: naloga z začetkom na ta dan text_tip_issue_end_day: naloga z zaključkom na ta dan text_tip_issue_begin_end_day: naloga ki se začne in konča ta dan text_project_identifier_info: 'Dovoljene so samo male črke (a-z), številke in vezaji.
    Enkrat shranjen identifikator ne more biti spremenjen.' - text_caracters_maximum: "največ {{count}} znakov." - text_caracters_minimum: "Mora biti vsaj dolg vsaj {{count}} znakov." - text_length_between: "Dolžina med {{min}} in {{max}} znakov." + text_caracters_maximum: "največ %{count} znakov." + text_caracters_minimum: "Mora biti vsaj dolg vsaj %{count} znakov." + text_length_between: "Dolžina med %{min} in %{max} znakov." text_tracker_no_workflow: Potek dela za to vrsto zahtevka ni določen text_unallowed_characters: Nedovoljeni znaki text_comma_separated: Dovoljenih je več vrednosti (ločenih z vejico). text_issues_ref_in_commit_messages: Zahtevki sklicev in popravkov v sporočilu predaje - text_issue_added: "Zahtevek {{id}} je sporočil(a) {{author}}." - text_issue_updated: "Zahtevek {{id}} je posodobil(a) {{author}}." + text_issue_added: "Zahtevek %{id} je sporočil(a) %{author}." + text_issue_updated: "Zahtevek %{id} je posodobil(a) %{author}." text_wiki_destroy_confirmation: Ali ste prepričani da želite izbrisati ta wiki in vso njegovo vsebino? - text_issue_category_destroy_question: "Nekateri zahtevki ({{count}}) so dodeljeni tej kategoriji. Kaj želite storiti?" + text_issue_category_destroy_question: "Nekateri zahtevki (%{count}) so dodeljeni tej kategoriji. Kaj želite storiti?" text_issue_category_destroy_assignments: Odstrani naloge v kategoriji text_issue_category_reassign_to: Ponovno dodeli zahtevke tej kategoriji text_user_mail_option: "Na neizbrane projekte boste prejemali le obvestila o zadevah ki jih spremljate ali v katere ste vključeni (npr. zahtevki katerih avtor(ica) ste)" text_no_configuration_data: "Vloge, vrste zahtevkov, statusi zahtevkov in potek dela še niso bili določeni. \nZelo priporočljivo je, da naložite privzeto konfiguracijo, ki jo lahko kasneje tudi prilagodite." text_load_default_configuration: Naloži privzeto konfiguracijo - text_status_changed_by_changeset: "Dodano v zapis sprememb {{value}}." + text_status_changed_by_changeset: "Dodano v zapis sprememb %{value}." text_issues_destroy_confirmation: 'Ali ste prepričani, da želite izbrisati izbrani(e) zahtevek(ke)?' text_select_project_modules: 'Izberite module, ki jih želite omogočiti za ta projekt:' text_default_administrator_account_changed: Spremenjen privzeti administratorski račun text_file_repository_writable: Omogočeno pisanje v shrambo datotek text_rmagick_available: RMagick je na voljo(neobvezno) - text_destroy_time_entries_question: "{{hours}} ur je bilo opravljenih na zahtevku, ki ga želite izbrisati. Kaj želite storiti?" + text_destroy_time_entries_question: "%{hours} ur je bilo opravljenih na zahtevku, ki ga želite izbrisati. Kaj želite storiti?" text_destroy_time_entries: Izbriši opravljene ure text_assign_time_entries_to_project: Predaj opravljene ure projektu text_reassign_time_entries: 'Prenesi opravljene ure na ta zahtevek:' - text_user_wrote: "{{value}} je napisal(a):" - text_enumeration_destroy_question: "{{count}} objektov je določenih tej vrednosti." + 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.' @@ -786,7 +793,7 @@ enumeration_issue_priorities: Prioritete zahtevkov enumeration_doc_categories: Kategorije dokumentov enumeration_activities: Aktivnosti (sledenje časa) - warning_attachments_not_saved: "{{count}} file(s) could not be saved." + warning_attachments_not_saved: "%{count} file(s) could not be saved." field_editable: Editable text_plugin_assets_writable: Plugin assets directory writable label_display: Display @@ -802,21 +809,21 @@ label_descending: Descending label_sort: Sort label_ascending: Ascending - label_date_from_to: From {{start}} to {{end}} + label_date_from_to: From %{start} to %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? + text_wiki_page_destroy_question: This page has %{descendants} child page(s) and descendant(s). What do you want to do? text_wiki_page_reassign_children: Reassign child pages to this parent page text_wiki_page_nullify_children: Keep child pages as root pages text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated" label_wiki_content_added: Wiki page added - 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_added: "'%{id}' wiki page has been added" + mail_body_wiki_content_added: The '%{id}' wiki page has been added by %{author}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '%{id}' wiki page has been updated by %{author}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -824,14 +831,14 @@ label_branch: Branch 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"). - 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_changed: "%{label} changed from %{old} to %{new}" + text_journal_set_to: "%{label} set to %{value}" + text_journal_deleted: "%{label} deleted (%{old})" label_group_plural: Groups label_group: Group label_group_new: New group label_time_entry_plural: Spent time - text_journal_added: "{{label}} {{value}} added" + text_journal_added: "%{label} %{value} added" field_active: Active enumeration_system_activity: System Activity permission_delete_issue_watchers: Delete watchers @@ -866,9 +873,9 @@ setting_start_of_week: Start calendars on permission_view_issues: View Issues label_display_used_statuses_only: Only display statuses that are used by this tracker - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_api_access_key: API access key - label_api_access_key_created_on: API access key created {{value}} ago + label_api_access_key_created_on: API access key created %{value} ago label_feeds_access_key: RSS access key notice_api_access_key_reseted: Your API access key was reset. setting_rest_api_enabled: Enable REST web service @@ -895,12 +902,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -908,7 +915,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -919,8 +926,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Kodiranje sporočil ob predaji + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/sr-YU.yml --- a/config/locales/sr-YU.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/sr-YU.yml Mon Jul 25 14:23:37 2011 +0100 @@ -18,7 +18,10 @@ month_names: [~, januar, februar, mart, april, maj, jun, jul, avgust, septembar, oktobar, novembar, decembar] abbr_month_names: [~, jan, feb, mar, apr, maj, jun, jul, avg, sep, okt, nov, dec] # Used in date_select and datime_select. - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -34,37 +37,37 @@ half_a_minute: "pola minuta" less_than_x_seconds: one: "manje od jedne sekunde" - other: "manje od {{count}} sek." + other: "manje od %{count} sek." x_seconds: one: "jedna sekunda" - other: "{{count}} sek." + other: "%{count} sek." less_than_x_minutes: one: "manje od minuta" - other: "manje od {{count}} min." + other: "manje od %{count} min." x_minutes: one: "jedan minut" - other: "{{count}} min." + other: "%{count} min." about_x_hours: one: "približno jedan sat" - other: "približno {{count}} sati" + other: "približno %{count} sati" x_days: one: "jedan dan" - other: "{{count}} dana" + other: "%{count} dana" about_x_months: one: "približno jedan mesec" - other: "približno {{count}} meseci" + other: "približno %{count} meseci" x_months: one: "jedan mesec" - other: "{{count}} meseci" + other: "%{count} meseci" about_x_years: one: "približno godinu dana" - other: "približno {{count}} god." + other: "približno %{count} god." over_x_years: one: "preko godinu dana" - other: "preko {{count}} god." + other: "preko %{count} god." almost_x_years: one: "skoro godinu dana" - other: "skoro {{count}} god." + other: "skoro %{count} god." number: format: @@ -95,6 +98,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "nije uključen u spisak" exclusion: "je rezervisan" @@ -103,17 +110,17 @@ accepted: "mora biti prihvaćen" empty: "ne može biti prazno" blank: "ne može biti prazno" - too_long: "je predugačka (maksimum znakova je {{count}})" - too_short: "je prekratka (minimum znakova je {{count}})" - wrong_length: "je pogrešne dužine (broj znakova mora biti {{count}})" + too_long: "je predugačka (maksimum znakova je %{count})" + too_short: "je prekratka (minimum znakova je %{count})" + wrong_length: "je pogrešne dužine (broj znakova mora biti %{count})" taken: "je već u upotrebi" not_a_number: "nije broj" not_a_date: "nije ispravan datum" - greater_than: "mora biti veći od {{count}}" - greater_than_or_equal_to: "mora biti veći ili jednak {{count}}" - equal_to: "mora biti jednak {{count}}" - less_than: "mora biti manji od {{count}}" - less_than_or_equal_to: "mora biti manji ili jednak {{count}}" + greater_than: "mora biti veći od %{count}" + greater_than_or_equal_to: "mora biti veći ili jednak %{count}" + equal_to: "mora biti jednak %{count}" + less_than: "mora biti manji od %{count}" + less_than_or_equal_to: "mora biti manji ili jednak %{count}" odd: "mora biti paran" even: "mora biti neparan" greater_than_start_date: "mora biti veći od početnog datuma" @@ -150,12 +157,12 @@ notice_file_not_found: Strana kojoj želite pristupiti ne postoji ili je uklonjena. notice_locking_conflict: Podatak je ažuriran od strane drugog korisnika. notice_not_authorized: Niste ovlašćeni za pristup ovoj strani. - notice_email_sent: "E-poruka je poslata na {{value}}" - notice_email_error: "Dogodila se greška prilikom slanja e-poruke ({{value}})" + notice_email_sent: "E-poruka je poslata na %{value}" + notice_email_error: "Dogodila se greška prilikom slanja e-poruke (%{value})" notice_feeds_access_key_reseted: Vaš RSS pristupni ključ je poništen. notice_api_access_key_reseted: Vaš API pristupni ključ je poništen. - notice_failed_to_save_issues: "Neuspešno snimanje {{count}} problema od {{total}} odabranih: {{ids}}." - notice_failed_to_save_members: "Neuspešno snimanje člana(ova): {{errors}}." + notice_failed_to_save_issues: "Neuspešno snimanje %{count} problema od %{total} odabranih: %{ids}." + notice_failed_to_save_members: "Neuspešno snimanje člana(ova): %{errors}." notice_no_issue_selected: "Ni jedan problem nije odabran! Molimo, odaberite problem koji želite da menjate." notice_account_pending: "Vaš nalog je kreiran i čeka na odobrenje administratora." notice_default_data_loaded: Podrazumevano konfigurisanje je uspešno učitano. @@ -163,9 +170,9 @@ notice_unable_delete_time_entry: Stavku evidencije vremena je nemoguće izbrisati. notice_issue_done_ratios_updated: Odnos rešenih problema je ažuriran. - error_can_t_load_default_data: "Podrazumevano konfigurisanje je nemoguće učitati: {{value}}" + error_can_t_load_default_data: "Podrazumevano konfigurisanje je nemoguće učitati: %{value}" error_scm_not_found: "Stavka ili ispravka nisu pronađene u spremištu." - error_scm_command_failed: "Greška se javila prilikom pokušaja pristupa spremištu: {{value}}" + error_scm_command_failed: "Greška se javila prilikom pokušaja pristupa spremištu: %{value}" error_scm_annotate: "Stavka ne postoji ili ne može biti označena." error_issue_not_found_in_project: 'Problem nije pronađen ili ne pripada ovom projektu.' error_no_tracker_in_project: 'Ni jedno praćenje nije povezano sa ovim projektom. Molimo proverite podešavanja projekta.' @@ -179,26 +186,26 @@ error_workflow_copy_source: 'Molimo odaberite izvorno praćenje ili ulogu' error_workflow_copy_target: 'Molimo odaberite odredišno praćenje i ulogu' error_unable_delete_issue_status: 'Status problema je nemoguće obrisati' - error_unable_to_connect: "Povezivanje sa ({{value}}) je nemoguće" - warning_attachments_not_saved: "{{count}} datoteka ne može biti snimljena." + error_unable_to_connect: "Povezivanje sa (%{value}) je nemoguće" + warning_attachments_not_saved: "%{count} datoteka ne može biti snimljena." - mail_subject_lost_password: "Vaša {{value}} lozinka" + mail_subject_lost_password: "Vaša %{value} lozinka" mail_body_lost_password: 'Za promenu vaše lozinke, kliknite na sledeći link:' - mail_subject_register: "Aktivacija vašeg {{value}} naloga" + mail_subject_register: "Aktivacija vašeg %{value} naloga" mail_body_register: 'Za aktivaciju vašeg naloga, kliknite na sledeći link:' - mail_body_account_information_external: "Vaš nalog {{value}} možete koristiti za prijavu." + mail_body_account_information_external: "Vaš nalog %{value} možete koristiti za prijavu." mail_body_account_information: Informacije o vašem nalogu - mail_subject_account_activation_request: "Zahtev za aktivaciju naloga {{value}}" - mail_body_account_activation_request: "Novi korisnik ({{value}}) je registrovan. Nalog čeka na vaše odobrenje:" - mail_subject_reminder: "{{count}} problema dospeva narednih {{days}} dana" - mail_body_reminder: "{{count}} problema dodeljenih vama dospeva u narednih {{days}} dana:" - mail_subject_wiki_content_added: "Wiki stranica '{{id}}' je dodata" - mail_body_wiki_content_added: "{{author}} je dodao wiki stranicu '{{id}}'." - mail_subject_wiki_content_updated: "Wiki stranica '{{id}}' je ažurirana" - mail_body_wiki_content_updated: "{{author}} je ažurirao wiki stranicu '{{id}}'." + mail_subject_account_activation_request: "Zahtev za aktivaciju naloga %{value}" + mail_body_account_activation_request: "Novi korisnik (%{value}) je registrovan. Nalog čeka na vaše odobrenje:" + mail_subject_reminder: "%{count} problema dospeva narednih %{days} dana" + mail_body_reminder: "%{count} problema dodeljenih vama dospeva u narednih %{days} dana:" + mail_subject_wiki_content_added: "Wiki stranica '%{id}' je dodata" + mail_body_wiki_content_added: "%{author} je dodao wiki stranicu '%{id}'." + mail_subject_wiki_content_updated: "Wiki stranica '%{id}' je ažurirana" + mail_body_wiki_content_updated: "%{author} je ažurirao wiki stranicu '%{id}'." gui_validation_error: jedna greška - gui_validation_error_plural: "{{count}} grešaka" + gui_validation_error_plural: "%{count} grešaka" field_name: Naziv field_description: Opis @@ -261,7 +268,8 @@ field_attr_lastname: Atribut prezimena field_attr_mail: Atribut e-adrese field_onthefly: Kreiranje korisnika u toku rada - field_done_ratio: % urađeno + field_start_date: Početak + field_done_ratio: "% urađeno" field_auth_source: Režim potvrde identiteta field_hide_mail: Sakrij moju e-adresu field_comments: Komentar @@ -318,7 +326,6 @@ setting_cross_project_issue_relations: Dozvoli povezivanje problema iz unakrsnih projekata setting_issue_list_default_columns: Podrazumevane kolone prikazane na spisku problema setting_repositories_encodings: Kodiranje spremišta - setting_commit_logs_encoding: Kodiranje izvršnih poruka setting_emails_footer: Podnožje stranice e-poruke setting_protocol: Protokol setting_per_page_options: Opcije prikaza objekata po stranici @@ -421,14 +428,14 @@ label_x_projects: zero: nema projekata one: jedan projekat - other: "{{count}} projekata" + other: "%{count} projekata" label_project_all: Svi projekti label_project_latest: Poslednji projekti label_issue: Problem label_issue_new: Novi problem label_issue_plural: Problemi label_issue_view_all: Prikaz svih problema - label_issues_by: "Problemi ({{value}})" + label_issues_by: "Problemi (%{value})" label_issue_added: Problem je dodat label_issue_updated: Problem je ažuriran label_document: Dokument @@ -479,7 +486,7 @@ label_registered_on: Registrovan label_activity: Aktivnost label_overall_activity: Celokupna aktivnost - label_user_activity: "Aktivnost korisnika {{value}}" + label_user_activity: "Aktivnost korisnika %{value}" label_new: Novo label_logged_as: Prijavljeni ste kao label_environment: Okruženje @@ -489,7 +496,7 @@ label_auth_source_plural: Režimi potvrde identiteta label_subproject_plural: Potprojekti label_subproject_new: Novi potprojekat - label_and_its_subprojects: "{{value}} i njegovi potprojekti" + label_and_its_subprojects: "%{value} i njegovi potprojekti" label_min_max_length: Min. - Maks. dužina label_list: Spisak label_date: Datum @@ -500,8 +507,8 @@ label_text: Dugi tekst label_attribute: Osobina label_attribute_plural: Osobine - label_download: "{{count}} preuzimanje" - label_download_plural: "{{count}} preuzimanja" + label_download: "%{count} preuzimanje" + label_download_plural: "%{count} preuzimanja" label_no_data: Nema podataka za prikazivanje label_change_status: Promena statusa label_history: Istorija @@ -533,17 +540,17 @@ label_closed_issues: zatvoren label_closed_issues_plural: zatvorenih label_x_open_issues_abbr_on_total: - zero: 0 otvorenih / {{total}} - one: 1 otvoren / {{total}} - other: "{{count}} otvorenih / {{total}}" + zero: 0 otvorenih / %{total} + one: 1 otvoren / %{total} + other: "%{count} otvorenih / %{total}" label_x_open_issues_abbr: zero: 0 otvorenih one: 1 otvoren - other: "{{count}} otvorenih" + other: "%{count} otvorenih" label_x_closed_issues_abbr: zero: 0 zatvorenih one: 1 zatvoren - other: "{{count}} zatvorenih" + other: "%{count} zatvorenih" label_total: Ukupno label_permissions: Dozvole label_current_status: Trenutni status @@ -561,7 +568,7 @@ label_months_from: meseci od label_gantt: Gantov dijagram label_internal: Unutrašnji - label_last_changes: "poslednjih {{count}} promena" + label_last_changes: "poslednjih %{count} promena" label_change_view_all: Prikaži sve promene label_personalize_page: Personalizuj ovu stranu label_comment: Komentar @@ -569,7 +576,7 @@ label_x_comments: zero: bez komentara one: jedan komentar - other: "{{count}} komentara" + other: "%{count} komentara" label_comment_add: Dodaj komentar label_comment_added: Komentar dodat label_comment_delete: Obriši komentare @@ -590,7 +597,7 @@ label_yesterday: juče label_this_week: ove sedmice label_last_week: poslednje sedmice - label_last_n_days: "poslednjih {{count}} dana" + label_last_n_days: "poslednjih %{count} dana" label_this_month: ovog meseca label_last_month: poslednjeg meseca label_this_year: ove godine @@ -604,13 +611,13 @@ label_repository: Spremište label_repository_plural: Spremišta label_browse: Pregledanje - label_modification: "{{count}} promena" - label_modification_plural: "{{count}} promena" + label_modification: "%{count} promena" + label_modification_plural: "%{count} promena" label_branch: Grana label_tag: Oznaka label_revision: Revizija label_revision_plural: Revizije - label_revision_id: "Revizija {{value}}" + label_revision_id: "Revizija %{value}" label_associated_revisions: Pridružene revizije label_added: dodato label_modified: promenjeno @@ -627,8 +634,8 @@ label_sort_lower: Premeštanje na dole label_sort_lowest: Premeštanje na dno label_roadmap: Plan rada - label_roadmap_due_in: "Dospeva {{value}}" - label_roadmap_overdue: "{{value}} najkasnije" + label_roadmap_due_in: "Dospeva %{value}" + label_roadmap_overdue: "%{value} najkasnije" label_roadmap_no_issues: Nema problema za ovu verziju label_search: Pretraga label_result_plural: Rezultati @@ -647,8 +654,8 @@ label_issue_tracking: Praćenje problema label_spent_time: Utrošeno vreme label_overall_spent_time: Celokupno utrošeno vreme - label_f_hour: "{{value}} sat" - label_f_hour_plural: "{{value}} sati" + label_f_hour: "%{value} sat" + label_f_hour_plural: "%{value} sati" label_time_tracking: Praćenje vremena label_change_plural: Promene label_statistics: Statistika @@ -699,15 +706,15 @@ label_date_from: Šalje label_date_to: Prima label_language_based: Bazirano na jeziku korisnika - label_sort_by: "Sortirano po {{value}}" + label_sort_by: "Sortirano po %{value}" label_send_test_email: Slanje probne e-poruke label_feeds_access_key: RSS pristupni ključ label_missing_feeds_access_key: RSS pristupni ključ nedostaje - label_feeds_access_key_created_on: "RSS pristupni ključ je napravljen pre {{value}}" + label_feeds_access_key_created_on: "RSS pristupni ključ je napravljen pre %{value}" label_module_plural: Moduli - label_added_time_by: "Dodao {{author}} pre {{age}}" - label_updated_time_by: "Ažurirao {{author}} pre {{age}}" - label_updated_time: "Ažurirano pre {{value}}" + label_added_time_by: "Dodao %{author} pre %{age}" + label_updated_time_by: "Ažurirao %{author} pre %{age}" + label_updated_time: "Ažurirano pre %{value}" label_jump_to_a_project: Skok na projekat... label_file_plural: Datoteke label_changeset_plural: Skupovi promena @@ -723,7 +730,7 @@ label_registration_activation_by_email: aktivacija naloga putem e-poruke label_registration_manual_activation: ručna aktivacija naloga label_registration_automatic_activation: automatska aktivacija naloga - label_display_per_page: "Broj stavki po stranici: {{value}}" + label_display_per_page: "Broj stavki po stranici: %{value}" label_age: Starost label_change_properties: Promeni svojstva label_general: Opšti @@ -746,7 +753,7 @@ label_sort: Sortiranje label_ascending: Rastući niz label_descending: Opadajući niz - label_date_from_to: Od {{start}} do {{end}} + label_date_from_to: Od %{start} do %{end} label_wiki_content_added: Wiki stranica je dodata label_wiki_content_updated: Wiki stranica je ažurirana label_group: Grupa @@ -765,7 +772,7 @@ label_display_used_statuses_only: Prikazuj statuse korišćene samo od strane ovog praćenja label_api_access_key: API pristupni ključ label_missing_api_access_key: Nedostaje API pristupni ključ - label_api_access_key_created_on: "API pristupni ključ je kreiran pre {{value}}" + label_api_access_key_created_on: "API pristupni ključ je kreiran pre %{value}" label_profile: Profil label_subtask_plural: Podzadatak label_project_copy_notifications: Pošalji e-poruku sa obaveštenjem prilikom kopiranja projekta @@ -828,53 +835,53 @@ text_regexp_info: npr. ^[A-Z0-9]+$ text_min_max_length_info: 0 znači bez ograničenja text_project_destroy_confirmation: Jeste li sigurni da želite da izbrišete ovaj projekat i sve pripadajuće podatke? - text_subprojects_destroy_warning: "Potprojekti: {{value}} će takođe biti izbrisan." + text_subprojects_destroy_warning: "Potprojekti: %{value} će takođe biti izbrisan." text_workflow_edit: Odaberite ulogu i praćenje za izmenu toka posla text_are_you_sure: Jeste li sigurni? - text_journal_changed: "{{label}} promenjen od {{old}} u {{new}}" - text_journal_set_to: "{{label}} postavljen u {{value}}" - text_journal_deleted: "{{label}} izbrisano ({{old}})" - text_journal_added: "{{label}} {{value}} dodato" + text_journal_changed: "%{label} promenjen od %{old} u %{new}" + text_journal_set_to: "%{label} postavljen u %{value}" + text_journal_deleted: "%{label} izbrisano (%{old})" + text_journal_added: "%{label} %{value} dodato" text_tip_issue_begin_day: zadatak počinje ovog dana text_tip_issue_end_day: zadatak se završava ovog dana text_tip_issue_begin_end_day: zadatak počinje i završava ovog dana text_project_identifier_info: 'Dozvoljena su samo mala slova (a-š), brojevi i crtice.
    Jednom snimljen identifikator više se ne može promeniti.' - text_caracters_maximum: "Najviše {{count}} znak(ova)." - text_caracters_minimum: "Broj znakova mora biti najmanje {{count}}." - text_length_between: "Broj znakova mora biti između {{min}} i {{max}}." + text_caracters_maximum: "Najviše %{count} znak(ova)." + text_caracters_minimum: "Broj znakova mora biti najmanje %{count}." + text_length_between: "Broj znakova mora biti između %{min} i %{max}." text_tracker_no_workflow: Ovo praćenje nema definisan tok posla text_unallowed_characters: Nedozvoljeni znakovi text_comma_separated: Dozvoljene su višestruke vrednosti (odvojene zarezom). text_line_separated: Dozvoljene su višestruke vrednosti (jedan red za svaku vrednost). text_issues_ref_in_commit_messages: Referenciranje i popravljanje problema u izvršnim porukama - text_issue_added: "{{author}} je prijavio problem {{id}}." - text_issue_updated: "{{author}} je ažurirao problem {{id}}." + text_issue_added: "%{author} je prijavio problem %{id}." + text_issue_updated: "%{author} je ažurirao problem %{id}." text_wiki_destroy_confirmation: Jeste li sigurni da želite da obrišete wiki i sav sadržaj? - text_issue_category_destroy_question: "Nekoliko problema ({{count}}) je dodeljeno ovoj kategoriji. Šta želite da uradite?" + text_issue_category_destroy_question: "Nekoliko problema (%{count}) je dodeljeno ovoj kategoriji. Šta želite da uradite?" text_issue_category_destroy_assignments: Ukloni dodeljene kategorije text_issue_category_reassign_to: Dodeli ponovo probleme ovoj kategoriji text_user_mail_option: "Za neizabrane projekte, dobićete samo obaveštenje o stvarima koje pratite ili ste uključeni (npr. problemi čiji ste vi autor ili zastupnik)." text_no_configuration_data: "Uloge, praćenja, statusi problema i toka posla još uvek nisu podešeni.\nPreporučljivo je da učitate podrazumevano konfigurisanje. Izmena je moguća nakon prvog učitavanja." text_load_default_configuration: Učitaj podrazumevano konfigurisanje - text_status_changed_by_changeset: "Primenjeno u skupu sa promenama {{value}}." + text_status_changed_by_changeset: "Primenjeno u skupu sa promenama %{value}." text_issues_destroy_confirmation: 'Jeste li sigurni da želite da izbrišete odabrane probleme?' text_select_project_modules: 'Odaberite module koje želite omogućiti za ovaj projekat:' text_default_administrator_account_changed: Podrazumevani administratorski nalog je promenjen text_file_repository_writable: Fascikla priloženih datoteka je upisiva text_plugin_assets_writable: Fascikla elemenata dodatnih komponenti je upisiva text_rmagick_available: RMagick je dostupan (opciono) - text_destroy_time_entries_question: "{{hours}} sati je prijavljeno za ovaj problem koji želite izbrisati. Šta želite da uradite?" + text_destroy_time_entries_question: "%{hours} sati je prijavljeno za ovaj problem koji želite izbrisati. Šta želite da uradite?" text_destroy_time_entries: Izbriši prijavljene sate text_assign_time_entries_to_project: Dodeli prijavljene sate projektu text_reassign_time_entries: 'Dodeli ponovo prijavljene sate ovom problemu:' - text_user_wrote: "{{value}} je napisao:" - text_enumeration_destroy_question: "{{count}} objekat(a) je dodeljeno ovoj vrednosti." + 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' - text_wiki_page_destroy_question: "Ova stranica ima {{descendants}} podređenih stranica i podstranica. Šta želite da uradite?" + text_wiki_page_destroy_question: "Ova stranica ima %{descendants} podređenih stranica i podstranica. Šta želite da uradite?" text_wiki_page_nullify_children: "Zadrži podređene stranice kao korene stranice" text_wiki_page_destroy_children: "Izbriši podređene stranice i sve njihove podstranice" text_wiki_page_reassign_children: "Dodeli ponovo podređene stranice ovoj matičnoj stranici" @@ -912,7 +919,7 @@ field_time_entries: Vreme evidencije project_module_gantt: Gantov dijagram project_module_calendar: Kalendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -922,9 +929,51 @@ 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. - field_start_date: Start date + 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 + 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Kodiranje izvršnih poruka + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/sr.yml --- a/config/locales/sr.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/sr.yml Mon Jul 25 14:23:37 2011 +0100 @@ -18,7 +18,10 @@ month_names: [~, јануар, фебруар, март, април, мај, јун, јул, август, септембар, октобар, новембар, децембар] abbr_month_names: [~, јан, феб, мар, апр, мај, јун, јул, авг, сеп, окт, нов, дец] # Used in date_select and datime_select. - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -34,37 +37,37 @@ half_a_minute: "пола минута" less_than_x_seconds: one: "мање од једне секунде" - other: "мање од {{count}} сек." + other: "мање од %{count} сек." x_seconds: one: "једна секунда" - other: "{{count}} сек." + other: "%{count} сек." less_than_x_minutes: one: "мање од минута" - other: "мање од {{count}} мин." + other: "мање од %{count} мин." x_minutes: one: "један минут" - other: "{{count}} мин." + other: "%{count} мин." about_x_hours: one: "приближно један сат" - other: "приближно {{count}} сати" + other: "приближно %{count} сати" x_days: one: "један дан" - other: "{{count}} дана" + other: "%{count} дана" about_x_months: one: "приближно један месец" - other: "приближно {{count}} месеци" + other: "приближно %{count} месеци" x_months: one: "један месец" - other: "{{count}} месеци" + other: "%{count} месеци" about_x_years: one: "приближно годину дана" - other: "приближно {{count}} год." + other: "приближно %{count} год." over_x_years: one: "преко годину дана" - other: "преко {{count}} год." + other: "преко %{count} год." almost_x_years: one: "скоро годину дана" - other: "скоро {{count}} год." + other: "скоро %{count} год." number: format: @@ -95,6 +98,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "није укључен у списак" exclusion: "је резервисан" @@ -103,17 +110,17 @@ accepted: "мора бити прихваћен" empty: "не може бити празно" blank: "не може бити празно" - too_long: "је предугачка (максимум знакова је {{count}})" - too_short: "је прекратка (минимум знакова је {{count}})" - wrong_length: "је погрешне дужине (број знакова мора бити {{count}})" + 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}}" + 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: "мора бити већи од почетног датума" @@ -150,12 +157,12 @@ notice_file_not_found: Страна којој желите приступити не постоји или је уклоњена. notice_locking_conflict: Податак је ажуриран од стране другог корисника. notice_not_authorized: Нисте овлашћени за приступ овој страни. - notice_email_sent: "E-порука је послата на {{value}}" - notice_email_error: "Догодила се грешка приликом слања е-поруке ({{value}})" + notice_email_sent: "E-порука је послата на %{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_failed_to_save_issues: "Неуспешно снимање %{count} проблема од %{total} одабраних: %{ids}." + notice_failed_to_save_members: "Неуспешно снимање члана(ова): %{errors}." notice_no_issue_selected: "Ни један проблем није одабран! Молимо, одаберите проблем који желите да мењате." notice_account_pending: "Ваш налог је креиран и чека на одобрење администратора." notice_default_data_loaded: Подразумевано конфигурисање је успешно учитано. @@ -163,9 +170,9 @@ notice_unable_delete_time_entry: Ставку евиденције времена је немогуће избрисати. notice_issue_done_ratios_updated: Однос решених проблема је ажуриран. - error_can_t_load_default_data: "Подразумевано конфигурисање је немогуће учитати: {{value}}" + error_can_t_load_default_data: "Подразумевано конфигурисање је немогуће учитати: %{value}" error_scm_not_found: "Ставка или исправка нису пронађене у спремишту." - error_scm_command_failed: "Грешка се јавила приликом покушаја приступа спремишту: {{value}}" + error_scm_command_failed: "Грешка се јавила приликом покушаја приступа спремишту: %{value}" error_scm_annotate: "Ставка не постоји или не може бити означена." error_issue_not_found_in_project: 'Проблем није пронађен или не припада овом пројекту.' error_no_tracker_in_project: 'Ни једно праћење није повезано са овим пројектом. Молимо проверите подешавања пројекта.' @@ -179,26 +186,26 @@ error_workflow_copy_source: 'Молимо одаберите изворно праћење или улогу' error_workflow_copy_target: 'Молимо одаберите одредишно праћење и улогу' error_unable_delete_issue_status: 'Статус проблема је немогуће обрисати' - error_unable_to_connect: "Повезивање са ({{value}}) је немогуће" - warning_attachments_not_saved: "{{count}} датотека не може бити снимљена." + error_unable_to_connect: "Повезивање са (%{value}) је немогуће" + warning_attachments_not_saved: "%{count} датотека не може бити снимљена." - mail_subject_lost_password: "Ваша {{value}} лозинка" + mail_subject_lost_password: "Ваша %{value} лозинка" mail_body_lost_password: 'За промену ваше лозинке, кликните на следећи линк:' - mail_subject_register: "Активација вашег {{value}} налога" + mail_subject_register: "Активација вашег %{value} налога" mail_body_register: 'За активацију вашег налога, кликните на следећи линк:' - mail_body_account_information_external: "Ваш налог {{value}} можете користити за пријаву." + 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: "{{author}} је додао wiki страницу '{{id}}'." - mail_subject_wiki_content_updated: "Wiki страница '{{id}}' је ажурирана" - mail_body_wiki_content_updated: "{{author}} је ажурирао wiki страницу '{{id}}'." + 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: "%{author} је додао wiki страницу '%{id}'." + mail_subject_wiki_content_updated: "Wiki страница '%{id}' је ажурирана" + mail_body_wiki_content_updated: "%{author} је ажурирао wiki страницу '%{id}'." gui_validation_error: једна грешка - gui_validation_error_plural: "{{count}} грешака" + gui_validation_error_plural: "%{count} грешака" field_name: Назив field_description: Опис @@ -261,7 +268,8 @@ field_attr_lastname: Атрибут презимена field_attr_mail: Атрибут е-адресе field_onthefly: Креирање корисника у току рада - field_done_ratio: % урађено + field_start_date: Почетак + field_done_ratio: "% урађено" field_auth_source: Режим потврде идентитета field_hide_mail: Сакриј моју е-адресу field_comments: Коментар @@ -318,7 +326,6 @@ setting_cross_project_issue_relations: Дозволи повезивање проблема из унакрсних пројеката setting_issue_list_default_columns: Подразумеване колоне приказане на списку проблема setting_repositories_encodings: Кодирање спремишта - setting_commit_logs_encoding: Кодирање извршних порука setting_emails_footer: Подножје странице е-поруке setting_protocol: Протокол setting_per_page_options: Опције приказа објеката по страници @@ -421,14 +428,14 @@ label_x_projects: zero: нема пројеката one: један пројекат - other: "{{count}} пројеката" + 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_issues_by: "Проблеми (%{value})" label_issue_added: Проблем је додат label_issue_updated: Проблем је ажуриран label_document: Документ @@ -479,7 +486,7 @@ label_registered_on: Регистрован label_activity: Активност label_overall_activity: Целокупна активност - label_user_activity: "Активност корисника {{value}}" + label_user_activity: "Активност корисника %{value}" label_new: Ново label_logged_as: Пријављени сте као label_environment: Окружење @@ -489,7 +496,7 @@ label_auth_source_plural: Режими потврде идентитета label_subproject_plural: Потпројекти label_subproject_new: Нови потпројекат - label_and_its_subprojects: "{{value}} и његови потпројекти" + label_and_its_subprojects: "%{value} и његови потпројекти" label_min_max_length: Мин. - Макс. дужина label_list: Списак label_date: Датум @@ -500,8 +507,8 @@ label_text: Дуги текст label_attribute: Особина label_attribute_plural: Особине - label_download: "{{count}} преузимање" - label_download_plural: "{{count}} преузимања" + label_download: "%{count} преузимање" + label_download_plural: "%{count} преузимања" label_no_data: Нема података за приказивање label_change_status: Промена статуса label_history: Историја @@ -533,17 +540,17 @@ label_closed_issues: затворен label_closed_issues_plural: затворених label_x_open_issues_abbr_on_total: - zero: 0 отворених / {{total}} - one: 1 отворен / {{total}} - other: "{{count}} отворених / {{total}}" + zero: 0 отворених / %{total} + one: 1 отворен / %{total} + other: "%{count} отворених / %{total}" label_x_open_issues_abbr: zero: 0 отворених one: 1 отворен - other: "{{count}} отворених" + other: "%{count} отворених" label_x_closed_issues_abbr: zero: 0 затворених one: 1 затворен - other: "{{count}} затворених" + other: "%{count} затворених" label_total: Укупно label_permissions: Дозволе label_current_status: Тренутни статус @@ -561,7 +568,7 @@ label_months_from: месеци од label_gantt: Гантов дијаграм label_internal: Унутрашњи - label_last_changes: "последњих {{count}} промена" + label_last_changes: "последњих %{count} промена" label_change_view_all: Прикажи све промене label_personalize_page: Персонализуј ову страну label_comment: Коментар @@ -569,7 +576,7 @@ label_x_comments: zero: без коментара one: један коментар - other: "{{count}} коментара" + other: "%{count} коментара" label_comment_add: Додај коментар label_comment_added: Коментар додат label_comment_delete: Обриши коментаре @@ -590,7 +597,7 @@ label_yesterday: јуче label_this_week: ове седмице label_last_week: последње седмице - label_last_n_days: "последњих {{count}} дана" + label_last_n_days: "последњих %{count} дана" label_this_month: овог месеца label_last_month: последњег месеца label_this_year: ове године @@ -604,13 +611,13 @@ label_repository: Спремиште label_repository_plural: Спремишта label_browse: Прегледање - label_modification: "{{count}} промена" - label_modification_plural: "{{count}} промена" + label_modification: "%{count} промена" + label_modification_plural: "%{count} промена" label_branch: Грана label_tag: Ознака label_revision: Ревизија label_revision_plural: Ревизије - label_revision_id: "Ревизија {{value}}" + label_revision_id: "Ревизија %{value}" label_associated_revisions: Придружене ревизије label_added: додато label_modified: промењено @@ -627,8 +634,8 @@ label_sort_lower: Премештање на доле label_sort_lowest: Премештање на дно label_roadmap: План рада - label_roadmap_due_in: "Доспева {{value}}" - label_roadmap_overdue: "{{value}} најкасније" + label_roadmap_due_in: "Доспева %{value}" + label_roadmap_overdue: "%{value} најкасније" label_roadmap_no_issues: Нема проблема за ову верзију label_search: Претрага label_result_plural: Резултати @@ -647,8 +654,8 @@ label_issue_tracking: Праћење проблема label_spent_time: Утрошено време label_overall_spent_time: Целокупно утрошено време - label_f_hour: "{{value}} сат" - label_f_hour_plural: "{{value}} сати" + label_f_hour: "%{value} сат" + label_f_hour_plural: "%{value} сати" label_time_tracking: Праћење времена label_change_plural: Промене label_statistics: Статистика @@ -699,15 +706,15 @@ label_date_from: Шаље label_date_to: Прима label_language_based: Базирано на језику корисника - label_sort_by: "Сортирано по {{value}}" + 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_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_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: Скупови промена @@ -723,7 +730,7 @@ label_registration_activation_by_email: активација налога путем е-поруке label_registration_manual_activation: ручна активација налога label_registration_automatic_activation: аутоматска активација налога - label_display_per_page: "Број ставки по страници: {{value}}" + label_display_per_page: "Број ставки по страници: %{value}" label_age: Старост label_change_properties: Промени својства label_general: Општи @@ -746,7 +753,7 @@ label_sort: Сортирање label_ascending: Растући низ label_descending: Опадајући низ - label_date_from_to: Од {{start}} до {{end}} + label_date_from_to: Од %{start} до %{end} label_wiki_content_added: Wiki страница је додата label_wiki_content_updated: Wiki страница је ажурирана label_group: Група @@ -765,7 +772,7 @@ 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_api_access_key_created_on: "API приступни кључ је креиран пре %{value}" label_profile: Профил label_subtask_plural: Подзадатак label_project_copy_notifications: Пошаљи е-поруку са обавештењем приликом копирања пројекта @@ -828,53 +835,53 @@ text_regexp_info: нпр. ^[A-Z0-9]+$ text_min_max_length_info: 0 значи без ограничења text_project_destroy_confirmation: Јесте ли сигурни да желите да избришете овај пројекат и све припадајуће податке? - text_subprojects_destroy_warning: "Потпројекти: {{value}} ће такође бити избрисан." + text_subprojects_destroy_warning: "Потпројекти: %{value} ће такође бити избрисан." text_workflow_edit: Одаберите улогу и праћење за измену тока посла text_are_you_sure: Јесте ли сигурни? - text_journal_changed: "{{label}} промењен од {{old}} у {{new}}" - text_journal_set_to: "{{label}} постављен у {{value}}" - text_journal_deleted: "{{label}} избрисано ({{old}})" - text_journal_added: "{{label}} {{value}} додато" + 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-ш), бројеви и цртице.
    Једном снимљен идентификатор више се не може променити.' - text_caracters_maximum: "Највише {{count}} знак(ова)." - text_caracters_minimum: "Број знакова мора бити најмање {{count}}." - text_length_between: "Број знакова мора бити између {{min}} и {{max}}." + 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: "{{author}} је пријавио проблем {{id}}." - text_issue_updated: "{{author}} је ажурирао проблем {{id}}." + text_issue_added: "%{author} је пријавио проблем %{id}." + text_issue_updated: "%{author} је ажурирао проблем %{id}." text_wiki_destroy_confirmation: Јесте ли сигурни да желите да обришете wiki и сав садржај? - text_issue_category_destroy_question: "Неколико проблема ({{count}}) је додељено овој категорији. Шта желите да урадите?" + 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_status_changed_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_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_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: 'Један ред за сваку вредност' - text_wiki_page_destroy_question: "Ова страница има {{descendants}} подређених страница и подстраница. Шта желите да урадите?" + text_wiki_page_destroy_question: "Ова страница има %{descendants} подређених страница и подстраница. Шта желите да урадите?" text_wiki_page_nullify_children: "Задржи подређене странице као корене странице" text_wiki_page_destroy_children: "Избриши подређене странице и све њихове подстранице" text_wiki_page_reassign_children: "Додели поново подређене странице овој матичној страници" @@ -913,7 +920,7 @@ project_module_gantt: Гантов дијаграм project_module_calendar: Календар - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -924,8 +931,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Кодирање извршних порука + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/sv.yml --- a/config/locales/sv.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/sv.yml Mon Jul 25 14:23:37 2011 +0100 @@ -54,7 +54,7 @@ byte: one: "Byte" other: "Bytes" - kb: "KB" + kb: "kB" mb: "MB" gb: "GB" tb: "TB" @@ -65,44 +65,44 @@ half_a_minute: "en halv minut" less_than_x_seconds: one: "mindre än en sekund" - other: "mindre än {{count}} sekunder" + other: "mindre än %{count} sekunder" x_seconds: one: "en sekund" - other: "{{count}} sekunder" + other: "%{count} sekunder" less_than_x_minutes: one: "mindre än en minut" - other: "mindre än {{count}} minuter" + other: "mindre än %{count} minuter" x_minutes: one: "en minut" - other: "{{count}} minuter" + other: "%{count} minuter" about_x_hours: one: "ungefär en timme" - other: "ungefär {{count}} timmar" + other: "ungefär %{count} timmar" x_days: one: "en dag" - other: "{{count}} dagar" + other: "%{count} dagar" about_x_months: one: "ungefär en månad" - other: "ungefär {{count}} månader" + other: "ungefär %{count} månader" x_months: one: "en månad" - other: "{{count}} månader" + other: "%{count} månader" about_x_years: one: "ungefär ett år" - other: "ungefär {{count}} år" + other: "ungefär %{count} år" over_x_years: one: "mer än ett år" - other: "mer än {{count}} år" + other: "mer än %{count} år" almost_x_years: one: "nästan 1 år" - other: "nästan {{count}} år" + other: "nästan %{count} år" activerecord: errors: template: header: - one: "Ett fel förhindrade denna {{model}} från att sparas" - other: "{{count}} fel förhindrade denna {{model}} från att sparas" + one: "Ett fel förhindrade denna %{model} från att sparas" + other: "%{count} fel förhindrade denna %{model} från att sparas" # The variable :count is also available body: "Det var problem med följande fält:" # The values :model, :attribute and :value are always available for interpolation @@ -115,22 +115,22 @@ accepted : "måste vara accepterad" empty: "får ej vara tom" blank: "måste anges" - too_long: "är för lång (maximum är {{count}} tecken)" - too_short: "är för kort (minimum är {{count}} tecken)" - wrong_length: "har fel längd (ska vara {{count}} tecken)" + too_long: "är för lång (maximum är %{count} tecken)" + too_short: "är för kort (minimum är %{count} tecken)" + wrong_length: "har fel längd (ska vara %{count} tecken)" taken: "har redan tagits" not_a_number: "är inte ett nummer" - greater_than: "måste vara större än {{count}}" - greater_than_or_equal_to: "måste vara större än eller lika med {{count}}" + greater_than: "måste vara större än %{count}" + greater_than_or_equal_to: "måste vara större än eller lika med %{count}" equal_to: "måste vara samma som" - less_than: "måste vara mindre än {{count}}" - less_than_or_equal_to: "måste vara mindre än eller lika med {{count}}" + less_than: "måste vara mindre än %{count}" + less_than_or_equal_to: "måste vara mindre än eller lika med %{count}" odd: "måste vara udda" even: "måste vara jämnt" greater_than_start_date: "måste vara senare än startdatumet" not_same_project: "tillhör inte samma projekt" circular_dependency: "Denna relation skulle skapa ett cirkulärt beroende" - 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: "Ett ärende kan inte länkas till ett av dess underärenden" direction: ltr date: @@ -149,7 +149,10 @@ month_names: [~, januari, februari, mars, april, maj, juni, juli, augusti, september, oktober, november, december] abbr_month_names: [~, jan, feb, mar, apr, maj, jun, jul, aug, sep, okt, nov, dec] # Used in date_select and datime_select. - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -176,7 +179,7 @@ general_csv_separator: ',' general_csv_decimal_separator: '.' general_csv_encoding: ISO-8859-1 - general_pdf_encoding: ISO-8859-1 + general_pdf_encoding: UTF-8 general_first_day_of_week: '1' notice_account_updated: Kontot har uppdaterats @@ -196,28 +199,29 @@ notice_locking_conflict: Data har uppdaterats av en annan användare. notice_not_authorized: Du saknar behörighet att komma åt den här sidan. notice_not_authorized_archived_project: Projektet du försöker komma åt har arkiverats. - notice_email_sent: "Ett mail skickades till {{value}}" - notice_email_error: "Ett fel inträffade när mail skickades ({{value}})" + notice_email_sent: "Ett mail skickades till %{value}" + notice_email_error: "Ett fel inträffade när mail skickades (%{value})" notice_feeds_access_key_reseted: Din RSS-nyckel återställdes. notice_api_access_key_reseted: Din API-nyckel återställdes. - notice_failed_to_save_issues: "Misslyckades med att spara {{count}} ärende(n) på {{total}} valt: {{ids}}." - notice_failed_to_save_members: "Misslyckades med att spara medlem(mar): {{errors}}." + notice_failed_to_save_issues: "Misslyckades med att spara %{count} ärende(n) på %{total} valt: %{ids}." + notice_failed_to_save_members: "Misslyckades med att spara medlem(mar): %{errors}." notice_no_issue_selected: "Inget ärende är markerat! Var vänlig, markera de ärenden du vill ändra." notice_account_pending: "Ditt konto skapades och avvaktar nu administratörens godkännande." notice_default_data_loaded: Standardkonfiguration inläst. 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_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_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." - error_scm_command_failed: "Ett fel inträffade vid försök att nå versionsarkivet: {{value}}" + error_scm_command_failed: "Ett fel inträffade vid försök att nå versionsarkivet: %{value}" error_scm_annotate: "Inlägget existerar inte eller kan inte kommenteras." error_issue_not_found_in_project: 'Ärendet hittades inte eller så tillhör det inte detta projekt' 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,27 +229,27 @@ 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." + warning_attachments_not_saved: "%{count} fil(er) kunde inte sparas." - mail_subject_lost_password: "Ditt {{value}} lösenord" + mail_subject_lost_password: "Ditt %{value} lösenord" mail_body_lost_password: 'För att ändra ditt lösenord, klicka på följande länk:' - mail_subject_register: "Din {{value}} kontoaktivering" + mail_subject_register: "Din %{value} kontoaktivering" mail_body_register: 'För att aktivera ditt konto, klicka på följande länk:' - mail_body_account_information_external: "Du kan använda ditt {{value}}-konto för att logga in." + mail_body_account_information_external: "Du kan använda ditt %{value}-konto för att logga in." mail_body_account_information: Din kontoinformation - mail_subject_account_activation_request: "{{value}} begäran om kontoaktivering" - mail_body_account_activation_request: "En ny användare ({{value}}) har registrerat sig och avvaktar ditt godkännande:" - 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_subject_wiki_content_updated: "'{{id}}' wikisida har uppdaterats" - mail_body_wiki_content_updated: The '{{id}}' wikisida har uppdaterats av {{author}}. + mail_subject_account_activation_request: "%{value} begäran om kontoaktivering" + mail_body_account_activation_request: "En ny användare (%{value}) har registrerat sig och avvaktar ditt godkännande:" + 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_subject_wiki_content_updated: "'%{id}' wikisida har uppdaterats" + mail_body_wiki_content_updated: "The '%{id}' wikisida har uppdaterats av %{author}." gui_validation_error: 1 fel - gui_validation_error_plural: "{{count}} fel" + gui_validation_error_plural: "%{count} fel" field_name: Namn field_description: Beskrivning @@ -308,7 +312,8 @@ field_attr_lastname: Efternamnsattribut field_attr_mail: Mailattribut field_onthefly: Skapa användare on-the-fly - field_done_ratio: % Klart + field_start_date: Startdatum + field_done_ratio: "% Klart" field_auth_source: Autentiseringsläge field_hide_mail: Dölj min mailadress field_comments: Kommentar @@ -339,9 +344,19 @@ 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 + field_warn_on_leaving_unsaved: Varna om jag lämnar en sida med osparad text + field_issues_visibility: Ärendesynlighet + field_is_private: Privat + field_commit_logs_encoding: Teckenuppsättning för commit-meddelanden + field_scm_path_encoding: Sökvägskodning + field_path_to_repository: Sökväg till versionsarkiv + field_root_directory: Rotmapp + field_cvsroot: CVSROOT + field_cvs_module: Modul setting_app_title: Applikationsrubrik setting_app_subtitle: Applikationsunderrubrik @@ -351,14 +366,14 @@ setting_self_registration: Självregistrering setting_attachment_max_size: Maxstorlek på bilaga setting_issues_export_limit: Exportgräns för ärenden - setting_mail_from: Avsändare + setting_mail_from: Avsändaradress setting_bcc_recipients: Hemlig kopia (bcc) till mottagare setting_plain_text_mail: Oformaterad text i mail (ingen HTML) setting_host_name: Värddatornamn setting_text_formatting: Textformatering setting_wiki_compression: Komprimering av wikihistorik setting_feeds_limit: Innehållsgräns för Feed - setting_default_projects_public: Nya projekt är publika som standard + setting_default_projects_public: Nya projekt är publika setting_autofetch_changesets: Automatisk hämtning av commits setting_sys_api_enabled: Aktivera WS för versionsarkivhantering setting_commit_ref_keywords: Referens-nyckelord @@ -369,15 +384,15 @@ setting_cross_project_issue_relations: Tillåt ärenderelationer mellan projekt setting_issue_list_default_columns: Standardkolumner i ärendelistan setting_repositories_encodings: Teckenuppsättningar för versionsarkiv - setting_commit_logs_encoding: Teckenuppsättning för commit-meddelanden + setting_emails_header: Mail-header setting_emails_footer: Signatur setting_protocol: Protokoll setting_per_page_options: Alternativ, objekt per sida setting_user_format: Visningsformat för användare setting_activity_days_default: Dagar som visas på projektaktivitet - setting_display_subprojects_issues: Visa ärenden från underprojekt i huvudprojekt som standard + 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 @@ -389,7 +404,7 @@ setting_openid: Tillåt inloggning och registrering med OpenID setting_password_min_length: Minsta tillåtna lösenordslängd setting_new_project_user_role_id: Tilldelad roll för en icke-administratör som skapar ett projekt - setting_default_projects_modules: Standardaktiverade moduler för nya projekt + setting_default_projects_modules: Aktiverade moduler för nya projekt setting_issue_done_ratio: Beräkna % klart med setting_issue_done_ratio_issue_field: Använd ärendefältet setting_issue_done_ratio_issue_status: Använd ärendestatus @@ -397,6 +412,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 @@ -410,6 +428,8 @@ permission_edit_issues: Ändra ärenden permission_view_issues: Visa ärenden permission_manage_issue_relations: Hantera ärenderelationer + permission_set_issues_private: Sätta ärenden publika eller privata + permission_set_own_issues_private: Sätta egna ärenden publika eller privata permission_add_issue_notes: Lägga till ärendenotering permission_edit_issue_notes: Ändra ärendenoteringar permission_edit_own_issue_notes: Ändra egna ärendenoteringar @@ -475,16 +495,19 @@ label_x_projects: zero: inga projekt one: 1 projekt - other: "{{count}} projekt" + other: "%{count} projekt" label_project_all: Alla projekt label_project_latest: Senaste projekt label_issue: Ärende label_issue_new: Nytt ärende label_issue_plural: Ärenden label_issue_view_all: Visa alla ärenden - label_issues_by: "Ärenden {{value}}" + label_issues_by: "Ärenden %{value}" label_issue_added: Ärende tillagt label_issue_updated: Ärende uppdaterat + label_issue_note_added: Anteckning tillagd + label_issue_status_updated: Status uppdaterad + label_issue_priority_updated: Prioritet uppdaterad label_document: Dokument label_document_new: Nytt dokument label_document_plural: Dokument @@ -493,6 +516,8 @@ label_role_plural: Roller label_role_new: Ny roll label_role_and_permissions: Roller och behörigheter + label_role_anonymous: Anonym + label_role_non_member: Icke-medlem label_member: Medlem label_member_new: Ny medlem label_member_plural: Medlemmar @@ -533,7 +558,7 @@ label_registered_on: Registrerad label_activity: Aktivitet label_overall_activity: All aktivitet - label_user_activity: "Aktiviteter för {{value}}" + label_user_activity: "Aktiviteter för %{value}" label_new: Ny label_logged_as: Inloggad som label_environment: Miljö @@ -543,7 +568,7 @@ label_auth_source_plural: Autentiseringslägen label_subproject_plural: Underprojekt label_subproject_new: Nytt underprojekt - label_and_its_subprojects: "{{value}} och dess underprojekt" + label_and_its_subprojects: "%{value} och dess underprojekt" label_min_max_length: Min./Max.-längd label_list: Lista label_date: Datum @@ -554,8 +579,8 @@ label_text: Lång text label_attribute: Attribut label_attribute_plural: Attribut - label_download: "{{count}} Nerladdning" - label_download_plural: "{{count}} Nerladdningar" + label_download: "%{count} Nerladdning" + label_download_plural: "%{count} Nerladdningar" label_no_data: Ingen data att visa label_change_status: Ändra status label_history: Historia @@ -572,6 +597,7 @@ label_news_latest: Senaste nyheterna label_news_view_all: Visa alla nyheter label_news_added: Nyhet tillagd + label_news_comment_added: Kommentar tillagd till en nyhet label_settings: Inställningar label_overview: Översikt label_version: Version @@ -579,7 +605,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 @@ -587,17 +613,17 @@ label_closed_issues: stängd label_closed_issues_plural: stängda label_x_open_issues_abbr_on_total: - zero: 0 öppna av {{total}} - one: 1 öppen av {{total}} - other: "{{count}} öppna av {{total}}" + zero: 0 öppna av %{total} + one: 1 öppen av %{total} + other: "%{count} öppna av %{total}" label_x_open_issues_abbr: zero: 0 öppna one: 1 öppen - other: "{{count}} öppna" + other: "%{count} öppna" label_x_closed_issues_abbr: zero: 0 stängda one: 1 stängd - other: "{{count}} stängda" + other: "%{count} stängda" label_total: Total label_permissions: Behörigheter label_current_status: Nuvarande status @@ -615,7 +641,7 @@ label_months_from: månader från label_gantt: Gantt label_internal: Intern - label_last_changes: "senaste {{count}} ändringar" + label_last_changes: "senaste %{count} ändringar" label_change_view_all: Visa alla ändringar label_personalize_page: Anpassa denna sida label_comment: Kommentar @@ -623,13 +649,14 @@ label_x_comments: zero: inga kommentarer one: 1 kommentar - other: "{{count}} kommentarer" + other: "%{count} kommentarer" label_comment_add: Lägg till kommentar label_comment_added: Kommentar tillagd label_comment_delete: Ta bort kommentar label_query: Användardefinerad fråga label_query_plural: Användardefinerade frågor label_query_new: Ny fråga + label_my_queries: Mina egna frågor label_filter_add: Lägg till filter label_filter_plural: Filter label_equals: är @@ -644,7 +671,7 @@ label_yesterday: igår label_this_week: denna vecka label_last_week: senaste veckan - label_last_n_days: "senaste {{count}} dagarna" + label_last_n_days: "senaste %{count} dagarna" label_this_month: denna månad label_last_month: senaste månaden label_this_year: detta året @@ -658,13 +685,13 @@ label_repository: Versionsarkiv label_repository_plural: Versionsarkiv label_browse: Bläddra - label_modification: "{{count}} ändring" - label_modification_plural: "{{count}} ändringar" + label_modification: "%{count} ändring" + label_modification_plural: "%{count} ändringar" label_branch: Branch 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 @@ -681,8 +708,8 @@ label_sort_lower: Flytta ner label_sort_lowest: Flytta till botten label_roadmap: Roadmap - label_roadmap_due_in: "Färdig om {{value}}" - label_roadmap_overdue: "{{value}} sen" + label_roadmap_due_in: "Färdig om %{value}" + label_roadmap_overdue: "%{value} sen" label_roadmap_no_issues: Inga ärenden för denna version label_search: Sök label_result_plural: Resultat @@ -701,8 +728,8 @@ label_issue_tracking: Ärendeuppföljning label_spent_time: Spenderad tid label_overall_spent_time: Total tid spenderad - label_f_hour: "{{value}} timme" - label_f_hour_plural: "{{value}} timmar" + label_f_hour: "%{value} timme" + label_f_hour_plural: "%{value} timmar" label_time_tracking: Tidsuppföljning label_change_plural: Ändringar label_statistics: Statistik @@ -753,35 +780,36 @@ label_date_from: Från label_date_to: Till label_language_based: Språkbaserad - label_sort_by: "Sortera på {{value}}" + label_sort_by: "Sortera på %{value}" label_send_test_email: Skicka testmail label_feeds_access_key: RSS-nyckel label_missing_feeds_access_key: Saknar en RSS-nyckel - label_feeds_access_key_created_on: "RSS-nyckel skapad för {{value}} sedan" + label_feeds_access_key_created_on: "RSS-nyckel skapad för %{value} sedan" label_module_plural: Moduler - label_added_time_by: "Tillagd av {{author}} för {{age}} sedan" - label_updated_time_by: "Uppdaterad av {{author}} för {{age}} sedan" - label_updated_time: "Uppdaterad för {{value}} sedan" + label_added_time_by: "Tillagd av %{author} för %{age} sedan" + label_updated_time_by: "Uppdaterad av %{author} för %{age} sedan" + label_updated_time: "Uppdaterad för %{value} sedan" label_jump_to_a_project: Gå till projekt... label_file_plural: Filer label_changeset_plural: Changesets label_default_columns: Standardkolumner label_no_change_option: (Ingen ändring) label_bulk_edit_selected_issues: Gemensam ändring av markerade ärenden + label_bulk_edit_selected_time_entries: Gruppredigera valda tidloggningar label_theme: Tema label_default: Standard 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 label_registration_automatic_activation: automatisk kontoaktivering - label_display_per_page: "Per sida: {{value}}" + label_display_per_page: "Per sida: %{value}" label_age: Ålder label_change_properties: Ändra inställningar label_general: Allmänt @@ -804,7 +832,7 @@ label_sort: Sortera label_descending: Fallande label_ascending: Stigande - label_date_from_to: Från {{start}} till {{end}} + label_date_from_to: Från %{start} till %{end} label_wiki_content_added: Wikisida tillagd label_wiki_content_updated: Wikisida uppdaterad label_group: Grupp @@ -823,22 +851,32 @@ 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 + label_principal_search: "Sök efter användare eller grupp:" + label_user_search: "Sök efter användare:" + label_additional_workflow_transitions_for_author: Ytterligare övergångar tillåtna när användaren är den som skapat ärendet + label_additional_workflow_transitions_for_assignee: Ytterligare övergångar tillåtna när användaren är den som tilldelats ärendet + label_issues_visibility_all: Alla ärenden + label_issues_visibility_public: Alla icke-privata ärenden + label_issues_visibility_own: Ärenden skapade av eller tilldelade till användaren + label_git_report_last_commit: Rapportera senaste commit av filer och mappar button_login: Logga in button_submit: Skicka button_save: Spara button_check_all: Markera alla button_uncheck_all: Avmarkera alla + button_collapse_all: Kollapsa alla + button_expand_all: Expandera alla button_delete: Ta bort button_create: Skapa button_create_and_continue: Skapa och fortsätt button_test: Testa button_edit: Ändra - button_edit_associated_wikipage: "Ändra associerad Wikisida: {{page_title}}" + button_edit_associated_wikipage: "Ändra associerad Wikisida: %{page_title}" button_add: Lägg till button_change: Ändra button_apply: Verkställ @@ -887,60 +925,72 @@ text_regexp_info: eg. ^[A-Z0-9]+$ text_min_max_length_info: 0 betyder ingen gräns text_project_destroy_confirmation: Är du säker på att du vill ta bort detta projekt och all relaterad data? - text_subprojects_destroy_warning: "Alla underprojekt: {{value}} kommer också tas bort." + text_subprojects_destroy_warning: "Alla underprojekt: %{value} kommer också tas bort." text_workflow_edit: Välj en roll och en ärendetyp för att ändra arbetsflöde text_are_you_sure: Är du säker ? text_are_you_sure_with_children: Ta bort ärende och alla underärenden? - text_journal_changed: "{{label}} ändrad från {{old}} till {{new}}" - text_journal_set_to: "{{label}} satt till {{value}}" - text_journal_deleted: "{{label}} borttagen ({{old}})" - text_journal_added: "{{label}} {{value}} tillagd" - text_tip_issue_begin_day: arbetsuppgift som börjar denna dag - text_tip_issue_end_day: arbetsuppgift som slutar denna dag - text_tip_issue_begin_end_day: arbetsuppgift börjar och slutar denna dag + text_journal_changed: "%{label} ändrad från %{old} till %{new}" + text_journal_changed_no_detail: "%{label} uppdaterad" + text_journal_set_to: "%{label} satt till %{value}" + text_journal_deleted: "%{label} borttagen (%{old})" + text_journal_added: "%{label} %{value} tillagd" + text_tip_issue_begin_day: ärende som börjar denna dag + text_tip_issue_end_day: ärende som slutar denna dag + text_tip_issue_begin_end_day: ärende som börjar och slutar denna dag text_project_identifier_info: 'Små bokstäver (a-z), siffror och streck tillåtna.
    När den är sparad kan identifieraren inte ändras.' - text_caracters_maximum: "max {{count}} tecken." - text_caracters_minimum: "Måste vara minst {{count}} tecken lång." - text_length_between: "Längd mellan {{min}} och {{max}} tecken." + text_caracters_maximum: "max %{count} tecken." + text_caracters_minimum: "Måste vara minst %{count} tecken lång." + text_length_between: "Längd mellan %{min} och %{max} tecken." text_tracker_no_workflow: Inget arbetsflöde definerat för denna ärendetyp text_unallowed_characters: Otillåtna tecken text_comma_separated: Flera värden tillåtna (kommaseparerade). text_line_separated: Flera värden tillåtna (ett värde per rad). text_issues_ref_in_commit_messages: Referera och fixa ärenden i commit-meddelanden - text_issue_added: "Ärende {{id}} har rapporterats (av {{author}})." - text_issue_updated: "Ärende {{id}} har uppdaterats (av {{author}})." + text_issue_added: "Ärende %{id} har rapporterats (av %{author})." + text_issue_updated: "Ärende %{id} har uppdaterats (av %{author})." text_wiki_destroy_confirmation: Är du säker på att du vill ta bort denna wiki och allt dess innehåll ? - text_issue_category_destroy_question: "Några ärenden ({{count}}) är tilldelade till denna kategori. Vad vill du göra ?" + text_issue_category_destroy_question: "Några ärenden (%{count}) är tilldelade till denna kategori. Vad vill du göra ?" text_issue_category_destroy_assignments: Ta bort kategoritilldelningar text_issue_category_reassign_to: Återtilldela ärenden till denna kategori text_user_mail_option: "För omarkerade projekt kommer du bara bli underrättad om saker du bevakar eller är inblandad i (T.ex. ärenden du skapat eller tilldelats)." 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_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_issues_destroy_descendants_confirmation: Detta kommer även ta bort %{count} underaktivitet(er). + text_time_entries_destroy_confirmation: Är du säker på att du vill ta bort valda tidloggningar? text_select_project_modules: 'Välj vilka moduler som ska vara aktiva för projektet:' text_default_administrator_account_changed: Standardadministratörens konto ändrat text_file_repository_writable: Arkivet för bifogade filer är skrivbart text_plugin_assets_writable: Arkivet för plug-ins är skrivbart text_rmagick_available: RMagick tillgängligt (ej obligatoriskt) - text_destroy_time_entries_question: "{{hours}} timmar har rapporterats på ärendena du är på väg att ta bort. Vad vill du göra ?" + text_destroy_time_entries_question: "%{hours} timmar har rapporterats på ärendena du är på väg att ta bort. Vad vill du göra ?" text_destroy_time_entries: Ta bort rapporterade timmar text_assign_time_entries_to_project: Tilldela rapporterade timmar till projektet text_reassign_time_entries: 'Återtilldela rapporterade timmar till detta ärende:' - text_user_wrote: "{{value}} skrev:" - text_enumeration_destroy_question: "{{count}} objekt är tilldelade till detta värde." + 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_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 emailadress i både Redmine och versionsarkivet mappas automatiskt." + 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 + text_warn_on_leaving_unsaved: Nuvarande sida innehåller osparad text som kommer försvinna om du lämnar sidan. + text_scm_path_encoding_note: "Standard: UTF-8" + text_git_repository_note: Naket och lokalt versionsarkiv (t.ex. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Lokalt versionsarkiv (t.ex. /hgrepo, c:\hgrepo) + text_scm_command: Kommando + text_scm_command_version: Version + text_scm_config: Du kan konfigurera dina scm-kommando i config/configuration.yml. Vänligen starta om applikationen när ändringar gjorts. + text_scm_command_not_available: Scm-kommando är inte tillgängligt. Vänligen kontrollera inställningarna i administratörspanelen. default_role_manager: Projektledare default_role_developer: Utvecklare @@ -968,8 +1018,3 @@ enumeration_doc_categories: Dokumentkategorier enumeration_activities: Aktiviteter (tidsuppföljning) enumeration_system_activity: Systemaktivitet - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/th.yml --- a/config/locales/th.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/th.yml Mon Jul 25 14:23:37 2011 +0100 @@ -16,7 +16,10 @@ 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 ] + order: + - :year + - :month + - :day time: formats: @@ -32,37 +35,37 @@ half_a_minute: "half a minute" less_than_x_seconds: one: "less than 1 second" - other: "less than {{count}} seconds" + other: "less than %{count} seconds" x_seconds: one: "1 second" - other: "{{count}} seconds" + other: "%{count} seconds" less_than_x_minutes: one: "less than a minute" - other: "less than {{count}} minutes" + other: "less than %{count} minutes" x_minutes: one: "1 minute" - other: "{{count}} minutes" + other: "%{count} minutes" about_x_hours: one: "about 1 hour" - other: "about {{count}} hours" + other: "about %{count} hours" x_days: one: "1 day" - other: "{{count}} days" + other: "%{count} days" about_x_months: one: "about 1 month" - other: "about {{count}} months" + other: "about %{count} months" x_months: one: "1 month" - other: "{{count}} months" + other: "%{count} months" about_x_years: one: "about 1 year" - other: "about {{count}} years" + other: "about %{count} years" over_x_years: one: "over 1 year" - other: "over {{count}} years" + other: "over %{count} years" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" number: format: @@ -92,6 +95,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "ไม่อยู่ในรายการ" exclusion: "ถูกสงวนไว้" @@ -106,11 +113,11 @@ taken: "ถูกใช้ไปแล้ว" not_a_number: "ไม่ใช่ตัวเลข" not_a_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}}" + 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: "ต้องมากกว่าวันเริ่ม" @@ -147,31 +154,31 @@ notice_file_not_found: หน้าที่คุณต้องการดูไม่มีอยู่จริง หรือถูกลบไปแล้ว. notice_locking_conflict: ข้อมูลถูกปรับปรุงโดยผู้ใช้คนอื่น. notice_not_authorized: คุณไม่มีสิทธิเข้าถึงหน้านี้. - notice_email_sent: "อีเมล์ได้ถูกส่งถึง {{value}}" - notice_email_error: "เกิดความผิดพลาดขณะกำส่งอีเมล์ ({{value}})" + notice_email_sent: "อีเมล์ได้ถูกส่งถึง %{value}" + notice_email_error: "เกิดความผิดพลาดขณะกำส่งอีเมล์ (%{value})" notice_feeds_access_key_reseted: RSS access key ของคุณถูก reset แล้ว. - notice_failed_to_save_issues: "{{count}} ปัญหาจาก {{total}} ปัญหาที่ถูกเลือกไม่สามารถจัดเก็บ: {{ids}}." + notice_failed_to_save_issues: "%{count} ปัญหาจาก %{total} ปัญหาที่ถูกเลือกไม่สามารถจัดเก็บ: %{ids}." notice_no_issue_selected: "ไม่มีปัญหาที่ถูกเลือก! กรุณาเลือกปัญหาที่คุณต้องการแก้ไข." notice_account_pending: "บัญชีของคุณสร้างเสร็จแล้ว ขณะนี้รอการอนุมัติจากผู้บริหารจัดการ." notice_default_data_loaded: ค่าเริ่มต้นโหลดเสร็จแล้ว. - error_can_t_load_default_data: "ค่าเริ่มต้นโหลดไม่สำเร็จ: {{value}}" + error_can_t_load_default_data: "ค่าเริ่มต้นโหลดไม่สำเร็จ: %{value}" error_scm_not_found: "ไม่พบรุ่นที่ต้องการในแหล่งเก็บต้นฉบับ." - error_scm_command_failed: "เกิดความผิดพลาดในการเข้าถึงแหล่งเก็บต้นฉบับ: {{value}}" + error_scm_command_failed: "เกิดความผิดพลาดในการเข้าถึงแหล่งเก็บต้นฉบับ: %{value}" error_scm_annotate: "entry ไม่มีอยู่จริง หรือไม่สามารถเขียนหมายเหตุประกอบ." error_issue_not_found_in_project: 'ไม่พบปัญหานี้ หรือปัญหาไม่ได้อยู่ในโครงการนี้' - mail_subject_lost_password: "รหัสผ่าน {{value}} ของคุณ" + mail_subject_lost_password: "รหัสผ่าน %{value} ของคุณ" mail_body_lost_password: 'คลิ๊กที่ลิงค์ต่อไปนี้เพื่อเปลี่ยนรหัสผ่าน:' - mail_subject_register: "เปิดบัญชี {{value}} ของคุณ" + mail_subject_register: "เปิดบัญชี %{value} ของคุณ" mail_body_register: 'คลิ๊กที่ลิงค์ต่อไปนี้เพื่อเปลี่ยนรหัสผ่าน:' - mail_body_account_information_external: "คุณสามารถใช้บัญชี {{value}} เพื่อเข้าสู่ระบบ." + mail_body_account_information_external: "คุณสามารถใช้บัญชี %{value} เพื่อเข้าสู่ระบบ." mail_body_account_information: ข้อมูลบัญชีของคุณ - mail_subject_account_activation_request: "กรุณาเปิดบัญชี {{value}}" - mail_body_account_activation_request: "ผู้ใช้ใหม่ ({{value}}) ได้ลงทะเบียน. บัญชีของเขากำลังรออนุมัติ:" + mail_subject_account_activation_request: "กรุณาเปิดบัญชี %{value}" + mail_body_account_activation_request: "ผู้ใช้ใหม่ (%{value}) ได้ลงทะเบียน. บัญชีของเขากำลังรออนุมัติ:" gui_validation_error: 1 ข้อผิดพลาด - gui_validation_error_plural: "{{count}} ข้อผิดพลาด" + gui_validation_error_plural: "%{count} ข้อผิดพลาด" field_name: ชื่อ field_description: รายละเอียด @@ -233,7 +240,8 @@ field_attr_lastname: นามสกุล attribute field_attr_mail: อีเมล์ attribute field_onthefly: สร้างผู้ใช้ทันที - field_done_ratio: % สำเร็จ + field_start_date: เริ่ม + field_done_ratio: "% สำเร็จ" field_auth_source: วิธีการยืนยันตัวตน field_hide_mail: ซ่อนอีเมล์ของฉัน field_comments: ความเห็น @@ -306,14 +314,14 @@ label_x_projects: zero: no projects one: 1 project - other: "{{count}} projects" + other: "%{count} projects" label_project_all: โครงการทั้งหมด label_project_latest: โครงการล่าสุด label_issue: ปัญหา label_issue_new: ปัญหาใหม่ label_issue_plural: ปัญหา label_issue_view_all: ดูปัญหาทั้งหมด - label_issues_by: "ปัญหาโดย {{value}}" + label_issues_by: "ปัญหาโดย %{value}" label_issue_added: ปัญหาถูกเพิ่ม label_issue_updated: ปัญหาถูกปรับปรุง label_document: เอกสาร @@ -382,8 +390,8 @@ label_text: ข้อความขนาดยาว label_attribute: คุณลักษณะ label_attribute_plural: คุณลักษณะ - label_download: "{{count}} ดาวน์โหลด" - label_download_plural: "{{count}} ดาวน์โหลด" + label_download: "%{count} ดาวน์โหลด" + label_download_plural: "%{count} ดาวน์โหลด" label_no_data: จำนวนข้อมูลที่แสดง label_change_status: เปลี่ยนสถานะ label_history: ประวัติ @@ -414,17 +422,17 @@ label_closed_issues: ปิด label_closed_issues_plural: ปิด label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{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" + other: "%{count} open" label_x_closed_issues_abbr: zero: 0 closed one: 1 closed - other: "{{count}} closed" + other: "%{count} closed" label_total: จำนวนรวม label_permissions: สิทธิ label_current_status: สถานะปัจจุบัน @@ -442,7 +450,7 @@ label_months_from: เดือนจาก label_gantt: Gantt label_internal: ภายใน - label_last_changes: "last {{count}} เปลี่ยนแปลง" + label_last_changes: "last %{count} เปลี่ยนแปลง" label_change_view_all: ดูการเปลี่ยนแปลงทั้งหมด label_personalize_page: ปรับแต่งหน้านี้ label_comment: ความเห็น @@ -450,7 +458,7 @@ label_x_comments: zero: no comments one: 1 comment - other: "{{count}} comments" + other: "%{count} comments" label_comment_add: เพิ่มความเห็น label_comment_added: ความเห็นถูกเพิ่ม label_comment_delete: ลบความเห็น @@ -469,7 +477,7 @@ label_yesterday: เมื่อวาน label_this_week: อาทิตย์นี้ label_last_week: อาทิตย์ที่แล้ว - label_last_n_days: "{{count}} วันย้อนหลัง" + label_last_n_days: "%{count} วันย้อนหลัง" label_this_month: เดือนนี้ label_last_month: เดือนที่แล้ว label_this_year: ปีนี้ @@ -483,8 +491,8 @@ label_repository: ที่เก็บต้นฉบับ label_repository_plural: ที่เก็บต้นฉบับ label_browse: เปิดหา - label_modification: "{{count}} เปลี่ยนแปลง" - label_modification_plural: "{{count}} เปลี่ยนแปลง" + label_modification: "%{count} เปลี่ยนแปลง" + label_modification_plural: "%{count} เปลี่ยนแปลง" label_revision: การแก้ไข label_revision_plural: การแก้ไข label_associated_revisions: การแก้ไขที่เกี่ยวข้อง @@ -500,8 +508,8 @@ label_sort_lower: ย้ายลง label_sort_lowest: ย้ายไปล่างสุด label_roadmap: แผนงาน - label_roadmap_due_in: "ถึงกำหนดใน {{value}}" - label_roadmap_overdue: "{{value}} ช้ากว่ากำหนด" + label_roadmap_due_in: "ถึงกำหนดใน %{value}" + label_roadmap_overdue: "%{value} ช้ากว่ากำหนด" label_roadmap_no_issues: ไม่มีปัญหาสำหรับรุ่นนี้ label_search: ค้นหา label_result_plural: ผลการค้นหา @@ -519,8 +527,8 @@ label_changes_details: รายละเอียดการเปลี่ยนแปลงทั้งหมด label_issue_tracking: ติดตามปัญหา label_spent_time: เวลาที่ใช้ - label_f_hour: "{{value}} ชั่วโมง" - label_f_hour_plural: "{{value}} ชั่วโมง" + label_f_hour: "%{value} ชั่วโมง" + label_f_hour_plural: "%{value} ชั่วโมง" label_time_tracking: ติดตามการใช้เวลา label_change_plural: เปลี่ยนแปลง label_statistics: สถิติ @@ -568,12 +576,12 @@ label_date_from: จาก label_date_to: ถึง label_language_based: ขึ้นอยู่กับภาษาของผู้ใช้ - label_sort_by: "เรียงโดย {{value}}" + label_sort_by: "เรียงโดย %{value}" label_send_test_email: ส่งจดหมายทดสอบ - label_feeds_access_key_created_on: "RSS access key สร้างเมื่อ {{value}} ที่ผ่านมา" + label_feeds_access_key_created_on: "RSS access key สร้างเมื่อ %{value} ที่ผ่านมา" label_module_plural: ส่วนประกอบ - label_added_time_by: "เพิ่มโดย {{author}} {{age}} ที่ผ่านมา" - label_updated_time: "ปรับปรุง {{value}} ที่ผ่านมา" + label_added_time_by: "เพิ่มโดย %{author} %{age} ที่ผ่านมา" + label_updated_time: "ปรับปรุง %{value} ที่ผ่านมา" label_jump_to_a_project: ไปที่โครงการ... label_file_plural: แฟ้ม label_changeset_plural: กลุ่มการเปลี่ยนแปลง @@ -589,7 +597,7 @@ label_registration_activation_by_email: เปิดบัญชีผ่านอีเมล์ label_registration_manual_activation: อนุมัติโดยผู้บริหารจัดการ label_registration_automatic_activation: เปิดบัญชีอัตโนมัติ - label_display_per_page: "ต่อหน้า: {{value}}" + label_display_per_page: "ต่อหน้า: %{value}" label_age: อายุ label_change_properties: เปลี่ยนคุณสมบัติ label_general: ทั่วๆ ไป @@ -651,36 +659,36 @@ text_regexp_info: ตัวอย่าง ^[A-Z0-9]+$ text_min_max_length_info: 0 หมายถึงไม่จำกัด text_project_destroy_confirmation: คุณแน่ใจไหมว่าต้องการลบโครงการและข้อมูลที่เกี่ยวข้่อง ? - text_subprojects_destroy_warning: "โครงการย่อย: {{value}} จะถูกลบด้วย." + text_subprojects_destroy_warning: "โครงการย่อย: %{value} จะถูกลบด้วย." text_workflow_edit: เลือกบทบาทและการติดตาม เพื่อแก้ไขลำดับงาน text_are_you_sure: คุณแน่ใจไหม ? text_tip_issue_begin_day: งานที่เริ่มวันนี้ text_tip_issue_end_day: งานที่จบวันนี้ text_tip_issue_begin_end_day: งานที่เริ่มและจบวันนี้ text_project_identifier_info: 'ภาษาอังกฤษตัวเล็ก(a-z), ตัวเลข(0-9) และขีด (-) เท่านั้น.
    เมื่อจัดเก็บแล้ว, ชื่อเฉพาะไม่สามารถเปลี่ยนแปลงได้' - text_caracters_maximum: "สูงสุด {{count}} ตัวอักษร." - text_caracters_minimum: "ต้องยาวอย่างน้อย {{count}} ตัวอักษร." - text_length_between: "ความยาวระหว่าง {{min}} ถึง {{max}} ตัวอักษร." + text_caracters_maximum: "สูงสุด %{count} ตัวอักษร." + text_caracters_minimum: "ต้องยาวอย่างน้อย %{count} ตัวอักษร." + text_length_between: "ความยาวระหว่าง %{min} ถึง %{max} ตัวอักษร." text_tracker_no_workflow: ไม่ได้บัญญัติลำดับงานสำหรับการติดตามนี้ text_unallowed_characters: ตัวอักษรต้องห้าม text_comma_separated: ใส่ได้หลายค่า โดยคั่นด้วยลูกน้ำ( ,). text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages - text_issue_added: "ปัญหา {{id}} ถูกแจ้งโดย {{author}}." - text_issue_updated: "ปัญหา {{id}} ถูกปรับปรุงโดย {{author}}." + text_issue_added: "ปัญหา %{id} ถูกแจ้งโดย %{author}." + text_issue_updated: "ปัญหา %{id} ถูกปรับปรุงโดย %{author}." text_wiki_destroy_confirmation: คุณแน่ใจหรือว่าต้องการลบ wiki นี้พร้อมทั้งเนี้อหา? - text_issue_category_destroy_question: "บางปัญหา ({{count}}) อยู่ในประเภทนี้. คุณต้องการทำอย่างไร ?" + 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_status_changed_by_changeset: "ประยุกต์ใช้ในกลุ่มการเปลี่ยนแปลง %{value}." text_issues_destroy_confirmation: 'คุณแน่ใจไหมว่าต้องการลบปัญหา(ทั้งหลาย)ที่เลือกไว้?' text_select_project_modules: 'เลือกส่วนประกอบที่ต้องการใช้งานสำหรับโครงการนี้:' text_default_administrator_account_changed: ค่าเริ่มต้นของบัญชีผู้บริหารจัดการถูกเปลี่ยนแปลง text_file_repository_writable: ที่เก็บต้นฉบับสามารถเขียนได้ text_rmagick_available: RMagick มีให้ใช้ (เป็นตัวเลือก) - text_destroy_time_entries_question: "{{hours}} ชั่วโมงที่ถูกแจ้งในปัญหานี้จะโดนลบ. คุณต้องการทำอย่างไร?" + text_destroy_time_entries_question: "%{hours} ชั่วโมงที่ถูกแจ้งในปัญหานี้จะโดนลบ. คุณต้องการทำอย่างไร?" text_destroy_time_entries: ลบเวลาที่รายงานไว้ text_assign_time_entries_to_project: ระบุเวลาที่ใช้ในโครงการนี้ text_reassign_time_entries: 'ระบุเวลาที่ใช้ในโครงการนี่อีกครั้ง:' @@ -710,22 +718,21 @@ enumeration_issue_priorities: ความสำคัญของปัญหา enumeration_doc_categories: ประเภทเอกสาร enumeration_activities: กิจกรรม (ใช้ในการติดตามเวลา) - label_and_its_subprojects: "{{value}} and its subprojects" - mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:" - mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days" - text_user_wrote: "{{value}} wrote:" + label_and_its_subprojects: "%{value} and its subprojects" + mail_body_reminder: "%{count} issue(s) that are assigned to you are due in the next %{days} days:" + mail_subject_reminder: "%{count} issue(s) due in the next %{days} days" + text_user_wrote: "%{value} wrote:" label_duplicated_by: duplicated by setting_enabled_scm: Enabled SCM text_enumeration_category_reassign_to: 'Reassign them to this value:' - text_enumeration_destroy_question: "{{count}} objects are assigned to this value." + text_enumeration_destroy_question: "%{count} objects are assigned to this value." label_incoming_emails: Incoming emails 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 button_quote: Quote setting_sequential_project_identifiers: Generate sequential project identifiers notice_unable_delete_version: Unable to delete version @@ -783,12 +790,12 @@ 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: Edit own messages permission_delete_own_messages: Delete own messages - label_user_activity: "{{value}}'s activity" - label_updated_time_by: "Updated by {{author}} {{age}} ago" + label_user_activity: "%{value}'s activity" + label_updated_time_by: "Updated by %{author} %{age} ago" text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' setting_diff_max_lines_displayed: Max number of diff lines displayed text_plugin_assets_writable: Plugin assets directory writable - warning_attachments_not_saved: "{{count}} file(s) could not be saved." + warning_attachments_not_saved: "%{count} file(s) could not be saved." button_create_and_continue: Create and continue text_custom_field_possible_values_info: 'One line for each value' label_display: Display @@ -803,21 +810,21 @@ label_descending: Descending label_sort: Sort label_ascending: Ascending - label_date_from_to: From {{start}} to {{end}} + label_date_from_to: From %{start} to %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? + text_wiki_page_destroy_question: This page has %{descendants} child page(s) and descendant(s). What do you want to do? text_wiki_page_reassign_children: Reassign child pages to this parent page text_wiki_page_nullify_children: Keep child pages as root pages text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated" label_wiki_content_added: Wiki page added - 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_added: "'%{id}' wiki page has been added" + mail_body_wiki_content_added: The '%{id}' wiki page has been added by %{author}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '%{id}' wiki page has been updated by %{author}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -825,14 +832,14 @@ label_branch: Branch 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"). - 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_changed: "%{label} changed from %{old} to %{new}" + text_journal_set_to: "%{label} set to %{value}" + text_journal_deleted: "%{label} deleted (%{old})" label_group_plural: Groups label_group: Group label_group_new: New group label_time_entry_plural: Spent time - text_journal_added: "{{label}} {{value}} added" + text_journal_added: "%{label} %{value} added" field_active: Active enumeration_system_activity: System Activity permission_delete_issue_watchers: Delete watchers @@ -867,9 +874,9 @@ setting_start_of_week: Start calendars on permission_view_issues: View Issues label_display_used_statuses_only: Only display statuses that are used by this tracker - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_api_access_key: API access key - label_api_access_key_created_on: API access key created {{value}} ago + label_api_access_key_created_on: API access key created %{value} ago label_feeds_access_key: RSS access key notice_api_access_key_reseted: Your API access key was reset. setting_rest_api_enabled: Enable REST web service @@ -896,12 +903,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -909,7 +916,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -920,8 +927,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Commit messages encoding + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/tr.yml --- a/config/locales/tr.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/tr.yml Mon Jul 25 14:23:37 2011 +0100 @@ -1,5 +1,6 @@ -# Turkish translations for Ruby on Rails +# Turkish translations for Ruby on Rails # by Ozgun Ataman (ozataman@gmail.com) +# by Burak Yigit Kaya (ben@byk.im) tr: locale: @@ -18,8 +19,11 @@ abbr_day_names: [Pzr, Pzt, Sal, Çrş, Prş, Cum, Cts] month_names: [~, Ocak, Şubat, Mart, Nisan, Mayıs, Haziran, Temmuz, Ağustos, Eylül, Ekim, Kasım, Aralık] abbr_month_names: [~, Oca, Şub, Mar, Nis, May, Haz, Tem, Ağu, Eyl, Eki, Kas, Ara] - order: [ :day, :month, :year ] - + order: + - :day + - :month + - :year + time: formats: default: "%a %d.%b.%y %H:%M" @@ -30,46 +34,46 @@ am: "öğleden önce" pm: "öğleden sonra" - + datetime: distance_in_words: half_a_minute: 'yarım dakika' less_than_x_seconds: zero: '1 saniyeden az' one: '1 saniyeden az' - other: '{{count}} saniyeden az' + other: '%{count} saniyeden az' x_seconds: one: '1 saniye' - other: '{{count}} saniye' + other: '%{count} saniye' less_than_x_minutes: zero: '1 dakikadan az' one: '1 dakikadan az' - other: '{{count}} dakikadan az' + other: '%{count} dakikadan az' x_minutes: one: '1 dakika' - other: '{{count}} dakika' + other: '%{count} dakika' about_x_hours: - one: '1 saat civarında' - other: '{{count}} saat civarında' + one: 'yaklaşık 1 saat' + other: 'yaklaşık %{count} saat' x_days: one: '1 gün' - other: '{{count}} gün' + other: '%{count} gün' about_x_months: - one: '1 ay civarında' - other: '{{count}} ay civarında' + one: 'yaklaşık 1 ay' + other: 'yaklaşık %{count} ay' x_months: one: '1 ay' - other: '{{count}} ay' + other: '%{count} ay' about_x_years: - one: '1 yıl civarında' - other: '{{count}} yıl civarında' + one: 'yaklaşık 1 yıl' + other: 'yaklaşık %{count} yıl' over_x_years: one: '1 yıldan fazla' - other: '{{count}} yıldan fazla' + other: '%{count} yıldan fazla' almost_x_years: - one: "almost 1 year" - other: "almost {{count}} years" - + one: "neredeyse 1 Yıl" + other: "neredeyse %{count} yıl" + number: format: precision: 2 @@ -101,7 +105,7 @@ units: byte: one: "Byte" - other: "Bytes" + other: "Byte" kb: "KB" mb: "MB" gb: "GB" @@ -111,13 +115,13 @@ array: sentence_connector: "ve" skip_last_comma: true - + activerecord: errors: template: header: - one: "{{model}} girişi kaydedilemedi: 1 hata." - other: "{{model}} girişi kadedilemedi: {{count}} hata." + one: "%{model} girişi kaydedilemedi: 1 hata." + other: "%{model} girişi kadedilemedi: %{count} hata." body: "Lütfen aşağıdaki hataları düzeltiniz:" messages: @@ -128,36 +132,36 @@ accepted: "kabul edilmeli" empty: "doldurulmalı" blank: "doldurulmalı" - too_long: "çok uzun (en fazla {{count}} karakter)" - too_short: "çok kısa (en az {{count}} karakter)" - wrong_length: "yanlış uzunlukta (tam olarak {{count}} karakter olmalı)" + too_long: "çok uzun (en fazla %{count} karakter)" + too_short: "çok kısa (en az %{count} karakter)" + wrong_length: "yanlış uzunlukta (tam olarak %{count} karakter olmalı)" taken: "hali hazırda kullanılmakta" not_a_number: "geçerli bir sayı değil" - greater_than: "{{count}} sayısından büyük olmalı" - greater_than_or_equal_to: "{{count}} sayısına eşit veya büyük olmalı" - equal_to: "tam olarak {{count}} olmalı" - less_than: "{{count}} sayısından küçük olmalı" - less_than_or_equal_to: "{{count}} sayısına eşit veya küçük olmalı" + greater_than: "%{count} sayısından büyük olmalı" + greater_than_or_equal_to: "%{count} sayısına eşit veya büyük olmalı" + equal_to: "tam olarak %{count} olmalı" + less_than: "%{count} sayısından küçük olmalı" + less_than_or_equal_to: "%{count} sayısına eşit veya küçük olmalı" odd: "tek olmalı" even: "çift olmalı" greater_than_start_date: "başlangıç tarihinden büyük olmalı" not_same_project: "aynı projeye ait değil" circular_dependency: "Bu ilişki döngüsel bağımlılık meydana getirecektir" - 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: "Bir iş, alt işlerinden birine bağlanamaz" models: - + actionview_instancetag_blank_option: Lütfen Seçin - + general_text_No: 'Hayır' general_text_Yes: 'Evet' general_text_no: 'hayır' general_text_yes: 'evet' general_lang_name: 'Türkçe' general_csv_separator: ',' - general_csv_encoding: ISO-8859-1 - general_pdf_encoding: ISO-8859-1 + general_csv_encoding: ISO-8859-9 + general_pdf_encoding: UTF-8 general_first_day_of_week: '7' - + notice_account_updated: Hesap başarıyla güncelleştirildi. notice_account_invalid_creditentials: Geçersiz kullanıcı ya da parola notice_account_password_updated: Parola başarıyla güncellendi. @@ -174,34 +178,34 @@ notice_file_not_found: Erişmek istediğiniz sayfa mevcut değil ya da kaldırılmış. notice_locking_conflict: Veri başka bir kullanıcı tarafından güncellendi. notice_not_authorized: Bu sayfaya erişme yetkiniz yok. - notice_email_sent: "E-posta gönderildi {{value}}" - notice_email_error: "E-posta gönderilirken bir hata oluştu ({{value}})" + notice_email_sent: "E-posta gönderildi %{value}" + notice_email_error: "E-posta gönderilirken bir hata oluştu (%{value})" notice_feeds_access_key_reseted: RSS erişim anahtarınız sıfırlandı. - notice_failed_to_save_issues: "Failed to save {{count}} issue(s) on {{total}} selected: {{ids}}." - notice_no_issue_selected: "Seçili ileti yok! Lütfen, düzenlemek istediğiniz iletileri işaretleyin." + notice_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}." + notice_no_issue_selected: "Seçili iş yok! Lütfen, düzenlemek istediğiniz işleri işaretleyin." notice_account_pending: "Hesabınız oluşturuldu ve yönetici onayı bekliyor." notice_default_data_loaded: Varasayılan konfigürasyon başarılıyla yüklendi. - - error_can_t_load_default_data: "Varsayılan konfigürasyon yüklenemedi: {{value}}" - error_scm_not_found: "Depoda, giriş ya da revizyon yok." - error_scm_command_failed: "Depoya erişmeye çalışırken bir hata meydana geldi: {{value}}" + + error_can_t_load_default_data: "Varsayılan konfigürasyon yüklenemedi: %{value}" + error_scm_not_found: "Depoda, giriş ya da değişiklik yok." + error_scm_command_failed: "Depoya erişmeye çalışırken bir hata meydana geldi: %{value}" error_scm_annotate: "Giriş mevcut değil veya izah edilemedi." - error_issue_not_found_in_project: 'İleti bilgisi bulunamadı veya bu projeye ait değil' - - mail_subject_lost_password: "Parolanız {{value}}" + error_issue_not_found_in_project: 'İş bilgisi bulunamadı veya bu projeye ait değil' + + mail_subject_lost_password: "Parolanız %{value}" mail_body_lost_password: 'Parolanızı değiştirmek için, aşağıdaki bağlantıya tıklayın:' - mail_subject_register: "Your {{value}} hesap aktivasyonu" + mail_subject_register: "%{value} hesap aktivasyonu" mail_body_register: 'Hesabınızı etkinleştirmek için, aşağıdaki bağlantıya tıklayın:' - mail_body_account_information_external: "Hesabınızı {{value}} giriş yapmak için kullanabilirsiniz." + mail_body_account_information_external: "Hesabınızı %{value} giriş yapmak için kullanabilirsiniz." mail_body_account_information: Hesap bilgileriniz - mail_subject_account_activation_request: "{{value}} hesabı etkinleştirme isteği" - mail_body_account_activation_request: "Yeni bir kullanıcı ({{value}}) kaydedildi. Hesap onaylanmayı bekliyor:" - + mail_subject_account_activation_request: "%{value} hesabı etkinleştirme isteği" + mail_body_account_activation_request: "Yeni bir kullanıcı (%{value}) kaydedildi. Hesap onaylanmayı bekliyor:" + gui_validation_error: 1 hata - gui_validation_error_plural: "{{count}} hata" - + gui_validation_error_plural: "%{count} hata" + field_name: İsim - field_description: Açıklama + field_description: Yorum field_summary: Özet field_is_required: Gerekli field_firstname: Ad @@ -211,11 +215,11 @@ field_filesize: Boyut field_downloads: İndirilenler field_author: Yazar - field_created_on: Oluşturuldu - field_updated_on: Güncellendi + field_created_on: Oluşturulma + field_updated_on: Güncellenme field_field_format: Biçim field_is_for_all: Tüm projeler için - field_possible_values: Mümkün değerler + field_possible_values: Kullanılabilir değerler field_regexp: Düzenli ifadeler field_min_length: En az uzunluk field_max_length: En çok uzunluk @@ -223,23 +227,23 @@ field_category: Kategori field_title: Başlık field_project: Proje - field_issue: İleti + field_issue: İş field_status: Durum field_notes: Notlar - field_is_closed: İleti kapatıldı + field_is_closed: İş kapatıldı field_is_default: Varsayılan Değer - field_tracker: Takipçi + field_tracker: İş tipi field_subject: Konu field_due_date: Bitiş Tarihi field_assigned_to: Atanan field_priority: Öncelik - field_fixed_version: Hedef Version + field_fixed_version: Hedef Sürüm field_user: Kullanıcı field_role: Rol field_homepage: Anasayfa field_is_public: Genel field_parent: 'Üst proje: ' - field_is_in_roadmap: Yol haritasında gösterilen iletiler + field_is_in_roadmap: Yol haritasında gösterilen işler field_login: Giriş field_mail_notification: E-posta uyarıları field_admin: Yönetici @@ -249,7 +253,7 @@ field_password: Parola field_new_password: Yeni Parola field_password_confirmation: Onay - field_version: Versiyon + field_version: Sürüm field_type: Tip field_host: Host field_port: Port @@ -260,37 +264,38 @@ field_attr_lastname: Soyad Niteliği field_attr_mail: E-Posta Niteliği field_onthefly: Anında kullanıcı oluşturma - field_done_ratio: % tamamlandı + field_start_date: Başlangıç Tarihi + field_done_ratio: Tamamlanma yüzdesi field_auth_source: Kimlik Denetim Modu field_hide_mail: E-posta adresimi gizle - field_comments: Açıklama + field_comments: Yorumlar field_url: URL field_start_page: Başlangıç Sayfası field_subproject: Alt Proje - field_hours: Saatler - field_activity: Faaliyet + field_hours: Saat + field_activity: Etkinlik field_spent_on: Tarih field_identifier: Tanımlayıcı field_is_filter: filtre olarak kullanılmış - field_issue_to: İlişkili ileti + field_issue_to: İlişkili iş field_delay: Gecikme - field_assignable: Bu role atanabilecek iletiler - field_redirect_existing_links: Mevcut bağlantıları tekrar yönlendir + field_assignable: Bu role atanabilecek işler + field_redirect_existing_links: Mevcut bağlantıları yönlendir field_estimated_hours: Kalan zaman field_column_names: Sütunlar field_time_zone: Saat dilimi field_searchable: Aranabilir field_default_value: Varsayılan değer - field_comments_sorting: Açıklamaları göster - + field_comments_sorting: Yorumları göster + setting_app_title: Uygulama Bağlığı setting_app_subtitle: Uygulama alt başlığı setting_welcome_text: Hoşgeldin Mesajı setting_default_language: Varsayılan Dil setting_login_required: Kimlik denetimi gerekli mi setting_self_registration: Otomatik kayıt - setting_attachment_max_size: Maksimum Ek boyutu - setting_issues_export_limit: İletilerin dışa aktarılma sınırı + setting_attachment_max_size: Maksimum ek boyutu + setting_issues_export_limit: İşlerin dışa aktarılma sınırı setting_mail_from: Gönderici e-posta adresi setting_bcc_recipients: Alıcıları birbirinden gizle (bcc) setting_host_name: Host adı @@ -305,17 +310,17 @@ setting_autologin: Otomatik Giriş setting_date_format: Tarih Formati setting_time_format: Zaman Formatı - setting_cross_project_issue_relations: Çapraz-Proje ileti ilişkilendirmesine izin ver - setting_issue_list_default_columns: İleti listesinde gösterilen varsayılan sütunlar + setting_cross_project_issue_relations: Çapraz-Proje iş ilişkilendirmesine izin ver + setting_issue_list_default_columns: İş listesinde gösterilen varsayılan sütunlar setting_repositories_encodings: Depo dil kodlaması setting_emails_footer: E-posta dip not setting_protocol: Protokol - setting_per_page_options: Sayfa seçenekleri başına nesneler - setting_user_format: Kullanıcı gösterim formatı - setting_activity_days_default: Proje Faaliyetlerinde gösterilen gün sayısı - setting_display_subprojects_issues: Varsayılan olarak ana projenin ileti listesinde alt proje iletilerini göster - - project_module_issue_tracking: İleti Takibi + setting_per_page_options: Sayfada başına öğe sayısı + setting_user_format: Kullanıcı gösterim biçimi + setting_activity_days_default: Proje etkinliklerinde gösterilen gün sayısı + setting_display_subprojects_issues: Varsayılan olarak ana projenin iş listesinde alt proje işlerini göster + + project_module_issue_tracking: İş Takibi project_module_time_tracking: Zaman Takibi project_module_news: Haberler project_module_documents: Belgeler @@ -323,7 +328,7 @@ project_module_wiki: Wiki project_module_repository: Depo project_module_boards: Tartışma Alanı - + label_user: Kullanıcı label_user_plural: Kullanıcılar label_user_new: Yeni Kullanıcı @@ -331,18 +336,18 @@ label_project_new: Yeni proje label_project_plural: Projeler label_x_projects: - zero: no projects - one: 1 project - other: "{{count}} projects" + zero: hiç proje yok + one: 1 proje + other: "%{count} proje" label_project_all: Tüm Projeler label_project_latest: En son projeler - label_issue: İleti - label_issue_new: Yeni İleti - label_issue_plural: İletiler - label_issue_view_all: Tüm iletileri izle - label_issues_by: "{{value}} tarafından gönderilmiş iletiler" - label_issue_added: İleti eklendi - label_issue_updated: İleti güncellendi + label_issue: İş + label_issue_new: Yeni İş + label_issue_plural: İşler + label_issue_view_all: Tüm işleri izle + label_issues_by: "%{value} tarafından gönderilmiş işler" + label_issue_added: İş eklendi + label_issue_updated: İş güncellendi label_document: Belge label_document_new: Yeni belge label_document_plural: Belgeler @@ -354,15 +359,15 @@ label_member: Üye label_member_new: Yeni üye label_member_plural: Üyeler - label_tracker: Takipçi - label_tracker_plural: Takipçiler - label_tracker_new: Yeni takipçi + label_tracker: İş tipi + label_tracker_plural: İş tipleri + label_tracker_new: Yeni iş tipi label_workflow: İş akışı - label_issue_status: İleti durumu - label_issue_status_plural: İleti durumuları + label_issue_status: İş durumu + label_issue_status_plural: İş durumuları label_issue_status_new: Yeni durum - label_issue_category: İleti kategorisi - label_issue_category_plural: İleti kategorileri + label_issue_category: İş kategorisi + label_issue_category_plural: İş kategorileri label_issue_category_new: Yeni kategori label_custom_field: Özel alan label_custom_field_plural: Özel alanlar @@ -373,22 +378,22 @@ label_information_plural: Bilgi label_please_login: Lütfen giriş yapın label_register: Kayıt - label_password_lost: Parolamı unuttum? + label_password_lost: Parolamı unuttum label_home: Anasayfa label_home_heading: Anasayfa label_my_page: Kişisel Sayfam label_my_account: Hesabım label_my_projects: Projelerim label_administration: Yönetim - label_login: Gir + label_login: Giriş label_logout: Çıkış label_help: Yardım - label_reported_issues: Rapor edilmiş iletiler - label_assigned_to_me_issues: Bana atanmış iletiler + label_reported_issues: Rapor edilmiş işler + label_assigned_to_me_issues: Bana atanmış işler label_last_login: Son bağlantı - label_registered_on: Kayıtlı - label_activity: Faaliyet - label_overall_activity: Tüm aktiviteler + label_registered_on: Kayıt tarihi + label_activity: Etkinlik + label_overall_activity: Tüm etkinlikler label_new: Yeni label_logged_as: "Kullanıcı :" label_environment: Çevre @@ -401,14 +406,14 @@ label_list: Liste label_date: Tarih label_integer: Tam sayı - label_float: Noktalı sayı - label_boolean: Boolean + label_float: Ondalıklı sayı + label_boolean: "Evet/Hayır" label_string: Metin label_text: Uzun Metin label_attribute: Nitelik label_attribute_plural: Nitelikler - label_download: "{{count}} indirilen" - label_download_plural: "{{count}} indirilen" + label_download: "%{count} indirme" + label_download_plural: "%{count} indirme" label_no_data: Gösterilecek veri yok label_change_status: Değişim Durumu label_history: Geçmiş @@ -427,29 +432,29 @@ label_news_added: Haber eklendi label_settings: Ayarlar label_overview: Genel - label_version: Versiyon - label_version_new: Yeni versiyon - label_version_plural: Versiyonlar + label_version: Sürüm + label_version_new: Yeni sürüm + label_version_plural: Sürümler label_confirmation: Doğrulamama - label_export_to: 'Diğer uygun kaynaklar:' - label_read: Oku... + label_export_to: "Diğer uygun kaynaklar:" + label_read: "Oku..." label_public_projects: Genel Projeler label_open_issues: açık label_open_issues_plural: açık label_closed_issues: kapalı label_closed_issues_plural: kapalı label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{total}}" + zero: tamamı kapalı, toplam %{total} + one: 1'i' açık, toplam %{total} + other: "%{count} açık, toplam %{total}" label_x_open_issues_abbr: - zero: 0 open - one: 1 open - other: "{{count}} open" + zero: hiç açık yok + one: 1 açık + other: "%{count} açık" label_x_closed_issues_abbr: - zero: 0 closed - one: 1 closed - other: "{{count}} closed" + zero: hiç kapalı yok + one: 1 kapalı + other: "%{count} kapalı" label_total: Toplam label_permissions: İzinler label_current_status: Mevcut Durum @@ -460,25 +465,25 @@ label_next: Sonraki label_previous: Önceki label_used_by: 'Kullanan: ' - label_details: Detaylar - label_add_note: Bir not ekle + label_details: Ayrıntılar + label_add_note: Not ekle label_per_page: Sayfa başına label_calendar: Takvim - label_months_from: aylardan itibaren - label_gantt: Gantt + label_months_from: ay öncesinden itibaren + label_gantt: İş-Zaman Çizelgesi label_internal: Dahili - label_last_changes: "Son {{count}} değişiklik" + label_last_changes: "Son %{count} değişiklik" label_change_view_all: Tüm Değişiklikleri gör label_personalize_page: Bu sayfayı kişiselleştir - label_comment: Açıklama - label_comment_plural: Açıklamalar + label_comment: Yorum + label_comment_plural: Yorumlar label_x_comments: - zero: no comments - one: 1 comment - other: "{{count}} comments" - label_comment_add: Açıklama Ekle - label_comment_added: Açıklama Eklendi - label_comment_delete: Açıklamaları sil + zero: hiç yorum yok + one: 1 yorum + other: "%{count} yorum" + label_comment_add: Yorum Ekle + label_comment_added: Yorum Eklendi + label_comment_delete: Yorumları sil label_query: Özel Sorgu label_query_plural: Özel Sorgular label_query_new: Yeni Sorgu @@ -494,7 +499,7 @@ label_yesterday: Dün label_this_week: Bu hafta label_last_week: Geçen hafta - label_last_n_days: "Son {{count}} gün" + label_last_n_days: "Son %{count} gün" label_this_month: Bu ay label_last_month: Geçen ay label_this_year: Bu yıl @@ -507,27 +512,27 @@ label_day_plural: Günler label_repository: Depo label_repository_plural: Depolar - label_browse: Tara - label_modification: "{{count}} değişim" - label_modification_plural: "{{count}} değişim" - label_revision: Revizyon - label_revision_plural: Revizyonlar - label_associated_revisions: Birleştirilmiş revizyonlar + label_browse: Gözat + label_modification: "%{count} değişim" + label_modification_plural: "%{count} değişim" + label_revision: Değişiklik + label_revision_plural: Değişiklikler + label_associated_revisions: Birleştirilmiş değişiklikler label_added: eklendi label_modified: güncellendi label_deleted: silindi - label_latest_revision: En son revizyon - label_latest_revision_plural: En son revizyonlar - label_view_revisions: Revizyonları izle + label_latest_revision: En son değişiklik + label_latest_revision_plural: En son değişiklikler + label_view_revisions: Değişiklikleri izle label_max_size: En büyük boyut label_sort_highest: Üste taşı label_sort_higher: Yukarı taşı label_sort_lower: Aşağı taşı label_sort_lowest: Dibe taşı label_roadmap: Yol Haritası - label_roadmap_due_in: "Due in {{value}}" - label_roadmap_overdue: "{{value}} geç" - label_roadmap_no_issues: Bu versiyon için ileti yok + label_roadmap_due_in: "%{value} içinde bitmeli" + label_roadmap_overdue: "%{value} geç" + label_roadmap_no_issues: Bu sürüm için iş yok label_search: Ara label_result_plural: Sonuçlar label_all_words: Tüm Kelimeler @@ -538,14 +543,14 @@ label_wiki_page_plural: Wiki sayfaları label_index_by_title: Başlığa göre diz label_index_by_date: Tarihe göre diz - label_current_version: Güncel versiyon + label_current_version: Güncel sürüm label_preview: Önizleme label_feed_plural: Beslemeler label_changes_details: Bütün değişikliklerin detayları - label_issue_tracking: İleti Takibi + label_issue_tracking: İş Takibi label_spent_time: Harcanan zaman - label_f_hour: "{{value}} saat" - label_f_hour_plural: "{{value}} saat" + label_f_hour: "%{value} saat" + label_f_hour_plural: "%{value} saat" label_time_tracking: Zaman Takibi label_change_plural: Değişiklikler label_statistics: İstatistikler @@ -557,9 +562,9 @@ label_options: Tercihler label_copy_workflow_from: İşakışı kopyala label_permissions_report: İzin raporu - label_watched_issues: İzlenmiş iletiler - label_related_issues: İlişkili iletiler - label_applied_status: uygulanmış iletiler + label_watched_issues: İzlenmiş işler + label_related_issues: İlişkili işler + label_applied_status: uygulanmış işler label_loading: Yükleniyor... label_relation_new: Yeni ilişki label_relation_delete: İlişkiyi sil @@ -575,7 +580,7 @@ label_start_to_end: baştan sona label_stay_logged_in: Sürekli bağlı kal label_disabled: Devredışı - label_show_completed_versions: Tamamlanmış versiyonları göster + label_show_completed_versions: Tamamlanmış sürümleri göster label_me: Ben label_board: Tartışma Alanı label_board_new: Yeni alan @@ -592,34 +597,34 @@ label_week: Hafta label_date_from: Başlangıç label_date_to: Bitiş - label_language_based: Kullanıcı diline istinaden - label_sort_by: "{{value}} göre sırala" + label_language_based: Kullanıcı dili bazlı + label_sort_by: "%{value} göre sırala" label_send_test_email: Test e-postası gönder - label_feeds_access_key_created_on: "RSS erişim anahtarı {{value}} önce oluşturuldu" + label_feeds_access_key_created_on: "RSS erişim anahtarı %{value} önce oluşturuldu" label_module_plural: Modüller - label_added_time_by: "{{author}} tarafından {{age}} önce eklendi" - label_updated_time: "{{value}} önce güncellendi" + label_added_time_by: "%{author} tarafından %{age} önce eklendi" + label_updated_time: "%{value} önce güncellendi" label_jump_to_a_project: Projeye git... label_file_plural: Dosyalar label_changeset_plural: Değişiklik Listeleri label_default_columns: Varsayılan Sütunlar label_no_change_option: (Değişiklik yok) - label_bulk_edit_selected_issues: Seçili iletileri toplu düzenle + label_bulk_edit_selected_issues: Seçili işleri toplu olarak düzenle label_theme: Tema label_default: Varsayılan label_search_titles_only: Sadece başlıkları ara label_user_mail_option_all: "Tüm projelerimdeki herhangi bir olay için" - label_user_mail_option_selected: "Sadece seçili projelerdeki herhangi bir olay için..." + label_user_mail_option_selected: "Sadece seçili projelerdeki herhangi bir olay için" label_user_mail_no_self_notified: "Kendi yaptığım değişikliklerden haberdar olmak istemiyorum" label_registration_activation_by_email: e-posta ile hesap etkinleştirme label_registration_manual_activation: Elle hesap etkinleştirme label_registration_automatic_activation: Otomatik hesap etkinleştirme - label_display_per_page: "Sayfa başına: {{value}}" + label_display_per_page: "Sayfa başına: %{value}" label_age: Yaş label_change_properties: Özellikleri değiştir label_general: Genel label_more: Daha fazla - label_scm: KKY + label_scm: KY label_plugins: Eklentiler label_ldap_authentication: LDAP Denetimi label_downloads_abbr: D/L @@ -629,7 +634,7 @@ label_chronological_order: Tarih sırasına göre label_reverse_chronological_order: Ters tarih sırasına göre label_planning: Planlanıyor - + button_login: Giriş button_submit: Gönder button_save: Kaydet @@ -653,8 +658,8 @@ button_cancel: İptal button_activate: Etkinleştir button_sort: Sırala - button_log_time: Günlük zamanı - button_rollback: Bu versiyone geri al + button_log_time: Zaman kaydı + button_rollback: Bu sürüme geri al button_watch: İzle button_unwatch: İzlemeyi iptal et button_reply: Cevapla @@ -664,63 +669,63 @@ button_rename: Yeniden adlandır button_change_password: Parolayı değiştir button_copy: Kopyala - button_annotate: Revizyon geçmişine göre göster + button_annotate: Değişiklik geçmişine göre göster button_update: Güncelle button_configure: Yapılandır - + status_active: faal status_registered: kayıtlı status_locked: kilitli - + text_select_mail_notifications: Gönderilecek e-posta uyarısına göre hareketi seçin. - text_regexp_info: eg. ^[A-Z0-9]+$ + text_regexp_info: örn. ^[A-Z0-9]+$ text_min_max_length_info: 0 sınırlama yok demektir text_project_destroy_confirmation: Bu projeyi ve bağlantılı verileri silmek istediğinizden emin misiniz? - text_subprojects_destroy_warning: "Ayrıca {{value}} alt proje silinecek." - text_workflow_edit: İşakışını düzenlemek için bir rol ve takipçi seçin + text_subprojects_destroy_warning: "Ayrıca %{value} alt proje silinecek." + text_workflow_edit: İşakışını düzenlemek için bir rol ve iş tipi seçin text_are_you_sure: Emin misiniz ? text_tip_issue_begin_day: Bugün başlayan görevler text_tip_issue_end_day: Bugün sona eren görevler text_tip_issue_begin_end_day: Bugün başlayan ve sona eren görevler text_project_identifier_info: 'Küçük harfler (a-z), sayılar ve noktalar kabul edilir.
    Bir kere kaydedildiğinde,tanımlayıcı değiştirilemez.' - text_caracters_maximum: "En çok {{count}} karakter." - text_caracters_minimum: "En az {{count}} karakter uzunluğunda olmalı." - text_length_between: "{{min}} ve {{max}} karakterleri arasındaki uzunluk." - text_tracker_no_workflow: Bu takipçi için işakışı tanımlanmamış + text_caracters_maximum: "En çok %{count} karakter." + text_caracters_minimum: "En az %{count} karakter uzunluğunda olmalı." + text_length_between: "%{min} ve %{max} karakterleri arasındaki uzunluk." + text_tracker_no_workflow: Bu iş tipi için işakışı tanımlanmamış text_unallowed_characters: Yasaklı karakterler - text_comma_separated: Çoklu değer uygundur(Virgül ile ayrılmış). - text_issues_ref_in_commit_messages: Teslim mesajlarındaki iletileri çözme ve başvuruda bulunma - text_issue_added: "İleti {{id}}, {{author}} tarafından rapor edildi." - text_issue_updated: "İleti {{id}}, {{author}} tarafından güncellendi." + text_comma_separated: Çoklu değer girilebilir(Virgül ile ayrılmış). + text_issues_ref_in_commit_messages: Teslim mesajlarındaki işleri çözme ve başvuruda bulunma + text_issue_added: "İş %{id}, %{author} tarafından rapor edildi." + text_issue_updated: "İş %{id}, %{author} tarafından güncellendi." text_wiki_destroy_confirmation: bu wikiyi ve tüm içeriğini silmek istediğinizden emin misiniz? - text_issue_category_destroy_question: "Bazı iletiler ({{count}}) bu kategoriye atandı. Ne yapmak istersiniz?" + text_issue_category_destroy_question: "Bazı işler (%{count}) bu kategoriye atandı. Ne yapmak istersiniz?" text_issue_category_destroy_assignments: Kategori atamalarını kaldır - text_issue_category_reassign_to: İletileri bu kategoriye tekrar ata - text_user_mail_option: "Seçili olmayan projeler için, sadece dahil olduğunuz ya da izlediğiniz öğeler hakkında uyarılar alacaksınız (örneğin,yazarı veya atandığınız iletiler)." - text_no_configuration_data: "Roller, takipçiler, ileti durumları ve işakışı henüz yapılandırılmadı.\nVarsayılan yapılandırılmanın yüklenmesi şiddetle tavsiye edilir. Bir kez yüklendiğinde yapılandırmayı değiştirebileceksiniz." + text_issue_category_reassign_to: İşleri bu kategoriye tekrar ata + text_user_mail_option: "Seçili olmayan projeler için, sadece dahil olduğunuz ya da izlediğiniz öğeler hakkında uyarılar alacaksınız (örneğin,yazarı veya atandığınız işler)." + text_no_configuration_data: "Roller, iş tipleri, iş durumları ve işakışı henüz yapılandırılmadı.\nVarsayılan yapılandırılmanın yüklenmesi şiddetle tavsiye edilir. Bir kez yüklendiğinde yapılandırmayı değiştirebileceksiniz." text_load_default_configuration: Varsayılan yapılandırmayı yükle - text_status_changed_by_changeset: "Değişiklik listesi {{value}} içinde uygulandı." - text_issues_destroy_confirmation: 'Seçili iletileri silmek istediğinizden emin misiniz ?' + text_status_changed_by_changeset: "Değişiklik listesi %{value} içinde uygulandı." + text_issues_destroy_confirmation: 'Seçili işleri silmek istediğinizden emin misiniz ?' text_select_project_modules: 'Bu proje için etkinleştirmek istediğiniz modülleri seçin:' text_default_administrator_account_changed: Varsayılan yönetici hesabı değişti text_file_repository_writable: Dosya deposu yazılabilir text_rmagick_available: RMagick Kullanılabilir (isteğe bağlı) - text_destroy_time_entries_question: Silmek üzere olduğunuz iletiler üzerine {{hours}} saat raporlandı.Ne yapmak istersiniz ? - text_destroy_time_entries: Raporlanmış saatleri sil - text_assign_time_entries_to_project: Raporlanmış saatleri projeye ata - text_reassign_time_entries: 'Raporlanmış saatleri bu iletiye tekrar ata:' - + text_destroy_time_entries_question: Silmek üzere olduğunuz işler üzerine %{hours} saat raporlandı.Ne yapmak istersiniz ? + text_destroy_time_entries: Raporlanmış süreleri sil + text_assign_time_entries_to_project: Raporlanmış süreleri projeye ata + text_reassign_time_entries: 'Raporlanmış süreleri bu işe tekrar ata:' + default_role_manager: Yönetici default_role_developer: Geliştirici default_role_reporter: Raporlayıcı default_tracker_bug: Hata - default_tracker_feature: ÖZellik + default_tracker_feature: Özellik default_tracker_support: Destek default_issue_status_new: Yeni - default_issue_status_in_progress: In Progress + default_issue_status_in_progress: Yapılıyor default_issue_status_resolved: Çözüldü default_issue_status_feedback: Geribildirim - default_issue_status_closed: Kapatıldı + default_issue_status_closed: "Kapatıldı" default_issue_status_rejected: Reddedildi default_doc_category_user: Kullanıcı Dökümantasyonu default_doc_category_tech: Teknik Dökümantasyon @@ -730,224 +735,264 @@ default_priority_urgent: Acil default_priority_immediate: Derhal default_activity_design: Tasarım - default_activity_development: Geliştirim - - enumeration_issue_priorities: İleti önceliği + default_activity_development: Geliştirme + + enumeration_issue_priorities: İş önceliği enumeration_doc_categories: Belge Kategorileri enumeration_activities: Faaliyetler (zaman takibi) - button_quote: Quote - setting_enabled_scm: Enabled SCM - label_incoming_emails: Incoming emails - 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_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:" - label_duplicated_by: duplicated by - text_enumeration_destroy_question: "{{count}} objects are assigned to this value." - text_user_wrote: "{{value}} wrote:" - setting_mail_handler_api_enabled: Enable WS for incoming emails - label_and_its_subprojects: "{{value}} and its subprojects" - mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days" - setting_mail_handler_api_key: API key - setting_commit_logs_encoding: Commit messages encoding + button_quote: Alıntı + setting_enabled_scm: KKY Açık + label_incoming_emails: "Gelen e-postalar" + label_generate_key: "Anahtar oluştur" + setting_sequential_project_identifiers: "Sıralı proje tanımlayıcıları oluştur" + field_parent_title: Üst sayfa + 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: 'Hepsini şuna çevir:' + label_issue_watchers: Takipçiler + mail_body_reminder: "Size atanmış olan %{count} iş %{days} gün içerisinde bitirilmeli:" + label_duplicated_by: yineleyen + text_enumeration_destroy_question: "Bu nesneye %{count} değer bağlanmış." + text_user_wrote: "%{value} demiş ki:" + setting_mail_handler_api_enabled: Gelen e-postalar için WS'yi aç + label_and_its_subprojects: "%{value} ve alt projeleri" + mail_subject_reminder: "%{count} iş bir kaç güne bitecek" + setting_mail_handler_api_key: API anahtarı + setting_commit_logs_encoding: Gönderim mesajlarının kodlaması (UTF-8 vs.) general_csv_decimal_separator: '.' - notice_unable_delete_version: Unable to delete version - label_renamed: renamed - label_copied: copied - setting_plain_text_mail: plain text only (no HTML) - permission_view_files: View files - permission_edit_issues: Edit issues - permission_edit_own_time_entries: Edit own time logs - permission_manage_public_queries: Manage public queries - permission_add_issues: Add issues - permission_log_time: Log spent time - permission_view_changesets: View changesets - permission_view_time_entries: View spent time - permission_manage_versions: Manage versions - permission_manage_wiki: Manage wiki - permission_manage_categories: Manage issue categories - permission_protect_wiki_pages: Protect wiki pages - permission_comment_news: Comment news - permission_delete_messages: Delete messages - permission_select_project_modules: Select project modules - permission_manage_documents: Manage documents - permission_edit_wiki_pages: Edit wiki pages - permission_add_issue_watchers: Add watchers - permission_view_gantt: View gantt chart - permission_move_issues: Move issues - permission_manage_issue_relations: Manage issue relations - permission_delete_wiki_pages: Delete wiki pages - permission_manage_boards: Manage boards - permission_delete_wiki_pages_attachments: Delete attachments - permission_view_wiki_edits: View wiki history - permission_add_messages: Post messages - permission_view_messages: View messages - permission_manage_files: Manage files - permission_edit_issue_notes: Edit notes - permission_manage_news: Manage news - permission_view_calendar: View calendrier - permission_manage_members: Manage members - permission_edit_messages: Edit messages - permission_delete_issues: Delete issues - permission_view_issue_watchers: View watchers list - permission_manage_repository: Manage repository - permission_commit_access: Commit access - permission_browse_repository: Browse repository - permission_view_documents: View documents - permission_edit_project: Edit project - permission_add_issue_notes: Add notes - permission_save_queries: Save queries - permission_view_wiki_pages: View wiki - permission_rename_wiki_pages: Rename wiki pages - permission_edit_time_entries: Edit time logs - permission_edit_own_issue_notes: Edit own notes - setting_gravatar_enabled: Use Gravatar user icons - label_example: Example + notice_unable_delete_version: Sürüm silinemiyor + label_renamed: yeniden adlandırılmış + label_copied: kopyalanmış + setting_plain_text_mail: sadece düz metin (HTML yok) + permission_view_files: Dosyaları görme + permission_edit_issues: İşleri düzenleme + permission_edit_own_time_entries: Kendi zaman girişlerini düzenleme + permission_manage_public_queries: Herkese açık sorguları yönetme + permission_add_issues: İş ekleme + permission_log_time: Harcanan zamanı kaydetme + permission_view_changesets: Değişimleri görme(SVN, vs.) + permission_view_time_entries: Harcanan zamanı görme + permission_manage_versions: Sürümleri yönetme + permission_manage_wiki: Wiki'yi yönetme + permission_manage_categories: İş kategorilerini yönetme + permission_protect_wiki_pages: Wiki sayfalarını korumaya alma + permission_comment_news: Haberlere yorum yapma + permission_delete_messages: Mesaj silme + permission_select_project_modules: Proje modüllerini seçme + permission_manage_documents: Belgeleri yönetme + permission_edit_wiki_pages: Wiki sayfalarını düzenleme + permission_add_issue_watchers: Takipçi ekleme + permission_view_gantt: İş-Zaman çizelgesi görme + permission_move_issues: İşlerin yerini değiştirme + permission_manage_issue_relations: İşlerin biribiriyle bağlantılarını yönetme + permission_delete_wiki_pages: Wiki sayfalarını silme + permission_manage_boards: Panoları yönetme + permission_delete_wiki_pages_attachments: Ekleri silme + permission_view_wiki_edits: Wiki geçmişini görme + permission_add_messages: Mesaj gönderme + permission_view_messages: Mesajları görme + permission_manage_files: Dosyaları yönetme + permission_edit_issue_notes: Notları düzenleme + permission_manage_news: Haberleri yönetme + permission_view_calendar: Takvimleri görme + permission_manage_members: Üyeleri yönetme + permission_edit_messages: Mesajları düzenleme + permission_delete_issues: İşleri silme + permission_view_issue_watchers: Takipçi listesini görme + permission_manage_repository: Depo yönetimi + permission_commit_access: Gönderme erişimi + permission_browse_repository: Depoya gözatma + permission_view_documents: Belgeleri görme + permission_edit_project: Projeyi düzenleme + permission_add_issue_notes: Not ekleme + permission_save_queries: Sorgu kaydetme + permission_view_wiki_pages: Wiki görme + permission_rename_wiki_pages: Wiki sayfasının adını değiştirme + permission_edit_time_entries: Zaman kayıtlarını düzenleme + permission_edit_own_issue_notes: Kendi notlarını düzenleme + setting_gravatar_enabled: Kullanıcı resimleri için Gravatar kullan + label_example: Örnek 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: Edit own messages - permission_delete_own_messages: Delete own messages - label_user_activity: "{{value}}'s activity" - label_updated_time_by: "Updated by {{author}} {{age}} ago" - text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' - setting_diff_max_lines_displayed: Max number of diff lines displayed - text_plugin_assets_writable: Plugin assets directory writable - warning_attachments_not_saved: "{{count}} file(s) could not be saved." - button_create_and_continue: Create and continue - text_custom_field_possible_values_info: 'One line for each value' - label_display: Display - field_editable: Editable - setting_repository_log_display_limit: Maximum number of revisions displayed on file log - setting_file_max_size_displayed: Max size of text files displayed inline - field_watcher: Watcher - setting_openid: Allow OpenID login and registration + permission_edit_own_messages: Kendi mesajlarını düzenleme + permission_delete_own_messages: Kendi mesajlarını silme + label_user_activity: "%{value} kullanıcısının etkinlikleri" + label_updated_time_by: "%{author} tarafından %{age} önce güncellendi" + text_diff_truncated: '... Bu fark tam olarak gösterilemiyor çünkü gösterim için ayarlanmış üst sınırı aşıyor.' + setting_diff_max_lines_displayed: Gösterilebilecek maksimumu fark satırı + text_plugin_assets_writable: Eklenti yardımcı dosya dizini yazılabilir + warning_attachments_not_saved: "%{count} adet dosya kaydedilemedi." + button_create_and_continue: Oluştur ve devam et + text_custom_field_possible_values_info: 'Her değer için bir satır' + label_display: Göster + field_editable: Düzenlenebilir + setting_repository_log_display_limit: Dosya kaydında gösterilecek maksimum değişim sayısı + setting_file_max_size_displayed: Dahili olarak gösterilecek metin dosyaları için maksimum satır sayısı + field_watcher: Takipçi + setting_openid: Kayıt ve giriş için OpenID'ye izin ver field_identity_url: OpenID URL - label_login_with_open_id_option: or login with OpenID - field_content: Content - label_descending: Descending - label_sort: Sort - label_ascending: Ascending - label_date_from_to: From {{start}} to {{end}} + label_login_with_open_id_option: veya OpenID kullanın + field_content: İçerik + label_descending: Azalan + label_sort: Sırala + label_ascending: Artan + label_date_from_to: "%{start} - %{end} arası" label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? - text_wiki_page_reassign_children: Reassign child pages to this parent page - text_wiki_page_nullify_children: Keep child pages as root pages - text_wiki_page_destroy_children: Delete child pages and all their descendants - setting_password_min_length: Minimum password length - field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" - label_wiki_content_added: Wiki page added - 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}}. - label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. - permission_add_project: Create project - setting_new_project_user_role_id: Role given to a non-admin user who creates a project - label_view_all_revisions: View all revisions - label_tag: Tag - label_branch: Branch - 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"). - label_group_plural: Groups - label_group: Group - label_group_new: New group - label_time_entry_plural: Spent time - 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" - field_active: Active - enumeration_system_activity: System Activity - permission_delete_issue_watchers: Delete watchers - version_status_closed: closed - version_status_locked: locked - version_status_open: open - error_can_not_reopen_issue_on_closed_version: An issue assigned to a closed version can not be reopened - label_user_anonymous: Anonymous - button_move_and_follow: Move and follow - setting_default_projects_modules: Default enabled modules for new projects - setting_gravatar_default: Default Gravatar image - field_sharing: Sharing - label_version_sharing_hierarchy: With project hierarchy - label_version_sharing_system: With all projects - label_version_sharing_descendants: With subprojects - label_version_sharing_tree: With project tree - label_version_sharing_none: Not shared - error_can_not_archive_project: This project can not be archived - button_duplicate: Duplicate - button_copy_and_follow: Copy and follow - label_copy_source: Source - setting_issue_done_ratio: Calculate the issue done ratio with - setting_issue_done_ratio_issue_status: Use the issue status - error_issue_done_ratios_not_updated: Issue done ratios not updated. - error_workflow_copy_target: Please select target tracker(s) and role(s) - setting_issue_done_ratio_issue_field: Use the issue field - label_copy_same_as_target: Same as target - label_copy_target: Target - notice_issue_done_ratios_updated: Issue done ratios updated. - error_workflow_copy_source: Please select a source tracker or role - label_update_issue_done_ratios: Update issue done ratios - setting_start_of_week: Start calendars on - permission_view_issues: View Issues - label_display_used_statuses_only: Only display statuses that are used by this tracker - label_revision_id: Revision {{value}} - label_api_access_key: API access key - label_api_access_key_created_on: API access key created {{value}} ago - label_feeds_access_key: RSS access key - notice_api_access_key_reseted: Your API access key was reset. - setting_rest_api_enabled: Enable REST web service - label_missing_api_access_key: Missing an API access key - label_missing_feeds_access_key: Missing a RSS access key - button_show: Show - text_line_separated: Multiple values allowed (one line for each value). - setting_mail_handler_body_delimiters: Truncate emails after one of these lines - permission_add_subprojects: Create subprojects - label_subproject_new: New subproject - 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. - Are you sure you want to continue? - label_close_versions: Close completed versions - label_board_sticky: Sticky - label_board_locked: Locked - permission_export_wiki_pages: Export wiki pages - setting_cache_formatted_text: Cache formatted text - permission_manage_project_activities: Manage project activities - error_unable_delete_issue_status: Unable to delete issue status - label_profile: Profile - permission_manage_subtasks: Manage subtasks - field_parent_issue: Parent task - label_subtask_plural: Subtasks - label_project_copy_notifications: Send email notifications during the project copy - error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) - error_can_not_remove_role: This role is in use and can not be deleted. - error_can_not_delete_tracker: This tracker contains issues and can't be deleted. - 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 - 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. - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header + text_wiki_page_destroy_question: Bu sayfanın %{descendants} adet alt sayfası var. Ne yapmak istersiniz? + text_wiki_page_reassign_children: Alt sayfaları bu sayfanın altına bağla + text_wiki_page_nullify_children: Alt sayfaları ana sayfa olarak sakla + text_wiki_page_destroy_children: Alt sayfaları ve onların alt sayfalarını tamamen sil + setting_password_min_length: Minimum parola uzunluğu + field_group_by: Sonuçları grupla + mail_subject_wiki_content_updated: "'%{id}' wiki sayfası güncellendi" + label_wiki_content_added: Wiki sayfası eklendi + mail_subject_wiki_content_added: "'%{id}' wiki sayfası eklendi" + mail_body_wiki_content_added: "'%{id}' wiki sayfası, %{author} tarafından eklendi." + label_wiki_content_updated: Wiki sayfası güncellendi + mail_body_wiki_content_updated: "'%{id}' wiki sayfası, %{author} tarafından güncellendi." + permission_add_project: Proje oluştur + setting_new_project_user_role_id: Yönetici olmayan ancak proje yaratabilen kullanıcıya verilen rol + label_view_all_revisions: Tüm değişiklikleri gör + label_tag: Etiket + label_branch: Kol + error_no_tracker_in_project: Bu projeye bağlanmış bir iş tipi yok. Lütfen proje ayarlarını kontrol edin. + error_no_default_issue_status: Varsayılan iş durumu tanımlanmamış. Lütfen ayarlarınızı kontrol edin ("Yönetim -> İş durumları" sayfasına gidin). + label_group_plural: Gruplar + label_group: Grup + label_group_new: Yeni grup + label_time_entry_plural: Harcanan zaman + text_journal_changed: "%{label}: %{old} -> %{new}" + text_journal_set_to: "%{label} %{value} yapıldı" + text_journal_deleted: "%{label} silindi (%{old})" + text_journal_added: "%{label} %{value} eklendi" + field_active: Etkin + enumeration_system_activity: Sistem Etkinlikleri + permission_delete_issue_watchers: İzleyicileri sil + version_status_closed: kapalı + version_status_locked: kilitli + version_status_open: açık + error_can_not_reopen_issue_on_closed_version: Kapatılmış bir sürüme ait işler tekrar açılamaz + label_user_anonymous: Anonim + button_move_and_follow: Yerini değiştir ve takip et + setting_default_projects_modules: Yeni projeler için varsayılan modüller + setting_gravatar_default: Varsayılan Gravatar resmi + field_sharing: Paylaşım + label_version_sharing_hierarchy: Proje hiyerarşisi ile + label_version_sharing_system: Tüm projeler ile + label_version_sharing_descendants: Alt projeler ile + label_version_sharing_tree: Proje ağacı ile + label_version_sharing_none: Paylaşılmamış + error_can_not_archive_project: Bu proje arşivlenemez + button_duplicate: Yinele + button_copy_and_follow: Kopyala ve takip et + label_copy_source: Kaynak + setting_issue_done_ratio: İş tamamlanma oranını şununla hesapla + setting_issue_done_ratio_issue_status: İş durumunu kullan + error_issue_done_ratios_not_updated: İş tamamlanma oranları güncellenmedi. + error_workflow_copy_target: Lütfen hedef iş tipi ve rolleri seçin + setting_issue_done_ratio_issue_field: İşteki alanı kullan + label_copy_same_as_target: Hedef ile aynı + label_copy_target: Hedef + notice_issue_done_ratios_updated: İş tamamlanma oranları güncellendi. + error_workflow_copy_source: Lütfen kaynak iş tipi ve rolleri seçin + label_update_issue_done_ratios: İş tamamlanma oranlarını güncelle + setting_start_of_week: Takvimleri şundan başlat + permission_view_issues: İşleri Gör + label_display_used_statuses_only: Sadece bu iş tipi tarafından kullanılan durumları göster + label_revision_id: Değişiklik %{value} + label_api_access_key: API erişim anahtarı + label_api_access_key_created_on: API erişim anahtarı %{value} önce oluşturuldu + label_feeds_access_key: RSS erişim anahtarı + notice_api_access_key_reseted: API erişim anahtarınız sıfırlandı. + setting_rest_api_enabled: REST web servisini etkinleştir + label_missing_api_access_key: Bir API erişim anahtarı eksik + label_missing_feeds_access_key: Bir RSS erişim anahtarı eksik + button_show: Göster + text_line_separated: Çoklu değer girilebilir (her satıra bir değer). + setting_mail_handler_body_delimiters: Şu satırların birinden sonra e-postayı sonlandır + permission_add_subprojects: Alt proje yaratma + label_subproject_new: Yeni alt proje + text_own_membership_delete_confirmation: "Projeyi daha sonra düzenleyememenize sebep olacak bazı yetkilerinizi kaldırmak üzeresiniz.\nDevam etmek istediğinize emin misiniz?" + label_close_versions: Tamamlanmış sürümleri kapat + label_board_sticky: Yapışkan + label_board_locked: Kilitli + permission_export_wiki_pages: Wiki sayfalarını dışarı aktar + setting_cache_formatted_text: Biçimlendirilmiş metni önbelleğe al + permission_manage_project_activities: Proje etkinliklerini yönetme + error_unable_delete_issue_status: İş durumu silinemiyor + label_profile: Profil + permission_manage_subtasks: Alt işleri yönetme + field_parent_issue: Üst iş + label_subtask_plural: Alt işler + label_project_copy_notifications: Proje kopyalaması esnasında bilgilendirme e-postaları gönder + error_can_not_delete_custom_field: Özel alan silinemiyor + error_unable_to_connect: Bağlanılamıyor (%{value}) + error_can_not_remove_role: Bu rol kullanımda olduğundan silinemez. + error_can_not_delete_tracker: Bu iş tipi içerisinde iş barındırdığından silinemiyor. + field_principal: Temel + label_my_page_block: Kişisel sayfa bloğum + notice_failed_to_save_members: "Üyeler kaydedilemiyor: %{errors}." + text_zoom_out: Uzaklaş + text_zoom_in: Yakınlaş + notice_unable_delete_time_entry: Zaman kayıt girdisi silinemiyor. + label_overall_spent_time: Toplam harcanan zaman + field_time_entries: Zaman Kayıtları + project_module_gantt: İş-Zaman Çizelgesi + project_module_calendar: Takvim + button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}" + text_are_you_sure_with_children: İş, tüm alt işlerle birlikte silinsin mi? + field_text: Metin alanı + label_user_mail_option_only_owner: Sadece sahibi olduğum şeyler için + setting_default_notification_option: Varsayılan bildirim seçeneği + label_user_mail_option_only_my_events: Sadece takip ettiğim ya da içinde olduğum şeyler için + label_user_mail_option_only_assigned: Sadece bana atanan şeyler için + label_user_mail_option_none: Hiç bir şey için + field_member_of_group: Atananın grubu + field_assigned_to_role: Atananın rolü + notice_not_authorized_archived_project: Erişmeye çalıştığınız proje arşive kaldırılmış. + label_principal_search: "Kullanıcı ya da grup ara:" + label_user_search: "Kullanıcı ara:" + field_visible: Görünür + setting_emails_header: "E-Posta başlığı" + setting_commit_logtime_activity_id: Kaydedilen zaman için etkinlik + text_time_logged_by_changeset: Applied in changeset %{value}. + setting_commit_logtime_enabled: Zaman kaydını etkinleştir + 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: İş-Zaman çizelgesinde gösterilecek en fazla öğe sayısı + field_warn_on_leaving_unsaved: Kaydedilmemiş metin bulunan bir sayfadan çıkarken beni uyar + text_warn_on_leaving_unsaved: Bu sayfada terkettiğiniz takdirde kaybolacak kaydedilmemiş metinler var. + label_my_queries: Özel sorgularım + text_journal_changed_no_detail: "%{label} güncellendi" + label_news_comment_added: Bir habere yorum eklendi + button_expand_all: Tümünü genişlet + button_collapse_all: Tümünü daralt + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Seçilen zaman kayıtlarını toplu olarak düzenle + text_time_entries_destroy_confirmation: Seçilen zaman kaydını/kayıtlarını silmek istediğinize emin misiniz? + label_role_anonymous: Anonim + label_role_non_member: Üye Değil + label_issue_note_added: Not eklendi + label_issue_status_updated: Durum güncellendi + label_issue_priority_updated: Öncelik güncellendi + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: İşlerin görünürlüğü + label_issues_visibility_all: Tüm işler + permission_set_own_issues_private: Set own issues public or private + field_is_private: Özel + permission_set_issues_private: İşleri özel ya da genel olarak işaretleme + label_issues_visibility_public: Özel olmayan tüm işler + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Commit messages encoding + field_scm_path_encoding: Yol kodlaması(encoding) + text_scm_path_encoding_note: "Varsayılan: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Ana dizin + field_cvs_module: Modül + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Komut + text_scm_command_version: Sürüm + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/uk.yml --- a/config/locales/uk.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/uk.yml Mon Jul 25 14:23:37 2011 +0100 @@ -16,7 +16,10 @@ 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 ] + order: + - :year + - :month + - :day time: formats: @@ -32,37 +35,37 @@ half_a_minute: "half a minute" less_than_x_seconds: one: "less than 1 second" - other: "less than {{count}} seconds" + other: "less than %{count} seconds" x_seconds: one: "1 second" - other: "{{count}} seconds" + other: "%{count} seconds" less_than_x_minutes: one: "less than a minute" - other: "less than {{count}} minutes" + other: "less than %{count} minutes" x_minutes: one: "1 minute" - other: "{{count}} minutes" + other: "%{count} minutes" about_x_hours: one: "about 1 hour" - other: "about {{count}} hours" + other: "about %{count} hours" x_days: one: "1 day" - other: "{{count}} days" + other: "%{count} days" about_x_months: one: "about 1 month" - other: "about {{count}} months" + other: "about %{count} months" x_months: one: "1 month" - other: "{{count}} months" + other: "%{count} months" about_x_years: one: "about 1 year" - other: "about {{count}} years" + other: "about %{count} years" over_x_years: one: "over 1 year" - other: "over {{count}} years" + other: "over %{count} years" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" number: format: @@ -92,6 +95,10 @@ activerecord: errors: + template: + header: + one: "1 error prohibited this %{model} from being saved" + other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "немає в списку" exclusion: "зарезервовано" @@ -106,11 +113,11 @@ taken: "вже використовується" not_a_number: "не є числом" not_a_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}}" + 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: "повинна бути пізніша за дату початку" @@ -148,24 +155,24 @@ notice_locking_conflict: Дані оновлено іншим користувачем. notice_scm_error: Запису та/або виправлення немає в репозиторії. notice_not_authorized: У вас немає прав для відвідини даної сторінки. - notice_email_sent: "Відправлено листа {{value}}" - notice_email_error: "Під час відправки листа відбулася помилка ({{value}})" + notice_email_sent: "Відправлено листа %{value}" + notice_email_error: "Під час відправки листа відбулася помилка (%{value})" notice_feeds_access_key_reseted: Ваш ключ доступу RSS було скинуто. - notice_failed_to_save_issues: "Не вдалося зберегти {{count}} пункт(ів) з {{total}} вибраних: {{ids}}." + notice_failed_to_save_issues: "Не вдалося зберегти %{count} пункт(ів) з %{total} вибраних: %{ids}." notice_no_issue_selected: "Не вибрано жодної задачі! Будь ласка, відзначте задачу, яку ви хочете відредагувати." notice_account_pending: "Ваш обліковий запис створено і він чекає на підтвердження адміністратором." - mail_subject_lost_password: "Ваш {{value}} пароль" + mail_subject_lost_password: "Ваш %{value} пароль" mail_body_lost_password: 'Для зміни пароля, зайдіть за наступним посиланням:' - mail_subject_register: "Активація облікового запису {{value}}" + mail_subject_register: "Активація облікового запису %{value}" mail_body_register: 'Для активації облікового запису, зайдіть за наступним посиланням:' - mail_body_account_information_external: "Ви можете використовувати ваш {{value}} обліковий запис для входу." + mail_body_account_information_external: "Ви можете використовувати ваш %{value} обліковий запис для входу." mail_body_account_information: Інформація по Вашому обліковому запису - mail_subject_account_activation_request: "Запит на активацію облікового запису {{value}}" - mail_body_account_activation_request: "Новий користувач ({{value}}) зареєструвався. Його обліковий запис чекає на ваше підтвердження:" + mail_subject_account_activation_request: "Запит на активацію облікового запису %{value}" + mail_body_account_activation_request: "Новий користувач (%{value}) зареєструвався. Його обліковий запис чекає на ваше підтвердження:" gui_validation_error: 1 помилка - gui_validation_error_plural: "{{count}} помилки(ок)" + gui_validation_error_plural: "%{count} помилки(ок)" field_name: Ім'я field_description: Опис @@ -227,7 +234,8 @@ field_attr_lastname: Атрибут Прізвище field_attr_mail: Атрибут Email field_onthefly: Створення користувача на льоту - field_done_ratio: % зроблено + field_start_date: Початок + field_done_ratio: "% зроблено" field_auth_source: Режим аутентифікації field_hide_mail: Приховувати мій email field_comments: Коментар @@ -284,14 +292,14 @@ label_x_projects: zero: no projects one: 1 project - other: "{{count}} projects" + other: "%{count} projects" label_project_all: Усі проекти label_project_latest: Останні проекти label_issue: Питання label_issue_new: Нові питання label_issue_plural: Питання label_issue_view_all: Проглянути всі питання - label_issues_by: "Питання за {{value}}" + label_issues_by: "Питання за %{value}" label_document: Документ label_document_new: Новий документ label_document_plural: Документи @@ -354,8 +362,8 @@ label_text: Довгий текст label_attribute: Атрибут label_attribute_plural: атрибути - label_download: "{{count}} Завантажено" - label_download_plural: "{{count}} Завантажень" + label_download: "%{count} Завантажено" + label_download_plural: "%{count} Завантажень" label_no_data: Немає даних для відображення label_change_status: Змінити статус label_history: Історія @@ -384,17 +392,17 @@ label_closed_issues: закрите label_closed_issues_plural: закриті label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{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" + other: "%{count} open" label_x_closed_issues_abbr: zero: 0 closed one: 1 closed - other: "{{count}} closed" + other: "%{count} closed" label_total: Всього label_permissions: Права доступу label_current_status: Поточний статус @@ -412,7 +420,7 @@ label_months_from: місяців(ця) з label_gantt: Діаграма Ганта label_internal: Внутрішній - label_last_changes: "останні {{count}} змін" + label_last_changes: "останні %{count} змін" label_change_view_all: Проглянути всі зміни label_personalize_page: Персоналізувати цю сторінку label_comment: Коментувати @@ -420,7 +428,7 @@ label_x_comments: zero: no comments one: 1 comment - other: "{{count}} comments" + other: "%{count} comments" label_comment_add: Залишити коментар label_comment_added: Коментар додано label_comment_delete: Видалити коментарі @@ -444,8 +452,8 @@ label_day_plural: днів(я) label_repository: Репозиторій label_browse: Проглянути - label_modification: "{{count}} зміна" - label_modification_plural: "{{count}} змін" + label_modification: "%{count} зміна" + label_modification_plural: "%{count} змін" label_revision: Версія label_revision_plural: Версій label_added: додано @@ -460,8 +468,8 @@ label_sort_lower: Вниз label_sort_lowest: У кінець label_roadmap: Оперативний план - label_roadmap_due_in: "Строк {{value}}" - label_roadmap_overdue: "{{value}} запізнення" + label_roadmap_due_in: "Строк %{value}" + label_roadmap_overdue: "%{value} запізнення" label_roadmap_no_issues: Немає питань для даної версії label_search: Пошук label_result_plural: Результати @@ -479,8 +487,8 @@ label_changes_details: Подробиці по всіх змінах label_issue_tracking: Координація питань label_spent_time: Витрачений час - label_f_hour: "{{value}} година" - label_f_hour_plural: "{{value}} годин(и)" + label_f_hour: "%{value} година" + label_f_hour_plural: "%{value} годин(и)" label_time_tracking: Облік часу label_change_plural: Зміни label_statistics: Статистика @@ -527,12 +535,12 @@ label_date_from: З label_date_to: Кому label_language_based: На основі мови користувача - label_sort_by: "Сортувати за {{value}}" + label_sort_by: "Сортувати за %{value}" label_send_test_email: Послати email для перевірки - label_feeds_access_key_created_on: "Ключ доступу RSS створений {{value}} назад " + label_feeds_access_key_created_on: "Ключ доступу RSS створений %{value} назад " label_module_plural: Модулі - label_added_time_by: "Доданий {{author}} {{age}} назад" - label_updated_time: "Оновлений {{value}} назад" + label_added_time_by: "Доданий %{author} %{age} назад" + label_updated_time: "Оновлений %{value} назад" label_jump_to_a_project: Перейти до проекту... label_file_plural: Файли label_changeset_plural: Набори змін @@ -600,17 +608,17 @@ text_tip_issue_end_day: день завершення задачі text_tip_issue_begin_end_day: початок задачі і закінчення цього дня text_project_identifier_info: 'Рядкові букви (a-z), допустимі цифри і дефіс.
    Збережений ідентифікатор не може бути змінений.' - text_caracters_maximum: "{{count}} символів(а) максимум." - text_caracters_minimum: "Повинно мати якнайменше {{count}} символів(а) у довжину." - text_length_between: "Довжина між {{min}} і {{max}} символів." + text_caracters_maximum: "%{count} символів(а) максимум." + text_caracters_minimum: "Повинно мати якнайменше %{count} символів(а) у довжину." + text_length_between: "Довжина між %{min} і %{max} символів." text_tracker_no_workflow: Для цього координатора послідовність дій не визначена text_unallowed_characters: Заборонені символи text_comma_separated: Допустимі декілька значень (розділені комою). text_issues_ref_in_commit_messages: Посилання та зміна питань у повідомленнях до подавань - text_issue_added: "Issue {{id}} has been reported by {{author}}." - text_issue_updated: "Issue {{id}} has been updated by {{author}}." + text_issue_added: "Issue %{id} has been reported by %{author}." + text_issue_updated: "Issue %{id} has been updated by %{author}." text_wiki_destroy_confirmation: Ви впевнені, що хочете видалити цю wiki і весь зміст? - text_issue_category_destroy_question: "Декілька питань ({{count}}) призначено в цю категорію. Що ви хочете зробити?" + text_issue_category_destroy_question: "Декілька питань (%{count}) призначено в цю категорію. Що ви хочете зробити?" text_issue_category_destroy_assignments: Видалити призначення категорії text_issue_category_reassign_to: Перепризначити задачі до даної категорії text_user_mail_option: "Для невибраних проектів ви отримуватимете повідомлення тільки про те, що проглядаєте або в чому берете участь (наприклад, питання автором яких ви є або які вам призначені)." @@ -640,8 +648,8 @@ enumeration_issue_priorities: Пріоритети питань enumeration_doc_categories: Категорії документів enumeration_activities: Дії (облік часу) - text_status_changed_by_changeset: "Applied in changeset {{value}}." - label_display_per_page: "Per page: {{value}}" + text_status_changed_by_changeset: "Applied in changeset %{value}." + label_display_per_page: "Per page: %{value}" label_issue_added: Issue added label_issue_updated: Issue updated setting_per_page_options: Objects per page options @@ -651,7 +659,7 @@ label_document_added: Document added label_message_posted: Message added text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s) ?' - error_scm_command_failed: "An error occurred when trying to access the repository: {{value}}" + error_scm_command_failed: "An error occurred when trying to access the repository: %{value}" setting_user_format: Users display format label_age: Age label_file_added: File added @@ -667,7 +675,7 @@ 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." label_news_added: News added label_repository_plural: Repositories - error_can_t_load_default_data: "Default configuration could not be loaded: {{value}}" + error_can_t_load_default_data: "Default configuration could not be loaded: %{value}" project_module_boards: Boards project_module_issue_tracking: Issue tracking project_module_wiki: Wiki @@ -684,7 +692,7 @@ label_ldap_authentication: LDAP authentication label_downloads_abbr: D/L label_this_month: this month - label_last_n_days: "last {{count}} days" + label_last_n_days: "last %{count} days" label_all_time: all time label_this_year: this year label_date_range: Date range @@ -693,7 +701,7 @@ label_last_month: last month label_add_another_file: Add another file label_optional_description: Optional description - 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_question: "%{hours} hours were reported on the issues you are about to delete. What do you want to do ?" error_issue_not_found_in_project: 'The issue was not found or does not belong to this project' text_assign_time_entries_to_project: Assign reported hours to the project text_destroy_time_entries: Delete reported hours @@ -708,23 +716,22 @@ setting_default_projects_public: New projects are public by default error_scm_annotate: "The entry does not exist or can not be annotated." label_planning: Planning - text_subprojects_destroy_warning: "Its subproject(s): {{value}} will be also deleted." - label_and_its_subprojects: "{{value}} and its subprojects" - mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:" - mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days" - text_user_wrote: "{{value}} wrote:" + text_subprojects_destroy_warning: "Its subproject(s): %{value} will be also deleted." + label_and_its_subprojects: "%{value} and its subprojects" + mail_body_reminder: "%{count} issue(s) that are assigned to you are due in the next %{days} days:" + mail_subject_reminder: "%{count} issue(s) due in the next %{days} days" + text_user_wrote: "%{value} wrote:" label_duplicated_by: duplicated by setting_enabled_scm: Enabled SCM text_enumeration_category_reassign_to: 'Reassign them to this value:' - text_enumeration_destroy_question: "{{count}} objects are assigned to this value." + text_enumeration_destroy_question: "%{count} objects are assigned to this value." label_incoming_emails: Incoming emails 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 button_quote: Quote setting_sequential_project_identifiers: Generate sequential project identifiers notice_unable_delete_version: Unable to delete version @@ -782,12 +789,12 @@ 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: Edit own messages permission_delete_own_messages: Delete own messages - label_user_activity: "{{value}}'s activity" - label_updated_time_by: "Updated by {{author}} {{age}} ago" + label_user_activity: "%{value}'s activity" + label_updated_time_by: "Updated by %{author} %{age} ago" text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' setting_diff_max_lines_displayed: Max number of diff lines displayed text_plugin_assets_writable: Plugin assets directory writable - warning_attachments_not_saved: "{{count}} file(s) could not be saved." + warning_attachments_not_saved: "%{count} file(s) could not be saved." button_create_and_continue: Create and continue text_custom_field_possible_values_info: 'One line for each value' label_display: Display @@ -802,21 +809,21 @@ label_descending: Descending label_sort: Sort label_ascending: Ascending - label_date_from_to: From {{start}} to {{end}} + label_date_from_to: From %{start} to %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? + text_wiki_page_destroy_question: This page has %{descendants} child page(s) and descendant(s). What do you want to do? text_wiki_page_reassign_children: Reassign child pages to this parent page text_wiki_page_nullify_children: Keep child pages as root pages text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated" label_wiki_content_added: Wiki page added - 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_added: "'%{id}' wiki page has been added" + mail_body_wiki_content_added: The '%{id}' wiki page has been added by %{author}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '%{id}' wiki page has been updated by %{author}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -824,14 +831,14 @@ label_branch: Branch 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"). - 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_changed: "%{label} changed from %{old} to %{new}" + text_journal_set_to: "%{label} set to %{value}" + text_journal_deleted: "%{label} deleted (%{old})" label_group_plural: Groups label_group: Group label_group_new: New group label_time_entry_plural: Spent time - text_journal_added: "{{label}} {{value}} added" + text_journal_added: "%{label} %{value} added" field_active: Active enumeration_system_activity: System Activity permission_delete_issue_watchers: Delete watchers @@ -866,9 +873,9 @@ setting_start_of_week: Start calendars on permission_view_issues: View Issues label_display_used_statuses_only: Only display statuses that are used by this tracker - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_api_access_key: API access key - label_api_access_key_created_on: API access key created {{value}} ago + label_api_access_key_created_on: API access key created %{value} ago label_feeds_access_key: RSS access key notice_api_access_key_reseted: Your API access key was reset. setting_rest_api_enabled: Enable REST web service @@ -895,12 +902,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -908,7 +915,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -919,8 +926,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Commit messages encoding + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/vi.yml --- a/config/locales/vi.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/vi.yml Mon Jul 25 14:23:37 2011 +0100 @@ -66,37 +66,37 @@ half_a_minute: "30 giây" less_than_x_seconds: one: "chưa tới 1 giây" - other: "chưa tới {{count}} giây" + other: "chưa tới %{count} giây" x_seconds: one: "1 giây" - other: "{{count}} giây" + other: "%{count} giây" less_than_x_minutes: one: "chưa tới 1 phút" - other: "chưa tới {{count}} phút" + other: "chưa tới %{count} phút" x_minutes: one: "1 phút" - other: "{{count}} phút" + other: "%{count} phút" about_x_hours: one: "khoảng 1 giờ" - other: "khoảng {{count}} giờ" + other: "khoảng %{count} giờ" x_days: one: "1 ngày" - other: "{{count}} ngày" + other: "%{count} ngày" about_x_months: one: "khoảng 1 tháng" - other: "khoảng {{count}} tháng" + other: "khoảng %{count} tháng" x_months: one: "1 tháng" - other: "{{count}} tháng" + other: "%{count} tháng" about_x_years: one: "khoảng 1 năm" - other: "khoảng {{count}} năm" + other: "khoảng %{count} năm" over_x_years: one: "hơn 1 năm" - other: "hơn {{count}} năm" + other: "hơn %{count} năm" almost_x_years: one: "almost 1 year" - other: "almost {{count}} years" + other: "almost %{count} years" prompts: year: "Năm" month: "Tháng" @@ -109,8 +109,8 @@ errors: template: header: - one: "1 lỗi ngăn không cho lưu {{model}} này" - other: "{{count}} lỗi ngăn không cho lưu {{model}} này" + one: "1 lỗi ngăn không cho lưu %{model} này" + other: "%{count} lỗi ngăn không cho lưu %{model} này" # The variable :count is also available body: "Có lỗi với các mục sau:" @@ -124,16 +124,16 @@ accepted: "phải được đồng ý" empty: "không thể rỗng" blank: "không thể để trắng" - too_long: "quá dài (tối đa {{count}} ký tự)" - too_short: "quá ngắn (tối thiểu {{count}} ký tự)" - wrong_length: "độ dài không đúng (phải là {{count}} ký tự)" + too_long: "quá dài (tối đa %{count} ký tự)" + too_short: "quá ngắn (tối thiểu %{count} ký tự)" + wrong_length: "độ dài không đúng (phải là %{count} ký tự)" taken: "đã có" not_a_number: "không phải là số" - greater_than: "phải lớn hơn {{count}}" - greater_than_or_equal_to: "phải lớn hơn hoặc bằng {{count}}" - equal_to: "phải bằng {{count}}" - less_than: "phải nhỏ hơn {{count}}" - less_than_or_equal_to: "phải nhỏ hơn hoặc bằng {{count}}" + greater_than: "phải lớn hơn %{count}" + greater_than_or_equal_to: "phải lớn hơn hoặc bằng %{count}" + equal_to: "phải bằng %{count}" + less_than: "phải nhỏ hơn %{count}" + less_than_or_equal_to: "phải nhỏ hơn hoặc bằng %{count}" odd: "phải là số chẵn" even: "phải là số lẻ" greater_than_start_date: "phải đi sau ngày bắt đầu" @@ -158,7 +158,10 @@ month_names: [~, "Tháng một", "Tháng hai", "Tháng ba", "Tháng tư", "Tháng năm", "Tháng sáu", "Tháng bảy", "Tháng tám", "Tháng chín", "Tháng mười", "Tháng mười một", "Tháng mười hai"] abbr_month_names: [~, "Tháng một", "Tháng hai", "Tháng ba", "Tháng tư", "Tháng năm", "Tháng sáu", "Tháng bảy", "Tháng tám", "Tháng chín", "Tháng mười", "Tháng mười một", "Tháng mười hai"] # Used in date_select and datime_select. - order: [ :day, :month, :year ] + order: + - :day + - :month + - :year time: formats: @@ -177,7 +180,7 @@ last_word_connector: ", và " actionview_instancetag_blank_option: Vui lòng chọn - + general_text_No: 'Không' general_text_Yes: 'Có' general_text_no: 'không' @@ -188,7 +191,7 @@ general_csv_encoding: UTF-8 general_pdf_encoding: UTF-8 general_first_day_of_week: '1' - + notice_account_updated: Cập nhật tài khoản thành công. notice_account_invalid_creditentials: Tài khoản hoặc mật mã không hợp lệ notice_account_password_updated: Cập nhật mật mã thành công. @@ -205,34 +208,34 @@ notice_file_not_found: Trang bạn cố xem không tồn tại hoặc đã chuyển. notice_locking_conflict: Thông tin đang được cập nhật bởi người khác. Hãy chép nội dung cập nhật của bạn vào clipboard. notice_not_authorized: Bạn không có quyền xem trang này. - notice_email_sent: "Email đã được gửi tới {{value}}" - notice_email_error: "Lỗi xảy ra khi gửi email ({{value}})" + notice_email_sent: "Email đã được gửi tới %{value}" + notice_email_error: "Lỗi xảy ra khi gửi email (%{value})" notice_feeds_access_key_reseted: Mã số chứng thực RSS đã được tạo lại. - notice_failed_to_save_issues: "Failed to save {{count}} issue(s) on {{total}} selected: {{ids}}." + 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: "Thông tin tài khoản đã được tạo ra và đang chờ chứng thực từ ban quản trị." notice_default_data_loaded: Đã nạp cấu hình mặc định. notice_unable_delete_version: Không thể xóa phiên bản. - error_can_t_load_default_data: "Không thể nạp cấu hình mặc định: {{value}}" + error_can_t_load_default_data: "Không thể nạp cấu hình mặc định: %{value}" error_scm_not_found: "The entry or revision was not found in the repository." - error_scm_command_failed: "Lỗi xảy ra khi truy cập vào kho lưu trữ: {{value}}" + error_scm_command_failed: "Lỗi xảy ra khi truy cập vào kho lưu trữ: %{value}" error_scm_annotate: "The entry does not exist or can not be annotated." error_issue_not_found_in_project: 'Vấn đề không tồn tại hoặc không thuộc dự án' - mail_subject_lost_password: "{{value}}: mật mã của bạn" + mail_subject_lost_password: "%{value}: mật mã của bạn" mail_body_lost_password: "Để đổi mật mã, hãy click chuột vào liên kết sau:" - mail_subject_register: "{{value}}: kích hoạt tài khoản" + mail_subject_register: "%{value}: kích hoạt tài khoản" mail_body_register: "Để kích hoạt tài khoản, hãy click chuột vào liên kết sau:" - mail_body_account_information_external: " Bạn có thể dùng tài khoản {{value}} để đăng nhập." + mail_body_account_information_external: " Bạn có thể dùng tài khoản %{value} để đăng nhập." mail_body_account_information: Thông tin về tài khoản - mail_subject_account_activation_request: "{{value}}: Yêu cầu chứng thực tài khoản" - mail_body_account_activation_request: "Người dùng ({{value}}) mới đăng ký và cần bạn xác nhận:" - mail_subject_reminder: "{{count}} vấn đề hết hạn trong các {{days}} ngày tới" - mail_body_reminder: "{{count}} vấn đề gán cho bạn sẽ hết hạn trong {{days}} ngày tới:" + mail_subject_account_activation_request: "%{value}: Yêu cầu chứng thực tài khoản" + mail_body_account_activation_request: "Người dùng (%{value}) mới đăng ký và cần bạn xác nhận:" + mail_subject_reminder: "%{count} vấn đề hết hạn trong các %{days} ngày tới" + mail_body_reminder: "%{count} vấn đề gán cho bạn sẽ hết hạn trong %{days} ngày tới:" gui_validation_error: 1 lỗi - gui_validation_error_plural: "{{count}} lỗi" + gui_validation_error_plural: "%{count} lỗi" field_name: Tên field_description: Mô tả @@ -294,6 +297,7 @@ field_attr_lastname: Lastname attribute field_attr_mail: Email attribute field_onthefly: On-the-fly user creation + field_start_date: Bắt đầu field_done_ratio: Tiến độ field_auth_source: Authentication mode field_hide_mail: Không làm lộ email của bạn @@ -343,7 +347,6 @@ setting_cross_project_issue_relations: Cho phép quan hệ chéo giữa các dự án 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: Chữ ký cuối thư setting_protocol: Giao thức setting_per_page_options: Objects per page options @@ -373,14 +376,14 @@ label_x_projects: zero: no projects one: 1 project - other: "{{count}} projects" + other: "%{count} projects" label_project_all: Mọi dự án label_project_latest: Dự án mới nhất label_issue: Vấn đề label_issue_new: Tạo vấn đề mới label_issue_plural: Vấn đề label_issue_view_all: Tất cả vấn đề - label_issues_by: "Vấn đề của {{value}}" + label_issues_by: "Vấn đề của %{value}" label_issue_added: Đã thêm vấn đề label_issue_updated: Vấn đề được cập nhật label_document: Tài liệu @@ -437,7 +440,7 @@ label_auth_source_new: New authentication mode label_auth_source_plural: Authentication modes label_subproject_plural: Dự án con - label_and_its_subprojects: "{{value}} và dự án con" + label_and_its_subprojects: "%{value} và dự án con" label_min_max_length: Min - Max length label_list: List label_date: Ngày @@ -448,8 +451,8 @@ label_text: Long text label_attribute: Attribute label_attribute_plural: Attributes - label_download: "{{count}} lần tải" - label_download_plural: "{{count}} lần tải" + label_download: "%{count} lần tải" + label_download_plural: "%{count} lần tải" label_no_data: Chưa có thông tin gì label_change_status: Đổi trạng thái label_history: Lược sử @@ -480,17 +483,17 @@ label_closed_issues: đóng label_closed_issues_plural: đóng label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{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" + other: "%{count} open" label_x_closed_issues_abbr: zero: 0 closed one: 1 closed - other: "{{count}} closed" + other: "%{count} closed" label_total: Tổng cộng label_permissions: Quyền label_current_status: Trạng thái hiện tại @@ -508,7 +511,7 @@ label_months_from: tháng từ label_gantt: Biểu đồ sự kiện label_internal: Nội bộ - label_last_changes: "{{count}} thay đổi cuối" + label_last_changes: "%{count} thay đổi cuối" label_change_view_all: Xem mọi thay đổi label_personalize_page: Điều chỉnh trang này label_comment: Bình luận @@ -516,7 +519,7 @@ label_x_comments: zero: no comments one: 1 comment - other: "{{count}} comments" + other: "%{count} comments" label_comment_add: Thêm bình luận label_comment_added: Đã thêm bình luận label_comment_delete: Xóa bình luận @@ -535,7 +538,7 @@ label_yesterday: hôm qua label_this_week: tuần này label_last_week: tuần trước - label_last_n_days: "{{count}} ngày cuối" + label_last_n_days: "%{count} ngày cuối" label_this_month: tháng này label_last_month: tháng cuối label_this_year: năm này @@ -549,8 +552,8 @@ label_repository: Kho lưu trữ label_repository_plural: Kho lưu trữ label_browse: Duyệt - label_modification: "{{count}} thay đổi" - label_modification_plural: "{{count}} thay đổi" + label_modification: "%{count} thay đổi" + label_modification_plural: "%{count} thay đổi" label_revision: Bản điều chỉnh label_revision_plural: Bản điều chỉnh label_associated_revisions: Associated revisions @@ -568,8 +571,8 @@ label_sort_lower: Dịch xuống label_sort_lowest: Xuống dưới cùng label_roadmap: Kế hoạch - label_roadmap_due_in: "Hết hạn trong {{value}}" - label_roadmap_overdue: "Trễ {{value}}" + label_roadmap_due_in: "Hết hạn trong %{value}" + label_roadmap_overdue: "Trễ %{value}" label_roadmap_no_issues: Không có vấn đề cho phiên bản này label_search: Tìm label_result_plural: Kết quả @@ -587,8 +590,8 @@ label_changes_details: Chi tiết của mọi thay đổi label_issue_tracking: Vấn đề label_spent_time: Thời gian - label_f_hour: "{{value}} giờ" - label_f_hour_plural: "{{value}} giờ" + label_f_hour: "%{value} giờ" + label_f_hour_plural: "%{value} giờ" label_time_tracking: Theo dõi thời gian label_change_plural: Thay đổi label_statistics: Thống kê @@ -637,12 +640,12 @@ label_date_from: Từ label_date_to: Đến label_language_based: Theo ngôn ngữ người dùng - label_sort_by: "Sắp xếp theo {{value}}" + label_sort_by: "Sắp xếp theo %{value}" label_send_test_email: Send a test email - label_feeds_access_key_created_on: "Mã chứng thực RSS được tạo ra cách đây {{value}}" + label_feeds_access_key_created_on: "Mã chứng thực RSS được tạo ra cách đây %{value}" label_module_plural: Mô-đun - label_added_time_by: "thêm bởi {{author}} cách đây {{age}}" - label_updated_time: "Cập nhật cách đây {{value}}" + label_added_time_by: "thêm bởi %{author} cách đây %{age}" + label_updated_time: "Cập nhật cách đây %{value}" label_jump_to_a_project: Nhảy đến dự án... label_file_plural: Tập tin label_changeset_plural: Thay đổi @@ -658,7 +661,7 @@ 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: "mỗi trang: {{value}}" + label_display_per_page: "mỗi trang: %{value}" label_age: Age label_change_properties: Thay đổi thuộc tính label_general: Tổng quan @@ -724,43 +727,43 @@ text_regexp_info: eg. ^[A-Z0-9]+$ text_min_max_length_info: 0 để chỉ không hạn chế 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_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: Bạn chắc chứ? text_tip_issue_begin_day: ngày bắt đầu text_tip_issue_end_day: ngày kết thúc text_tip_issue_begin_end_day: bắt đầu và kết thúc cùng ngày text_project_identifier_info: 'Chỉ cho phép chữ cái thường (a-z), con số và dấu gạch ngang.
    Sau khi lưu, chỉ số ID không thể thay đổi.' - text_caracters_maximum: "Tối đa {{count}} ký tự." - text_caracters_minimum: "Phải gồm ít nhất {{count}} ký tự." - text_length_between: "Length between {{min}} and {{max}} characters." + text_caracters_maximum: "Tối đa %{count} ký tự." + text_caracters_minimum: "Phải gồm ít nhất %{count} ký tự." + text_length_between: "Length between %{min} and %{max} characters." text_tracker_no_workflow: No workflow defined for this tracker text_unallowed_characters: Ký tự không hợp lệ text_comma_separated: Multiple values allowed (comma separated). 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_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_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: "Với các dự án không được chọn, bạn chỉ có thể nhận được thông báo về các vấn đề bạn đăng ký theo dõi hoặc có liên quan đến bạn (chẳng hạn, vấn đề được gán cho bạn)." 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_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: 'Chọn các mô-đun cho dự án:' text_default_administrator_account_changed: Default administrator account changed text_file_repository_writable: File repository 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_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_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 @@ -841,12 +844,12 @@ label_example: Ví dụ text_repository_usernames_mapping: "Chọn hoặc cập nhật ánh xạ người dùng hệ thống với người dùng trong kho lưu trữ.\nNhững trường hợp trùng hợp về tên và email sẽ được tự động ánh xạ." permission_delete_own_messages: Delete own messages - label_user_activity: "{{value}}'s activity" - label_updated_time_by: "Updated by {{author}} {{age}} ago" + label_user_activity: "%{value}'s activity" + label_updated_time_by: "Updated by %{author} %{age} ago" text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' setting_diff_max_lines_displayed: Max number of diff lines displayed text_plugin_assets_writable: Plugin assets directory writable - warning_attachments_not_saved: "{{count}} file(s) could not be saved." + warning_attachments_not_saved: "%{count} file(s) could not be saved." button_create_and_continue: Create and continue text_custom_field_possible_values_info: 'One line for each value' label_display: Display @@ -861,21 +864,21 @@ label_descending: Descending label_sort: Sort label_ascending: Ascending - label_date_from_to: From {{start}} to {{end}} + label_date_from_to: From %{start} to %{end} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? + text_wiki_page_destroy_question: This page has %{descendants} child page(s) and descendant(s). What do you want to do? text_wiki_page_reassign_children: Reassign child pages to this parent page text_wiki_page_nullify_children: Keep child pages as root pages text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated" label_wiki_content_added: Wiki page added - 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_added: "'%{id}' wiki page has been added" + mail_body_wiki_content_added: The '%{id}' wiki page has been added by %{author}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '%{id}' wiki page has been updated by %{author}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -883,14 +886,14 @@ label_branch: Branch 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"). - 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_changed: "%{label} changed from %{old} to %{new}" + text_journal_set_to: "%{label} set to %{value}" + text_journal_deleted: "%{label} deleted (%{old})" label_group_plural: Groups label_group: Group label_group_new: New group label_time_entry_plural: Spent time - text_journal_added: "{{label}} {{value}} added" + text_journal_added: "%{label} %{value} added" field_active: Active enumeration_system_activity: System Activity permission_delete_issue_watchers: Delete watchers @@ -925,9 +928,9 @@ setting_start_of_week: Start calendars on permission_view_issues: View Issues label_display_used_statuses_only: Only display statuses that are used by this tracker - label_revision_id: Revision {{value}} + label_revision_id: Revision %{value} label_api_access_key: API access key - label_api_access_key_created_on: API access key created {{value}} ago + label_api_access_key_created_on: API access key created %{value} ago label_feeds_access_key: RSS access key notice_api_access_key_reseted: Your API access key was reset. setting_rest_api_enabled: Enable REST web service @@ -954,12 +957,12 @@ label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) + error_unable_to_connect: Unable to connect (%{value}) error_can_not_remove_role: This role is in use and can not be deleted. error_can_not_delete_tracker: This tracker contains issues and can't be deleted. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + 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. @@ -967,7 +970,7 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + 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 @@ -978,8 +981,50 @@ 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. - field_start_date: Start date 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + field_commit_logs_encoding: Commit messages encoding + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/zh-TW.yml --- a/config/locales/zh-TW.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/zh-TW.yml Mon Jul 25 14:23:37 2011 +0100 @@ -20,7 +20,10 @@ month_names: [~, 一月, 二月, 三月, 四月, 五月, 六月, 七月, 八月, 九月, 十月, 十一月, 十二月] abbr_month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月] # 使用於 date_select 與 datime_select. - order: [ :year, :month, :day ] + order: + - :year + - :month + - :day time: formats: @@ -104,37 +107,37 @@ half_a_minute: "半分鐘" less_than_x_seconds: one: "小於 1 秒" - other: "小於 {{count}} 秒" + other: "小於 %{count} 秒" x_seconds: one: "1 秒" - other: "{{count}} 秒" + other: "%{count} 秒" less_than_x_minutes: one: "小於 1 分鐘" - other: "小於 {{count}} 分鐘" + other: "小於 %{count} 分鐘" x_minutes: one: "1 分鐘" - other: "{{count}} 分鐘" + other: "%{count} 分鐘" about_x_hours: one: "約 1 小時" - other: "約 {{count}} 小時" + other: "約 %{count} 小時" x_days: one: "1 天" - other: "{{count}} 天" + other: "%{count} 天" about_x_months: one: "約 1 個月" - other: "約 {{count}} 個月" + other: "約 %{count} 個月" x_months: one: "1 個月" - other: "{{count}} 個月" + other: "%{count} 個月" about_x_years: one: "約 1 年" - other: "約 {{count}} 年" + other: "約 %{count} 年" over_x_years: one: "超過 1 年" - other: "超過 {{count}} 年" + other: "超過 %{count} 年" almost_x_years: one: "將近 1 年" - other: "將近 {{count}} 年" + other: "將近 %{count} 年" prompts: year: "年" month: "月" @@ -147,8 +150,8 @@ errors: template: header: - one: "有 1 個錯誤發生使得「{{model}}」無法被儲存。" - other: "有 {{count}} 個錯誤發生使得「{{model}}」無法被儲存。" + one: "有 1 個錯誤發生使得「%{model}」無法被儲存。" + other: "有 %{count} 個錯誤發生使得「%{model}」無法被儲存。" # The variable :count is also available body: "下面所列欄位有問題:" # The values :model, :attribute and :value are always available for interpolation @@ -161,23 +164,23 @@ accepted: "必须是可被接受的" empty: "不能留空" blank: "不能是空白字元" - too_long: "過長(最長是 {{count}} 個字)" - too_short: "過短(最短是 {{count}} 個字)" - wrong_length: "字數錯誤(必須是 {{count}} 個字)" + too_long: "過長(最長是 %{count} 個字)" + too_short: "過短(最短是 %{count} 個字)" + wrong_length: "字數錯誤(必須是 %{count} 個字)" taken: "已經被使用" not_a_number: "不是數字" - greater_than: "必須大於 {{count}}" - greater_than_or_equal_to: "必須大於或等於 {{count}}" - equal_to: "必須等於 {{count}}" - less_than: "必須小於 {{count}}" - less_than_or_equal_to: "必須小於或等於 {{count}}" + greater_than: "必須大於 %{count}" + greater_than_or_equal_to: "必須大於或等於 %{count}" + equal_to: "必須等於 %{count}" + less_than: "必須小於 %{count}" + less_than_or_equal_to: "必須小於或等於 %{count}" odd: "必須是奇數" even: "必須是偶數" # Append your own errors here or at the model/attributes scope. greater_than_start_date: "必須在開始日期之後" not_same_project: "不屬於同一個專案" circular_dependency: "這個關聯會導致環狀相依" - cant_link_an_issue_with_a_descendant: "項目無法被連結至自己的子項目" + cant_link_an_issue_with_a_descendant: "項目無法被連結至自己的子任務" # You can define own errors for models or model attributes. # The values :model, :attribute and :value are always available for interpolation. @@ -185,7 +188,7 @@ # For example, # models: # user: - # blank: "This is a custom blank message for {{model}}: {{attribute}}" + # blank: "This is a custom blank message for %{model}: %{attribute}" # attributes: # login: # blank: "This is a custom blank message for User login" @@ -236,23 +239,24 @@ notice_locking_conflict: 資料已被其他使用者更新。 notice_not_authorized: 你未被授權存取此頁面。 notice_not_authorized_archived_project: 您欲存取的專案已經被歸檔封存。 - notice_email_sent: "郵件已經成功寄送至以下收件者: {{value}}" - notice_email_error: "寄送郵件的過程中發生錯誤 ({{value}})" + 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_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: "在 SCM 儲存庫中找不到這個項目或版次。" - error_scm_command_failed: "嘗試存取 SCM 儲存庫時發生錯誤: {{value}}" - error_scm_annotate: "SCM 儲存庫中無此項目或此項目無法被加註。" + 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: '尚未定義項目狀態的預設值。請您前往「網站管理」->「項目狀態清單」頁面,檢查相關組態設定。' @@ -265,26 +269,26 @@ error_workflow_copy_source: '請選擇一個來源項目追蹤標籤或角色' error_workflow_copy_target: '請選擇一個(或多個)目的項目追蹤標籤或角色' error_unable_delete_issue_status: '無法刪除項目狀態' - error_unable_to_connect: "無法連線至({{value}})" - warning_attachments_not_saved: "{{count}} 個附加檔案無法被儲存。" + error_unable_to_connect: "無法連線至(%{value})" + warning_attachments_not_saved: "%{count} 個附加檔案無法被儲存。" mail_subject_lost_password: 您的 Redmine 網站密碼 mail_body_lost_password: '欲變更您的 Redmine 網站密碼, 請點選以下鏈結:' mail_subject_register: 啟用您的 Redmine 帳號 mail_body_register: '欲啟用您的 Redmine 帳號, 請點選以下鏈結:' - mail_body_account_information_external: "您可以使用 {{value}} 帳號登入 Redmine 網站。" + mail_body_account_information_external: "您可以使用 %{value} 帳號登入 Redmine 網站。" mail_body_account_information: 您的 Redmine 帳號資訊 mail_subject_account_activation_request: Redmine 帳號啟用需求通知 - mail_body_account_activation_request: "有位新用戶 ({{value}}) 已經完成註冊,正等候您的審核:" - mail_subject_reminder: "您有 {{count}} 個項目即將到期 ({{days}})" - mail_body_reminder: "{{count}} 個指派給您的項目,將於 {{days}} 天之內到期:" - mail_subject_wiki_content_added: "'{{id}}' wiki 頁面已被新增" - mail_body_wiki_content_added: "The '{{id}}' wiki 頁面已被 {{author}} 新增。" - mail_subject_wiki_content_updated: "'{{id}}' wiki 頁面已被更新" - mail_body_wiki_content_updated: "The '{{id}}' wiki 頁面已被 {{author}} 更新。" + mail_body_account_activation_request: "有位新用戶 (%{value}) 已經完成註冊,正等候您的審核:" + mail_subject_reminder: "您有 %{count} 個項目即將到期 (%{days})" + mail_body_reminder: "%{count} 個指派給您的項目,將於 %{days} 天之內到期:" + mail_subject_wiki_content_added: "'%{id}' wiki 頁面已被新增" + mail_body_wiki_content_added: "此 '%{id}' wiki 頁面已被 %{author} 新增。" + mail_subject_wiki_content_updated: "'%{id}' wiki 頁面已被更新" + mail_body_wiki_content_updated: "此 '%{id}' wiki 頁面已被 %{author} 更新。" gui_validation_error: 1 個錯誤 - gui_validation_error_plural: "{{count}} 個錯誤" + gui_validation_error_plural: "%{count} 個錯誤" field_name: 名稱 field_description: 概述 @@ -352,7 +356,7 @@ field_done_ratio: 完成百分比 field_auth_source: 認證模式 field_hide_mail: 隱藏我的電子郵件 - field_comments: 註解 + field_comments: 回應 field_url: 網址 field_start_page: 首頁 field_subproject: 子專案 @@ -371,7 +375,7 @@ field_time_zone: 時區 field_searchable: 可用做搜尋條件 field_default_value: 預設值 - field_comments_sorting: 註解排序 + field_comments_sorting: 回應排序 field_parent_title: 父頁面 field_editable: 可編輯 field_watcher: 觀察者 @@ -379,10 +383,20 @@ field_content: 內容 field_group_by: 結果分組方式 field_sharing: 共用 - field_parent_issue: 父工作項目 + field_parent_issue: 父任務 field_member_of_group: "被指派者的群組" field_assigned_to_role: "被指派者的角色" field_text: 內容文字 + field_visible: 可被看見 + field_warn_on_leaving_unsaved: "提醒我將要離開的頁面中尚有未儲存的資料" + field_issues_visibility: 項目可見度 + field_is_private: 私人 + field_commit_logs_encoding: 認可訊息編碼 + field_scm_path_encoding: 路徑編碼 + field_path_to_repository: 儲存機制路徑 + field_root_directory: 根資料夾 + field_cvsroot: CVSROOT + field_cvs_module: 模組 setting_app_title: 標題 setting_app_subtitle: 副標題 @@ -399,18 +413,18 @@ setting_text_formatting: 文字格式 setting_wiki_compression: 壓縮 Wiki 歷史文章 setting_feeds_limit: RSS 新聞限制 - setting_autofetch_changesets: 自動取得送交版次 + setting_autofetch_changesets: 自動擷取認可 setting_default_projects_public: 新建立之專案預設為「公開」 - setting_sys_api_enabled: 啟用管理版本庫之網頁服務 (Web Service) - setting_commit_ref_keywords: 送交用於參照項目之關鍵字 - setting_commit_fix_keywords: 送交用於修正項目之關鍵字 + setting_sys_api_enabled: 啟用管理儲存機制的網頁服務 (Web Service) + 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: 每頁顯示個數選項 @@ -426,7 +440,7 @@ setting_gravatar_default: 預設全球認證大頭像圖片 setting_diff_max_lines_displayed: 差異顯示行數之最大值 setting_file_max_size_displayed: 檔案內容顯示大小之最大值 - setting_repository_log_display_limit: 版次顯示數目之最大值 + setting_repository_log_display_limit: 修訂版顯示數目之最大值 setting_openid: 允許使用 OpenID 登入與註冊 setting_password_min_length: 密碼最小長度 setting_new_project_user_role_id: 管理者以外之用戶建立新專案時,將被指派的角色 @@ -438,6 +452,9 @@ setting_rest_api_enabled: 啟用 REST 網路服務技術(Web Service) 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: 建立子專案 @@ -451,6 +468,8 @@ permission_add_issues: 新增項目 permission_edit_issues: 編輯項目 permission_manage_issue_relations: 管理項目關聯 + permission_set_issues_private: 設定項目為公開或私人 + permission_set_own_issues_private: 設定自己的項目為公開或私人 permission_add_issue_notes: 新增筆記 permission_edit_issue_notes: 編輯筆記 permission_edit_own_issue_notes: 編輯自己的筆記 @@ -468,7 +487,7 @@ permission_edit_time_entries: 編輯工時紀錄 permission_edit_own_time_entries: 編輯自己的工時記錄 permission_manage_news: 管理新聞 - permission_comment_news: 註解新聞 + permission_comment_news: 回應新聞 permission_manage_documents: 管理文件 permission_view_documents: 檢視文件 permission_manage_files: 管理檔案 @@ -481,10 +500,10 @@ permission_edit_wiki_pages: 編輯 wiki 頁面 permission_delete_wiki_pages_attachments: 刪除附件 permission_protect_wiki_pages: 專案 wiki 頁面 - permission_manage_repository: 管理版本庫 - permission_browse_repository: 瀏覽版本庫 + permission_manage_repository: 管理儲存機制 + permission_browse_repository: 瀏覽儲存機制 permission_view_changesets: 檢視變更集 - permission_commit_access: 存取送交之變更 + permission_commit_access: 存取認可 permission_manage_boards: 管理討論版 permission_view_messages: 檢視訊息 permission_add_messages: 新增訊息 @@ -493,7 +512,7 @@ permission_delete_messages: 刪除訊息 permission_delete_own_messages: 刪除自己的訊息 permission_export_wiki_pages: 匯出 wiki 頁面 - permission_manage_subtasks: 管理子工作項目 + permission_manage_subtasks: 管理子任務 project_module_issue_tracking: 項目追蹤 project_module_time_tracking: 工時追蹤 @@ -516,16 +535,19 @@ label_x_projects: zero: 無專案 one: 1 個專案 - other: "{{count}} 個專案" + 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_issues_by: "項目按 %{value} 分組顯示" label_issue_added: 項目已新增 label_issue_updated: 項目已更新 + label_issue_note_added: 筆記已新增 + label_issue_status_updated: 狀態已更新 + label_issue_priority_updated: 優先權已更新 label_document: 文件 label_document_new: 建立新文件 label_document_plural: 文件 @@ -534,6 +556,8 @@ label_role_plural: 角色 label_role_new: 建立新角色 label_role_and_permissions: 角色與權限 + label_role_anonymous: 匿名者 + label_role_non_member: 非會員 label_member: 成員 label_member_new: 建立新成員 label_member_plural: 成員 @@ -574,7 +598,7 @@ label_registered_on: 註冊於 label_activity: 活動 label_overall_activity: 整體活動 - label_user_activity: "{{value}} 的活動" + label_user_activity: "%{value} 的活動" label_new: 建立新的... label_logged_as: 目前登入 label_environment: 環境 @@ -584,7 +608,7 @@ label_auth_source_plural: 認證模式清單 label_subproject_plural: 子專案 label_subproject_new: 建立子專案 - label_and_its_subprojects: "{{value}} 與其子專案" + label_and_its_subprojects: "%{value} 與其子專案" label_min_max_length: 最小 - 最大 長度 label_list: 清單 label_date: 日期 @@ -595,8 +619,8 @@ label_text: 長文字 label_attribute: 屬性 label_attribute_plural: 屬性 - label_download: "{{count}} 個下載" - label_download_plural: "{{count}} 個下載" + label_download: "%{count} 個下載" + label_download_plural: "%{count} 個下載" label_no_data: 沒有任何資料可供顯示 label_change_status: 變更狀態 label_history: 歷史 @@ -613,6 +637,7 @@ label_news_latest: 最近新聞 label_news_view_all: 檢視全部的新聞 label_news_added: 新聞已新增 + label_news_comment_added: 回應已加入新聞 label_settings: 設定 label_overview: 概觀 label_version: 版本 @@ -628,17 +653,17 @@ label_closed_issues: 已結束 label_closed_issues_plural: 已結束 label_x_open_issues_abbr_on_total: - zero: 0 進行中 / 共 {{total}} - one: 1 進行中 / 共 {{total}} - other: "{{count}} 進行中 / 共 {{total}}" + zero: 0 進行中 / 共 %{total} + one: 1 進行中 / 共 %{total} + other: "%{count} 進行中 / 共 %{total}" label_x_open_issues_abbr: zero: 0 進行中 one: 1 進行中 - other: "{{count}} 進行中" + other: "%{count} 進行中" label_x_closed_issues_abbr: zero: 0 已結束 one: 1 已結束 - other: "{{count}} 已結束" + other: "%{count} 已結束" label_total: 總計 label_permissions: 權限 label_current_status: 目前狀態 @@ -656,21 +681,22 @@ label_months_from: 個月, 開始月份 label_gantt: 甘特圖 label_internal: 內部 - label_last_changes: "最近 {{count}} 個變更" + label_last_changes: "最近 %{count} 個變更" label_change_view_all: 檢視全部的變更 label_personalize_page: 自訂版面 - label_comment: 註解 - label_comment_plural: 註解 + label_comment: 回應 + label_comment_plural: 回應 label_x_comments: - zero: 無註解 - one: 1 個註解 - other: "{{count}} 個註解" - label_comment_add: 加入新註解 - label_comment_added: 新註解已加入 - label_comment_delete: 刪除註解 + zero: 無回應 + one: 1 個回應 + other: "%{count} 個回應" + label_comment_add: 加入新回應 + label_comment_added: 新回應已加入 + label_comment_delete: 刪除回應 label_query: 自訂查詢 label_query_plural: 自訂查詢 label_query_new: 建立新查詢 + label_my_queries: 我的自訂查詢 label_filter_add: 加入新篩選條件 label_filter_plural: 篩選條件 label_equals: 等於 @@ -685,7 +711,7 @@ label_yesterday: 昨天 label_this_week: 本週 label_last_week: 上週 - label_last_n_days: "過去 {{count}} 天" + label_last_n_days: "過去 %{count} 天" label_this_month: 這個月 label_last_month: 上個月 label_this_year: 今年 @@ -696,34 +722,34 @@ label_contains: 包含 label_not_contains: 不包含 label_day_plural: 天 - label_repository: 版本控管 - label_repository_plural: 版本控管 + label_repository: 儲存機制 + label_repository_plural: 儲存機制清單 label_browse: 瀏覽 - label_modification: "{{count}} 變更" - label_modification_plural: "{{count}} 變更" + label_modification: "%{count} 變更" + label_modification_plural: "%{count} 變更" label_branch: 分支 label_tag: 標籤 - label_revision: 版次 - label_revision_plural: 版次清單 - label_revision_id: "版次 {{value}}" - label_associated_revisions: 相關版次 + 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_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_due_in: "剩餘 %{value}" + label_roadmap_overdue: "逾期 %{value}" label_roadmap_no_issues: 此版本尚未包含任何項目 label_search: 搜尋 label_result_plural: 結果 @@ -742,13 +768,13 @@ label_issue_tracking: 項目追蹤 label_spent_time: 耗用工時 label_overall_spent_time: 整體耗用工時 - label_f_hour: "{{value}} 小時" - label_f_hour_plural: "{{value}} 小時" + 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_commits_per_month: 依月份統計認可 + label_commits_per_author: 依作者統計認可 label_view_diff: 檢視差異 label_diff_inline: 直列 label_diff_side_by_side: 並排 @@ -794,21 +820,22 @@ label_date_from: 開始 label_date_to: 結束 label_language_based: 依用戶之語系決定 - label_sort_by: "按 {{value}} 排序" + 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_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_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_bulk_edit_selected_issues: 大量編輯選取的項目 + label_bulk_edit_selected_time_entries: 大量編輯選取的工時項目 label_theme: 畫面主題 label_default: 預設 label_search_titles_only: 僅搜尋標題 @@ -822,7 +849,7 @@ label_registration_activation_by_email: 透過電子郵件啟用帳戶 label_registration_manual_activation: 手動啟用帳戶 label_registration_automatic_activation: 自動啟用帳戶 - label_display_per_page: "每頁顯示: {{value}} 個" + label_display_per_page: "每頁顯示: %{value} 個" label_age: 年齡 label_change_properties: 變更屬性 label_general: 一般 @@ -845,7 +872,7 @@ label_sort: 排序 label_ascending: 遞增排序 label_descending: 遞減排序 - label_date_from_to: 起 {{start}} 迄 {{end}} + label_date_from_to: 起 %{start} 迄 %{end} label_wiki_content_added: Wiki 頁面已新增 label_wiki_content_updated: Wiki 頁面已更新 label_group: 群組 @@ -864,22 +891,32 @@ 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_api_access_key_created_on: "API 存取金鑰建立於 %{value} 之前" label_profile: 配置概況 - label_subtask_plural: 子工作項目 + label_subtask_plural: 子任務 label_project_copy_notifications: 在複製專案的過程中,傳送通知郵件 + label_principal_search: "搜尋用戶或群組:" + label_user_search: "搜尋用戶:" + label_additional_workflow_transitions_for_author: 用戶為作者時額外允許的流程轉換 + label_additional_workflow_transitions_for_assignee: 用戶為被指定者時額外允許的流程轉換 + label_issues_visibility_all: 所有項目 + label_issues_visibility_public: 所有非私人項目 + label_issues_visibility_own: 使用者所建立的或被指派的項目 + label_git_report_last_commit: 報告最後認可的文件和目錄 button_login: 登入 button_submit: 送出 button_save: 儲存 button_check_all: 全選 button_uncheck_all: 全不選 + button_collapse_all: 全部摺疊 + button_expand_all: 全部展開 button_delete: 刪除 button_create: 建立 button_create_and_continue: 繼續建立 button_test: 測試 button_edit: 編輯 - button_edit_associated_wikipage: "編輯相關 Wiki 頁面: {{page_title}}" + button_edit_associated_wikipage: "編輯相關 Wiki 頁面: %{page_title}" button_add: 新增 button_change: 修改 button_apply: 套用 @@ -928,61 +965,73 @@ text_regexp_info: eg. ^[A-Z0-9]+$ text_min_max_length_info: 0 代表「不限制」 text_project_destroy_confirmation: 您確定要刪除這個專案和其他相關資料? - text_subprojects_destroy_warning: "下列子專案: {{value}} 將一併被刪除。" + 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_journal_changed: "%{label} 從 %{old} 變更為 %{new}" + text_journal_changed_no_detail: "%{label} 已更新" + 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)、阿拉伯數字與連字符號(-)。
    儲存後,代碼不可再被更改。' - text_caracters_maximum: "最多 {{count}} 個字元." - text_caracters_minimum: "長度必須大於 {{count}} 個字元." - text_length_between: "長度必須介於 {{min}} 至 {{max}} 個字元之間." + 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_issues_ref_in_commit_messages: 認可訊息中參照(或修正)項目之關鍵字 + text_issue_added: "項目 %{id} 已被 %{author} 通報。" + text_issue_updated: "項目 %{id} 已被 %{author} 更新。" text_wiki_destroy_confirmation: 您確定要刪除這個 wiki 和其中的所有內容? - text_issue_category_destroy_question: "有 ({{count}}) 個項目被指派到此分類. 請選擇您想要的動作?" + 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_status_changed_by_changeset: "已套用至變更集 %{value}." + text_time_logged_by_changeset: "紀錄於變更集 %{value}." text_issues_destroy_confirmation: '確定刪除已選擇的項目?' + text_issues_destroy_descendants_confirmation: "這麼做將會一併刪除 %{count} 子任務。" + text_time_entries_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_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_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_repository_usernames_mapping: "選擇或更新 Redmine 使用者與版本庫使用者之對應關係。\n版本庫中之使用者帳號或電子郵件信箱,與 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: '一列輸入一個值' - text_wiki_page_destroy_question: "此頁面包含 {{descendants}} 個子頁面及延伸頁面。 請選擇您想要的動作?" + 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: 縮小 - + text_warn_on_leaving_unsaved: "若您離開這個頁面,此頁面所包含的未儲存資料將會遺失。" + text_scm_path_encoding_note: "預設: UTF-8" + text_git_repository_note: "純(Bare)儲存機制與本機儲存機制 (e.g. /gitrepo, c:\gitrepo)" + text_mercurial_repository_note: "本機儲存機制 (e.g. /hgrepo, c:\hgrepo)" + text_scm_command: 命令 + text_scm_command_version: 版本 + text_scm_config: 您可以在 config/configuration.yml 中設定 SCM 命令。請在編輯該檔案之後重新啟動 Redmine 應用程式。 + text_scm_command_not_available: SCM 命令無法使用。請檢查管理面板中的設定。 + default_role_manager: 管理人員 default_role_developer: 開發人員 default_role_reporter: 報告人員 @@ -1009,8 +1058,3 @@ enumeration_doc_categories: 文件分類 enumeration_activities: 活動 (時間追蹤) enumeration_system_activity: 系統活動 - - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header diff -r f7c525dc7585 -r 0b6c82dead28 config/locales/zh.yml --- a/config/locales/zh.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/locales/zh.yml Mon Jul 25 14:23:37 2011 +0100 @@ -1,91 +1,81 @@ # Chinese (China) translations for Ruby on Rails # by tsechingho (http://github.com/tsechingho) - zh: + # 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" short: "%b%d日" long: "%Y年%b%d日" + 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: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月] - order: [ :year, :month, :day ] - + # Used in date_select and datime_select. + order: + - :year + - :month + - :day + time: formats: default: "%Y年%b%d日 %A %H:%M:%S" time: "%H:%M" - time: "%H:%M" short: "%b%d日 %H:%M" long: "%Y年%b%d日 %H:%M" am: "上午" pm: "下午" - + datetime: distance_in_words: half_a_minute: "半分钟" less_than_x_seconds: one: "一秒内" - other: "少于 {{count}} 秒" + other: "少于 %{count} 秒" x_seconds: one: "一秒" - other: "{{count}} 秒" + other: "%{count} 秒" less_than_x_minutes: one: "一分钟内" - other: "少于 {{count}} 分钟" + other: "少于 %{count} 分钟" x_minutes: one: "一分钟" - other: "{{count}} 分钟" + other: "%{count} 分钟" about_x_hours: one: "大约一小时" - other: "大约 {{count}} 小时" + other: "大约 %{count} 小时" x_days: one: "一天" - other: "{{count}} 天" + other: "%{count} 天" about_x_months: one: "大约一个月" - other: "大约 {{count}} 个月" + other: "大约 %{count} 个月" x_months: one: "一个月" - other: "{{count}} 个月" + other: "%{count} 个月" about_x_years: one: "大约一年" - other: "大约 {{count}} 年" + other: "大约 %{count} 年" over_x_years: one: "一年以上" - other: "{{count}} 年以上" + other: "%{count} 年以上" almost_x_years: one: "将近 1 年" - other: "将近 {{count}} 年" - prompts: - year: "年" - month: "月" - day: "日" - hour: "时" - minute: "分" - second: "秒" - + other: "将近 %{count} 年" + number: + # Default format for numbers format: - separator: "." - delimiter: "," + separator: "." + delimiter: "" precision: 3 - currency: - format: - format: "%n %u" - unit: "元" - separator: "." - delimiter: "," - precision: 2 - percentage: - format: - delimiter: "" - precision: - format: - delimiter: "" human: format: delimiter: "" @@ -96,24 +86,24 @@ byte: one: "Byte" other: "Bytes" - kb: "KB" + kb: "kB" mb: "MB" gb: "GB" tb: "TB" - + + +# Used in array.to_sentence. support: array: - words_connector: ", " - two_words_connector: " 和 " - last_word_connector: ", 和 " - + sentence_connector: "和" + skip_last_comma: false + activerecord: errors: template: - header: - one: "有 1 个错误发生导致「{{model}}」无法被保存。" - other: "有 {{count}} 个错误发生导致「{{model}}」无法被保存。" - body: "如下字段出现错误:" + header: + one: "由于发生了一个错误 %{model} 无法保存" + other: "%{count} 个错误使得 %{model} 无法保存" messages: inclusion: "不包含于列表中" exclusion: "是保留关键字" @@ -122,22 +112,23 @@ accepted: "必须是可被接受的" empty: "不能留空" blank: "不能为空字符" - too_long: "过长(最长为 {{count}} 个字符)" - too_short: "过短(最短为 {{count}} 个字符)" - wrong_length: "长度非法(必须为 {{count}} 个字符)" + too_long: "过长(最长为 %{count} 个字符)" + too_short: "过短(最短为 %{count} 个字符)" + wrong_length: "长度非法(必须为 %{count} 个字符)" taken: "已经被使用" not_a_number: "不是数字" - greater_than: "必须大于 {{count}}" - greater_than_or_equal_to: "必须大于或等于 {{count}}" - equal_to: "必须等于 {{count}}" - less_than: "必须小于 {{count}}" - less_than_or_equal_to: "必须小于或等于 {{count}}" + 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: "An issue can not be linked to one of its subtasks" + cant_link_an_issue_with_a_descendant: "问题不能关联到它的子任务" actionview_instancetag_blank_option: 请选择 @@ -168,49 +159,57 @@ notice_file_not_found: 您访问的页面不存在或已被删除。 notice_locking_conflict: 数据已被另一位用户更新 notice_not_authorized: 对不起,您无权访问此页面。 - notice_email_sent: "邮件已成功发送到 {{value}}" - notice_email_error: "发送邮件时发生错误 ({{value}})" + 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_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: 问题完成度已更新。 - - error_can_t_load_default_data: "无法载入默认设置:{{value}}" + notice_gantt_chart_truncated: "The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})" + + error_can_t_load_default_data: "无法载入默认设置:%{value}" error_scm_not_found: "版本库中不存在该条目和(或)其修订版本。" - error_scm_command_failed: "访问版本库时发生错误:{{value}}" + 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: 请选择目标跟踪标签和角色 - - warning_attachments_not_saved: "{{count}} 个文件保存失败。" + error_unable_delete_issue_status: '无法删除问题状态' + error_unable_to_connect: "无法连接 (%{value})" + warning_attachments_not_saved: "%{count} 个文件保存失败" - mail_subject_lost_password: "您的 {{value}} 密码" + mail_subject_lost_password: "您的 %{value} 密码" mail_body_lost_password: '请点击以下链接来修改您的密码:' - mail_subject_register: "{{value}}帐号激活" + mail_subject_register: "%{value}帐号激活" mail_body_register: '请点击以下链接来激活您的帐号:' - mail_body_account_information_external: "您可以使用您的 {{value}} 帐号来登录。" + 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}}' wiki页面已添加" - mail_body_wiki_content_added: "'{{id}}' wiki页面已由 {{author}} 添加。" - mail_subject_wiki_content_updated: "'{{id}}' wiki页面已更新" - mail_body_wiki_content_updated: "'{{id}}' wiki页面已由 {{author}} 更新。" - + 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}' wiki页面已添加" + mail_body_wiki_content_added: "'%{id}' wiki页面已由 %{author} 添加。" + mail_subject_wiki_content_updated: "'%{id}' wiki页面已更新。" + mail_body_wiki_content_updated: "'%{id}' wiki页面已由 %{author} 更新。" + gui_validation_error: 1 个错误 - gui_validation_error_plural: "{{count}} 个错误" + gui_validation_error_plural: "%{count} 个错误" field_name: 名称 field_description: 描述 @@ -247,11 +246,12 @@ field_priority: 优先级 field_fixed_version: 目标版本 field_user: 用户 + field_principal: 用户/用户组 field_role: 角色 field_homepage: 主页 field_is_public: 公开 field_parent: 上级项目 - field_is_in_roadmap: 在路线图中显示问题 + field_is_in_roadmap: 在路线图中显示 field_login: 登录名 field_mail_notification: 邮件通知 field_admin: 管理员 @@ -272,7 +272,8 @@ field_attr_lastname: 姓氏属性 field_attr_mail: 邮件属性 field_onthefly: 即时用户生成 - field_done_ratio: 完成度 + field_start_date: 开始日期 + field_done_ratio: % 完成 field_auth_source: 认证模式 field_hide_mail: 隐藏我的邮件地址 field_comments: 注释 @@ -290,6 +291,7 @@ field_redirect_existing_links: 重定向到现有链接 field_estimated_hours: 预期时间 field_column_names: 列 + field_time_entries: 工时 field_time_zone: 时区 field_searchable: 可用作搜索条件 field_default_value: 默认值 @@ -301,7 +303,12 @@ 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: 欢迎文字 @@ -309,7 +316,7 @@ setting_login_required: 要求认证 setting_self_registration: 允许自注册 setting_attachment_max_size: 附件大小限制 - setting_issues_export_limit: 问题输出条目的限制 + setting_issues_export_limit: 问题导出条目的限制 setting_mail_from: 邮件发件人地址 setting_bcc_recipients: 使用密件抄送 (bcc) setting_plain_text_mail: 纯文本(无HTML) @@ -328,7 +335,7 @@ 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: 每页显示条目个数的设置 @@ -354,12 +361,18 @@ setting_issue_done_ratio_issue_status: 使用问题状态 setting_start_of_week: 日历开始于 setting_rest_api_enabled: 启用REST web service - + 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: 查看问题 @@ -407,7 +420,9 @@ 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: 新闻 @@ -416,6 +431,8 @@ project_module_wiki: Wiki project_module_repository: 版本库 project_module_boards: 讨论区 + project_module_calendar: 日历 + project_module_gantt: 甘特图 label_user: 用户 label_user_plural: 用户 @@ -427,14 +444,14 @@ label_x_projects: zero: 无项目 one: 1 个项目 - other: "{{count}} 个项目" + 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_issues_by: "按 %{value} 分组显示问题" label_issue_added: 问题已添加 label_issue_updated: 问题已更新 label_document: 文档 @@ -474,6 +491,7 @@ label_my_page: 我的工作台 label_my_account: 我的帐号 label_my_projects: 我的项目 + label_my_page_block: 我的工作台模块 label_administration: 管理 label_login: 登录 label_logout: 退出 @@ -483,8 +501,8 @@ label_last_login: 最后登录 label_registered_on: 注册于 label_activity: 活动 - label_overall_activity: 全部活动 - label_user_activity: "{{value}} 的活动" + label_overall_activity: 活动概览 + label_user_activity: "%{value} 的活动" label_new: 新建 label_logged_as: 登录为 label_environment: 环境 @@ -494,7 +512,7 @@ label_auth_source_plural: 认证模式 label_subproject_plural: 子项目 label_subproject_new: 新建子项目 - label_and_its_subprojects: "{{value}} 及其子项目" + label_and_its_subprojects: "%{value} 及其子项目" label_min_max_length: 最小 - 最大 长度 label_list: 列表 label_date: 日期 @@ -505,8 +523,8 @@ label_text: 文本 label_attribute: 属性 label_attribute_plural: 属性 - label_download: "{{count}} 次下载" - label_download_plural: "{{count}} 次下载" + label_download: "%{count} 次下载" + label_download_plural: "%{count} 次下载" label_no_data: 没有任何数据可供显示 label_change_status: 变更状态 label_history: 历史记录 @@ -538,26 +556,26 @@ label_closed_issues: 已关闭 label_closed_issues_plural: 已关闭 label_x_open_issues_abbr_on_total: - zero: 0 打开 / {{total}} - one: 1 打开 / {{total}} - other: "{{count}} 打开 / {{total}}" + zero: 0 打开 / %{total} + one: 1 打开 / %{total} + other: "%{count} 打开 / %{total}" label_x_open_issues_abbr: zero: 0 打开 one: 1 打开 - other: "{{count}} 打开" + other: "%{count} 打开" label_x_closed_issues_abbr: - zero: 0 关闭 - one: 1 关闭 - other: "{{count}} 关闭" + zero: 0 已关闭 + one: 1 已关闭 + other: "%{count} 已关闭" label_total: 合计 label_permissions: 权限 label_current_status: 当前状态 - label_new_statuses_allowed: 可变更的新状态 + label_new_statuses_allowed: 允许的新状态 label_all: 全部 label_none: 无 label_nobody: 无人 - label_next: 下一个 - label_previous: 上一个 + label_next: 下一页 + label_previous: 上一页 label_used_by: 使用中 label_details: 详情 label_add_note: 添加说明 @@ -566,7 +584,7 @@ label_months_from: 个月以来 label_gantt: 甘特图 label_internal: 内部 - label_last_changes: "最近的 {{count}} 次变更" + label_last_changes: "最近的 %{count} 次变更" label_change_view_all: 查看所有变更 label_personalize_page: 个性化定制本页 label_comment: 评论 @@ -574,7 +592,7 @@ label_x_comments: zero: 无评论 one: 1 条评论 - other: "{{count}} 条评论" + other: "%{count} 条评论" label_comment_add: 添加评论 label_comment_added: 评论已添加 label_comment_delete: 删除评论 @@ -595,7 +613,7 @@ label_yesterday: 昨天 label_this_week: 本周 label_last_week: 上周 - label_last_n_days: "最后 {{count}} 天" + label_last_n_days: "最后 %{count} 天" label_this_month: 本月 label_last_month: 上月 label_this_year: 今年 @@ -609,13 +627,13 @@ label_repository: 版本库 label_repository_plural: 版本库 label_browse: 浏览 - label_modification: "{{count}} 个更新" - label_modification_plural: "{{count}} 个更新" + label_modification: "%{count} 个更新" + label_modification_plural: "%{count} 个更新" label_branch: 分支 label_tag: 标签 label_revision: 修订 label_revision_plural: 修订 - label_revision_id: 修订 {{value}} + label_revision_id: 修订 %{value} label_associated_revisions: 相关修订版本 label_added: 已添加 label_modified: 已修改 @@ -632,8 +650,8 @@ label_sort_lower: 下移 label_sort_lowest: 置底 label_roadmap: 路线图 - label_roadmap_due_in: "截止日期到 {{value}}" - label_roadmap_overdue: "{{value}} 延期" + label_roadmap_due_in: "截止日期到 %{value}" + label_roadmap_overdue: "%{value} 延期" label_roadmap_no_issues: 该版本没有问题 label_search: 搜索 label_result_plural: 结果 @@ -651,8 +669,9 @@ label_changes_details: 所有变更的详情 label_issue_tracking: 问题跟踪 label_spent_time: 耗时 - label_f_hour: "{{value}} 小时" - label_f_hour_plural: "{{value}} 小时" + label_overall_spent_time: 总体耗时 + label_f_hour: "%{value} 小时" + label_f_hour_plural: "%{value} 小时" label_time_tracking: 时间跟踪 label_change_plural: 变更 label_statistics: 统计 @@ -688,6 +707,8 @@ label_board: 讨论区 label_board_new: 新建讨论区 label_board_plural: 讨论区 + label_board_locked: 锁定 + label_board_sticky: 置顶 label_topic_plural: 主题 label_message_plural: 帖子 label_message_last: 最新的帖子 @@ -701,15 +722,15 @@ label_date_from: 从 label_date_to: 到 label_language_based: 根据用户的语言 - label_sort_by: "根据 {{value}} 排序" + 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_feeds_access_key_created_on: "RSS存取键是在 %{value} 之前建立的" label_module_plural: 模块 - label_added_time_by: "由 {{author}} 在 {{age}} 之前添加" - label_updated_time: " 更新于 {{value}} 之前" - label_updated_time_by: "由 {{author}} 更新于 {{age}} 之前" + label_added_time_by: "由 %{author} 在 %{age} 之前添加" + label_updated_time: " 更新于 %{value} 之前" + label_updated_time_by: "由 %{author} 更新于 %{age} 之前" label_jump_to_a_project: 选择一个项目... label_file_plural: 文件 label_changeset_plural: 变更 @@ -721,12 +742,16 @@ 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_display_per_page: "每页显示:%{value}" + label_age: 提交时间 label_change_properties: 修改属性 label_general: 一般 label_more: 更多 @@ -748,7 +773,7 @@ label_sort: 排序 label_ascending: 升序 label_descending: 降序 - label_date_from_to: 从 {{start}} 到 {{end}} + label_date_from_to: 从 %{start} 到 %{end} label_wiki_content_added: Wiki 页面已添加 label_wiki_content_updated: Wiki 页面已更新 label_group: 组 @@ -767,7 +792,12 @@ 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_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: 提交 @@ -779,6 +809,7 @@ button_create_and_continue: 创建并继续 button_test: 测试 button_edit: 编辑 + button_edit_associated_wikipage: "编辑相关wiki页面: %{page_title}" button_add: 新增 button_change: 修改 button_apply: 应用 @@ -816,69 +847,73 @@ 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_subprojects_destroy_warning: "以下子项目也将被同时删除:%{value}" text_workflow_edit: 选择角色和跟踪标签来编辑工作流程 text_are_you_sure: 您确定? - text_journal_changed: "{{label}} 从 {{old}} 变更为 {{new}}" - text_journal_set_to: "{{label}} 被设置为 {{value}}" - text_journal_deleted: "{{label}} 已删除 ({{old}})" - text_journal_added: "{{label}} {{value}} 已添加" + 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),数字和连字符(-)。
    请注意,标识符保存后将不可修改。' - text_caracters_maximum: "最多 {{count}} 个字符。" - text_caracters_minimum: "至少需要 {{count}} 个字符。" - text_length_between: "长度必须在 {{min}} 到 {{max}} 个字符之间。" + 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_issue_added: "问题 %{id} 已由 %{author} 提交。" + text_issue_updated: "问题 %{id} 已由 %{author} 更新。" text_wiki_destroy_confirmation: 您确定要删除这个 wiki 及其所有内容吗? - text_issue_category_destroy_question: "有一些问题({{count}} 个)属于此类别。您想进行哪种操作?" + 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_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_question: 您要删除的问题已经上报了 %{hours} 小时的工作量。您想进行那种操作? text_destroy_time_entries: 删除上报的工作量 text_assign_time_entries_to_project: 将已上报的工作量提交到项目中 text_reassign_time_entries: '将已上报的工作量指定到此问题:' - text_user_wrote: "{{value}} 写到:" + text_user_wrote: "%{value} 写到:" + text_enumeration_destroy_question: "%{count} 个对象被关联到了这个枚举值。" 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: '每项数值一行' - text_wiki_page_destroy_question: 此页面有 {{descendants}} 个子页面和下级页面。您想进行那种操作? - text_wiki_page_reassign_children: 将子页面的上级页面设置为 + 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: 你正在删除你现有的某些或全部权限,如果这样做了你可能将会再也无法编辑该项目了。你确定要继续吗? - + text_zoom_in: Zoom in + text_zoom_out: Zoom out + default_role_manager: 管理人员 default_role_developer: 开发人员 default_role_reporter: 报告人员 @@ -905,44 +940,43 @@ enumeration_doc_categories: 文档类别 enumeration_activities: 活动(时间跟踪) enumeration_system_activity: 系统活动 - label_board_sticky: 置顶 - label_board_locked: 锁定 - permission_export_wiki_pages: 导出 wiki 页面 - setting_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: 复制项目时发送邮件通知 - error_can_not_delete_custom_field: 不能删除自定义属性 - error_unable_to_connect: 不能连接到 ({{value}}) - error_can_not_remove_role: 该角色正在使用中, 不能删除. - error_can_not_delete_tracker: 该跟踪标签包含问题, 不能删除. - field_principal: 用户/用户组 - label_my_page_block: 我的工作台模块 - notice_failed_to_save_members: "成员保存失败:{{errors}}。" - text_zoom_out: 缩小 - text_zoom_in: 放大 - notice_unable_delete_time_entry: 无法删除工时记录。 - label_overall_spent_time: 所有项目耗用工时 - field_time_entries: Log time - 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. - field_start_date: Start date - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header + + 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" + label_news_comment_added: Comment added to a news + button_expand_all: Expand all + button_collapse_all: Collapse all + label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee + label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author + label_bulk_edit_selected_time_entries: Bulk edit selected time entries + text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? + label_role_anonymous: Anonymous + label_role_non_member: Non member + label_issue_note_added: Note added + label_issue_status_updated: Status updated + label_issue_priority_updated: Priority updated + label_issues_visibility_own: Issues created by or assigned to the user + field_issues_visibility: Issues visibility + label_issues_visibility_all: All issues + permission_set_own_issues_private: Set own issues public or private + field_is_private: Private + permission_set_issues_private: Set issues public or private + label_issues_visibility_public: All non private issues + text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). + + field_commit_logs_encoding: 提交注释的编码 + field_scm_path_encoding: Path encoding + text_scm_path_encoding_note: "Default: UTF-8" + field_path_to_repository: Path to repository + field_root_directory: Root directory + field_cvs_module: Module + field_cvsroot: CVSROOT + text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo) + text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) + text_scm_command: Command + text_scm_command_version: Version + label_git_report_last_commit: Report last commit for files and directories + text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it. + text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel. diff -r f7c525dc7585 -r 0b6c82dead28 config/routes.rb --- a/config/routes.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/config/routes.rb Mon Jul 25 14:23:37 2011 +0100 @@ -14,13 +14,21 @@ map.connect 'roles/workflow/:id/:role_id/:tracker_id', :controller => 'roles', :action => 'workflow' map.connect 'help/:ctrl/:page', :controller => 'help' - map.connect 'projects/:project_id/time_entries/report', :controller => 'time_entry_reports', :action => 'report' map.with_options :controller => 'time_entry_reports', :action => 'report',:conditions => {:method => :get} do |time_report| + time_report.connect 'projects/:project_id/issues/:issue_id/time_entries/report' + time_report.connect 'projects/:project_id/issues/:issue_id/time_entries/report.:format' + time_report.connect 'projects/:project_id/time_entries/report' + time_report.connect 'projects/:project_id/time_entries/report.:format' time_report.connect 'time_entries/report' time_report.connect 'time_entries/report.:format' - time_report.connect 'projects/:project_id/time_entries/report.:format' end + map.bulk_edit_time_entry 'time_entries/bulk_edit', + :controller => 'timelog', :action => 'bulk_edit', :conditions => { :method => :get } + map.bulk_update_time_entry 'time_entries/bulk_edit', + :controller => 'timelog', :action => 'bulk_update', :conditions => { :method => :post } + map.time_entries_context_menu '/time_entries/context_menu', + :controller => 'context_menus', :action => 'time_entries' # TODO: wasteful since this is also nested under issues, projects, and projects/issues map.resources :time_entries, :controller => 'timelog' @@ -80,10 +88,16 @@ map.quoted_issue '/issues/:id/quoted', :controller => 'journals', :action => 'new', :id => /\d+/, :conditions => { :method => :post } map.connect '/issues/:id/destroy', :controller => 'issues', :action => 'destroy', :conditions => { :method => :post } # legacy - map.resource :gantt, :path_prefix => '/issues', :controller => 'gantts', :only => [:show, :update] - map.resource :gantt, :path_prefix => '/projects/:project_id/issues', :controller => 'gantts', :only => [:show, :update] - map.resource :calendar, :path_prefix => '/issues', :controller => 'calendars', :only => [:show, :update] - map.resource :calendar, :path_prefix => '/projects/:project_id/issues', :controller => 'calendars', :only => [:show, :update] + map.with_options :controller => 'gantts', :action => 'show' do |gantts_routes| + gantts_routes.connect '/projects/:project_id/issues/gantt' + gantts_routes.connect '/projects/:project_id/issues/gantt.:format' + gantts_routes.connect '/issues/gantt.:format' + end + + map.with_options :controller => 'calendars', :action => 'show' do |calendars_routes| + calendars_routes.connect '/projects/:project_id/issues/calendar' + calendars_routes.connect '/issues/calendar' + end map.with_options :controller => 'reports', :conditions => {:method => :get} do |reports| reports.connect 'projects/:id/issues/report', :action => 'issue_report' @@ -122,8 +136,7 @@ map.resources :users, :member => { :edit_membership => :post, :destroy_membership => :post - }, - :except => [:destroy] + } # For nice "roadmap" in the url for the index action map.connect 'projects/:project_id/roadmap', :controller => 'versions', :action => 'index' @@ -138,6 +151,7 @@ :copy => [:get, :post], :settings => :get, :modules => :post, + :overview => :post, :archive => :post, :unarchive => :post } do |project| @@ -216,7 +230,9 @@ map.resources :groups #left old routes at the bottom for backwards compat + map.connect 'projects/:project_id/queries/:action', :controller => 'queries' map.connect 'projects/:project_id/issues/:action', :controller => 'issues' + map.connect 'projects/:project_id/members/:action', :controller => 'members' map.connect 'projects/:project_id/documents/:action', :controller => 'documents' map.connect 'projects/:project_id/boards/:action/:id', :controller => 'boards' map.connect 'boards/:board_id/topics/:action/:id', :controller => 'messages' @@ -236,8 +252,9 @@ map.with_options :controller => 'sys' do |sys| sys.connect 'sys/projects.:format', :action => 'projects', :conditions => {:method => :get} sys.connect 'sys/projects/:id/repository.:format', :action => 'create_project_repository', :conditions => {:method => :post} - sys.connect 'sys/projects/:id/external-repository.:format', :action => 'get_external_repo_url', :conditions => {:method => :get} + sys.connect 'sys/projects/:id/external_repository.:format', :action => 'get_external_repo_url', :conditions => {:method => :get} sys.connect 'sys/projects/:id/embedded.:format', :action => 'set_embedded_active', :conditions => { :method => :post } + sys.connect 'sys/projects/:id/repository_cache.:format', :action => 'clear_repository_cache', :conditions => {:method => :post} end # Install the default route as the lowest priority. diff -r f7c525dc7585 -r 0b6c82dead28 config/settings.yml --- a/config/settings.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/config/settings.yml Mon Jul 25 14:23:37 2011 +0100 @@ -70,6 +70,9 @@ feeds_limit: format: int default: 15 +gantt_items_limit: + format: int + default: 500 # Maximum size of files that can be displayed # inline through the file viewer (in KB) file_max_size_displayed: @@ -102,6 +105,11 @@ default: 0 commit_fix_done_ratio: default: 100 +commit_logtime_enabled: + default: 0 +commit_logtime_activity_id: + format: int + default: 0 # autologin duration in days # 0 means autologin is disabled autologin: diff -r f7c525dc7585 -r 0b6c82dead28 db/.svn/all-wcprops --- a/db/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/db/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,5 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 27 -/svn/!svn/ver/4402/trunk/db +V 41 +/svn/!svn/ver/5878/branches/1.2-stable/db END diff -r f7c525dc7585 -r 0b6c82dead28 db/.svn/dir-prop-base --- a/db/.svn/dir-prop-base Mon Mar 28 18:17:06 2011 +0100 +++ b/db/.svn/dir-prop-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,7 @@ K 10 svn:ignore -V 26 +V 20 schema.rb -demo.db -test.db +*.sqlite3 END diff -r f7c525dc7585 -r 0b6c82dead28 db/.svn/entries --- a/db/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/db/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/db +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/db http://redmine.rubyforge.org/svn -2010-11-14T12:33:14.198318Z -4402 -jplang +2011-05-12T17:29:18.150936Z +5762 +tmaruyama has-props diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/.svn/all-wcprops --- a/db/migrate/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/db/migrate/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,1067 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 35 -/svn/!svn/ver/4402/trunk/db/migrate +V 49 +/svn/!svn/ver/5878/branches/1.2-stable/db/migrate END -20101107130441_add_custom_fields_visible.rb -K 25 -svn:wc:ra_dav:version-url -V 79 -/svn/!svn/ver/4383/trunk/db/migrate/20101107130441_add_custom_fields_visible.rb -END -077_remove_issue_statuses_html_color.rb -K 25 -svn:wc:ra_dav:version-url -V 74 -/svn/!svn/ver/881/trunk/db/migrate/077_remove_issue_statuses_html_color.rb -END -053_add_changes_branch.rb -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/559/trunk/db/migrate/053_add_changes_branch.rb -END -20091017214519_add_missing_indexes_to_custom_values.rb -K 25 -svn:wc:ra_dav:version-url -V 90 -/svn/!svn/ver/2928/trunk/db/migrate/20091017214519_add_missing_indexes_to_custom_values.rb -END -101_populate_changesets_user_id.rb -K 25 -svn:wc:ra_dav:version-url -V 70 -/svn/!svn/ver/2006/trunk/db/migrate/101_populate_changesets_user_id.rb -END -033_add_timelog_permissions.rb -K 25 -svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/674/trunk/db/migrate/033_add_timelog_permissions.rb -END -078_add_custom_fields_position.rb -K 25 -svn:wc:ra_dav:version-url -V 69 -/svn/!svn/ver/1623/trunk/db/migrate/078_add_custom_fields_position.rb -END -006_calendar_and_activity.rb -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/674/trunk/db/migrate/006_calendar_and_activity.rb -END -029_create_wiki_contents.rb -K 25 -svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/479/trunk/db/migrate/029_create_wiki_contents.rb -END -028_create_wiki_pages.rb -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/323/trunk/db/migrate/028_create_wiki_pages.rb -END -20090704172355_create_groups_users.rb -K 25 -svn:wc:ra_dav:version-url -V 73 -/svn/!svn/ver/2869/trunk/db/migrate/20090704172355_create_groups_users.rb -END -20101114115359_change_projects_identifier_limit.rb -K 25 -svn:wc:ra_dav:version-url -V 86 -/svn/!svn/ver/4402/trunk/db/migrate/20101114115359_change_projects_identifier_limit.rb -END -080_add_users_type.rb -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/919/trunk/db/migrate/080_add_users_type.rb -END -20091017214440_add_missing_indexes_to_wiki_contents.rb -K 25 -svn:wc:ra_dav:version-url -V 90 -/svn/!svn/ver/2928/trunk/db/migrate/20091017214440_add_missing_indexes_to_wiki_contents.rb -END -018_set_doc_and_files_notifications.rb -K 25 -svn:wc:ra_dav:version-url -V 73 -/svn/!svn/ver/674/trunk/db/migrate/018_set_doc_and_files_notifications.rb -END -20100129193402_change_users_mail_notification_to_string.rb -K 25 -svn:wc:ra_dav:version-url -V 94 -/svn/!svn/ver/4216/trunk/db/migrate/20100129193402_change_users_mail_notification_to_string.rb -END -008_create_user_preferences.rb -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/67/trunk/db/migrate/008_create_user_preferences.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 -V 80 -/svn/!svn/ver/3206/trunk/db/migrate/20091220183727_add_index_to_settings_name.rb -END -20091017214236_add_missing_indexes_to_time_entries.rb -K 25 -svn:wc:ra_dav:version-url -V 89 -/svn/!svn/ver/2928/trunk/db/migrate/20091017214236_add_missing_indexes_to_time_entries.rb -END -035_create_changes.rb -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/377/trunk/db/migrate/035_create_changes.rb -END -102_add_custom_fields_editable.rb -K 25 -svn:wc:ra_dav:version-url -V 69 -/svn/!svn/ver/2276/trunk/db/migrate/102_add_custom_fields_editable.rb -END -20091017213332_add_missing_indexes_to_documents.rb -K 25 -svn:wc:ra_dav:version-url -V 86 -/svn/!svn/ver/2928/trunk/db/migrate/20091017213332_add_missing_indexes_to_documents.rb -END -096_add_commit_access_permission.rb -K 25 -svn:wc:ra_dav:version-url -V 71 -/svn/!svn/ver/1814/trunk/db/migrate/096_add_commit_access_permission.rb -END -024_add_roadmap_permission.rb -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/674/trunk/db/migrate/024_add_roadmap_permission.rb -END -091_change_changesets_revision_to_string.rb -K 25 -svn:wc:ra_dav:version-url -V 79 -/svn/!svn/ver/1236/trunk/db/migrate/091_change_changesets_revision_to_string.rb -END -20090401221305_update_enumerations_to_sti.rb -K 25 -svn:wc:ra_dav:version-url -V 80 -/svn/!svn/ver/2777/trunk/db/migrate/20090401221305_update_enumerations_to_sti.rb -END -20091017214720_add_missing_indexes_to_wiki_redirects.rb -K 25 -svn:wc:ra_dav:version-url -V 91 -/svn/!svn/ver/2928/trunk/db/migrate/20091017214720_add_missing_indexes_to_wiki_redirects.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 -K 25 -svn:wc:ra_dav:version-url -V 68 -/svn/!svn/ver/1623/trunk/db/migrate/072_add_enumerations_position.rb -END -108_add_identity_url_to_users.rb -K 25 -svn:wc:ra_dav:version-url -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 -V 81 -/svn/!svn/ver/3206/trunk/db/migrate/20091220184736_add_indexes_to_issue_status.rb -END -20100819172912_enable_calendar_and_gantt_modules_where_appropriate.rb -K 25 -svn:wc:ra_dav:version-url -V 105 -/svn/!svn/ver/4013/trunk/db/migrate/20100819172912_enable_calendar_and_gantt_modules_where_appropriate.rb -END -044_set_language_length_to_five.rb -K 25 -svn:wc:ra_dav:version-url -V 69 -/svn/!svn/ver/518/trunk/db/migrate/044_set_language_length_to_five.rb -END -20091227112908_change_wiki_contents_text_limit.rb -K 25 -svn:wc:ra_dav:version-url -V 85 -/svn/!svn/ver/3254/trunk/db/migrate/20091227112908_change_wiki_contents_text_limit.rb -END -090_change_versions_name_limit.rb -K 25 -svn:wc:ra_dav:version-url -V 69 -/svn/!svn/ver/1220/trunk/db/migrate/090_change_versions_name_limit.rb -END -20090503121510_drop_members_role_id.rb -K 25 -svn:wc:ra_dav:version-url -V 74 -/svn/!svn/ver/2726/trunk/db/migrate/20090503121510_drop_members_role_id.rb -END -021_add_tracker_position.rb -K 25 -svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/864/trunk/db/migrate/021_add_tracker_position.rb -END -012_add_comments_permissions.rb -K 25 -svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/674/trunk/db/migrate/012_add_comments_permissions.rb -END -038_add_custom_field_is_filter.rb -K 25 -svn:wc:ra_dav:version-url -V 68 -/svn/!svn/ver/447/trunk/db/migrate/038_add_custom_field_is_filter.rb -END -20100221100219_add_index_on_changesets_scmid.rb -K 25 -svn:wc:ra_dav:version-url -V 83 -/svn/!svn/ver/3471/trunk/db/migrate/20100221100219_add_index_on_changesets_scmid.rb -END -046_create_messages.rb -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/529/trunk/db/migrate/046_create_messages.rb -END -20091225164732_remove_enumerations_opt.rb -K 25 -svn:wc:ra_dav:version-url -V 77 -/svn/!svn/ver/3240/trunk/db/migrate/20091225164732_remove_enumerations_opt.rb -END -030_add_projects_feeds_permissions.rb -K 25 -svn:wc:ra_dav:version-url -V 72 -/svn/!svn/ver/674/trunk/db/migrate/030_add_projects_feeds_permissions.rb -END -045_create_boards.rb -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/864/trunk/db/migrate/045_create_boards.rb -END -076_allow_null_position.rb -K 25 -svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/1140/trunk/db/migrate/076_allow_null_position.rb -END -20091017213835_add_missing_indexes_to_user_preferences.rb -K 25 -svn:wc:ra_dav:version-url -V 93 -/svn/!svn/ver/2928/trunk/db/migrate/20091017213835_add_missing_indexes_to_user_preferences.rb -END -20091220183509_add_lft_and_rgt_indexes_to_projects.rb -K 25 -svn:wc:ra_dav:version-url -V 89 -/svn/!svn/ver/3206/trunk/db/migrate/20091220183509_add_lft_and_rgt_indexes_to_projects.rb -END -20091017212644_add_missing_indexes_to_messages.rb -K 25 -svn:wc:ra_dav:version-url -V 85 -/svn/!svn/ver/2928/trunk/db/migrate/20091017212644_add_missing_indexes_to_messages.rb -END -20100705164950_change_changes_path_length_limit.rb -K 25 -svn:wc:ra_dav:version-url -V 86 -/svn/!svn/ver/3860/trunk/db/migrate/20100705164950_change_changes_path_length_limit.rb -END -20091017213910_add_missing_indexes_to_issues.rb -K 25 -svn:wc:ra_dav:version-url -V 83 -/svn/!svn/ver/2928/trunk/db/migrate/20091017213910_add_missing_indexes_to_issues.rb -END -20091017214406_add_missing_indexes_to_attachments.rb -K 25 -svn:wc:ra_dav:version-url -V 88 -/svn/!svn/ver/2928/trunk/db/migrate/20091017214406_add_missing_indexes_to_attachments.rb -END -081_create_projects_trackers.rb -K 25 -svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/920/trunk/db/migrate/081_create_projects_trackers.rb -END -20091017214308_add_missing_indexes_to_news.rb -K 25 -svn:wc:ra_dav:version-url -V 81 -/svn/!svn/ver/2928/trunk/db/migrate/20091017214308_add_missing_indexes_to_news.rb -END -20090403001910_add_project_to_enumerations.rb -K 25 -svn:wc:ra_dav:version-url -V 81 -/svn/!svn/ver/2947/trunk/db/migrate/20090403001910_add_project_to_enumerations.rb -END -107_add_open_id_authentication_tables.rb -K 25 -svn:wc:ra_dav:version-url -V 76 -/svn/!svn/ver/2439/trunk/db/migrate/107_add_open_id_authentication_tables.rb -END -075_add_members_mail_notification.rb -K 25 -svn:wc:ra_dav:version-url -V 71 -/svn/!svn/ver/855/trunk/db/migrate/075_add_members_mail_notification.rb -END -047_add_boards_permissions.rb -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/674/trunk/db/migrate/047_add_boards_permissions.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 -V 84 -/svn/!svn/ver/3578/trunk/db/migrate/20100313171051_add_index_on_issues_nested_set.rb -END -071_add_queries_column_names.rb -K 25 -svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/782/trunk/db/migrate/071_add_queries_column_names.rb -END -20091123212029_add_default_done_ratio_to_issue_status.rb -K 25 -svn:wc:ra_dav:version-url -V 92 -/svn/!svn/ver/3151/trunk/db/migrate/20091123212029_add_default_done_ratio_to_issue_status.rb -END -020_add_role_position.rb -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/864/trunk/db/migrate/020_add_role_position.rb -END -20091010093521_fix_users_custom_values.rb -K 25 -svn:wc:ra_dav:version-url -V 77 -/svn/!svn/ver/2905/trunk/db/migrate/20091010093521_fix_users_custom_values.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 -V 85 -/svn/!svn/ver/4368/trunk/db/migrate/20100129193813_update_mail_notification_values.rb -END -20091017214611_add_missing_indexes_to_journals.rb -K 25 -svn:wc:ra_dav:version-url -V 85 -/svn/!svn/ver/2928/trunk/db/migrate/20091017214611_add_missing_indexes_to_journals.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 -K 25 -svn:wc:ra_dav:version-url -V 68 -/svn/!svn/ver/482/trunk/db/migrate/041_rename_comment_to_comments.rb -END -20091017214750_add_missing_indexes_to_custom_fields_trackers.rb -K 25 -svn:wc:ra_dav:version-url -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 -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 -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 -K 25 -svn:wc:ra_dav:version-url -V 67 -/svn/!svn/ver/1415/trunk/db/migrate/093_add_wiki_pages_protected.rb -END -060_change_changesets_committer_limit.rb -K 25 -svn:wc:ra_dav:version-url -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 -V 68 -/svn/!svn/ver/731/trunk/db/migrate/069_add_issues_estimated_hours.rb -END -027_create_wikis.rb -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/323/trunk/db/migrate/027_create_wikis.rb -END -20101104182107_add_unique_index_on_members.rb -K 25 -svn:wc:ra_dav:version-url -V 81 -/svn/!svn/ver/4370/trunk/db/migrate/20101104182107_add_unique_index_on_members.rb -END -20100313132032_add_issues_nested_sets_columns.rb -K 25 -svn:wc:ra_dav:version-url -V 84 -/svn/!svn/ver/3573/trunk/db/migrate/20100313132032_add_issues_nested_sets_columns.rb -END -061_add_roles_builtin.rb -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/674/trunk/db/migrate/061_add_roles_builtin.rb -END -026_add_repository_login_and_password.rb -K 25 -svn:wc:ra_dav:version-url -V 75 -/svn/!svn/ver/319/trunk/db/migrate/026_add_repository_login_and_password.rb -END -022_serialize_possibles_values.rb -K 25 -svn:wc:ra_dav:version-url -V 68 -/svn/!svn/ver/223/trunk/db/migrate/022_serialize_possibles_values.rb -END -106_remove_projects_projects_count.rb -K 25 -svn:wc:ra_dav:version-url -V 73 -/svn/!svn/ver/2305/trunk/db/migrate/106_remove_projects_projects_count.rb -END -20090318181151_extend_settings_name.rb -K 25 -svn:wc:ra_dav:version-url -V 74 -/svn/!svn/ver/2599/trunk/db/migrate/20090318181151_extend_settings_name.rb -END -079_add_user_preferences_time_zone.rb -K 25 -svn:wc:ra_dav:version-url -V 72 -/svn/!svn/ver/917/trunk/db/migrate/079_add_user_preferences_time_zone.rb -END -099_add_delete_wiki_pages_attachments_permission.rb -K 25 -svn:wc:ra_dav:version-url -V 87 -/svn/!svn/ver/1938/trunk/db/migrate/099_add_delete_wiki_pages_attachments_permission.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 -V 55 -/svn/!svn/ver/95/trunk/db/migrate/013_create_queries.rb -END -049_add_wiki_destroy_page_permission.rb -K 25 -svn:wc:ra_dav:version-url -V 74 -/svn/!svn/ver/674/trunk/db/migrate/049_add_wiki_destroy_page_permission.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 -V 89 -/svn/!svn/ver/1069/trunk/db/migrate/085_add_role_tracker_old_status_index_to_workflows.rb -END -20091017213257_add_missing_indexes_to_auth_sources.rb -K 25 -svn:wc:ra_dav:version-url -V 89 -/svn/!svn/ver/2928/trunk/db/migrate/20091017213257_add_missing_indexes_to_auth_sources.rb -END -070_change_attachments_content_type_limit.rb -K 25 -svn:wc:ra_dav:version-url -V 80 -/svn/!svn/ver/1222/trunk/db/migrate/070_change_attachments_content_type_limit.rb -END -092_change_changes_from_revision_to_string.rb -K 25 -svn:wc:ra_dav:version-url -V 81 -/svn/!svn/ver/1236/trunk/db/migrate/092_change_changes_from_revision_to_string.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 -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 -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 -END -065_add_settings_updated_on.rb -K 25 -svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/685/trunk/db/migrate/065_add_settings_updated_on.rb -END -097_add_view_wiki_edits_permission.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 -END -20091108092559_add_versions_status.rb -K 25 -svn:wc:ra_dav:version-url -V 73 -/svn/!svn/ver/3259/trunk/db/migrate/20091108092559_add_versions_status.rb -END -20091017213228_add_missing_indexes_to_watchers.rb -K 25 -svn:wc:ra_dav:version-url -V 85 -/svn/!svn/ver/2928/trunk/db/migrate/20091017213228_add_missing_indexes_to_watchers.rb -END -063_add_roles_permissions.rb -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/674/trunk/db/migrate/063_add_roles_permissions.rb -END -20090704172350_populate_users_type.rb -K 25 -svn:wc:ra_dav:version-url -V 73 -/svn/!svn/ver/2869/trunk/db/migrate/20090704172350_populate_users_type.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 -K 25 -svn:wc:ra_dav:version-url -V 75 -/svn/!svn/ver/2729/trunk/db/migrate/20090503121505_populate_member_roles.rb -END -062_insert_builtin_roles.rb -K 25 -svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/674/trunk/db/migrate/062_insert_builtin_roles.rb -END -050_add_wiki_attachments_permissions.rb -K 25 -svn:wc:ra_dav:version-url -V 74 -/svn/!svn/ver/674/trunk/db/migrate/050_add_wiki_attachments_permissions.rb -END -074_add_auth_sources_tls.rb -K 25 -svn:wc:ra_dav:version-url -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 -V 80 -/svn/!svn/ver/3039/trunk/db/migrate/20091114105931_add_view_issues_permission.rb -END -20091017214336_add_missing_indexes_to_users.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/2928/trunk/db/migrate/20091017214336_add_missing_indexes_to_users.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 -V 83 -/svn/!svn/ver/2928/trunk/db/migrate/20091017213444_add_missing_indexes_to_tokens.rb -END -20090503121501_create_member_roles.rb -K 25 -svn:wc:ra_dav:version-url -V 73 -/svn/!svn/ver/2726/trunk/db/migrate/20090503121501_create_member_roles.rb -END -057_add_versions_wiki_page_title.rb -K 25 -svn:wc:ra_dav:version-url -V 70 -/svn/!svn/ver/564/trunk/db/migrate/057_add_versions_wiki_page_title.rb -END -20090323224724_add_type_to_enumerations.rb -K 25 -svn:wc:ra_dav:version-url -V 78 -/svn/!svn/ver/2777/trunk/db/migrate/20090323224724_add_type_to_enumerations.rb -END -004_export_pdf.rb -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/674/trunk/db/migrate/004_export_pdf.rb -END -031_add_repository_root_url.rb -K 25 -svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/344/trunk/db/migrate/031_add_repository_root_url.rb -END -20091205124427_add_versions_sharing.rb -K 25 -svn:wc:ra_dav:version-url -V 74 -/svn/!svn/ver/3123/trunk/db/migrate/20091205124427_add_versions_sharing.rb -END -20091017214644_add_missing_indexes_to_issue_relations.rb -K 25 -svn:wc:ra_dav:version-url -V 92 -/svn/!svn/ver/2928/trunk/db/migrate/20091017214644_add_missing_indexes_to_issue_relations.rb -END -036_add_changeset_commit_date.rb -K 25 -svn:wc:ra_dav:version-url -V 67 -/svn/!svn/ver/383/trunk/db/migrate/036_add_changeset_commit_date.rb -END -051_add_project_status.rb -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/549/trunk/db/migrate/051_add_project_status.rb -END -105_build_projects_tree.rb -K 25 -svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/2304/trunk/db/migrate/105_build_projects_tree.rb -END -20091017214015_add_missing_indexes_to_members.rb -K 25 -svn:wc:ra_dav:version-url -V 84 -/svn/!svn/ver/2928/trunk/db/migrate/20091017214015_add_missing_indexes_to_members.rb -END -20090401231134_add_active_field_to_enumerations.rb -K 25 -svn:wc:ra_dav:version-url -V 86 -/svn/!svn/ver/2946/trunk/db/migrate/20090401231134_add_active_field_to_enumerations.rb -END -084_change_auth_sources_account_limit.rb -K 25 -svn:wc:ra_dav:version-url -V 76 -/svn/!svn/ver/1222/trunk/db/migrate/084_change_auth_sources_account_limit.rb -END -20090704172358_add_member_roles_inherited_from.rb -K 25 -svn:wc:ra_dav:version-url -V 85 -/svn/!svn/ver/2869/trunk/db/migrate/20090704172358_add_member_roles_inherited_from.rb -END -019_add_issue_status_position.rb -K 25 -svn:wc:ra_dav:version-url -V 67 -/svn/!svn/ver/864/trunk/db/migrate/019_add_issue_status_position.rb -END -20091017212227_add_missing_indexes_to_workflows.rb -K 25 -svn:wc:ra_dav:version-url -V 86 -/svn/!svn/ver/2928/trunk/db/migrate/20091017212227_add_missing_indexes_to_workflows.rb -END -20101114115114_change_projects_name_limit.rb -K 25 -svn:wc:ra_dav:version-url -V 80 -/svn/!svn/ver/4402/trunk/db/migrate/20101114115114_change_projects_name_limit.rb -END -20090406161854_add_parent_id_to_enumerations.rb -K 25 -svn:wc:ra_dav:version-url -V 83 -/svn/!svn/ver/2947/trunk/db/migrate/20090406161854_add_parent_id_to_enumerations.rb -END -20091017212938_add_missing_indexes_to_repositories.rb -K 25 -svn:wc:ra_dav:version-url -V 89 -/svn/!svn/ver/2928/trunk/db/migrate/20091017212938_add_missing_indexes_to_repositories.rb -END -005_issue_start_date.rb -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/67/trunk/db/migrate/005_issue_start_date.rb -END -009_add_hide_mail_pref.rb -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/67/trunk/db/migrate/009_add_hide_mail_pref.rb -END -056_add_repositories_changes_permission.rb -K 25 -svn:wc:ra_dav:version-url -V 77 -/svn/!svn/ver/674/trunk/db/migrate/056_add_repositories_changes_permission.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 -068_create_enabled_modules.rb -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/725/trunk/db/migrate/068_create_enabled_modules.rb -END -20091017214136_add_missing_indexes_to_queries.rb -K 25 -svn:wc:ra_dav:version-url -V 84 -/svn/!svn/ver/2928/trunk/db/migrate/20091017214136_add_missing_indexes_to_queries.rb -END -20091017213151_add_missing_indexes_to_wiki_pages.rb -K 25 -svn:wc:ra_dav:version-url -V 87 -/svn/!svn/ver/2928/trunk/db/migrate/20091017213151_add_missing_indexes_to_wiki_pages.rb -END -066_add_custom_value_customized_index.rb -K 25 -svn:wc:ra_dav:version-url -V 75 -/svn/!svn/ver/702/trunk/db/migrate/066_add_custom_value_customized_index.rb -END -007_create_journals.rb -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/674/trunk/db/migrate/007_create_journals.rb -END -088_add_custom_fields_default_value.rb -K 25 -svn:wc:ra_dav:version-url -V 74 -/svn/!svn/ver/1091/trunk/db/migrate/088_add_custom_fields_default_value.rb -END -003_issue_add_note.rb -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/674/trunk/db/migrate/003_issue_add_note.rb -END -20091017213027_add_missing_indexes_to_comments.rb -K 25 -svn:wc:ra_dav:version-url -V 85 -/svn/!svn/ver/2928/trunk/db/migrate/20091017213027_add_missing_indexes_to_comments.rb -END -20091017213536_add_missing_indexes_to_changesets.rb -K 25 -svn:wc:ra_dav:version-url -V 87 -/svn/!svn/ver/2928/trunk/db/migrate/20091017213536_add_missing_indexes_to_changesets.rb -END -086_add_custom_fields_searchable.rb -K 25 -svn:wc:ra_dav:version-url -V 70 -/svn/!svn/ver/994/trunk/db/migrate/086_add_custom_fields_searchable.rb -END -042_create_issue_relations.rb -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/506/trunk/db/migrate/042_create_issue_relations.rb -END -011_add_news_comments_count.rb -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/81/trunk/db/migrate/011_add_news_comments_count.rb -END -20090312172426_add_queries_sort_criteria.rb -K 25 -svn:wc:ra_dav:version-url -V 79 -/svn/!svn/ver/2572/trunk/db/migrate/20090312172426_add_queries_sort_criteria.rb -END -20091017213642_add_missing_indexes_to_issue_categories.rb -K 25 -svn:wc:ra_dav:version-url -V 93 -/svn/!svn/ver/2928/trunk/db/migrate/20091017213642_add_missing_indexes_to_issue_categories.rb -END -100_add_changesets_user_id.rb -K 25 -svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/2006/trunk/db/migrate/100_add_changesets_user_id.rb -END -010_create_comments.rb -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/479/trunk/db/migrate/010_create_comments.rb -END -064_drop_permissions.rb -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/674/trunk/db/migrate/064_drop_permissions.rb -END -20090312194159_add_projects_trackers_unique_index.rb -K 25 -svn:wc:ra_dav:version-url -V 88 -/svn/!svn/ver/2580/trunk/db/migrate/20090312194159_add_projects_trackers_unique_index.rb -END -043_add_relations_permissions.rb -K 25 -svn:wc:ra_dav:version-url -V 67 -/svn/!svn/ver/674/trunk/db/migrate/043_add_relations_permissions.rb -END -055_add_repositories_type.rb -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/559/trunk/db/migrate/055_add_repositories_type.rb -END -20091025163651_add_activity_indexes.rb -K 25 -svn:wc:ra_dav:version-url -V 74 -/svn/!svn/ver/2981/trunk/db/migrate/20091025163651_add_activity_indexes.rb -END -058_add_issue_categories_assigned_to_id.rb -K 25 -svn:wc:ra_dav:version-url -V 77 -/svn/!svn/ver/577/trunk/db/migrate/058_add_issue_categories_assigned_to_id.rb -END -002_issue_move.rb -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/674/trunk/db/migrate/002_issue_move.rb -END -015_create_repositories.rb -K 25 -svn:wc:ra_dav:version-url -V 61 -/svn/!svn/ver/106/trunk/db/migrate/015_create_repositories.rb -END -20090425161243_add_queries_group_by.rb -K 25 -svn:wc:ra_dav:version-url -V 74 -/svn/!svn/ver/2696/trunk/db/migrate/20090425161243_add_queries_group_by.rb -END -014_add_queries_permissions.rb -K 25 -svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/674/trunk/db/migrate/014_add_queries_permissions.rb -END -087_change_projects_description_to_text.rb -K 25 -svn:wc:ra_dav:version-url -V 78 -/svn/!svn/ver/1189/trunk/db/migrate/087_change_projects_description_to_text.rb -END -20091017213757_add_missing_indexes_to_boards.rb -K 25 -svn:wc:ra_dav:version-url -V 83 -/svn/!svn/ver/2928/trunk/db/migrate/20091017213757_add_missing_indexes_to_boards.rb -END -017_create_settings.rb -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/167/trunk/db/migrate/017_create_settings.rb -END -095_add_wiki_pages_parent_id.rb -K 25 -svn:wc:ra_dav:version-url -V 67 -/svn/!svn/ver/1698/trunk/db/migrate/095_add_wiki_pages_parent_id.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/.svn/entries --- a/db/migrate/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/db/migrate/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/db/migrate +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/db/migrate http://redmine.rubyforge.org/svn -2010-11-14T12:33:14.198318Z -4402 -jplang +2011-05-12T17:29:18.150936Z +5762 +tmaruyama @@ -32,7 +32,7 @@ -2010-11-19T13:04:50.884918Z +2011-07-14T09:24:09.000000Z 21dc29619a0cfd0f3aa12d77cc5cb132 2010-11-07T14:17:35.749175Z 4383 @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.895727Z +2011-07-14T09:24:09.000000Z e1234fbaef167ddc0013ffe1d3bc67b9 2007-11-04T11:40:17.595469Z 881 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.891758Z +2011-07-14T09:24:09.000000Z 0b2c38434ec4b25c41f50963a46a3bc6 2007-06-12T20:12:05.590809Z 559 @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.927757Z +2011-07-14T09:24:09.000000Z dba48c03009eb5bcbd2f686a37c42147 2009-10-17T22:23:29.892475Z 2928 @@ -162,13 +162,47 @@ 208 +20110408103312_add_roles_issues_visibility.rb +file + + + + +2011-06-06T13:18:33.000000Z +a2bd4929e0871bc3fd00ca4a5aa321cc +2011-04-11T17:53:15.908614Z +5416 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +253 + 101_populate_changesets_user_id.rb file -2010-09-23T14:37:44.911755Z +2011-07-14T09:24:09.000000Z b17611805f3b447ec0f0b703ea8b6d10 2008-11-10T18:59:06.897210Z 2006 @@ -202,7 +236,7 @@ -2010-09-23T14:37:44.883725Z +2011-07-14T09:24:09.000000Z 23ebbc94eb59590d0f0b200b4b38289b 2007-08-29T16:52:35.680643Z 674 @@ -236,7 +270,7 @@ -2010-09-23T14:37:44.895727Z +2011-07-14T09:24:09.000000Z ffabca1301a0ade41918ec9d6618fda0 2008-07-04T17:58:14.743502Z 1623 @@ -270,7 +304,7 @@ -2010-09-23T14:37:44.879727Z +2011-07-14T09:24:09.000000Z e6ff0ff9c004d9688e79b550991ec109 2007-08-29T16:52:35.680643Z 674 @@ -304,7 +338,7 @@ -2010-09-23T14:37:44.883725Z +2011-07-14T09:24:09.000000Z 39c994e2469a6dfb97fa50cf595439e8 2007-04-25T15:06:20.062636Z 479 @@ -338,7 +372,7 @@ -2010-09-23T14:37:44.883725Z +2011-07-14T09:24:09.000000Z 828df977f9e16943bc74595c65774c62 2007-03-10T15:09:49.115269Z 323 @@ -372,7 +406,7 @@ -2010-09-23T14:37:44.919754Z +2011-07-14T09:24:09.000000Z eea8e3f0a1fe28e8c686af190259a3d6 2009-09-12T08:36:46.650954Z 2869 @@ -406,7 +440,7 @@ -2010-11-19T13:04:50.884918Z +2011-07-14T09:24:09.000000Z be338f41292d95bb7ba3caa125999de0 2010-11-14T12:33:14.198318Z 4402 @@ -440,7 +474,7 @@ -2010-09-23T14:37:44.895727Z +2011-07-14T09:24:09.000000Z 06c8b504bcdd08c2f5dcf14a0b927420 2007-11-20T15:40:16.305800Z 919 @@ -474,7 +508,7 @@ -2010-09-23T14:37:44.927757Z +2011-07-14T09:24:09.000000Z 283fb200008f4dae98e0b3d46f0b97aa 2009-10-17T22:23:29.892475Z 2928 @@ -508,7 +542,7 @@ -2010-09-23T14:37:44.879727Z +2011-07-14T09:24:09.000000Z da329a16de705c673418c18119f788d8 2007-08-29T16:52:35.680643Z 674 @@ -542,33 +576,33 @@ -2010-11-19T13:04:50.888959Z -7a99a8db186dc5ae3903ff470808fbd8 -2010-09-28T18:22:00.231301Z -4216 -edavis10 - - - - - - - - - - - - - - - - - - - - - -290 +2011-07-14T09:24:09.000000Z +627e34913535f16f767133cbdc5b57f0 +2010-11-20T09:55:06.580420Z +4413 +jplang + + + + + + + + + + + + + + + + + + + + + +1071 008_create_user_preferences.rb file @@ -576,7 +610,7 @@ -2010-09-23T14:37:44.879727Z +2011-07-14T09:24:09.000000Z 5bb1427a275abe1f2ec4b6b03a087cd8 2006-12-03T19:55:45.161980Z 62 @@ -604,13 +638,47 @@ 281 +023_add_tracker_is_in_roadmap.rb +file + + + + +2011-07-14T09:24:09.000000Z +f4c10807bb47b69af35e9402966089f1 +2007-02-04T09:18:40.598564Z +228 +jplang + + + + + + + + + + + + + + + + + + + + + +230 + 025_add_search_permission.rb file -2010-09-23T14:37:44.883725Z +2011-07-14T09:24:09.000000Z 42937036f9c414f7d9b028f629b1ce20 2007-08-29T16:52:35.680643Z 674 @@ -638,47 +706,13 @@ 412 -023_add_tracker_is_in_roadmap.rb -file - - - - -2010-09-23T14:37:44.883725Z -f4c10807bb47b69af35e9402966089f1 -2007-02-04T09:18:40.598564Z -228 -jplang - - - - - - - - - - - - - - - - - - - - - -230 - 20091220183727_add_index_to_settings_name.rb file -2010-09-23T14:37:44.927757Z +2011-07-14T09:24:09.000000Z c5d86ec3cda95998a3fb590c6f492b6b 2009-12-20T19:13:22.787652Z 3206 @@ -712,7 +746,7 @@ -2010-09-23T14:37:44.923753Z +2011-07-14T09:24:09.000000Z b2f88560d10a9676bdb65e18f9a13d65 2009-10-17T22:23:29.892475Z 2928 @@ -746,7 +780,7 @@ -2010-09-23T14:37:44.883725Z +2011-07-14T09:24:09.000000Z a269e98b11a4d0d865c82328d7af5663 2007-03-25T12:12:15.060977Z 377 @@ -780,7 +814,7 @@ -2010-09-23T14:37:44.911755Z +2011-07-14T09:24:09.000000Z 69a42a62536b1f435ce1080ceccb4c75 2009-01-17T11:18:04.652409Z 2276 @@ -814,7 +848,7 @@ -2010-09-23T14:37:44.923753Z +2011-07-14T09:24:09.000000Z 84bec26b6eaebc64c437c5a3b4784a94 2009-10-17T22:23:29.892475Z 2928 @@ -848,7 +882,7 @@ -2010-09-23T14:37:44.899726Z +2011-07-14T09:24:09.000000Z 53ee6af48c18534db0ffdd4fa5c5df7f 2008-09-13T16:31:11.005265Z 1814 @@ -882,7 +916,7 @@ -2010-09-23T14:37:44.883725Z +2011-07-14T09:24:09.000000Z f1b96e04888c0a48bf29dd0556ba8027 2007-08-29T16:52:35.680643Z 674 @@ -916,7 +950,7 @@ -2010-09-23T14:37:44.899726Z +2011-07-14T09:24:09.000000Z 611baff063a1d909ba581aa98018cae7 2008-03-12T20:28:49.748698Z 1236 @@ -950,7 +984,7 @@ -2010-09-23T14:37:44.915753Z +2011-07-14T09:24:09.000000Z d343c3ba8f04d1cc71f20c9860d5907b 2009-05-30T23:30:36.923541Z 2777 @@ -984,7 +1018,7 @@ -2010-09-23T14:37:44.927757Z +2011-07-14T09:24:09.000000Z 72e8d36a80b63657037f175b368f2e2c 2009-10-17T22:23:29.892475Z 2928 @@ -1012,47 +1046,13 @@ 195 -034_create_changesets.rb -file - - - - -2010-09-23T14:37:44.883725Z -82595f307b6fe5053151a681b737f063 -2007-04-25T15:06:20.062636Z -479 -jplang - - - - - - - - - - - - - - - - - - - - - -515 - 072_add_enumerations_position.rb file -2010-09-23T14:37:44.895727Z +2011-07-14T09:24:09.000000Z 891f793e4f2ab50f57b8488c764ceff1 2008-07-04T17:58:14.743502Z 1623 @@ -1080,39 +1080,39 @@ 495 -108_add_identity_url_to_users.rb -file - - - - -2010-09-23T14:37:44.915753Z -b175e6c85c5faf4b5d2f092f65338b10 -2009-02-11T19:06:55.627694Z -2440 -edavis10 - - - - - - - - - - - - - - - - - - - - - -187 +034_create_changesets.rb +file + + + + +2011-07-14T09:24:09.000000Z +82595f307b6fe5053151a681b737f063 +2007-04-25T15:06:20.062636Z +479 +jplang + + + + + + + + + + + + + + + + + + + + + +515 20090614091200_fix_messages_sticky_null.rb file @@ -1120,7 +1120,7 @@ -2010-09-23T14:37:44.919754Z +2011-07-14T09:24:09.000000Z c460bb38faa03667fc34a3b131ec40df 2009-06-14T09:19:20.900273Z 2787 @@ -1148,13 +1148,47 @@ 176 +108_add_identity_url_to_users.rb +file + + + + +2011-07-14T09:24:09.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-07-14T09:24:09.000000Z 7aa35de55587b897fea800e8044039a8 2009-12-20T19:13:22.787652Z 3206 @@ -1188,7 +1222,7 @@ -2010-09-23T14:37:44.931783Z +2011-07-14T09:24:09.000000Z e4eff12465b879f063cac04a709438b9 2010-08-22T18:42:00.112555Z 4013 @@ -1222,7 +1256,7 @@ -2010-09-23T14:37:44.887754Z +2011-07-14T09:24:09.000000Z 0492f13cf6f16f90603fdd82c388bace 2007-05-08T09:26:57.307537Z 518 @@ -1256,7 +1290,7 @@ -2010-09-23T14:37:44.931783Z +2011-07-14T09:24:09.000000Z 9a69054334fcbc6b72eb8b5ae9957129 2009-12-27T11:57:13.519273Z 3254 @@ -1290,7 +1324,7 @@ -2010-09-23T14:37:44.899726Z +2011-07-14T09:24:09.000000Z b17259dfa6f46844e0f86b110577fbc6 2008-03-09T15:36:47.697904Z 1220 @@ -1324,7 +1358,7 @@ -2010-09-23T14:37:44.919754Z +2011-07-14T09:24:09.000000Z e00a737604d0be6b94c92236e4f378eb 2009-05-10T10:54:31.775505Z 2726 @@ -1358,7 +1392,7 @@ -2010-09-23T14:37:44.883725Z +2011-07-14T09:24:09.000000Z 2fb7c5a95c8ed07756c3fbb917c98230 2007-10-22T21:07:13.432482Z 864 @@ -1392,7 +1426,7 @@ -2010-09-23T14:37:44.879727Z +2011-07-14T09:24:09.000000Z 1702102b56ee973066c86d659252a366 2007-08-29T16:52:35.680643Z 674 @@ -1420,13 +1454,47 @@ 751 +20110223180953_salt_user_passwords.rb +file + + + + +2011-07-14T09:24:09.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-07-14T09:24:09.000000Z 0c630c7ad4fbe9ccbb897363a422efa6 2007-04-17T10:53:20.697217Z 447 @@ -1460,7 +1528,7 @@ -2010-09-23T14:37:44.931783Z +2011-07-14T09:24:09.000000Z 6e9fdd6731ba51e864563938c05ed9da 2010-02-21T14:40:00.085842Z 3471 @@ -1494,7 +1562,7 @@ -2010-09-23T14:37:44.887754Z +2011-07-14T09:24:09.000000Z 8e58d8ec43e40266d62fd64b4b6a9a09 2007-05-13T17:09:56.765659Z 529 @@ -1528,7 +1596,7 @@ -2010-09-23T14:37:44.931783Z +2011-07-14T09:24:09.000000Z 6350cf7f18c7d61d54bf2bfa55e108d3 2009-12-25T17:13:58.090736Z 3240 @@ -1556,13 +1624,47 @@ 442 +20110220160626_add_workflows_assignee_and_author.rb +file + + + + +2011-07-14T09:24:09.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-07-14T09:24:09.000000Z 3216f04b6b84aaa6d29bc0f3e5d8c462 2007-08-29T16:52:35.680643Z 674 @@ -1596,7 +1698,7 @@ -2010-09-23T14:37:44.887754Z +2011-07-14T09:24:09.000000Z fb852fdf1ab4266ab05a36ff105b7ceb 2007-10-22T21:07:13.432482Z 864 @@ -1624,13 +1726,47 @@ 607 +20110228000000_add_repositories_log_encoding.rb +file + + + + +2011-07-14T09:24:09.000000Z +dbe736040dcb44e3db78219ecfdb3d62 +2011-03-01T09:47:06.578325Z +4980 +tmaruyama + + + + + + + + + + + + + + + + + + + + + +237 + 076_allow_null_position.rb file -2010-09-23T14:37:44.895727Z +2011-07-14T09:24:09.000000Z 9f0c1dd813015fc37cd47062fe15ef91 2008-02-12T21:11:16.312726Z 1140 @@ -1664,7 +1800,7 @@ -2010-09-23T14:37:44.923753Z +2011-07-14T09:24:09.000000Z e08dfbd6aca488a1513bfe7c59e2da90 2009-10-17T22:23:29.892475Z 2928 @@ -1698,7 +1834,7 @@ -2010-09-23T14:37:44.927757Z +2011-07-14T09:24:09.000000Z 767d76b65ff41dd9860747d14bb24ee1 2009-12-20T19:13:22.787652Z 3206 @@ -1732,7 +1868,7 @@ -2010-09-23T14:37:44.919754Z +2011-07-14T09:24:09.000000Z 93159e216a0265b8f239566bfb91fd8e 2009-10-17T22:23:29.892475Z 2928 @@ -1766,7 +1902,7 @@ -2010-09-23T14:37:44.931783Z +2011-07-14T09:24:09.000000Z 5fa98acba6010a7450722133bfb66962 2010-07-24T00:19:32.307471Z 3860 @@ -1800,7 +1936,7 @@ -2010-09-23T14:37:44.923753Z +2011-07-14T09:24:09.000000Z eeff80bd1cee52d49f1eb78fab035adf 2009-10-17T22:23:29.892475Z 2928 @@ -1834,7 +1970,7 @@ -2010-09-23T14:37:44.927757Z +2011-07-14T09:24:09.000000Z 09b6720db5ea81c8e22aff9dd89fc0bd 2009-10-17T22:23:29.892475Z 2928 @@ -1868,7 +2004,7 @@ -2010-09-23T14:37:44.895727Z +2011-07-14T09:24:09.000000Z b392b3c84d6d7b8bba99011778f5b54e 2007-11-20T20:29:03.757553Z 920 @@ -1902,7 +2038,7 @@ -2010-09-23T14:37:44.923753Z +2011-07-14T09:24:09.000000Z 2ae2d679057fe2db7b7a8bdabc2cbf6d 2009-10-17T22:23:29.892475Z 2928 @@ -1930,13 +2066,47 @@ 170 +20110412065600_add_issues_is_private.rb +file + + + + +2011-06-06T13:18:33.000000Z +45b9c6859dfc448518b532c7e062e808 +2011-04-15T13:23:13.506236Z +5466 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +218 + 20090403001910_add_project_to_enumerations.rb file -2010-09-23T14:37:44.915753Z +2011-07-14T09:24:09.000000Z 01a97aa31f8b9917a84790f23e0e90d1 2009-10-21T22:34:34.183882Z 2947 @@ -1970,7 +2140,7 @@ -2010-09-23T14:37:44.915753Z +2011-07-14T09:24:09.000000Z af4786659f25d96a43468cdc4bcfae44 2009-02-11T19:06:50.454280Z 2439 @@ -2004,7 +2174,7 @@ -2010-09-23T14:37:44.895727Z +2011-07-14T09:24:09.000000Z 82e35d32f60c71db17de62592693c737 2007-10-20T12:47:05.860183Z 855 @@ -2038,7 +2208,7 @@ -2010-09-23T14:37:44.887754Z +2011-07-14T09:24:09.000000Z 3ac5fb29973ffa0ca94ac90387c73b78 2007-08-29T16:52:35.680643Z 674 @@ -2072,7 +2242,7 @@ -2010-09-23T14:37:44.895727Z +2011-07-14T09:24:09.000000Z db7f5c6597e13933c96cb58cbbd1f0bd 2007-10-05T17:44:15.414646Z 803 @@ -2106,7 +2276,7 @@ -2010-09-23T14:37:44.887754Z +2011-07-14T09:24:09.000000Z e61809aaf1ac8a2a290c4574ed598ff0 2007-04-02T06:29:09.277122Z 397 @@ -2140,7 +2310,7 @@ -2010-09-23T14:37:44.931783Z +2011-07-14T09:24:09.000000Z 243f136f05a508fff7ca52423f65c959 2010-03-13T17:17:10.453825Z 3578 @@ -2174,7 +2344,7 @@ -2010-09-23T14:37:44.895727Z +2011-07-14T09:24:09.000000Z e5f0fe89be9a00fe1f8b246bde88fca1 2007-10-01T08:44:17.920088Z 782 @@ -2208,7 +2378,7 @@ -2010-09-23T14:37:44.927757Z +2011-07-14T09:24:09.000000Z bb79c723b9d9fdabe49ed18ebb8a6caf 2009-12-11T18:48:34.197724Z 3151 @@ -2242,7 +2412,7 @@ -2010-09-23T14:37:44.883725Z +2011-07-14T09:24:09.000000Z b8b7c422c3d666340afaec3a52c5d6a4 2007-10-22T21:07:13.432482Z 864 @@ -2270,13 +2440,47 @@ 275 +20100129193813_update_mail_notification_values.rb +file + + + + +2011-07-14T09:24:09.000000Z +d2251c92048ec4169e2c220f1510d803 +2010-11-20T09:55:06.580420Z +4413 +jplang + + + + + + + + + + + + + + + + + + + + + +241 + 016_add_repositories_permissions.rb file -2010-09-23T14:37:44.879727Z +2011-07-14T09:24:09.000000Z e770aa6387bb4737804d5024e743cd25 2007-08-29T16:52:35.680643Z 674 @@ -2304,13 +2508,47 @@ 1658 +001_setup.rb +file + + + + +2011-07-14T09:24:09.000000Z +b740a77ff87e6390f7ad86eaf0710040 +2008-08-25T16:35:20.899166Z +1764 +jplang + + + + + + + + + + + + + + + + + + + + + +18072 + 20091010093521_fix_users_custom_values.rb file -2010-09-23T14:37:44.919754Z +2011-07-14T09:24:09.000000Z 55350d451c622488f9358f7bbe12d4de 2009-10-10T10:16:00.250819Z 2905 @@ -2338,81 +2576,13 @@ 276 -001_setup.rb -file - - - - -2010-09-23T14:37:44.875728Z -b740a77ff87e6390f7ad86eaf0710040 -2008-08-25T16:35:20.899166Z -1764 -jplang - - - - - - - - - - - - - - - - - - - - - -18072 - -20100129193813_update_mail_notification_values.rb -file - - - - -2010-11-19T13:04:50.888959Z -d584696f16d190556dd796ab71ebe6f8 -2010-11-06T10:57:56.438344Z -4368 -jplang - - - - - - - - - - - - - - - - - - - - - -583 - 20091017214611_add_missing_indexes_to_journals.rb file -2010-09-23T14:37:44.927757Z +2011-07-14T09:24:09.000000Z 4cedb1faff3054d9be6250b589882b50 2009-10-17T22:23:29.892475Z 2928 @@ -2446,7 +2616,7 @@ -2010-09-23T14:37:44.923753Z +2011-07-14T09:24:09.000000Z 0e1e45e51997617f8672e6d0d5ed8e51 2009-10-17T22:23:29.892475Z 2928 @@ -2480,7 +2650,7 @@ -2010-09-23T14:37:44.887754Z +2011-07-14T09:24:09.000000Z 4901b560613f6a0ae3e5df5bcf2dd11c 2007-04-25T16:48:01.299251Z 482 @@ -2514,7 +2684,7 @@ -2010-09-23T14:37:44.927757Z +2011-07-14T09:24:09.000000Z 871a600c06a6965f52c63177a82fbe15 2009-10-17T22:23:29.892475Z 2928 @@ -2548,7 +2718,7 @@ -2010-09-23T14:37:44.891758Z +2011-07-14T09:24:09.000000Z 31acec69fd7efa0c26dec61f860b0c85 2007-09-09T17:05:38.846724Z 720 @@ -2582,7 +2752,7 @@ -2010-09-23T14:37:44.899726Z +2011-07-14T09:24:09.000000Z f60a0c1f633a6ff65fb2734173b57fe4 2008-02-29T19:46:58.834023Z 1180 @@ -2616,7 +2786,7 @@ -2010-09-23T14:37:44.911755Z +2011-07-14T09:24:09.000000Z 320b459ced6ed78d09a3743ad60b3200 2009-01-18T10:54:08.545108Z 2279 @@ -2644,13 +2814,47 @@ 270 +20110226120132_change_auth_sources_account_password_limit.rb +file + + + + +2011-07-14T09:24:09.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-07-14T09:24:09.000000Z cf04e90903f0d068e4503cb465026ef7 2008-05-25T13:37:29.456358Z 1457 @@ -2684,7 +2888,7 @@ -2010-09-23T14:37:44.887754Z +2011-07-14T09:24:09.000000Z 07bf6636d0acf3ec84b38648bbe2c07a 2007-04-21T12:09:07.794422Z 454 @@ -2718,7 +2922,7 @@ -2010-09-23T14:37:44.899726Z +2011-07-14T09:24:09.000000Z 5be8fe0eee7c90901f9ba49030412f40 2008-05-04T15:05:38.117137Z 1415 @@ -2752,7 +2956,7 @@ -2010-09-23T14:37:44.891758Z +2011-07-14T09:24:09.000000Z 0abbef63f1f391688df012906a94877b 2008-03-09T18:25:37.323226Z 1222 @@ -2786,7 +2990,7 @@ -2010-09-23T14:37:44.895727Z +2011-07-14T09:24:09.000000Z be494b64b18017ebe3ccdff9a34abdbd 2007-11-24T12:25:07.449637Z 926 @@ -2820,7 +3024,7 @@ -2010-09-23T14:37:44.895727Z +2011-07-14T09:24:09.000000Z a574e8a4f8f80a464ca2b8bcbd43287f 2007-09-15T14:54:15.583528Z 731 @@ -2854,7 +3058,7 @@ -2010-09-23T14:37:44.883725Z +2011-07-14T09:24:09.000000Z cd7530e8030bf9e675ca5922c2494d83 2007-03-10T15:09:49.115269Z 323 @@ -2888,33 +3092,33 @@ -2010-11-19T13:04:50.888959Z -c682cee6b57ef16a410b2253213f9864 -2010-11-06T11:49:45.617666Z -4370 -jplang - - - - - - - - - - - - - - - - - - - - - -898 +2011-07-14T09:24:09.000000Z +7a04693ea608e342b463c73c461b2da0 +2011-01-01T23:08:49.766359Z +4610 +jbbarth + + + + + + + + + + + + + + + + + + + + + +949 20100313132032_add_issues_nested_sets_columns.rb file @@ -2922,7 +3126,7 @@ -2010-09-23T14:37:44.931783Z +2011-07-14T09:24:09.000000Z d1a11dec6b93af060f84f9b2a1e36421 2010-03-13T14:56:49.379682Z 3573 @@ -2956,7 +3160,7 @@ -2010-09-23T14:37:44.891758Z +2011-07-14T09:24:09.000000Z f1661157bd19c5fd4f7a4244745571bf 2007-08-29T16:52:35.680643Z 674 @@ -2990,7 +3194,7 @@ -2010-09-23T14:37:44.883725Z +2011-07-14T09:24:09.000000Z 8381c8e67d31387ec86e821025f5ae8b 2007-03-09T18:03:31.183366Z 319 @@ -3024,7 +3228,7 @@ -2010-09-23T14:37:44.883725Z +2011-07-14T09:24:09.000000Z f8359b001e33e9508d158589c81f7bee 2007-02-03T12:57:33.179243Z 223 @@ -3058,7 +3262,7 @@ -2010-09-23T14:37:44.915753Z +2011-07-14T09:24:09.000000Z 63b0f6e295adf5f1d1eee803e4cc6287 2009-01-24T11:48:38.049684Z 2305 @@ -3092,7 +3296,7 @@ -2010-09-23T14:37:44.915753Z +2011-07-14T09:24:09.000000Z 668305a363cf6997eb9f2259d00cc26d 2009-03-19T00:01:24.358528Z 2599 @@ -3126,7 +3330,7 @@ -2010-09-23T14:37:44.895727Z +2011-07-14T09:24:09.000000Z c8a6c8715446f22f6a3f4e2040dd873d 2007-11-19T22:28:43.818228Z 917 @@ -3160,7 +3364,7 @@ -2010-09-23T14:37:44.911755Z +2011-07-14T09:24:09.000000Z 7f2d97409681d462705d00de37e78476 2008-10-18T10:07:49.851665Z 1938 @@ -3194,7 +3398,7 @@ -2010-09-23T14:37:44.891758Z +2011-07-14T09:24:09.000000Z aa67262417630fc088eb57df8d2dd9d3 2007-08-16T17:47:41.639068Z 649 @@ -3228,7 +3432,7 @@ -2010-09-23T14:37:44.911755Z +2011-07-14T09:24:09.000000Z d885a13afc268875b79c4cbf9524f3e8 2009-02-08T17:24:39.400993Z 2415 @@ -3262,7 +3466,7 @@ -2010-09-23T14:37:44.879727Z +2011-07-14T09:24:09.000000Z 528b6095ca0376cecdd966ddd0b345c4 2006-12-16T13:37:32.633739Z 95 @@ -3296,7 +3500,7 @@ -2010-09-23T14:37:44.887754Z +2011-07-14T09:24:09.000000Z 2d559ef99ec458f472f5c22c0a8bf5f4 2007-08-29T16:52:35.680643Z 674 @@ -3330,7 +3534,7 @@ -2010-09-23T14:37:44.887754Z +2011-07-14T09:24:09.000000Z a7d8c7f023a76a8dbb0d0950797c08f8 2008-02-12T21:11:16.312726Z 1140 @@ -3364,7 +3568,7 @@ -2010-09-23T14:37:44.887754Z +2011-07-14T09:24:09.000000Z dc28d8674409819b866f6d878b33d288 2007-04-24T13:57:27.960164Z 473 @@ -3398,7 +3602,7 @@ -2010-09-23T14:37:44.899726Z +2011-07-14T09:24:09.000000Z ba997a6179b5ab0f421b149c54725357 2008-01-15T20:40:59.035860Z 1069 @@ -3432,7 +3636,7 @@ -2010-09-23T14:37:44.923753Z +2011-07-14T09:24:09.000000Z e256cf4a148fd48c409ea6983d569e7d 2009-10-17T22:23:29.892475Z 2928 @@ -3466,7 +3670,7 @@ -2010-09-23T14:37:44.895727Z +2011-07-14T09:24:09.000000Z 02bfb0be1b161bd757a75f69bfe79bc7 2008-03-09T18:25:37.323226Z 1222 @@ -3494,13 +3698,47 @@ 252 +20110223180944_add_users_salt.rb +file + + + + +2011-07-14T09:24:09.000000Z +6dd75e3da92087226c787a4edc76032e +2011-02-23T17:27:31.762248Z +4936 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +176 + 092_change_changes_from_revision_to_string.rb file -2010-09-23T14:37:44.899726Z +2011-07-14T09:24:09.000000Z f77d77e81db6f6ac5bb3844255f8ab33 2008-03-12T20:28:49.748698Z 1236 @@ -3534,7 +3772,7 @@ -2010-09-23T14:37:44.915753Z +2011-07-14T09:24:09.000000Z 5d4b3c5646cc6c136e706ac5d7e0b377 2009-02-14T19:06:44.812480Z 2466 @@ -3568,7 +3806,7 @@ -2010-09-23T14:37:44.891758Z +2011-07-14T09:24:09.000000Z b61285ac64245c1571e536a8c7e05a94 2007-06-12T20:12:05.590809Z 559 @@ -3602,7 +3840,7 @@ -2010-09-23T14:37:44.919754Z +2011-07-14T09:24:09.000000Z 90bb42121a57db140491ecb2a0763d00 2009-10-17T22:23:29.892475Z 2928 @@ -3636,7 +3874,7 @@ -2010-09-23T14:37:44.923753Z +2011-07-14T09:24:09.000000Z 4bfd0623186217eee4346313f148ea7a 2009-10-17T22:23:29.892475Z 2928 @@ -3670,7 +3908,7 @@ -2010-09-23T14:37:44.891758Z +2011-07-14T09:24:09.000000Z 708c039fe82ad86e9930122cac4757b1 2007-08-31T17:45:32.784580Z 685 @@ -3704,7 +3942,7 @@ -2010-09-23T14:37:44.911755Z +2011-07-14T09:24:09.000000Z e00f8e7739afbb2d07a21decd1422a0a 2008-09-21T20:38:36.877257Z 1896 @@ -3738,7 +3976,7 @@ -2010-09-23T14:37:44.927757Z +2011-07-14T09:24:09.000000Z 71d997c1a32c4ba3dd4b31a34885fc7a 2009-12-29T14:53:29.047095Z 3259 @@ -3772,7 +4010,7 @@ -2010-09-23T14:37:44.923753Z +2011-07-14T09:24:09.000000Z e8d897645c7176e7fd23f1578b882b5f 2009-10-17T22:23:29.892475Z 2928 @@ -3800,13 +4038,47 @@ 308 +20110228000100_copy_repositories_log_encoding.rb +file + + + + +2011-07-14T09:24:09.000000Z +22941cc81d233c2602be827d70670c10 +2011-03-01T10:14:47.182368Z +4981 +tmaruyama + + + + + + + + + + + + + + + + + + + + + +497 + 063_add_roles_permissions.rb file -2010-09-23T14:37:44.891758Z +2011-07-14T09:24:09.000000Z 9ddb69b602d6d3ee5da01f8a9e9f78db 2007-08-29T16:52:35.680643Z 674 @@ -3840,7 +4112,7 @@ -2010-09-23T14:37:44.919754Z +2011-07-14T09:24:09.000000Z 055f00efdb87ff8934c36d5eb99b741f 2009-09-12T08:36:46.650954Z 2869 @@ -3874,7 +4146,7 @@ -2010-09-23T14:37:44.887754Z +2011-07-14T09:24:09.000000Z 3af07746c4eab3a1716744971ac26ffc 2007-06-12T20:12:05.590809Z 559 @@ -3908,7 +4180,7 @@ -2010-09-23T14:37:44.919754Z +2011-07-14T09:24:09.000000Z 27279bf98b3155975ce59a359d0a29aa 2009-05-10T11:18:09.335765Z 2729 @@ -3942,7 +4214,7 @@ -2010-09-23T14:37:44.891758Z +2011-07-14T09:24:09.000000Z 596f1acbdbc340c39d19f19f7b4cb6c6 2007-08-29T16:52:35.680643Z 674 @@ -3976,7 +4248,7 @@ -2010-09-23T14:37:44.887754Z +2011-07-14T09:24:09.000000Z 67d6e1898c150c8df560cb2ce8a2f2d7 2007-08-29T16:52:35.680643Z 674 @@ -4004,13 +4276,81 @@ 718 +20110511000000_add_repositories_extra_info.rb +file + + + + +2011-06-06T13:18:33.000000Z +9a19740d9c35a12356f7dedfb588af43 +2011-05-12T17:29:18.150936Z +5762 +tmaruyama + + + + + + + + + + + + + + + + + + + + + +198 + +104_add_projects_lft_and_rgt.rb +file + + + + +2011-07-14T09:24:09.000000Z +46effb13ff7d1a62b7b8c93afc7da9c8 +2009-01-24T11:31:15.122844Z +2304 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +250 + 074_add_auth_sources_tls.rb file -2010-09-23T14:37:44.895727Z +2011-07-14T09:24:09.000000Z e7e163729c56cd9807450574d2beeda8 2007-10-16T19:19:10.481742Z 845 @@ -4038,47 +4378,13 @@ 215 -104_add_projects_lft_and_rgt.rb -file - - - - -2010-09-23T14:37:44.915753Z -46effb13ff7d1a62b7b8c93afc7da9c8 -2009-01-24T11:31:15.122844Z -2304 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -250 - 20091114105931_add_view_issues_permission.rb file -2010-09-23T14:37:44.927757Z +2011-07-14T09:24:09.000000Z 886411cb32a18ec492acc798194210af 2009-11-14T12:08:47.175978Z 3039 @@ -4106,81 +4412,13 @@ 262 -20091017214336_add_missing_indexes_to_users.rb -file - - - - -2010-09-23T14:37:44.927757Z -8251942eb30b7c709ac6e3dc1ab5eedb -2009-10-17T22:23:29.892475Z -2928 -edavis10 - - - - - - - - - - - - - - - - - - - - - -267 - -20091017213113_add_missing_indexes_to_enumerations.rb -file - - - - -2010-09-23T14:37:44.919754Z -22e6afc0519b7befbae2c4a4433c20f5 -2009-10-17T22:23:29.892475Z -2928 -edavis10 - - - - - - - - - - - - - - - - - - - - - -209 - 082_add_messages_locked.rb file -2010-09-23T14:37:44.895727Z +2011-07-14T09:24:09.000000Z 4ed0fffe6158eeda69a021c362f61157 2007-11-24T12:25:07.449637Z 926 @@ -4208,13 +4446,81 @@ 197 +20091017213113_add_missing_indexes_to_enumerations.rb +file + + + + +2011-07-14T09:24:09.000000Z +22e6afc0519b7befbae2c4a4433c20f5 +2009-10-17T22:23:29.892475Z +2928 +edavis10 + + + + + + + + + + + + + + + + + + + + + +209 + +20091017214336_add_missing_indexes_to_users.rb +file + + + + +2011-07-14T09:24:09.000000Z +8251942eb30b7c709ac6e3dc1ab5eedb +2009-10-17T22:23:29.892475Z +2928 +edavis10 + + + + + + + + + + + + + + + + + + + + + +267 + 20091017213444_add_missing_indexes_to_tokens.rb file -2010-09-23T14:37:44.923753Z +2011-07-14T09:24:09.000000Z 4c220f0316e1b04fa8350f0309698f24 2009-10-17T22:23:29.892475Z 2928 @@ -4248,7 +4554,7 @@ -2010-09-23T14:37:44.919754Z +2011-07-14T09:24:09.000000Z 16792ab92fda3a70516d55a011c01fce 2009-05-10T10:54:31.775505Z 2726 @@ -4282,7 +4588,7 @@ -2010-09-23T14:37:44.891758Z +2011-07-14T09:24:09.000000Z 6a4944f1162c00f2405200fb38773886 2007-06-14T18:26:27.748707Z 564 @@ -4316,7 +4622,7 @@ -2010-09-23T14:37:44.915753Z +2011-07-14T09:24:09.000000Z 0c0cee6df5f26eb3378c9b22a1162a5a 2009-05-30T23:30:36.923541Z 2777 @@ -4350,7 +4656,7 @@ -2010-09-23T14:37:44.879727Z +2011-07-14T09:24:09.000000Z 6e59569f25a79a0a75797fa4ebb60936 2007-08-29T16:52:35.680643Z 674 @@ -4384,7 +4690,7 @@ -2010-09-23T14:37:44.883725Z +2011-07-14T09:24:09.000000Z 00a100c0ca092df63e8542fc6d0bc78c 2007-03-18T15:48:05.787958Z 344 @@ -4418,7 +4724,7 @@ -2010-09-23T14:37:44.927757Z +2011-07-14T09:24:09.000000Z ee71a22f869c9dbee6f322ad25f45934 2009-12-06T10:28:20.099964Z 3123 @@ -4452,7 +4758,7 @@ -2010-09-23T14:37:44.927757Z +2011-07-14T09:24:09.000000Z 21d40b6390e67409bad1d4525c26accb 2009-10-17T22:23:29.892475Z 2928 @@ -4486,7 +4792,7 @@ -2010-09-23T14:37:44.887754Z +2011-07-14T09:24:09.000000Z 1b013e3bbb624874d78eaf3332ccb3d5 2007-03-26T16:41:54.592250Z 383 @@ -4520,7 +4826,7 @@ -2010-09-23T14:37:44.887754Z +2011-07-14T09:24:09.000000Z e658f4ed3c99264bf4c036b87b8cf39f 2007-05-27T17:42:04.537618Z 549 @@ -4554,7 +4860,7 @@ -2010-09-23T14:37:44.915753Z +2011-07-14T09:24:09.000000Z 4d0267b0a9d4cb2ec782d10247a4c33f 2009-01-24T11:31:15.122844Z 2304 @@ -4588,7 +4894,7 @@ -2010-09-23T14:37:44.923753Z +2011-07-14T09:24:09.000000Z eef7b68156646d86ea515aed9aa525ed 2009-10-17T22:23:29.892475Z 2928 @@ -4622,7 +4928,7 @@ -2010-09-23T14:37:44.915753Z +2011-07-14T09:24:09.000000Z 1567606924d88ae66474e848de86577a 2009-10-21T22:34:28.905707Z 2946 @@ -4656,7 +4962,7 @@ -2010-09-23T14:37:44.895727Z +2011-07-14T09:24:09.000000Z ccfd197b34214a0d74d952aa65dcd5a6 2008-03-09T18:25:37.323226Z 1222 @@ -4690,7 +4996,7 @@ -2010-09-23T14:37:44.919754Z +2011-07-14T09:24:09.000000Z f5ae107f30300b547d535ddc5b1b999c 2009-09-12T08:36:46.650954Z 2869 @@ -4724,7 +5030,7 @@ -2010-09-23T14:37:44.879727Z +2011-07-14T09:24:09.000000Z 9cef93921160d49f5d3aa4968ecc4eb1 2007-10-22T21:07:13.432482Z 864 @@ -4758,7 +5064,7 @@ -2010-09-23T14:37:44.919754Z +2011-07-14T09:24:09.000000Z 6c70abafef3dc834c722ed7135d6a7df 2009-10-17T22:23:29.892475Z 2928 @@ -4792,7 +5098,7 @@ -2010-11-19T13:04:50.888959Z +2011-07-14T09:24:09.000000Z 0000368c453072e56da62defbc80441e 2010-11-14T12:33:14.198318Z 4402 @@ -4826,7 +5132,7 @@ -2010-09-23T14:37:44.919754Z +2011-07-14T09:24:09.000000Z cf095d9afbc6429b8d759eb737a0781f 2009-10-21T22:34:34.183882Z 2947 @@ -4860,7 +5166,7 @@ -2010-09-23T14:37:44.919754Z +2011-07-14T09:24:09.000000Z 9aa91971db6c6f14ddd1ae768085b0a8 2009-10-17T22:23:29.892475Z 2928 @@ -4894,7 +5200,7 @@ -2010-09-23T14:37:44.879727Z +2011-07-14T09:24:09.000000Z 3e5f2220de578b306ce323997c495db6 2006-11-12T18:50:30.642587Z 44 @@ -4928,7 +5234,7 @@ -2010-09-23T14:37:44.879727Z +2011-07-14T09:24:09.000000Z 0fb07bc55cf61720437b40e4ae244e05 2006-12-03T20:51:17.306207Z 63 @@ -4962,7 +5268,7 @@ -2010-09-23T14:37:44.891758Z +2011-07-14T09:24:09.000000Z 417051f45603460a17909e4a5029c779 2007-08-29T16:52:35.680643Z 674 @@ -4990,13 +5296,47 @@ 443 +20110224000000_add_repositories_path_encoding.rb +file + + + + +2011-07-14T09:24:09.000000Z +7cd80bdf7897357500a46e87ed82b84b +2011-02-24T05:58:37.876075Z +4940 +tmaruyama + + + + + + + + + + + + + + + + + + + + + +240 + 032_create_time_entries.rb file -2010-09-23T14:37:44.883725Z +2011-07-14T09:24:09.000000Z a62243f0bc2f1b1b11a47da172d011a5 2007-04-25T15:06:20.062636Z 479 @@ -5024,13 +5364,81 @@ 966 +20110226120112_change_repositories_password_limit.rb +file + + + + +2011-07-14T09:24:09.000000Z +e809364786bdcce227961318e7428700 +2011-02-26T13:09:25.657748Z +4950 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +276 + +20110401192910_add_index_to_users_type.rb +file + + + + +2011-06-06T13:18:33.000000Z +d7c5fa22340bcd1fd37b58d1eb09adfc +2011-04-01T19:32:07.711451Z +5288 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +158 + 068_create_enabled_modules.rb file -2010-09-23T14:37:44.895727Z +2011-07-14T09:24:09.000000Z 96962340557b9a1f70a215d88b07c2c1 2007-09-14T11:34:08.234701Z 725 @@ -5064,7 +5472,7 @@ -2010-09-23T14:37:44.923753Z +2011-07-14T09:24:09.000000Z 8ad3f0193d5e3b8d52293bbf2828c2d2 2009-10-17T22:23:29.892475Z 2928 @@ -5098,7 +5506,7 @@ -2010-09-23T14:37:44.923753Z +2011-07-14T09:24:09.000000Z fd6ccbccc44ceccab8de7c3c48696ecc 2009-10-17T22:23:29.892475Z 2928 @@ -5132,7 +5540,7 @@ -2010-09-23T14:37:44.891758Z +2011-07-14T09:24:09.000000Z 1798d606a43c6a29029535c28b49beff 2007-09-04T22:07:44.613701Z 702 @@ -5166,7 +5574,7 @@ -2010-09-23T14:37:44.879727Z +2011-07-14T09:24:09.000000Z d714e81a7a9c29b60e405233765cbd33 2007-08-29T16:52:35.680643Z 674 @@ -5200,7 +5608,7 @@ -2010-09-23T14:37:44.899726Z +2011-07-14T09:24:09.000000Z a27ef00d6ec6b3f4dc63ad004181c10e 2008-01-20T23:38:55.025648Z 1091 @@ -5234,7 +5642,7 @@ -2010-09-23T14:37:44.875728Z +2011-07-14T09:24:09.000000Z 497529b269185b1833b959c98db3c1d1 2007-08-29T16:52:35.680643Z 674 @@ -5268,7 +5676,7 @@ -2010-09-23T14:37:44.919754Z +2011-07-14T09:24:09.000000Z d39d0037e4f06dfb7db18d9082608832 2009-10-17T22:23:29.892475Z 2928 @@ -5302,7 +5710,7 @@ -2010-09-23T14:37:44.923753Z +2011-07-14T09:24:09.000000Z 79d11b147c1061901a888d89c3e5029b 2009-10-17T22:23:29.892475Z 2928 @@ -5336,7 +5744,7 @@ -2010-09-23T14:37:44.899726Z +2011-07-14T09:24:09.000000Z 1cbe32e981634898d5b0f80b2c63798b 2007-12-14T18:54:55.323993Z 994 @@ -5370,7 +5778,7 @@ -2010-09-23T14:37:44.887754Z +2011-07-14T09:24:09.000000Z 717687210dcbeeebff8337561a427e70 2007-05-05T13:22:27.245135Z 506 @@ -5404,7 +5812,7 @@ -2010-09-23T14:37:44.879727Z +2011-07-14T09:24:09.000000Z 05c7ea8c5dc45498164a324f7db2887a 2006-12-10T18:35:48.564790Z 81 @@ -5438,7 +5846,7 @@ -2010-09-23T14:37:44.915753Z +2011-07-14T09:24:09.000000Z ce38342dea044adf8b277f6483f1a742 2009-03-12T18:06:54.054174Z 2572 @@ -5472,7 +5880,7 @@ -2010-09-23T14:37:44.923753Z +2011-07-14T09:24:09.000000Z dbeea4ad5a501200711cb4195856597e 2009-10-17T22:23:29.892475Z 2928 @@ -5506,7 +5914,7 @@ -2010-09-23T14:37:44.911755Z +2011-07-14T09:24:09.000000Z 4c1203f40e8e7b568ddce15af4f3ad9b 2008-11-10T18:59:06.897210Z 2006 @@ -5540,7 +5948,7 @@ -2010-09-23T14:37:44.879727Z +2011-07-14T09:24:09.000000Z c62ac2ca3e59bb91e5bb4e206abdaed1 2007-04-25T15:06:20.062636Z 479 @@ -5574,7 +5982,7 @@ -2010-09-23T14:37:44.891758Z +2011-07-14T09:24:09.000000Z 3bb4b5f081354ea7d943f0b7c6f07284 2007-08-29T16:52:35.680643Z 674 @@ -5608,7 +6016,7 @@ -2010-09-23T14:37:44.915753Z +2011-07-14T09:24:09.000000Z 3460b737f353524921cfd9ac4199fc44 2009-03-12T19:49:39.983871Z 2580 @@ -5642,7 +6050,7 @@ -2010-09-23T14:37:44.887754Z +2011-07-14T09:24:09.000000Z 560e67e7b88186a0e21a2f614b6d83c7 2007-08-29T16:52:35.680643Z 674 @@ -5676,7 +6084,7 @@ -2010-09-23T14:37:44.891758Z +2011-07-14T09:24:09.000000Z c22348c101d1a03b2d808cb89b3175a5 2007-06-12T20:12:05.590809Z 559 @@ -5710,7 +6118,7 @@ -2010-09-23T14:37:44.927757Z +2011-07-14T09:24:09.000000Z 87d90f2ce2101811b7aaf0031a74e0c1 2009-10-25T16:56:46.187627Z 2981 @@ -5744,7 +6152,7 @@ -2010-09-23T14:37:44.891758Z +2011-07-14T09:24:09.000000Z 84fe06ac7cefc2eebba29ac872241d88 2007-06-29T17:21:37.739022Z 577 @@ -5778,7 +6186,7 @@ -2010-09-23T14:37:44.875728Z +2011-07-14T09:24:09.000000Z d7a9aad3796f37d70ac2ab4af9c80656 2007-08-29T16:52:35.680643Z 674 @@ -5812,7 +6220,7 @@ -2010-09-23T14:37:44.879727Z +2011-07-14T09:24:09.000000Z defb118deb2deb23648d50da5cf71047 2006-12-24T13:38:45.881735Z 106 @@ -5846,7 +6254,7 @@ -2010-09-23T14:37:44.919754Z +2011-07-14T09:24:09.000000Z 89cbe3b06f14ba6d9a5cda47f4239f60 2009-04-26T13:09:14.221938Z 2696 @@ -5880,7 +6288,7 @@ -2010-09-23T14:37:44.879727Z +2011-07-14T09:24:09.000000Z f2e06da76555942fd3017134d618bbac 2007-08-29T16:52:35.680643Z 674 @@ -5914,7 +6322,7 @@ -2010-09-23T14:37:44.899726Z +2011-07-14T09:24:09.000000Z 5ff56d564f2da50c289c1dfd90053a4b 2008-03-05T09:16:19.220849Z 1189 @@ -5948,7 +6356,7 @@ -2010-09-23T14:37:44.923753Z +2011-07-14T09:24:09.000000Z 0ae6a6924263cf5317b539c81b952f03 2009-10-17T22:23:29.892475Z 2928 @@ -5982,7 +6390,7 @@ -2010-09-23T14:37:44.879727Z +2011-07-14T09:24:09.000000Z 121548a48360a22daa537af42ee8902b 2007-01-21T11:50:22.864544Z 167 @@ -6010,13 +6418,47 @@ 284 +20110227125750_change_journal_details_values_to_text.rb +file + + + + +2011-07-14T09:24:09.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-07-14T09:24:09.000000Z e50cfa8ef5216f0f7d266dac1e38c9da 2008-07-26T11:46:24.917066Z 1698 diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/.svn/prop-base/20110220160626_add_workflows_assignee_and_author.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/.svn/prop-base/20110223180944_add_users_salt.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/.svn/prop-base/20110223180944_add_users_salt.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/.svn/prop-base/20110223180953_salt_user_passwords.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/.svn/prop-base/20110223180953_salt_user_passwords.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/.svn/prop-base/20110226120112_change_repositories_password_limit.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/.svn/prop-base/20110226120112_change_repositories_password_limit.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/.svn/prop-base/20110226120132_change_auth_sources_account_password_limit.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/.svn/prop-base/20110227125750_change_journal_details_values_to_text.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/.svn/text-base/20100129193402_change_users_mail_notification_to_string.rb.svn-base --- a/db/migrate/.svn/text-base/20100129193402_change_users_mail_notification_to_string.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/db/migrate/.svn/text-base/20100129193402_change_users_mail_notification_to_string.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,9 +1,17 @@ class ChangeUsersMailNotificationToString < ActiveRecord::Migration def self.up - change_column :users, :mail_notification, :string, :default => '', :null => false + rename_column :users, :mail_notification, :mail_notification_bool + add_column :users, :mail_notification, :string, :default => '', :null => false + User.update_all("mail_notification = 'all'", "mail_notification_bool = #{connection.quoted_true}") + User.update_all("mail_notification = 'selected'", "EXISTS (SELECT 1 FROM #{Member.table_name} WHERE #{Member.table_name}.mail_notification = #{connection.quoted_true} AND #{Member.table_name}.user_id = #{User.table_name}.id)") + User.update_all("mail_notification = 'only_my_events'", "mail_notification NOT IN ('all', 'selected')") + remove_column :users, :mail_notification_bool end def self.down - change_column :users, :mail_notification, :boolean, :default => true, :null => false + rename_column :users, :mail_notification, :mail_notification_char + add_column :users, :mail_notification, :boolean, :default => true, :null => false + User.update_all("mail_notification = #{connection.quoted_false}", "mail_notification_char <> 'all'") + remove_column :users, :mail_notification_char end end diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/.svn/text-base/20100129193813_update_mail_notification_values.rb.svn-base --- a/db/migrate/.svn/text-base/20100129193813_update_mail_notification_values.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/db/migrate/.svn/text-base/20100129193813_update_mail_notification_values.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,9 +1,8 @@ # Patch the data from a boolean change. class UpdateMailNotificationValues < ActiveRecord::Migration def self.up - User.update_all("mail_notification = 'all'", "mail_notification IN ('1', 't')") - User.update_all("mail_notification = 'selected'", "EXISTS (SELECT 1 FROM #{Member.table_name} WHERE #{Member.table_name}.mail_notification = #{connection.quoted_true} AND #{Member.table_name}.user_id = #{User.table_name}.id)") - User.update_all("mail_notification = 'only_my_events'", "mail_notification NOT IN ('all', 'selected')") + # No-op + # See 20100129193402_change_users_mail_notification_to_string.rb end def self.down diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/.svn/text-base/20101104182107_add_unique_index_on_members.rb.svn-base --- a/db/migrate/.svn/text-base/20101104182107_add_unique_index_on_members.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/db/migrate/.svn/text-base/20101104182107_add_unique_index_on_members.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -17,5 +17,6 @@ end def self.down + remove_index :members, [:user_id, :project_id] end end diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/.svn/text-base/20110220160626_add_workflows_assignee_and_author.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/.svn/text-base/20110223180944_add_users_salt.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/.svn/text-base/20110223180944_add_users_salt.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/.svn/text-base/20110223180953_salt_user_passwords.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/.svn/text-base/20110223180953_salt_user_passwords.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/.svn/text-base/20110224000000_add_repositories_path_encoding.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/.svn/text-base/20110224000000_add_repositories_path_encoding.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/.svn/text-base/20110226120112_change_repositories_password_limit.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/.svn/text-base/20110226120112_change_repositories_password_limit.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/.svn/text-base/20110226120132_change_auth_sources_account_password_limit.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/.svn/text-base/20110227125750_change_journal_details_values_to_text.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/.svn/text-base/20110228000000_add_repositories_log_encoding.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/.svn/text-base/20110228000000_add_repositories_log_encoding.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/.svn/text-base/20110228000100_copy_repositories_log_encoding.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/.svn/text-base/20110228000100_copy_repositories_log_encoding.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/20100129193402_change_users_mail_notification_to_string.rb --- a/db/migrate/20100129193402_change_users_mail_notification_to_string.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/db/migrate/20100129193402_change_users_mail_notification_to_string.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,9 +1,17 @@ class ChangeUsersMailNotificationToString < ActiveRecord::Migration def self.up - change_column :users, :mail_notification, :string, :default => '', :null => false + rename_column :users, :mail_notification, :mail_notification_bool + add_column :users, :mail_notification, :string, :default => '', :null => false + User.update_all("mail_notification = 'all'", "mail_notification_bool = #{connection.quoted_true}") + User.update_all("mail_notification = 'selected'", "EXISTS (SELECT 1 FROM #{Member.table_name} WHERE #{Member.table_name}.mail_notification = #{connection.quoted_true} AND #{Member.table_name}.user_id = #{User.table_name}.id)") + User.update_all("mail_notification = 'only_my_events'", "mail_notification NOT IN ('all', 'selected')") + remove_column :users, :mail_notification_bool end def self.down - change_column :users, :mail_notification, :boolean, :default => true, :null => false + rename_column :users, :mail_notification, :mail_notification_char + add_column :users, :mail_notification, :boolean, :default => true, :null => false + User.update_all("mail_notification = #{connection.quoted_false}", "mail_notification_char <> 'all'") + remove_column :users, :mail_notification_char end end diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/20100129193813_update_mail_notification_values.rb --- a/db/migrate/20100129193813_update_mail_notification_values.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/db/migrate/20100129193813_update_mail_notification_values.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,9 +1,8 @@ # Patch the data from a boolean change. class UpdateMailNotificationValues < ActiveRecord::Migration def self.up - User.update_all("mail_notification = 'all'", "mail_notification IN ('1', 't')") - User.update_all("mail_notification = 'selected'", "EXISTS (SELECT 1 FROM #{Member.table_name} WHERE #{Member.table_name}.mail_notification = #{connection.quoted_true} AND #{Member.table_name}.user_id = #{User.table_name}.id)") - User.update_all("mail_notification = 'only_my_events'", "mail_notification NOT IN ('all', 'selected')") + # No-op + # See 20100129193402_change_users_mail_notification_to_string.rb end def self.down diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/20101104182107_add_unique_index_on_members.rb --- a/db/migrate/20101104182107_add_unique_index_on_members.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/db/migrate/20101104182107_add_unique_index_on_members.rb Mon Jul 25 14:23:37 2011 +0100 @@ -17,5 +17,6 @@ end def self.down + remove_index :members, [:user_id, :project_id] end end diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/20110220160626_add_workflows_assignee_and_author.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/20110220160626_add_workflows_assignee_and_author.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/20110223180944_add_users_salt.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/20110223180944_add_users_salt.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/20110223180953_salt_user_passwords.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/20110223180953_salt_user_passwords.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/20110224000000_add_repositories_path_encoding.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/20110224000000_add_repositories_path_encoding.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/20110226120112_change_repositories_password_limit.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/20110226120112_change_repositories_password_limit.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/20110226120132_change_auth_sources_account_password_limit.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/20110226120132_change_auth_sources_account_password_limit.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/20110227125750_change_journal_details_values_to_text.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/20110227125750_change_journal_details_values_to_text.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/20110228000000_add_repositories_log_encoding.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/20110228000000_add_repositories_log_encoding.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/20110228000100_copy_repositories_log_encoding.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/20110228000100_copy_repositories_log_encoding.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/20110331152140_add_has_welcome_page_to_projects.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/20110331152140_add_has_welcome_page_to_projects.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,9 @@ +class AddHasWelcomePageToProjects < ActiveRecord::Migration + def self.up + add_column :projects, :has_welcome_page, :boolean + end + + def self.down + remove_column :projects, :has_welcome_page + end +end diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/20110401192910_add_index_to_users_type.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/20110401192910_add_index_to_users_type.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,9 @@ +class AddIndexToUsersType < ActiveRecord::Migration + def self.up + add_index :users, :type + end + + def self.down + remove_index :users, :type + end +end diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/20110408103312_add_roles_issues_visibility.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/20110408103312_add_roles_issues_visibility.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,9 @@ +class AddRolesIssuesVisibility < ActiveRecord::Migration + def self.up + add_column :roles, :issues_visibility, :string, :limit => 30, :default => 'default', :null => false + end + + def self.down + remove_column :roles, :issues_visibility + end +end diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/20110412065600_add_issues_is_private.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/20110412065600_add_issues_is_private.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,9 @@ +class AddIssuesIsPrivate < ActiveRecord::Migration + def self.up + add_column :issues, :is_private, :boolean, :default => false, :null => false + end + + def self.down + remove_column :issues, :is_private + end +end diff -r f7c525dc7585 -r 0b6c82dead28 db/migrate/20110511000000_add_repositories_extra_info.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/20110511000000_add_repositories_extra_info.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,9 @@ +class AddRepositoriesExtraInfo < ActiveRecord::Migration + def self.up + add_column :repositories, :extra_info, :text + end + + def self.down + remove_column :repositories, :extra_info + end +end diff -r f7c525dc7585 -r 0b6c82dead28 doc/.svn/all-wcprops --- a/doc/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/doc/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,47 +1,23 @@ K 25 svn:wc:ra_dav:version-url -V 28 -/svn/!svn/ver/4348/trunk/doc +V 42 +/svn/!svn/ver/6261/branches/1.2-stable/doc END UPGRADING K 25 svn:wc:ra_dav:version-url -V 38 -/svn/!svn/ver/3848/trunk/doc/UPGRADING -END -RUNNING_TESTS -K 25 -svn:wc:ra_dav:version-url -V 42 -/svn/!svn/ver/3438/trunk/doc/RUNNING_TESTS -END -README_FOR_APP -K 25 -svn:wc:ra_dav:version-url -V 43 -/svn/!svn/ver/1732/trunk/doc/README_FOR_APP +V 52 +/svn/!svn/ver/5967/branches/1.2-stable/doc/UPGRADING END INSTALL K 25 svn:wc:ra_dav:version-url -V 36 -/svn/!svn/ver/3848/trunk/doc/INSTALL +V 50 +/svn/!svn/ver/5967/branches/1.2-stable/doc/INSTALL END CHANGELOG K 25 svn:wc:ra_dav:version-url -V 38 -/svn/!svn/ver/4348/trunk/doc/CHANGELOG +V 52 +/svn/!svn/ver/6261/branches/1.2-stable/doc/CHANGELOG END -COPYING -K 25 -svn:wc:ra_dav:version-url -V 35 -/svn/!svn/ver/883/trunk/doc/COPYING -END -git.rdoc -K 25 -svn:wc:ra_dav:version-url -V 37 -/svn/!svn/ver/4273/trunk/doc/git.rdoc -END diff -r f7c525dc7585 -r 0b6c82dead28 doc/.svn/entries --- a/doc/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/doc/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/doc +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/doc http://redmine.rubyforge.org/svn -2010-11-01T00:37:14.867836Z -4348 -edavis10 +2011-07-11T11:45:14.631570Z +6261 +jplang @@ -32,11 +32,11 @@ -2010-09-23T14:37:44.939791Z -b728be27d68a5bc46292d5e9d2ae5260 -2010-07-18T15:19:04.080578Z -3848 -edavis10 +2011-07-14T09:24:22.000000Z +62141e99676ae9e0fc6a9afcc9f72128 +2011-05-30T16:40:52.269746Z +5967 +jplang has-props @@ -58,7 +58,7 @@ -1794 +1941 RUNNING_TESTS file @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.939791Z +2011-07-14T09:24:09.000000Z cc987c3ab1bf29e6ebe5313bef953b5b 2010-02-16T16:40:50.914879Z 3438 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.939791Z +2011-07-14T09:24:09.000000Z ba2ffee528eae310e20bf761619bc85f 2008-08-11T20:49:52.309238Z 1732 @@ -134,11 +134,11 @@ -2010-09-23T14:37:44.939791Z -cc24a3b3e2deae6410de710cd2eed893 -2010-07-18T15:19:04.080578Z -3848 -edavis10 +2011-07-14T09:24:22.000000Z +fc379757634a83944c89421ef3bbc763 +2011-05-30T16:40:52.269746Z +5967 +jplang has-props @@ -160,7 +160,7 @@ -2961 +3009 CHANGELOG file @@ -168,11 +168,11 @@ -2010-11-19T13:04:51.228963Z -c17df05456a8e8f311c61ea7825fe2aa -2010-11-01T00:37:14.867836Z -4348 -edavis10 +2011-07-14T09:28:12.000000Z +7a928cad852228e5c5803fd06be7f925 +2011-07-11T11:45:14.631570Z +6261 +jplang has-props @@ -194,7 +194,7 @@ -77969 +97446 COPYING file @@ -202,7 +202,7 @@ -2010-09-23T14:37:44.935786Z +2011-07-14T09:24:09.000000Z 751419260aa954499f7abaabaa882bbe 2007-11-04T13:19:42.552822Z 883 @@ -230,37 +230,3 @@ 17987 -git.rdoc -file - - - - -2010-11-19T14:03:48.248927Z -cc77650493d11d18eabb058fbdf7ac24 -2010-10-22T17:18:11.628381Z -4273 -edavis10 - - - - - - - - - - - - - - - - - - - - - -2248 - diff -r f7c525dc7585 -r 0b6c82dead28 doc/.svn/text-base/CHANGELOG.svn-base --- a/doc/.svn/text-base/CHANGELOG.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/doc/.svn/text-base/CHANGELOG.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,9 +1,323 @@ == Redmine changelog Redmine - project management software -Copyright (C) 2006-2010 Jean-Philippe Lang +Copyright (C) 2006-2011 Jean-Philippe Lang http://www.redmine.org/ +== 2011-07-11 v1.2.1 + +* Defect #5089: i18N error on truncated revision diff view +* Defect #7501: Search options get lost after clicking on a specific result type +* Defect #8229: "project.xml" response does not include the parent ID +* Defect #8449: Wiki annotated page does not display author of version 1 +* Defect #8467: Missing german translation - Warn me when leaving a page with unsaved text +* Defect #8468: No warning when leaving page with unsaved text that has not lost focus +* Defect #8472: Private checkbox ignored on issue creation with "Set own issues public or private" permission +* Defect #8510: JRuby: Can't open administrator panel if scm command is not available +* Defect #8512: Syntax highlighter on Welcome page +* Defect #8554: Translation missing error on custom field validation +* Defect #8565: JRuby: Japanese PDF export error +* Defect #8566: Exported PDF UTF-8 Vietnamese not correct +* Defect #8569: JRuby: PDF export error with TypeError +* Defect #8576: Missing german translation - different things +* Defect #8616: Circular relations +* Defect #8646: Russian translation "label_follows" and "label_follows" are wrong +* Defect #8712: False 'Description updated' journal details messages +* Defect #8729: Not-public queries are not private +* Defect #8737: Broken line of long issue description on issue PDF. +* Defect #8738: Missing revision number/id of associated revisions on issue PDF +* Defect #8739: Workflow copy does not copy advanced workflow settings +* Defect #8759: Setting issue attributes from mail should be case-insensitive +* Defect #8777: Mercurial: Not able to Resetting Redmine project respository + +== 2011-05-30 v1.2.0 + +* Defect #61: Broken character encoding in pdf export +* Defect #1965: Redmine is not Tab Safe +* Defect #2274: Filesystem Repository path encoding of non UTF-8 characters +* Defect #2664: Mercurial: Repository path encoding of non UTF-8 characters +* Defect #3421: Mercurial reads files from working dir instead of changesets +* Defect #3462: CVS: Repository path encoding of non UTF-8 characters +* Defect #3715: Login page should not show projects link and search box if authentication is required +* Defect #3724: Mercurial repositories display revision ID instead of changeset ID +* Defect #3761: Most recent CVS revisions are missing in "revisions" view +* Defect #4270: CVS Repository view in Project doesn't show Author, Revision, Comment +* Defect #5138: Don't use Ajax for pagination +* Defect #5152: Cannot use certain characters for user and role names. +* Defect #5251: Git: Repository path encoding of non UTF-8 characters +* Defect #5373: Translation missing when adding invalid watchers +* Defect #5817: Shared versions not shown in subproject's gantt chart +* Defect #6013: git tab,browsing, very slow -- even after first time +* Defect #6148: Quoting, newlines, and nightmares... +* Defect #6256: Redmine considers non ASCII and UTF-16 text files as binary in SCM +* Defect #6476: Subproject's issues are not shown in the subproject's gantt +* Defect #6496: Remove i18n 0.3.x/0.4.x hack for Rails 2.3.5 +* Defect #6562: Context-menu deletion of issues deletes all subtasks too without explicit prompt +* Defect #6604: Issues targeted at parent project versions' are not shown on gantt chart +* Defect #6706: Resolving issues with the commit message produces the wrong comment with CVS +* Defect #6901: Copy/Move an issue does not give any history of who actually did the action. +* Defect #6905: Specific heading-content breaks CSS +* Defect #7000: Project filter not applied on versions in Gantt chart +* Defect #7097: Starting day of week cannot be set to Saturday +* Defect #7114: New gantt doesn't display some projects +* Defect #7146: Git adapter lost commits before 7 days from database latest changeset +* Defect #7218: Date range error on issue query +* Defect #7257: "Issues by" version links bad criterias +* Defect #7279: CSS class ".icon-home" is not used. +* Defect #7320: circular dependency >2 issues +* Defect #7352: Filters not working in Gantt charts +* Defect #7367: Receiving pop3 email should not output debug messages +* Defect #7373: Error with PDF output and ruby 1.9.2 +* Defect #7379: Remove extraneous hidden_field on wiki history +* Defect #7516: Redmine does not work with RubyGems 1.5.0 +* Defect #7518: Mercurial diff can be wrong if the previous changeset isn't the parent +* Defect #7581: Not including a spent time value on the main issue update screen causes silent data loss +* Defect #7582: hiding form pages from search engines +* Defect #7597: Subversion and Mercurial log have the possibility to miss encoding +* Defect #7604: ActionView::TemplateError (undefined method `name' for nil:NilClass) +* Defect #7605: Using custom queries always redirects to "Issues" tab +* Defect #7615: CVS diffs do not handle new files properly +* Defect #7618: SCM diffs do not handle one line new files properly +* Defect #7639: Some date fields do not have requested format. +* Defect #7657: Wrong commit range in git log command on Windows +* Defect #7818: Wiki pages don't use the local timezone to display the "Updated ? hours ago" mouseover +* Defect #7821: Git "previous" and "next" revisions are incorrect +* Defect #7827: CVS: Age column on repository view is off by timezone delta +* Defect #7843: Add a relation between issues = explicit login window ! (basic authentication popup is prompted on AJAX request) +* Defect #8011: {{toc}} does not display headlines with inline code markup +* Defect #8029: List of users for adding to a group may be empty if 100 first users have been added +* Defect #8064: Text custom fields do not wrap on the issue list +* Defect #8071: Watching a subtask from the context menu updates main issue watch link +* Defect #8072: Two untranslatable default role names +* Defect #8075: Some "notifiable" names are not i18n-enabled +* Defect #8081: GIT: Commits missing when user has the "decorate" git option enabled +* Defect #8088: Colorful indentation of subprojects must be on right in RTL locales +* Defect #8239: notes field is not propagated during issue copy +* Defect #8356: GET /time_entries.xml ignores limit/offset parameters +* Defect #8432: Private issues information shows up on Activity page for unauthorized users +* Feature #746: Versioned issue descriptions +* Feature #1067: Differentiate public/private saved queries in the sidebar +* Feature #1236: Make destination folder for attachment uploads configurable +* Feature #1735: Per project repository log encoding setting +* Feature #1763: Autologin-cookie should be configurable +* Feature #1981: display mercurial tags +* Feature #2074: Sending email notifications when comments are added in the news section +* Feature #2096: Custom fields referencing system tables (users and versions) +* Feature #2732: Allow additional workflow transitions for author and assignee +* Feature #2910: Warning on leaving edited issue/wiki page without saving +* Feature #3396: Git: use --encoding=UTF-8 in "git log" +* Feature #4273: SCM command availability automatic check in administration panel +* Feature #4477: Use mime types in downloading from repository +* Feature #5518: Graceful fallback for "missing translation" needed +* Feature #5520: Text format buttons and preview link missing when editing comment +* Feature #5831: Parent Task to Issue Bulk Edit +* Feature #6887: Upgrade to Rails 2.3.11 +* Feature #7139: Highlight changes inside diff lines +* Feature #7236: Collapse All for Groups +* Feature #7246: Handle "named branch" for mercurial +* Feature #7296: Ability for admin to delete users +* Feature #7318: Add user agent to Redmine Mailhandler +* Feature #7408: Add an application configuration file +* Feature #7409: Cross project Redmine links +* Feature #7410: Add salt to user passwords +* Feature #7411: Option to cipher LDAP ans SCM passwords stored in the database +* Feature #7412: Add an issue visibility level to each role +* Feature #7414: Private issues +* Feature #7517: Configurable path of executable for scm adapters +* Feature #7640: Add "mystery man" gravatar to options +* Feature #7858: RubyGems 1.6 support +* Feature #7893: Group filter on the users list +* Feature #7899: Box for editing comments should open with the formatting toolbar +* Feature #7921: issues by pulldown should have 'status' option +* Feature #7996: Bulk edit and context menu for time entries +* Feature #8006: Right click context menu for Related Issues +* Feature #8209: I18n YAML files not parsable with psych yaml library +* Feature #8345: Link to user profile from account page +* Feature #8365: Git: per project setting to report last commit or not in repository tree +* Patch #5148: metaKey not handled in issues selection +* Patch #5629: Wrap text fields properly in PDF +* Patch #7418: Redmine Persian Translation +* Patch #8295: Wrap title fields properly in PDF +* Patch #8310: fixes automatic line break problem with TCPDF +* Patch #8312: Switch to TCPDF from FPDF for PDF export + +== 2011-04-29 v1.1.3 + +* Defect #5773: Email reminders are sent to locked users +* Defect #6590: Wrong file list link in email notification on new file upload +* Defect #7589: Wiki page with backslash in title can not be found +* Defect #7785: Mailhandler keywords are not removed when updating issues +* Defect #7794: Internal server error on formatting an issue as a PDF in Japanese +* Defect #7838: Gantt- Issues does not show up in green when start and end date are the same +* Defect #7846: Headers (h1, etc.) containing backslash followed by a digit are not displayed correctly +* Defect #7875: CSV export separators in polish locale (pl.yml) +* Defect #7890: Internal server error when referencing an issue without project in commit message +* Defect #7904: Subprojects not properly deleted when deleting a parent project +* Defect #7939: Simultaneous Wiki Updates Cause Internal Error +* Defect #7951: Atom links broken on wiki index +* Defect #7954: IE 9 can not select issues, does not display context menu +* Defect #7985: Trying to do a bulk edit results in "Internal Error" +* Defect #8003: Error raised by reposman.rb under Windows server 2003 +* Defect #8012: Wrong selection of modules when adding new project after validation error +* Defect #8038: Associated Revisions OL/LI items are not styled properly in issue view +* Defect #8067: CSV exporting in Italian locale +* Defect #8235: bulk edit issues and copy issues error in es, gl and ca locales +* Defect #8244: selected modules are not activated when copying a project +* Patch #7278: Update Simplified Chinese translation to 1.1 +* Patch #7390: Fixes in Czech localization +* Patch #7963: Reminder email: Link for show all issues does not sort + +== 2011-03-07 v1.1.2 + +* Defect #3132: Bulk editing menu non-functional in Opera browser +* Defect #6090: Most binary files become corrupted when downloading from CVS repository browser when Redmine is running on a Windows server +* Defect #7280: Issues subjects wrap in Gantt +* Defect #7288: Non ASCII filename downloaded from repo is broken on Internet Explorer. +* Defect #7317: Gantt tab gives internal error due to nil avatar icon +* Defect #7497: Aptana Studio .project file added to version 1.1.1-stable +* Defect #7611: Workflow summary shows X icon for workflow with exactly 1 status transition +* Defect #7625: Syntax highlighting unavailable from board new topic or topic edit preview +* Defect #7630: Spent time in commits not recognized +* Defect #7656: MySQL SQL Syntax Error when filtering issues by Assignee's Group +* Defect #7718: Minutes logged in commit message are converted to hours +* Defect #7763: Email notification are sent to watchers even if 'No events' setting is chosen +* Feature #7608: Add "retro" gravatars +* Patch #7598: Extensible MailHandler +* Patch #7795: Internal server error at journals#index with custom fields + +== 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: 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 +* Defect #3449: Redmine Takes Too Long On Large Mercurial Repository +* Defect #3567: Sorting for changesets might go wrong on Mercurial repos +* Defect #3707: {{toc}} doesn't work with {{include}} +* Defect #5096: Redmine hangs up while browsing Git repository +* Defect #6000: Safe Attributes prevents plugin extension of Issue model... +* Defect #6064: Modules not assigned to projects created via API +* Defect #6110: MailHandler should allow updating Issue Priority and Custom fields +* Defect #6136: JSON API holds less information than XML API +* Defect #6345: xml used by rest API is invalid +* Defect #6348: Gantt chart PDF rendering errors +* Defect #6403: Updating an issue with custom fields fails +* Defect #6467: "Member of role", "Member of group" filter not work correctly +* Defect #6473: New gantt broken after clearing issue filters +* Defect #6541: Email notifications send to everybody +* Defect #6549: Notification settings not migrated properly +* Defect #6591: Acronyms must have a minimum of three characters +* Defect #6674: Delete time log broken after changes to REST +* Defect #6681: Mercurial, Bazaar and Darcs auto close issue text should be commit id instead of revision number +* Defect #6724: Wiki uploads does not work anymore (SVN 4266) +* Defect #6746: Wiki links are broken on Activity page +* Defect #6747: Wiki diff does not work since r4265 +* Defect #6763: New gantt charts: subject displayed twice on issues +* Defect #6826: Clicking "Add" twice creates duplicate member record +* Defect #6844: Unchecking status filter on the issue list has no effect +* Defect #6895: Wrong Polish translation of "blocks" +* Defect #6943: Migration from boolean to varchar fails on PostgreSQL 8.1 +* Defect #7064: Mercurial adapter does not recognize non alphabetic nor numeric in UTF-8 copied files +* Defect #7128: New gantt chart does not render subtasks under parent task +* Defect #7135: paging mechanism returns the same last page forever +* Defect #7188: Activity page not refreshed when changing language +* Defect #7195: Apply CLI-supplied defaults for incoming mail only to new issues not replies +* Defect #7197: Tracker reset to default when replying to an issue email +* Defect #7213: Copy project does not copy all roles and permissions +* Defect #7225: Project settings: Trackers & Custom fields only relevant if module Issue tracking is active +* Feature #630: Allow non-unique names for projects +* Feature #1738: Add a "Visible" flag to project/user custom fields +* Feature #2803: Support for Javascript in Themes +* Feature #2852: Clean Incoming Email of quoted text "----- Reply above this line ------" +* Feature #2995: Improve error message when trying to access an archived project +* Feature #3170: Autocomplete issue relations on subject +* Feature #3503: Administrator Be Able To Modify Email settings Of Users +* Feature #4155: Automatic spent time logging from commit messages +* Feature #5136: Parent select on Wiki rename page +* Feature #5338: Descendants (subtasks) should be available via REST API +* Feature #5494: Wiki TOC should display heading from level 4 +* Feature #5594: Improve MailHandler's keyword handling +* Feature #5622: Allow version to be set via incoming email +* Feature #5712: Reload themes +* Feature #5869: Issue filters by Group and Role +* Feature #6092: Truncate Git revision labels in Activity page/feed and allow configurable length +* Feature #6112: Accept localized keywords when receiving emails +* Feature #6140: REST issues response with issue count limit and offset +* Feature #6260: REST API for Users +* Feature #6276: Gantt Chart rewrite +* Feature #6446: Remove length limits on project identifier and name +* Feature #6628: Improvements in truncate email +* Feature #6779: Project JSON API +* Feature #6823: REST API for time tracker. +* Feature #7072: REST API for news +* Feature #7111: Expose more detail on journal entries +* Feature #7141: REST API: get information about current user +* Patch #4807: Allow to set the done_ratio field with the incoming mail system +* Patch #5441: Initialize TimeEntry attributes with params[:time_entry] +* Patch #6762: Use GET instead of POST to retrieve context_menu +* Patch #7160: French translation ofr "not_a_date" is missing +* Patch #7212: Missing remove_index in AddUniqueIndexOnMembers down migration + + +== 2010-12-23 v1.0.5 + +* #6656: Mercurial adapter loses seconds of commit times +* #6996: Migration trac(sqlite3) -> redmine(postgresql) doesnt escape ' char +* #7013: v-1.0.4 trunk - see {{count}} in page display rather than value +* #7016: redundant 'field_start_date' in ja.yml +* #7018: 'undefined method `reschedule_after' for nil:NilClass' on new issues +* #7024: E-mail notifications about Wiki changes. +* #7033: 'class' attribute of

     tag shouldn't be truncate
    +* #7035: CSV value separator in russian
    +* #7122: Issue-description Quote-button missing
    +* #7144: custom queries making use of deleted custom fields cause a 500 error
    +* #7162: Multiply defined label in french translation
    +
    +== 2010-11-28 v1.0.4
    +
    +* #5324: Git not working if color.ui is enabled
    +* #6447: Issues API doesn't allow full key auth for all actions
    +* #6457: Edit User group problem
    +* #6575: start date being filled with current date even when blank value is submitted
    +* #6740: Max attachment size, incorrect usage of 'KB'
    +* #6760: Select box sorted by ID instead of name in Issue Category
    +* #6766: Changing target version name can cause an internal error
    +* #6784: Redmine not working with i18n gem 0.4.2
    +* #6839: Hardcoded absolute links in my/page_layout
    +* #6841: Projects API doesn't allow full key auth for all actions
    +* #6860: svn: Write error: Broken pipe when browsing repository
    +* #6874: API should return XML description when creating a project
    +* #6932: submitting wrong parent task input creates a 500 error
    +* #6966: Records of Forums are remained, deleting project
    +* #6990: Layout problem in workflow overview
    +* #5117: mercurial_adapter should ensure the right LANG environment variable
    +* #6782: Traditional Chinese language file (to r4352)
    +* #6783: Swedish Translation for r4352
    +* #6804: Bugfix: spelling fixes
    +* #6814: Japanese Translation for r4362
    +* #6948: Bulgarian translation
    +* #6973: Update es.yml
    +
     == 2010-10-31 v1.0.3
     
     * #4065: Redmine.pm doesn't work with LDAPS and a non-standard port
    @@ -1112,7 +1426,7 @@
     * Search engines now supports pagination. Results are sorted in reverse chronological order
     * Added "Estimated hours" attribute on issues
     * A category with assigned issue can now be deleted. 2 options are proposed: remove assignments or reassign issues to another category
    -* Forum notifications are now also sent to the authors of the thread, even if they dont watch the board
    +* Forum notifications are now also sent to the authors of the thread, even if they don�t watch the board
     * Added an application setting to specify the application protocol (http or https) used to generate urls in emails
     * Gantt chart: now starts at the current month by default
     * Gantt chart: month count and zoom factor are automatically saved as user preferences
    @@ -1120,7 +1434,7 @@
     * Added wiki index by date
     * Added preview on add/edit issue form
     * Emails footer can now be customized from the admin interface (Admin -> Email notifications)
    -* Default encodings for repository files can now be set in application settings (used to convert files content and diff to UTF-8 so that theyre properly displayed)
    +* Default encodings for repository files can now be set in application settings (used to convert files content and diff to UTF-8 so that they�re properly displayed)
     * Calendar: first day of week can now be set in lang files
     * Automatic closing of duplicate issues
     * Added a cross-project issue list
    @@ -1132,7 +1446,7 @@
     * Added some accesskeys
     * Added "Float" as a custom field format
     * Added basic Theme support
    -* Added the ability to set the done ratio of issues fixed by commit (Nikolay Solakov)
    +* Added the ability to set the �done ratio� of issues fixed by commit (Nikolay Solakov)
     * Added custom fields in issue related mail notifications
     * Email notifications are now sent in plain text and html
     * Gantt chart can now be exported to a graphic file (png). This functionality is only available if RMagick is installed.
    @@ -1165,7 +1479,7 @@
     * Added Korean translation (Choi Jong Yoon)
     * Fixed: the link to delete issue relations is displayed even if the user is not authorized to delete relations
     * Performance improvement on calendar and gantt
    -* Fixed: wiki preview doesnt work on long entries
    +* Fixed: wiki preview doesn�t work on long entries
     * Fixed: queries with multiple custom fields return no result
     * Fixed: Can not authenticate user against LDAP if its DN contains non-ascii characters
     * Fixed: URL with ~ broken in wiki formatting
    @@ -1176,7 +1490,7 @@
     
     * per project forums added
     * added the ability to archive projects
    -* added Watch functionality on issues. It allows users to receive notifications about issue changes
    +* added �Watch� functionality on issues. It allows users to receive notifications about issue changes
     * custom fields for issues can now be used as filters on issue list
     * added per user custom queries
     * commit messages are now scanned for referenced or fixed issue IDs (keywords defined in Admin -> Settings)
    @@ -1217,7 +1531,7 @@
     * added swedish translation (Thomas Habets)
     * italian translation update (Alessio Spadaro)
     * japanese translation update (Satoru Kurashiki)
    -* fixed: error on history atom feed when theres no notes on an issue change
    +* fixed: error on history atom feed when there�s no notes on an issue change
     * fixed: error in journalizing an issue with longtext custom fields (Postgresql)
     * fixed: creation of Oracle schema
     * fixed: last day of the month not included in project activity
    diff -r f7c525dc7585 -r 0b6c82dead28 doc/.svn/text-base/INSTALL.svn-base
    --- a/doc/.svn/text-base/INSTALL.svn-base	Mon Mar 28 18:17:06 2011 +0100
    +++ b/doc/.svn/text-base/INSTALL.svn-base	Mon Jul 25 14:23:37 2011 +0100
    @@ -1,7 +1,7 @@
     == Redmine installation
     
     Redmine - project management software
    -Copyright (C) 2006-2010  Jean-Philippe Lang
    +Copyright (C) 2006-2011  Jean-Philippe Lang
     http://www.redmine.org/
     
     
    @@ -9,19 +9,21 @@
     
     * Ruby 1.8.6 or 1.8.7
     
    -* Ruby on Rails 2.3.5 (official downloadable Redmine releases are packaged with
    +* RubyGems 1.3.7
    +
    +* Ruby on Rails 2.3.11 (official downloadable Redmine releases are packaged with
       the appropriate Rails version)
     
    -* Rack 1.0.1
    +* Rack 1.1.0 gem
     
    -* RubyGems 1.3.1
    +* Rake 0.8.3 gem
     
    -* Rake 0.8.3
    +* I18n 0.4.2 gem
     
     * A database:
    -  * MySQL (tested with MySQL 5)
    -  * PostgreSQL (tested with PostgreSQL 8.1)
    -  * SQLite (tested with SQLite 3)
    +  * MySQL (tested with MySQL 5.1)
    +  * PostgreSQL (tested with PostgreSQL 8.4)
    +  * SQLite3 (tested with SQLite 3.6)
     
     Optional:
     * SCM binaries (e.g. svn), for repository browsing (must be available in PATH)
    @@ -78,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.
    diff -r f7c525dc7585 -r 0b6c82dead28 doc/.svn/text-base/UPGRADING.svn-base
    --- a/doc/.svn/text-base/UPGRADING.svn-base	Mon Mar 28 18:17:06 2011 +0100
    +++ b/doc/.svn/text-base/UPGRADING.svn-base	Mon Jul 25 14:23:37 2011 +0100
    @@ -1,7 +1,7 @@
     == Redmine upgrade
     
     Redmine - project management software
    -Copyright (C) 2006-2010  Jean-Philippe Lang
    +Copyright (C) 2006-2011  Jean-Philippe Lang
     http://www.redmine.org/
     
     
    @@ -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.
    @@ -28,7 +30,7 @@
     
     6. Migrate your database
     
    -   If you are upgrading to Rails 2.3.5 as part of this migration, you
    +   If you are upgrading to Rails 2.3.11 as part of this migration, you
        need to upgrade the plugin migrations before running the plugin migrations
        using:
          rake db:migrate:upgrade_plugin_migrations RAILS_ENV="production"
    @@ -54,7 +56,7 @@
     
     == Notes
     
    -* Rails 2.3.5 is required for versions 0.9.x and 1.0.x.
    +* Rails 2.3.11 is required for versions 1.2.x.
     
     == References
     
    diff -r f7c525dc7585 -r 0b6c82dead28 doc/.svn/text-base/git.rdoc.svn-base
    --- a/doc/.svn/text-base/git.rdoc.svn-base	Mon Mar 28 18:17:06 2011 +0100
    +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    @@ -1,40 +0,0 @@
    -= Contributing to Redmine with git and github
    -
    -(This is a beta document. If you can improve it, fork it and send a patch/pull request.)
    -
    -The official repository is at http://github.com/edavis10/redmine
    -
    -Official branches:
    -
    -* master - is automatically mirrored to svn trunk. DO NOT COMMIT OR MERGE INTO THIS BRANCH
    -* [0.6, 0.7, 0.8, 0.9, 1.0,...]-stable - is automatically mirrored to svn release branches. DO NOT COMMIT OR MERGE INTO THIS BRANCH
    -* integration-to-svn-trunk - this branch is a git-only branch that will track master (trunk). Any code in here will be eventually merged into master but it may be rebased as any time (git-svn needs to rebase to commit to svn)
    -* integration-to-svn-stable-1.0 - this branch is a git-only branch that will track the 1.0-stable branch in svn.  Any code in here will be eventually merged into master and 1.0-stable but it may be rebased as any time (git-svn needs to rebase to commit to svn)
    -
    -I (edavis10) might have some other branches on the repository for work in progress.
    -
    -== Branch naming standards
    -
    -Redmine has two kinds of development:
    -
    -* bug fixes
    -* new feature development
    -
    -Both bug fixes and new feature development should be done in a branch named after the issue number on Redmine.org.  So if you are fixing Issue #6244 your branch should be named:
    -
    -* 6244
    -* 6244-sort-people-by-display-name (optional description)
    -* issue/6244 (optional "issue" prefix)
    -* issue/6244-sort-people-by-display-name (optional prefix and description)
    -
    -That way when the branch is merged into the Redmine core, the correct issue can be updated.
    -
    -Longer term feature development might require multiple branches.  Just your best judgment and try to keep the issue id in the name.
    -
    -If you don't have an issue for your patch, create an issue on redmine.org and say it's a placeholder issue for your work. Better yet, add a brief overview of what you are working on to the issue and you might get some help with it.
    -
    -== Coding Standards
    -
    -Follow the coding standards on the Redmine wiki: http://www.redmine.org/wiki/redmine/Coding_Standards#Commits.  Make sure you commit logs conform to the standards, otherwise someone else will have to rewrite them for you and you might lose attribution during the conversion to svn.
    -
    -
    diff -r f7c525dc7585 -r 0b6c82dead28 doc/CHANGELOG
    --- a/doc/CHANGELOG	Mon Mar 28 18:17:06 2011 +0100
    +++ b/doc/CHANGELOG	Mon Jul 25 14:23:37 2011 +0100
    @@ -1,9 +1,323 @@
     == Redmine changelog
     
     Redmine - project management software
    -Copyright (C) 2006-2010  Jean-Philippe Lang
    +Copyright (C) 2006-2011  Jean-Philippe Lang
     http://www.redmine.org/
     
    +== 2011-07-11 v1.2.1
    +
    +* Defect #5089: i18N error on truncated revision diff view
    +* Defect #7501: Search options get lost after clicking on a specific result type
    +* Defect #8229: "project.xml" response does not include the parent ID
    +* Defect #8449: Wiki annotated page does not display author of version 1
    +* Defect #8467: Missing german translation - Warn me when leaving a page with unsaved text
    +* Defect #8468: No warning when leaving page with unsaved text that has not lost focus
    +* Defect #8472: Private checkbox ignored on issue creation with "Set own issues public or private" permission
    +* Defect #8510: JRuby: Can't open administrator panel if scm command is not available
    +* Defect #8512: Syntax highlighter on Welcome page
    +* Defect #8554: Translation missing error on custom field validation
    +* Defect #8565: JRuby: Japanese PDF export error
    +* Defect #8566: Exported PDF UTF-8 Vietnamese not correct
    +* Defect #8569: JRuby: PDF export error with TypeError
    +* Defect #8576: Missing german translation - different things
    +* Defect #8616: Circular relations
    +* Defect #8646: Russian translation "label_follows" and "label_follows" are wrong
    +* Defect #8712: False 'Description updated' journal details messages
    +* Defect #8729: Not-public queries are not private
    +* Defect #8737: Broken line of long issue description on issue PDF.
    +* Defect #8738: Missing revision number/id of associated revisions on issue PDF
    +* Defect #8739: Workflow copy does not copy advanced workflow settings
    +* Defect #8759: Setting issue attributes from mail should be case-insensitive
    +* Defect #8777: Mercurial: Not able to Resetting Redmine project respository
    +
    +== 2011-05-30 v1.2.0
    +
    +* Defect #61: Broken character encoding in pdf export
    +* Defect #1965: Redmine is not Tab Safe
    +* Defect #2274: Filesystem Repository path encoding of non UTF-8 characters
    +* Defect #2664: Mercurial: Repository path encoding of non UTF-8 characters
    +* Defect #3421: Mercurial reads files from working dir instead of changesets
    +* Defect #3462: CVS: Repository path encoding of non UTF-8 characters
    +* Defect #3715: Login page should not show projects link and search box if authentication is required
    +* Defect #3724: Mercurial repositories display revision ID instead of changeset ID
    +* Defect #3761: Most recent CVS revisions are missing in "revisions" view
    +* Defect #4270: CVS Repository view in Project doesn't show Author, Revision, Comment
    +* Defect #5138: Don't use Ajax for pagination
    +* Defect #5152: Cannot use certain characters for user and role names.
    +* Defect #5251: Git: Repository path encoding of non UTF-8 characters
    +* Defect #5373: Translation missing when adding invalid watchers
    +* Defect #5817: Shared versions not shown in subproject's gantt chart
    +* Defect #6013: git tab,browsing, very slow -- even after first time
    +* Defect #6148: Quoting, newlines, and nightmares...
    +* Defect #6256: Redmine considers non ASCII and UTF-16 text files as binary in SCM
    +* Defect #6476: Subproject's issues are not shown in the subproject's gantt
    +* Defect #6496: Remove i18n 0.3.x/0.4.x hack for Rails 2.3.5
    +* Defect #6562: Context-menu deletion of issues deletes all subtasks too without explicit prompt
    +* Defect #6604: Issues targeted at parent project versions' are not shown on gantt chart
    +* Defect #6706: Resolving issues with the commit message produces the wrong comment with CVS
    +* Defect #6901: Copy/Move an issue does not give any history of who actually did the action.
    +* Defect #6905: Specific heading-content breaks CSS
    +* Defect #7000: Project filter not applied on versions in Gantt chart
    +* Defect #7097: Starting day of week cannot be set to Saturday
    +* Defect #7114: New gantt doesn't display some projects
    +* Defect #7146: Git adapter lost commits before 7 days from database latest changeset
    +* Defect #7218: Date range error on issue query
    +* Defect #7257: "Issues by" version links bad criterias
    +* Defect #7279: CSS class ".icon-home" is not used.
    +* Defect #7320: circular dependency >2 issues
    +* Defect #7352: Filters not working in Gantt charts
    +* Defect #7367: Receiving pop3 email should not output debug messages
    +* Defect #7373: Error with PDF output and ruby 1.9.2
    +* Defect #7379: Remove extraneous hidden_field on wiki history
    +* Defect #7516: Redmine does not work with RubyGems 1.5.0
    +* Defect #7518: Mercurial diff can be wrong if the previous changeset isn't the parent
    +* Defect #7581: Not including a spent time value on the main issue update screen causes silent data loss
    +* Defect #7582: hiding form pages from search engines
    +* Defect #7597: Subversion and Mercurial log have the possibility to miss encoding
    +* Defect #7604: ActionView::TemplateError (undefined method `name' for nil:NilClass)
    +* Defect #7605: Using custom queries always redirects to "Issues" tab
    +* Defect #7615: CVS diffs do not handle new files properly
    +* Defect #7618: SCM diffs do not handle one line new files properly
    +* Defect #7639: Some date fields do not have requested format.
    +* Defect #7657: Wrong commit range in git log command on Windows
    +* Defect #7818: Wiki pages don't use the local timezone to display the "Updated ? hours ago" mouseover
    +* Defect #7821: Git "previous" and "next" revisions are incorrect
    +* Defect #7827: CVS: Age column on repository view is off by timezone delta
    +* Defect #7843: Add a relation between issues = explicit login window ! (basic authentication popup is prompted on AJAX request)
    +* Defect #8011: {{toc}} does not display headlines with inline code markup
    +* Defect #8029: List of users for adding to a group may be empty if 100 first users have been added
    +* Defect #8064: Text custom fields do not wrap on the issue list
    +* Defect #8071: Watching a subtask from the context menu updates main issue watch link
    +* Defect #8072: Two untranslatable default role names
    +* Defect #8075: Some "notifiable" names are not i18n-enabled
    +* Defect #8081: GIT: Commits missing when user has the "decorate" git option enabled
    +* Defect #8088: Colorful indentation of subprojects must be on right in RTL locales
    +* Defect #8239: notes field is not propagated during issue copy
    +* Defect #8356: GET /time_entries.xml ignores limit/offset parameters
    +* Defect #8432: Private issues information shows up on Activity page for unauthorized users
    +* Feature #746: Versioned issue descriptions
    +* Feature #1067: Differentiate public/private saved queries in the sidebar
    +* Feature #1236: Make destination folder for attachment uploads configurable
    +* Feature #1735: Per project repository log encoding setting
    +* Feature #1763: Autologin-cookie should be configurable
    +* Feature #1981: display mercurial tags
    +* Feature #2074: Sending email notifications when comments are added in the news section
    +* Feature #2096: Custom fields referencing system tables (users and versions)
    +* Feature #2732: Allow additional workflow transitions for author and assignee
    +* Feature #2910: Warning on leaving edited issue/wiki page without saving
    +* Feature #3396: Git: use --encoding=UTF-8 in "git log"
    +* Feature #4273: SCM command availability automatic check in administration panel
    +* Feature #4477: Use mime types in downloading from repository
    +* Feature #5518: Graceful fallback for "missing translation" needed
    +* Feature #5520: Text format buttons and preview link missing when editing comment
    +* Feature #5831: Parent Task to Issue Bulk Edit
    +* Feature #6887: Upgrade to Rails 2.3.11
    +* Feature #7139: Highlight changes inside diff lines
    +* Feature #7236: Collapse All for Groups
    +* Feature #7246: Handle "named branch" for mercurial
    +* Feature #7296: Ability for admin to delete users
    +* Feature #7318: Add user agent to Redmine Mailhandler
    +* Feature #7408: Add an application configuration file
    +* Feature #7409: Cross project Redmine links
    +* Feature #7410: Add salt to user passwords
    +* Feature #7411: Option to cipher LDAP ans SCM passwords stored in the database
    +* Feature #7412: Add an issue visibility level to each role
    +* Feature #7414: Private issues
    +* Feature #7517: Configurable path of executable for scm adapters
    +* Feature #7640: Add "mystery man" gravatar to options
    +* Feature #7858: RubyGems 1.6 support
    +* Feature #7893: Group filter on the users list
    +* Feature #7899: Box for editing comments should open with the formatting toolbar
    +* Feature #7921: issues by pulldown should have 'status' option
    +* Feature #7996: Bulk edit and context menu for time entries
    +* Feature #8006: Right click context menu for Related Issues
    +* Feature #8209: I18n YAML files not parsable with psych yaml library
    +* Feature #8345: Link to user profile from account page
    +* Feature #8365: Git: per project setting to report last commit or not in repository tree
    +* Patch #5148: metaKey not handled in issues selection
    +* Patch #5629: Wrap text fields properly in PDF
    +* Patch #7418: Redmine Persian Translation
    +* Patch #8295: Wrap title fields properly in PDF
    +* Patch #8310: fixes automatic line break problem with TCPDF
    +* Patch #8312: Switch to TCPDF from FPDF for PDF export
    +
    +== 2011-04-29 v1.1.3
    +
    +* Defect #5773: Email reminders are sent to locked users
    +* Defect #6590: Wrong file list link in email notification on new file upload
    +* Defect #7589: Wiki page with backslash in title can not be found
    +* Defect #7785: Mailhandler keywords are not removed when updating issues
    +* Defect #7794: Internal server error on formatting an issue as a PDF in Japanese
    +* Defect #7838: Gantt- Issues does not show up in green when start and end date are the same
    +* Defect #7846: Headers (h1, etc.) containing backslash followed by a digit are not displayed correctly
    +* Defect #7875: CSV export separators in polish locale (pl.yml)
    +* Defect #7890: Internal server error when referencing an issue without project in commit message
    +* Defect #7904: Subprojects not properly deleted when deleting a parent project
    +* Defect #7939: Simultaneous Wiki Updates Cause Internal Error
    +* Defect #7951: Atom links broken on wiki index
    +* Defect #7954: IE 9 can not select issues, does not display context menu
    +* Defect #7985: Trying to do a bulk edit results in "Internal Error"
    +* Defect #8003: Error raised by reposman.rb under Windows server 2003
    +* Defect #8012: Wrong selection of modules when adding new project after validation error
    +* Defect #8038: Associated Revisions OL/LI items are not styled properly in issue view
    +* Defect #8067: CSV exporting in Italian locale
    +* Defect #8235: bulk edit issues and copy issues error in es, gl and ca locales
    +* Defect #8244: selected modules are not activated when copying a project
    +* Patch #7278: Update Simplified Chinese translation to 1.1
    +* Patch #7390: Fixes in Czech localization
    +* Patch #7963: Reminder email: Link for show all issues does not sort
    +
    +== 2011-03-07 v1.1.2
    +
    +* Defect #3132: Bulk editing menu non-functional in Opera browser
    +* Defect #6090: Most binary files become corrupted when downloading from CVS repository browser when Redmine is running on a Windows server
    +* Defect #7280: Issues subjects wrap in Gantt
    +* Defect #7288: Non ASCII filename downloaded from repo is broken on Internet Explorer.
    +* Defect #7317: Gantt tab gives internal error due to nil avatar icon
    +* Defect #7497: Aptana Studio .project file added to version 1.1.1-stable
    +* Defect #7611: Workflow summary shows X icon for workflow with exactly 1 status transition
    +* Defect #7625: Syntax highlighting unavailable from board new topic or topic edit preview
    +* Defect #7630: Spent time in commits not recognized
    +* Defect #7656: MySQL SQL Syntax Error when filtering issues by Assignee's Group
    +* Defect #7718: Minutes logged in commit message are converted to hours
    +* Defect #7763: Email notification are sent to watchers even if 'No events' setting is chosen
    +* Feature #7608: Add "retro" gravatars
    +* Patch #7598: Extensible MailHandler
    +* Patch #7795: Internal server error at journals#index with custom fields
    +
    +== 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:  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
    +* Defect #3449: Redmine Takes Too Long On Large Mercurial Repository
    +* Defect #3567: Sorting for changesets might go wrong on Mercurial repos
    +* Defect #3707: {{toc}} doesn't work with {{include}}
    +* Defect #5096: Redmine hangs up while browsing Git repository
    +* Defect #6000: Safe Attributes prevents plugin extension of Issue model...
    +* Defect #6064: Modules not assigned to projects created via API
    +* Defect #6110: MailHandler should allow updating Issue Priority and Custom fields
    +* Defect #6136: JSON API holds less information than XML API
    +* Defect #6345: xml used by rest API is invalid
    +* Defect #6348: Gantt chart PDF rendering errors
    +* Defect #6403: Updating an issue with custom fields fails
    +* Defect #6467: "Member of role", "Member of group" filter not work correctly
    +* Defect #6473: New gantt broken after clearing issue filters
    +* Defect #6541: Email notifications send to everybody
    +* Defect #6549: Notification settings not migrated properly
    +* Defect #6591: Acronyms must have a minimum of three characters
    +* Defect #6674: Delete time log broken after changes to REST
    +* Defect #6681: Mercurial, Bazaar and Darcs auto close issue text should be commit id instead of revision number
    +* Defect #6724: Wiki uploads does not work anymore (SVN 4266)
    +* Defect #6746: Wiki links are broken on Activity page
    +* Defect #6747: Wiki diff does not work since r4265
    +* Defect #6763: New gantt charts: subject displayed twice on issues
    +* Defect #6826: Clicking "Add" twice creates duplicate member record
    +* Defect #6844: Unchecking status filter on the issue list has no effect
    +* Defect #6895: Wrong Polish translation of "blocks"
    +* Defect #6943: Migration from boolean to varchar fails on PostgreSQL 8.1
    +* Defect #7064: Mercurial adapter does not recognize non alphabetic nor numeric in UTF-8 copied files
    +* Defect #7128: New gantt chart does not render subtasks under parent task
    +* Defect #7135: paging mechanism returns the same last page forever
    +* Defect #7188: Activity page not refreshed when changing language
    +* Defect #7195: Apply CLI-supplied defaults for incoming mail only to new issues not replies
    +* Defect #7197: Tracker reset to default when replying to an issue email
    +* Defect #7213: Copy project does not copy all roles and permissions
    +* Defect #7225: Project settings: Trackers & Custom fields only relevant if module Issue tracking is active
    +* Feature #630: Allow non-unique names for projects
    +* Feature #1738: Add a "Visible" flag to project/user custom fields
    +* Feature #2803: Support for Javascript in Themes
    +* Feature #2852: Clean Incoming Email of quoted text "----- Reply above this line ------"
    +* Feature #2995: Improve error message when trying to access an archived project
    +* Feature #3170: Autocomplete issue relations on subject
    +* Feature #3503: Administrator Be Able To Modify Email settings Of Users
    +* Feature #4155: Automatic spent time logging from commit messages
    +* Feature #5136: Parent select on Wiki rename page
    +* Feature #5338: Descendants (subtasks) should be available via REST API
    +* Feature #5494: Wiki TOC should display heading from level 4
    +* Feature #5594: Improve MailHandler's keyword handling
    +* Feature #5622: Allow version to be set via incoming email
    +* Feature #5712: Reload themes
    +* Feature #5869: Issue filters by Group and Role
    +* Feature #6092: Truncate Git revision labels in Activity page/feed and allow configurable length
    +* Feature #6112: Accept localized keywords when receiving emails
    +* Feature #6140: REST issues response with issue count limit and offset
    +* Feature #6260: REST API for Users
    +* Feature #6276: Gantt Chart rewrite
    +* Feature #6446: Remove length limits on project identifier and name
    +* Feature #6628: Improvements in truncate email
    +* Feature #6779: Project JSON API
    +* Feature #6823: REST API for time tracker.
    +* Feature #7072: REST API for news
    +* Feature #7111: Expose more detail on journal entries
    +* Feature #7141: REST API: get information about current user
    +* Patch #4807: Allow to set the done_ratio field with the incoming mail system
    +* Patch #5441: Initialize TimeEntry attributes with params[:time_entry]
    +* Patch #6762: Use GET instead of POST to retrieve context_menu
    +* Patch #7160: French translation ofr "not_a_date" is missing
    +* Patch #7212: Missing remove_index in AddUniqueIndexOnMembers down migration
    +
    +
    +== 2010-12-23 v1.0.5
    +
    +* #6656: Mercurial adapter loses seconds of commit times
    +* #6996: Migration trac(sqlite3) -> redmine(postgresql) doesnt escape ' char
    +* #7013: v-1.0.4 trunk - see {{count}} in page display rather than value
    +* #7016: redundant 'field_start_date' in ja.yml
    +* #7018: 'undefined method `reschedule_after' for nil:NilClass' on new issues
    +* #7024: E-mail notifications about Wiki changes.
    +* #7033: 'class' attribute of 
     tag shouldn't be truncate
    +* #7035: CSV value separator in russian
    +* #7122: Issue-description Quote-button missing
    +* #7144: custom queries making use of deleted custom fields cause a 500 error
    +* #7162: Multiply defined label in french translation
    +
    +== 2010-11-28 v1.0.4
    +
    +* #5324: Git not working if color.ui is enabled
    +* #6447: Issues API doesn't allow full key auth for all actions
    +* #6457: Edit User group problem
    +* #6575: start date being filled with current date even when blank value is submitted
    +* #6740: Max attachment size, incorrect usage of 'KB'
    +* #6760: Select box sorted by ID instead of name in Issue Category
    +* #6766: Changing target version name can cause an internal error
    +* #6784: Redmine not working with i18n gem 0.4.2
    +* #6839: Hardcoded absolute links in my/page_layout
    +* #6841: Projects API doesn't allow full key auth for all actions
    +* #6860: svn: Write error: Broken pipe when browsing repository
    +* #6874: API should return XML description when creating a project
    +* #6932: submitting wrong parent task input creates a 500 error
    +* #6966: Records of Forums are remained, deleting project
    +* #6990: Layout problem in workflow overview
    +* #5117: mercurial_adapter should ensure the right LANG environment variable
    +* #6782: Traditional Chinese language file (to r4352)
    +* #6783: Swedish Translation for r4352
    +* #6804: Bugfix: spelling fixes
    +* #6814: Japanese Translation for r4362
    +* #6948: Bulgarian translation
    +* #6973: Update es.yml
    +
     == 2010-10-31 v1.0.3
     
     * #4065: Redmine.pm doesn't work with LDAPS and a non-standard port
    @@ -1112,7 +1426,7 @@
     * Search engines now supports pagination. Results are sorted in reverse chronological order
     * Added "Estimated hours" attribute on issues
     * A category with assigned issue can now be deleted. 2 options are proposed: remove assignments or reassign issues to another category
    -* Forum notifications are now also sent to the authors of the thread, even if they dont watch the board
    +* Forum notifications are now also sent to the authors of the thread, even if they don�t watch the board
     * Added an application setting to specify the application protocol (http or https) used to generate urls in emails
     * Gantt chart: now starts at the current month by default
     * Gantt chart: month count and zoom factor are automatically saved as user preferences
    @@ -1120,7 +1434,7 @@
     * Added wiki index by date
     * Added preview on add/edit issue form
     * Emails footer can now be customized from the admin interface (Admin -> Email notifications)
    -* Default encodings for repository files can now be set in application settings (used to convert files content and diff to UTF-8 so that theyre properly displayed)
    +* Default encodings for repository files can now be set in application settings (used to convert files content and diff to UTF-8 so that they�re properly displayed)
     * Calendar: first day of week can now be set in lang files
     * Automatic closing of duplicate issues
     * Added a cross-project issue list
    @@ -1132,7 +1446,7 @@
     * Added some accesskeys
     * Added "Float" as a custom field format
     * Added basic Theme support
    -* Added the ability to set the done ratio of issues fixed by commit (Nikolay Solakov)
    +* Added the ability to set the �done ratio� of issues fixed by commit (Nikolay Solakov)
     * Added custom fields in issue related mail notifications
     * Email notifications are now sent in plain text and html
     * Gantt chart can now be exported to a graphic file (png). This functionality is only available if RMagick is installed.
    @@ -1165,7 +1479,7 @@
     * Added Korean translation (Choi Jong Yoon)
     * Fixed: the link to delete issue relations is displayed even if the user is not authorized to delete relations
     * Performance improvement on calendar and gantt
    -* Fixed: wiki preview doesnt work on long entries
    +* Fixed: wiki preview doesn�t work on long entries
     * Fixed: queries with multiple custom fields return no result
     * Fixed: Can not authenticate user against LDAP if its DN contains non-ascii characters
     * Fixed: URL with ~ broken in wiki formatting
    @@ -1176,7 +1490,7 @@
     
     * per project forums added
     * added the ability to archive projects
    -* added Watch functionality on issues. It allows users to receive notifications about issue changes
    +* added �Watch� functionality on issues. It allows users to receive notifications about issue changes
     * custom fields for issues can now be used as filters on issue list
     * added per user custom queries
     * commit messages are now scanned for referenced or fixed issue IDs (keywords defined in Admin -> Settings)
    @@ -1217,7 +1531,7 @@
     * added swedish translation (Thomas Habets)
     * italian translation update (Alessio Spadaro)
     * japanese translation update (Satoru Kurashiki)
    -* fixed: error on history atom feed when theres no notes on an issue change
    +* fixed: error on history atom feed when there�s no notes on an issue change
     * fixed: error in journalizing an issue with longtext custom fields (Postgresql)
     * fixed: creation of Oracle schema
     * fixed: last day of the month not included in project activity
    diff -r f7c525dc7585 -r 0b6c82dead28 doc/INSTALL
    --- a/doc/INSTALL	Mon Mar 28 18:17:06 2011 +0100
    +++ b/doc/INSTALL	Mon Jul 25 14:23:37 2011 +0100
    @@ -1,7 +1,7 @@
     == Redmine installation
     
     Redmine - project management software
    -Copyright (C) 2006-2010  Jean-Philippe Lang
    +Copyright (C) 2006-2011  Jean-Philippe Lang
     http://www.redmine.org/
     
     
    @@ -9,19 +9,21 @@
     
     * Ruby 1.8.6 or 1.8.7
     
    -* Ruby on Rails 2.3.5 (official downloadable Redmine releases are packaged with
    +* RubyGems 1.3.7
    +
    +* Ruby on Rails 2.3.11 (official downloadable Redmine releases are packaged with
       the appropriate Rails version)
     
    -* Rack 1.0.1
    +* Rack 1.1.0 gem
     
    -* RubyGems 1.3.1
    +* Rake 0.8.3 gem
     
    -* Rake 0.8.3
    +* I18n 0.4.2 gem
     
     * A database:
    -  * MySQL (tested with MySQL 5)
    -  * PostgreSQL (tested with PostgreSQL 8.1)
    -  * SQLite (tested with SQLite 3)
    +  * MySQL (tested with MySQL 5.1)
    +  * PostgreSQL (tested with PostgreSQL 8.4)
    +  * SQLite3 (tested with SQLite 3.6)
     
     Optional:
     * SCM binaries (e.g. svn), for repository browsing (must be available in PATH)
    @@ -78,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.
    diff -r f7c525dc7585 -r 0b6c82dead28 doc/UPGRADING
    --- a/doc/UPGRADING	Mon Mar 28 18:17:06 2011 +0100
    +++ b/doc/UPGRADING	Mon Jul 25 14:23:37 2011 +0100
    @@ -1,7 +1,7 @@
     == Redmine upgrade
     
     Redmine - project management software
    -Copyright (C) 2006-2010  Jean-Philippe Lang
    +Copyright (C) 2006-2011  Jean-Philippe Lang
     http://www.redmine.org/
     
     
    @@ -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.
    @@ -28,7 +30,7 @@
     
     6. Migrate your database
     
    -   If you are upgrading to Rails 2.3.5 as part of this migration, you
    +   If you are upgrading to Rails 2.3.11 as part of this migration, you
        need to upgrade the plugin migrations before running the plugin migrations
        using:
          rake db:migrate:upgrade_plugin_migrations RAILS_ENV="production"
    @@ -54,7 +56,7 @@
     
     == Notes
     
    -* Rails 2.3.5 is required for versions 0.9.x and 1.0.x.
    +* Rails 2.3.11 is required for versions 1.2.x.
     
     == References
     
    diff -r f7c525dc7585 -r 0b6c82dead28 doc/git.rdoc
    --- a/doc/git.rdoc	Mon Mar 28 18:17:06 2011 +0100
    +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    @@ -1,40 +0,0 @@
    -= Contributing to Redmine with git and github
    -
    -(This is a beta document. If you can improve it, fork it and send a patch/pull request.)
    -
    -The official repository is at http://github.com/edavis10/redmine
    -
    -Official branches:
    -
    -* master - is automatically mirrored to svn trunk. DO NOT COMMIT OR MERGE INTO THIS BRANCH
    -* [0.6, 0.7, 0.8, 0.9, 1.0,...]-stable - is automatically mirrored to svn release branches. DO NOT COMMIT OR MERGE INTO THIS BRANCH
    -* integration-to-svn-trunk - this branch is a git-only branch that will track master (trunk). Any code in here will be eventually merged into master but it may be rebased as any time (git-svn needs to rebase to commit to svn)
    -* integration-to-svn-stable-1.0 - this branch is a git-only branch that will track the 1.0-stable branch in svn.  Any code in here will be eventually merged into master and 1.0-stable but it may be rebased as any time (git-svn needs to rebase to commit to svn)
    -
    -I (edavis10) might have some other branches on the repository for work in progress.
    -
    -== Branch naming standards
    -
    -Redmine has two kinds of development:
    -
    -* bug fixes
    -* new feature development
    -
    -Both bug fixes and new feature development should be done in a branch named after the issue number on Redmine.org.  So if you are fixing Issue #6244 your branch should be named:
    -
    -* 6244
    -* 6244-sort-people-by-display-name (optional description)
    -* issue/6244 (optional "issue" prefix)
    -* issue/6244-sort-people-by-display-name (optional prefix and description)
    -
    -That way when the branch is merged into the Redmine core, the correct issue can be updated.
    -
    -Longer term feature development might require multiple branches.  Just your best judgment and try to keep the issue id in the name.
    -
    -If you don't have an issue for your patch, create an issue on redmine.org and say it's a placeholder issue for your work. Better yet, add a brief overview of what you are working on to the issue and you might get some help with it.
    -
    -== Coding Standards
    -
    -Follow the coding standards on the Redmine wiki: http://www.redmine.org/wiki/redmine/Coding_Standards#Commits.  Make sure you commit logs conform to the standards, otherwise someone else will have to rewrite them for you and you might lose attribution during the conversion to svn.
    -
    -
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/.svn/all-wcprops
    --- a/extra/.svn/all-wcprops	Mon Mar 28 18:17:06 2011 +0100
    +++ b/extra/.svn/all-wcprops	Mon Jul 25 14:23:37 2011 +0100
    @@ -1,5 +1,5 @@
     K 25
     svn:wc:ra_dav:version-url
    -V 30
    -/svn/!svn/ver/4309/trunk/extra
    +V 44
    +/svn/!svn/ver/5878/branches/1.2-stable/extra
     END
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/.svn/entries
    --- a/extra/.svn/entries	Mon Mar 28 18:17:06 2011 +0100
    +++ b/extra/.svn/entries	Mon Jul 25 14:23:37 2011 +0100
    @@ -1,15 +1,15 @@
     10
     
     dir
    -4411
    -http://redmine.rubyforge.org/svn/trunk/extra
    +6270
    +http://redmine.rubyforge.org/svn/branches/1.2-stable/extra
     http://redmine.rubyforge.org/svn
     
     
     
    -2010-10-29T22:55:50.222644Z
    -4309
    -jbbarth
    +2011-05-17T13:32:08.404109Z
    +5825
    +tmaruyama
     
     
     
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/mail_handler/.svn/all-wcprops
    --- a/extra/mail_handler/.svn/all-wcprops	Mon Mar 28 18:17:06 2011 +0100
    +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    @@ -1,11 +0,0 @@
    -K 25
    -svn:wc:ra_dav:version-url
    -V 43
    -/svn/!svn/ver/3195/trunk/extra/mail_handler
    -END
    -rdm-mailhandler.rb
    -K 25
    -svn:wc:ra_dav:version-url
    -V 62
    -/svn/!svn/ver/3195/trunk/extra/mail_handler/rdm-mailhandler.rb
    -END
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/mail_handler/.svn/entries
    --- a/extra/mail_handler/.svn/entries	Mon Mar 28 18:17:06 2011 +0100
    +++ b/extra/mail_handler/.svn/entries	Mon Jul 25 14:23:37 2011 +0100
    @@ -1,14 +1,14 @@
     10
     
     dir
    -4411
    -http://redmine.rubyforge.org/svn/trunk/extra/mail_handler
    +6270
    +http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/mail_handler
     http://redmine.rubyforge.org/svn
     
     
     
    -2009-12-19T14:08:48.825882Z
    -3195
    +2011-01-15T14:48:33.715032Z
    +4725
     jplang
     
     
    @@ -32,10 +32,10 @@
     
     
     
    -2010-09-23T14:37:44.939791Z
    -4529fffb032835fb9b9411c58d1c7d6b
    -2009-12-19T14:08:48.825882Z
    -3195
    +2011-07-14T09:24:09.000000Z
    +f3a0f406bd2e6d3caacb7e7c22079df0
    +2011-01-15T14:48:33.715032Z
    +4725
     jplang
     has-props
     
    @@ -58,5 +58,5 @@
     
     
     
    -5778
    +5915
     
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/mail_handler/.svn/text-base/rdm-mailhandler.rb.svn-base
    --- a/extra/mail_handler/.svn/text-base/rdm-mailhandler.rb.svn-base	Mon Mar 28 18:17:06 2011 +0100
    +++ b/extra/mail_handler/.svn/text-base/rdm-mailhandler.rb.svn-base	Mon Jul 25 14:23:37 2011 +0100
    @@ -57,10 +57,11 @@
     
     module Net
       class HTTPS < HTTP
    -    def self.post_form(url, params)
    +    def self.post_form(url, params, headers)
           request = Post.new(url.path)
           request.form_data = params
           request.basic_auth url.user, url.password if url.user
    +      request.initialize_http_header(headers)
           http = new(url.host, url.port)
           http.use_ssl = (url.scheme == 'https')
           http.start {|h| h.request(request) }
    @@ -121,6 +122,8 @@
       def submit(email)
         uri = url.gsub(%r{/*$}, '') + '/mail_handler'
         
    +    headers = { 'User-Agent' => "Redmine mail handler/#{VERSION}" }
    +    
         data = { 'key' => key, 'email' => email, 
                                'allow_override' => allow_override,
                                'unknown_user' => unknown_user,
    @@ -128,7 +131,7 @@
         issue_attributes.each { |attr, value| data["issue[#{attr}]"] = value }
                  
         debug "Posting to #{uri}..."
    -    response = Net::HTTPS.post_form(URI.parse(uri), data)
    +    response = Net::HTTPS.post_form(URI.parse(uri), data, headers)
         debug "Response received: #{response.code}"
         
         case response.code.to_i
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/mail_handler/rdm-mailhandler.rb
    --- a/extra/mail_handler/rdm-mailhandler.rb	Mon Mar 28 18:17:06 2011 +0100
    +++ b/extra/mail_handler/rdm-mailhandler.rb	Mon Jul 25 14:23:37 2011 +0100
    @@ -57,10 +57,11 @@
     
     module Net
       class HTTPS < HTTP
    -    def self.post_form(url, params)
    +    def self.post_form(url, params, headers)
           request = Post.new(url.path)
           request.form_data = params
           request.basic_auth url.user, url.password if url.user
    +      request.initialize_http_header(headers)
           http = new(url.host, url.port)
           http.use_ssl = (url.scheme == 'https')
           http.start {|h| h.request(request) }
    @@ -121,6 +122,8 @@
       def submit(email)
         uri = url.gsub(%r{/*$}, '') + '/mail_handler'
         
    +    headers = { 'User-Agent' => "Redmine mail handler/#{VERSION}" }
    +    
         data = { 'key' => key, 'email' => email, 
                                'allow_override' => allow_override,
                                'unknown_user' => unknown_user,
    @@ -128,7 +131,7 @@
         issue_attributes.each { |attr, value| data["issue[#{attr}]"] = value }
                  
         debug "Posting to #{uri}..."
    -    response = Net::HTTPS.post_form(URI.parse(uri), data)
    +    response = Net::HTTPS.post_form(URI.parse(uri), data, headers)
         debug "Response received: #{response.code}"
         
         case response.code.to_i
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/.svn/all-wcprops
    --- a/extra/sample_plugin/.svn/all-wcprops	Mon Mar 28 18:17:06 2011 +0100
    +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    @@ -1,17 +0,0 @@
    -K 25
    -svn:wc:ra_dav:version-url
    -V 44
    -/svn/!svn/ver/2798/trunk/extra/sample_plugin
    -END
    -init.rb
    -K 25
    -svn:wc:ra_dav:version-url
    -V 52
    -/svn/!svn/ver/2798/trunk/extra/sample_plugin/init.rb
    -END
    -README
    -K 25
    -svn:wc:ra_dav:version-url
    -V 51
    -/svn/!svn/ver/2530/trunk/extra/sample_plugin/README
    -END
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/.svn/entries
    --- a/extra/sample_plugin/.svn/entries	Mon Mar 28 18:17:06 2011 +0100
    +++ b/extra/sample_plugin/.svn/entries	Mon Jul 25 14:23:37 2011 +0100
    @@ -1,8 +1,8 @@
     10
     
     dir
    -4411
    -http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin
    +6270
    +http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin
     http://redmine.rubyforge.org/svn
     
     
    @@ -44,7 +44,7 @@
     
     
     
    -2010-09-23T14:37:44.963747Z
    +2011-07-14T09:24:10.000000Z
     cb8636f8b6659a091f3e1f018a64a2f5
     2009-07-02T18:40:06.298867Z
     2798
    @@ -78,7 +78,7 @@
     
     
     
    -2010-09-23T14:37:44.943755Z
    +2011-07-14T09:24:09.000000Z
     4d87ae4412bda3ec3b4c9a8bc17fafb6
     2009-02-26T16:37:48.671184Z
     2530
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/app/.svn/all-wcprops
    --- a/extra/sample_plugin/app/.svn/all-wcprops	Mon Mar 28 18:17:06 2011 +0100
    +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    @@ -1,5 +0,0 @@
    -K 25
    -svn:wc:ra_dav:version-url
    -V 48
    -/svn/!svn/ver/2798/trunk/extra/sample_plugin/app
    -END
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/app/.svn/entries
    --- a/extra/sample_plugin/app/.svn/entries	Mon Mar 28 18:17:06 2011 +0100
    +++ b/extra/sample_plugin/app/.svn/entries	Mon Jul 25 14:23:37 2011 +0100
    @@ -1,8 +1,8 @@
     10
     
     dir
    -4411
    -http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app
    +6270
    +http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/app
     http://redmine.rubyforge.org/svn
     
     
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/app/controllers/.svn/all-wcprops
    --- a/extra/sample_plugin/app/controllers/.svn/all-wcprops	Mon Mar 28 18:17:06 2011 +0100
    +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    @@ -1,11 +0,0 @@
    -K 25
    -svn:wc:ra_dav:version-url
    -V 60
    -/svn/!svn/ver/2493/trunk/extra/sample_plugin/app/controllers
    -END
    -example_controller.rb
    -K 25
    -svn:wc:ra_dav:version-url
    -V 82
    -/svn/!svn/ver/2493/trunk/extra/sample_plugin/app/controllers/example_controller.rb
    -END
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/app/controllers/.svn/entries
    --- a/extra/sample_plugin/app/controllers/.svn/entries	Mon Mar 28 18:17:06 2011 +0100
    +++ b/extra/sample_plugin/app/controllers/.svn/entries	Mon Jul 25 14:23:37 2011 +0100
    @@ -1,8 +1,8 @@
     10
     
     dir
    -4411
    -http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/controllers
    +6270
    +http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/app/controllers
     http://redmine.rubyforge.org/svn
     
     
    @@ -32,7 +32,7 @@
     
     
     
    -2010-09-23T14:37:44.943755Z
    +2011-07-14T09:24:09.000000Z
     9e3b32d475f8b06df8d45b28a2732d76
     2009-02-21T11:04:50.579477Z
     2493
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/app/models/.svn/all-wcprops
    --- a/extra/sample_plugin/app/models/.svn/all-wcprops	Mon Mar 28 18:17:06 2011 +0100
    +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    @@ -1,11 +0,0 @@
    -K 25
    -svn:wc:ra_dav:version-url
    -V 55
    -/svn/!svn/ver/1704/trunk/extra/sample_plugin/app/models
    -END
    -meeting.rb
    -K 25
    -svn:wc:ra_dav:version-url
    -V 66
    -/svn/!svn/ver/1704/trunk/extra/sample_plugin/app/models/meeting.rb
    -END
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/app/models/.svn/entries
    --- a/extra/sample_plugin/app/models/.svn/entries	Mon Mar 28 18:17:06 2011 +0100
    +++ b/extra/sample_plugin/app/models/.svn/entries	Mon Jul 25 14:23:37 2011 +0100
    @@ -1,8 +1,8 @@
     10
     
     dir
    -4411
    -http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/models
    +6270
    +http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/app/models
     http://redmine.rubyforge.org/svn
     
     
    @@ -32,7 +32,7 @@
     
     
     
    -2010-09-23T14:37:44.947762Z
    +2011-07-14T09:24:09.000000Z
     5161ccc668c61730638ef23bec50232f
     2008-07-27T19:18:35.954247Z
     1704
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/app/views/.svn/all-wcprops
    --- a/extra/sample_plugin/app/views/.svn/all-wcprops	Mon Mar 28 18:17:06 2011 +0100
    +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    @@ -1,5 +0,0 @@
    -K 25
    -svn:wc:ra_dav:version-url
    -V 54
    -/svn/!svn/ver/2798/trunk/extra/sample_plugin/app/views
    -END
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/app/views/.svn/entries
    --- a/extra/sample_plugin/app/views/.svn/entries	Mon Mar 28 18:17:06 2011 +0100
    +++ b/extra/sample_plugin/app/views/.svn/entries	Mon Jul 25 14:23:37 2011 +0100
    @@ -1,8 +1,8 @@
     10
     
     dir
    -4411
    -http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/views
    +6270
    +http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/app/views
     http://redmine.rubyforge.org/svn
     
     
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/app/views/example/.svn/all-wcprops
    --- a/extra/sample_plugin/app/views/example/.svn/all-wcprops	Mon Mar 28 18:17:06 2011 +0100
    +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    @@ -1,17 +0,0 @@
    -K 25
    -svn:wc:ra_dav:version-url
    -V 61
    -/svn/!svn/ver/753/trunk/extra/sample_plugin/app/views/example
    -END
    -say_hello.rhtml
    -K 25
    -svn:wc:ra_dav:version-url
    -V 77
    -/svn/!svn/ver/753/trunk/extra/sample_plugin/app/views/example/say_hello.rhtml
    -END
    -say_goodbye.rhtml
    -K 25
    -svn:wc:ra_dav:version-url
    -V 79
    -/svn/!svn/ver/753/trunk/extra/sample_plugin/app/views/example/say_goodbye.rhtml
    -END
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/app/views/example/.svn/entries
    --- a/extra/sample_plugin/app/views/example/.svn/entries	Mon Mar 28 18:17:06 2011 +0100
    +++ b/extra/sample_plugin/app/views/example/.svn/entries	Mon Jul 25 14:23:37 2011 +0100
    @@ -1,8 +1,8 @@
     10
     
     dir
    -4411
    -http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/views/example
    +6270
    +http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/app/views/example
     http://redmine.rubyforge.org/svn
     
     
    @@ -32,7 +32,7 @@
     
     
     
    -2010-09-23T14:37:44.947762Z
    +2011-07-14T09:24:09.000000Z
     674cc3fb92754e41d7e7d5fb7ed0eda7
     2007-09-23T18:50:53.732551Z
     753
    @@ -66,7 +66,7 @@
     
     
     
    -2010-09-23T14:37:44.947762Z
    +2011-07-14T09:24:09.000000Z
     cf9e02439886339b70ee199313902c96
     2007-09-23T18:50:53.732551Z
     753
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/app/views/my/.svn/all-wcprops
    --- a/extra/sample_plugin/app/views/my/.svn/all-wcprops	Mon Mar 28 18:17:06 2011 +0100
    +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    @@ -1,5 +0,0 @@
    -K 25
    -svn:wc:ra_dav:version-url
    -V 57
    -/svn/!svn/ver/2529/trunk/extra/sample_plugin/app/views/my
    -END
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/app/views/my/.svn/entries
    --- a/extra/sample_plugin/app/views/my/.svn/entries	Mon Mar 28 18:17:06 2011 +0100
    +++ b/extra/sample_plugin/app/views/my/.svn/entries	Mon Jul 25 14:23:37 2011 +0100
    @@ -1,8 +1,8 @@
     10
     
     dir
    -4411
    -http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/views/my
    +6270
    +http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/app/views/my
     http://redmine.rubyforge.org/svn
     
     
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/app/views/my/blocks/.svn/all-wcprops
    --- a/extra/sample_plugin/app/views/my/blocks/.svn/all-wcprops	Mon Mar 28 18:17:06 2011 +0100
    +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    @@ -1,11 +0,0 @@
    -K 25
    -svn:wc:ra_dav:version-url
    -V 64
    -/svn/!svn/ver/2529/trunk/extra/sample_plugin/app/views/my/blocks
    -END
    -_sample_block.rhtml
    -K 25
    -svn:wc:ra_dav:version-url
    -V 84
    -/svn/!svn/ver/2529/trunk/extra/sample_plugin/app/views/my/blocks/_sample_block.rhtml
    -END
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/app/views/my/blocks/.svn/entries
    --- a/extra/sample_plugin/app/views/my/blocks/.svn/entries	Mon Mar 28 18:17:06 2011 +0100
    +++ b/extra/sample_plugin/app/views/my/blocks/.svn/entries	Mon Jul 25 14:23:37 2011 +0100
    @@ -1,8 +1,8 @@
     10
     
     dir
    -4411
    -http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/views/my/blocks
    +6270
    +http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/app/views/my/blocks
     http://redmine.rubyforge.org/svn
     
     
    @@ -32,7 +32,7 @@
     
     
     
    -2010-09-23T14:37:44.951756Z
    +2011-07-14T09:24:09.000000Z
     e2d729cf488b7b7411cffb259c10559a
     2009-02-26T16:36:56.835799Z
     2529
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/app/views/settings/.svn/all-wcprops
    --- a/extra/sample_plugin/app/views/settings/.svn/all-wcprops	Mon Mar 28 18:17:06 2011 +0100
    +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    @@ -1,11 +0,0 @@
    -K 25
    -svn:wc:ra_dav:version-url
    -V 63
    -/svn/!svn/ver/2798/trunk/extra/sample_plugin/app/views/settings
    -END
    -_sample_plugin_settings.rhtml
    -K 25
    -svn:wc:ra_dav:version-url
    -V 93
    -/svn/!svn/ver/2798/trunk/extra/sample_plugin/app/views/settings/_sample_plugin_settings.rhtml
    -END
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/app/views/settings/.svn/entries
    --- a/extra/sample_plugin/app/views/settings/.svn/entries	Mon Mar 28 18:17:06 2011 +0100
    +++ b/extra/sample_plugin/app/views/settings/.svn/entries	Mon Jul 25 14:23:37 2011 +0100
    @@ -1,8 +1,8 @@
     10
     
     dir
    -4411
    -http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/views/settings
    +6270
    +http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/app/views/settings
     http://redmine.rubyforge.org/svn
     
     
    @@ -32,7 +32,7 @@
     
     
     
    -2010-09-23T14:37:44.951756Z
    +2011-07-14T09:24:09.000000Z
     065925dde040b66230ae06437114c77f
     2009-07-02T18:40:06.298867Z
     2798
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/assets/.svn/all-wcprops
    --- a/extra/sample_plugin/assets/.svn/all-wcprops	Mon Mar 28 18:17:06 2011 +0100
    +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    @@ -1,5 +0,0 @@
    -K 25
    -svn:wc:ra_dav:version-url
    -V 50
    -/svn/!svn/ver/753/trunk/extra/sample_plugin/assets
    -END
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/assets/.svn/entries
    --- a/extra/sample_plugin/assets/.svn/entries	Mon Mar 28 18:17:06 2011 +0100
    +++ b/extra/sample_plugin/assets/.svn/entries	Mon Jul 25 14:23:37 2011 +0100
    @@ -1,8 +1,8 @@
     10
     
     dir
    -4411
    -http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/assets
    +6270
    +http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/assets
     http://redmine.rubyforge.org/svn
     
     
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/assets/images/.svn/all-wcprops
    --- a/extra/sample_plugin/assets/images/.svn/all-wcprops	Mon Mar 28 18:17:06 2011 +0100
    +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    @@ -1,11 +0,0 @@
    -K 25
    -svn:wc:ra_dav:version-url
    -V 57
    -/svn/!svn/ver/753/trunk/extra/sample_plugin/assets/images
    -END
    -it_works.png
    -K 25
    -svn:wc:ra_dav:version-url
    -V 70
    -/svn/!svn/ver/753/trunk/extra/sample_plugin/assets/images/it_works.png
    -END
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/assets/images/.svn/entries
    --- a/extra/sample_plugin/assets/images/.svn/entries	Mon Mar 28 18:17:06 2011 +0100
    +++ b/extra/sample_plugin/assets/images/.svn/entries	Mon Jul 25 14:23:37 2011 +0100
    @@ -1,8 +1,8 @@
     10
     
     dir
    -4411
    -http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/assets/images
    +6270
    +http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/assets/images
     http://redmine.rubyforge.org/svn
     
     
    @@ -32,7 +32,7 @@
     
     
     
    -2010-09-23T14:37:44.955797Z
    +2011-07-14T09:24:09.000000Z
     81bcc262c08473fa7cb05cc78176652f
     2007-09-23T18:50:53.732551Z
     753
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/assets/stylesheets/.svn/all-wcprops
    --- a/extra/sample_plugin/assets/stylesheets/.svn/all-wcprops	Mon Mar 28 18:17:06 2011 +0100
    +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    @@ -1,11 +0,0 @@
    -K 25
    -svn:wc:ra_dav:version-url
    -V 62
    -/svn/!svn/ver/753/trunk/extra/sample_plugin/assets/stylesheets
    -END
    -example.css
    -K 25
    -svn:wc:ra_dav:version-url
    -V 74
    -/svn/!svn/ver/753/trunk/extra/sample_plugin/assets/stylesheets/example.css
    -END
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/assets/stylesheets/.svn/entries
    --- a/extra/sample_plugin/assets/stylesheets/.svn/entries	Mon Mar 28 18:17:06 2011 +0100
    +++ b/extra/sample_plugin/assets/stylesheets/.svn/entries	Mon Jul 25 14:23:37 2011 +0100
    @@ -1,8 +1,8 @@
     10
     
     dir
    -4411
    -http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/assets/stylesheets
    +6270
    +http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/assets/stylesheets
     http://redmine.rubyforge.org/svn
     
     
    @@ -32,7 +32,7 @@
     
     
     
    -2010-09-23T14:37:44.955797Z
    +2011-07-14T09:24:09.000000Z
     ced97da84497db69b30e6e17a55c3fb9
     2007-09-23T18:50:53.732551Z
     753
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/config/.svn/all-wcprops
    --- a/extra/sample_plugin/config/.svn/all-wcprops	Mon Mar 28 18:17:06 2011 +0100
    +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    @@ -1,5 +0,0 @@
    -K 25
    -svn:wc:ra_dav:version-url
    -V 51
    -/svn/!svn/ver/2493/trunk/extra/sample_plugin/config
    -END
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/config/.svn/entries
    --- a/extra/sample_plugin/config/.svn/entries	Mon Mar 28 18:17:06 2011 +0100
    +++ b/extra/sample_plugin/config/.svn/entries	Mon Jul 25 14:23:37 2011 +0100
    @@ -1,8 +1,8 @@
     10
     
     dir
    -4411
    -http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/config
    +6270
    +http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/config
     http://redmine.rubyforge.org/svn
     
     
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/config/locales/.svn/all-wcprops
    --- a/extra/sample_plugin/config/locales/.svn/all-wcprops	Mon Mar 28 18:17:06 2011 +0100
    +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    @@ -1,17 +0,0 @@
    -K 25
    -svn:wc:ra_dav:version-url
    -V 59
    -/svn/!svn/ver/2493/trunk/extra/sample_plugin/config/locales
    -END
    -en.yml
    -K 25
    -svn:wc:ra_dav:version-url
    -V 66
    -/svn/!svn/ver/2493/trunk/extra/sample_plugin/config/locales/en.yml
    -END
    -fr.yml
    -K 25
    -svn:wc:ra_dav:version-url
    -V 66
    -/svn/!svn/ver/2493/trunk/extra/sample_plugin/config/locales/fr.yml
    -END
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/config/locales/.svn/entries
    --- a/extra/sample_plugin/config/locales/.svn/entries	Mon Mar 28 18:17:06 2011 +0100
    +++ b/extra/sample_plugin/config/locales/.svn/entries	Mon Jul 25 14:23:37 2011 +0100
    @@ -1,8 +1,8 @@
     10
     
     dir
    -4411
    -http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/config/locales
    +6270
    +http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/config/locales
     http://redmine.rubyforge.org/svn
     
     
    @@ -32,7 +32,7 @@
     
     
     
    -2010-09-23T14:37:44.959754Z
    +2011-07-14T09:24:10.000000Z
     c1dc7060239e61ce13e8840b305000c5
     2009-02-08T16:13:02.919112Z
     2413
    @@ -66,7 +66,7 @@
     
     
     
    -2010-09-23T14:37:44.959754Z
    +2011-07-14T09:24:10.000000Z
     989492284a42bf9777e2bd0d39b40254
     2009-02-08T16:13:02.919112Z
     2413
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/db/.svn/all-wcprops
    --- a/extra/sample_plugin/db/.svn/all-wcprops	Mon Mar 28 18:17:06 2011 +0100
    +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    @@ -1,5 +0,0 @@
    -K 25
    -svn:wc:ra_dav:version-url
    -V 47
    -/svn/!svn/ver/1703/trunk/extra/sample_plugin/db
    -END
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/db/.svn/entries
    --- a/extra/sample_plugin/db/.svn/entries	Mon Mar 28 18:17:06 2011 +0100
    +++ b/extra/sample_plugin/db/.svn/entries	Mon Jul 25 14:23:37 2011 +0100
    @@ -1,8 +1,8 @@
     10
     
     dir
    -4411
    -http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/db
    +6270
    +http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/db
     http://redmine.rubyforge.org/svn
     
     
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/db/migrate/.svn/all-wcprops
    --- a/extra/sample_plugin/db/migrate/.svn/all-wcprops	Mon Mar 28 18:17:06 2011 +0100
    +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    @@ -1,11 +0,0 @@
    -K 25
    -svn:wc:ra_dav:version-url
    -V 55
    -/svn/!svn/ver/1703/trunk/extra/sample_plugin/db/migrate
    -END
    -001_create_meetings.rb
    -K 25
    -svn:wc:ra_dav:version-url
    -V 78
    -/svn/!svn/ver/1703/trunk/extra/sample_plugin/db/migrate/001_create_meetings.rb
    -END
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/sample_plugin/db/migrate/.svn/entries
    --- a/extra/sample_plugin/db/migrate/.svn/entries	Mon Mar 28 18:17:06 2011 +0100
    +++ b/extra/sample_plugin/db/migrate/.svn/entries	Mon Jul 25 14:23:37 2011 +0100
    @@ -1,8 +1,8 @@
     10
     
     dir
    -4411
    -http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/db/migrate
    +6270
    +http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/sample_plugin/db/migrate
     http://redmine.rubyforge.org/svn
     
     
    @@ -32,7 +32,7 @@
     
     
     
    -2010-09-23T14:37:44.963747Z
    +2011-07-14T09:24:10.000000Z
     2316ab57f3d60b7f04b4bdfdebf6fd8e
     2008-07-27T19:10:56.352148Z
     1703
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/soundsoftware/SoundSoftware-salted.pm
    --- a/extra/soundsoftware/SoundSoftware-salted.pm	Mon Mar 28 18:17:06 2011 +0100
    +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    @@ -1,470 +0,0 @@
    -package Apache::Authn::SoundSoftware;
    -
    -=head1 Apache::Authn::SoundSoftware
    -
    -SoundSoftware - a mod_perl module for Apache authentication against a
    -Redmine database and optional LDAP implementing the access control
    -rules required for the SoundSoftware.ac.uk repository site.
    -
    -=head1 SYNOPSIS
    -
    -This module is closely based on the Redmine.pm authentication module
    -provided with Redmine.  It is intended to be used for authentication
    -in front of a repository service such as hgwebdir.
    -
    -Requirements:
    -
    -1. Clone/pull from repo for public project: Any user, no
    -authentication required
    -
    -2. Clone/pull from repo for private project: Project members only
    -
    -3. Push to repo for public project: "Permitted" users only (this
    -probably means project members who are also identified in the hgrc web
    -section for the repository and so will be approved by hgwebdir?)
    -
    -4. Push to repo for private project: "Permitted" users only (as above)
    -
    -5. Push to any repo that is tracking an external repo: Refused always
    -
    -=head1 INSTALLATION
    -
    -Debian/ubuntu:
    -
    -  apt-get install libapache-dbi-perl libapache2-mod-perl2 \
    -    libdbd-mysql-perl libauthen-simple-ldap-perl libio-socket-ssl-perl
    -
    -Note that LDAP support is hardcoded "on" in this script (it is
    -optional in the original Redmine.pm).
    -
    -=head1 CONFIGURATION
    -
    -   ## This module has to be in your perl path
    -   ## eg:  /usr/local/lib/site_perl/Apache/Authn/SoundSoftware.pm
    -   PerlLoadModule Apache::Authn::SoundSoftware
    -
    -   # Example when using hgwebdir
    -   ScriptAlias / "/var/hg/hgwebdir.cgi/"
    -
    -   
    -       AuthName "Mercurial"
    -       AuthType Basic
    -       Require valid-user
    -       PerlAccessHandler Apache::Authn::SoundSoftware::access_handler
    -       PerlAuthenHandler Apache::Authn::SoundSoftware::authen_handler
    -       SoundSoftwareDSN "DBI:mysql:database=redmine;host=localhost"
    -       SoundSoftwareDbUser "redmine"
    -       SoundSoftwareDbPass "password"
    -       Options +ExecCGI
    -       AddHandler cgi-script .cgi
    -       ## Optional where clause (fulltext search would be slow and
    -       ## database dependant).
    -       # SoundSoftwareDbWhereClause "and members.role_id IN (1,2)"
    -       ## Optional prefix for local repository URLs
    -       # SoundSoftwareRepoPrefix "/var/hg/"
    -  
    -
    -See the original Redmine.pm for further configuration notes.
    -
    -=cut
    -
    -use strict;
    -use warnings FATAL => 'all', NONFATAL => 'redefine';
    -
    -use DBI;
    -use Digest::SHA1;
    -use Authen::Simple::LDAP;
    -use Apache2::Module;
    -use Apache2::Access;
    -use Apache2::ServerRec qw();
    -use Apache2::RequestRec qw();
    -use Apache2::RequestUtil qw();
    -use Apache2::Const qw(:common :override :cmd_how);
    -use APR::Pool ();
    -use APR::Table ();
    -
    -my @directives = (
    -  {
    -    name => 'SoundSoftwareDSN',
    -    req_override => OR_AUTHCFG,
    -    args_how => TAKE1,
    -    errmsg => 'Dsn in format used by Perl DBI. eg: "DBI:Pg:dbname=databasename;host=my.db.server"',
    -  },
    -  {
    -    name => 'SoundSoftwareDbUser',
    -    req_override => OR_AUTHCFG,
    -    args_how => TAKE1,
    -  },
    -  {
    -    name => 'SoundSoftwareDbPass',
    -    req_override => OR_AUTHCFG,
    -    args_how => TAKE1,
    -  },
    -  {
    -    name => 'SoundSoftwareDbWhereClause',
    -    req_override => OR_AUTHCFG,
    -    args_how => TAKE1,
    -  },
    -  {
    -    name => 'SoundSoftwareRepoPrefix',
    -    req_override => OR_AUTHCFG,
    -    args_how => TAKE1,
    -  },
    -);
    -
    -sub SoundSoftwareDSN { 
    -    my ($self, $parms, $arg) = @_;
    -    $self->{SoundSoftwareDSN} = $arg;
    -    my $query = "SELECT 
    -                 hashed_password, salt, auth_source_id, permissions
    -              FROM members, projects, users, roles, member_roles
    -              WHERE 
    -                projects.id=members.project_id
    -                AND member_roles.member_id=members.id
    -                AND users.id=members.user_id 
    -                AND roles.id=member_roles.role_id
    -                AND users.status=1 
    -                AND login=? 
    -                AND identifier=? ";
    -    $self->{SoundSoftwareQuery} = trim($query);
    -}
    -
    -sub SoundSoftwareDbUser { set_val('SoundSoftwareDbUser', @_); }
    -sub SoundSoftwareDbPass { set_val('SoundSoftwareDbPass', @_); }
    -sub SoundSoftwareDbWhereClause { 
    -    my ($self, $parms, $arg) = @_;
    -    $self->{SoundSoftwareQuery} = trim($self->{SoundSoftwareQuery}.($arg ? $arg : "")." ");
    -}
    -
    -sub SoundSoftwareRepoPrefix { 
    -    my ($self, $parms, $arg) = @_;
    -    if ($arg) {
    -	$self->{SoundSoftwareRepoPrefix} = $arg;
    -    }
    -}
    -
    -sub trim {
    -    my $string = shift;
    -    $string =~ s/\s{2,}/ /g;
    -    return $string;
    -}
    -
    -sub set_val {
    -    my ($key, $self, $parms, $arg) = @_;
    -    $self->{$key} = $arg;
    -}
    -
    -Apache2::Module::add(__PACKAGE__, \@directives);
    -
    -
    -my %read_only_methods = map { $_ => 1 } qw/GET PROPFIND REPORT OPTIONS/;
    -
    -sub access_handler {
    -    my $r = shift;
    -
    -    print STDERR "SoundSoftware.pm: In access handler at " . scalar localtime() . "\n";
    -
    -    unless ($r->some_auth_required) {
    -	$r->log_reason("No authentication has been configured");
    -	return FORBIDDEN;
    -    }
    -
    -    my $method = $r->method;
    -
    -    print STDERR "SoundSoftware.pm: Method: $method, uri " . $r->uri . ", location " . $r->location . "\n";
    -    print STDERR "SoundSoftware.pm: Accept: " . $r->headers_in->{Accept} . "\n";
    -
    -    my $dbh = connect_database($r);
    -    unless ($dbh) {
    -	print STDERR "SoundSoftware.pm: Database connection failed!: " . $DBI::errstr . "\n";
    -	return FORBIDDEN;
    -    }
    -
    -    print STDERR "Connected to db, dbh is " . $dbh . "\n";
    -
    -    my $project_id = get_project_identifier($dbh, $r);
    -
    -    if (!defined $read_only_methods{$method}) {
    -        print STDERR "SoundSoftware.pm: Method is not read-only\n";
    -        if (project_repo_is_readonly($dbh, $project_id, $r)) {
    -            print STDERR "SoundSoftware.pm: Project repo is read-only, refusing access\n";
    -	    return FORBIDDEN;
    -        } else {
    -	    print STDERR "SoundSoftware.pm: Project repo is read-write, authentication handler required\n";
    -            return OK;
    -        }
    -    }
    -
    -    my $status = get_project_status($dbh, $project_id, $r);
    -
    -    $dbh->disconnect();
    -    undef $dbh;
    -
    -    if ($status == 0) { # nonexistent
    -	print STDERR "SoundSoftware.pm: Project does not exist, refusing access\n";
    -	return FORBIDDEN;
    -    } elsif ($status == 1) { # public
    -	print STDERR "SoundSoftware.pm: Project is public, no restriction here\n";
    -	$r->set_handlers(PerlAuthenHandler => [\&OK])
    -    } else { # private
    -	print STDERR "SoundSoftware.pm: Project is private, authentication handler required\n";
    -    }
    -
    -    return OK
    -}
    -
    -sub authen_handler {
    -    my $r = shift;
    -    
    -    print STDERR "SoundSoftware.pm: In authentication handler at " . scalar localtime() . "\n";
    -
    -    my $dbh = connect_database($r);
    -    unless ($dbh) {
    -        print STDERR "SoundSoftware.pm: Database connection failed!: " . $DBI::errstr . "\n";
    -        return AUTH_REQUIRED;
    -    }
    -    
    -    my $project_id = get_project_identifier($dbh, $r);
    -    my $realm = get_realm($dbh, $project_id, $r);
    -    $r->auth_name($realm);
    -
    -    my ($res, $redmine_pass) =  $r->get_basic_auth_pw();
    -    unless ($res == OK) {
    -	$dbh->disconnect();
    -	undef $dbh;
    -	return $res;
    -    }
    -    
    -    print STDERR "SoundSoftware.pm: User is " . $r->user . ", got password\n";
    -
    -    my $permitted = is_permitted($dbh, $project_id, $r->user, $redmine_pass, $r);
    -    
    -    $dbh->disconnect();
    -    undef $dbh;
    -
    -    if ($permitted) {
    -	return OK;
    -    } else {
    -	print STDERR "SoundSoftware.pm: Not permitted\n";
    -	$r->note_auth_failure();
    -	return AUTH_REQUIRED;
    -    }
    -}
    -
    -sub get_project_status {
    -    my $dbh = shift;
    -    my $project_id = shift;
    -    my $r = shift;
    -
    -    if (!defined $project_id or $project_id eq '') {
    -	return 0; # nonexistent
    -    }
    -    
    -    my $sth = $dbh->prepare(
    -        "SELECT is_public FROM projects WHERE projects.identifier = ?;"
    -    );
    -
    -    $sth->execute($project_id);
    -    my $ret = 0; # nonexistent
    -    if (my @row = $sth->fetchrow_array) {
    -    	if ($row[0] eq "1" || $row[0] eq "t") {
    -	    $ret = 1; # public
    -    	} else {
    -	    $ret = 2; # private
    -	}
    -    }
    -    $sth->finish();
    -    undef $sth;
    -
    -    $ret;
    -}
    -
    -sub project_repo_is_readonly {
    -    my $dbh = shift;
    -    my $project_id = shift;
    -    my $r = shift;
    -
    -    if (!defined $project_id or $project_id eq '') {
    -        return 0; # nonexistent
    -    }
    -
    -    my $sth = $dbh->prepare(
    -        "SELECT repositories.is_external FROM repositories, projects WHERE projects.identifier = ? AND repositories.project_id = projects.id;"
    -    );
    -
    -    $sth->execute($project_id);
    -    my $ret = 0; # nonexistent
    -    if (my @row = $sth->fetchrow_array) {
    -        if (defined($row[0]) && ($row[0] eq "1" || $row[0] eq "t")) {
    -            $ret = 1; # read-only (i.e. external)
    -        } else {
    -            $ret = 0; # read-write
    -        }
    -    }
    -    $sth->finish();
    -    undef $sth;
    -
    -    $ret;
    -}
    -
    -sub is_permitted {
    -    my $dbh = shift;
    -    my $project_id = shift;
    -    my $redmine_user = shift;
    -    my $redmine_pass = shift;
    -    my $r = shift;
    -
    -    my $pass_digest = Digest::SHA1::sha1_hex($redmine_pass);
    -
    -    my $cfg = Apache2::Module::get_config
    -	(__PACKAGE__, $r->server, $r->per_dir_config);
    -
    -    my $query = $cfg->{SoundSoftwareQuery};
    -    my $sth = $dbh->prepare($query);
    -    $sth->execute($redmine_user, $project_id);
    -
    -    my $ret;
    -    while (my ($hashed_password, $salt, $auth_source_id, $permissions) = $sth->fetchrow_array) {
    -
    -	# Test permissions for this user before we verify credentials
    -	# -- if the user is not permitted this action anyway, there's
    -	# not much point in e.g. contacting the LDAP
    -
    -	my $method = $r->method;
    -
    -	if ((defined $read_only_methods{$method} && $permissions =~ /:browse_repository/)
    -	    || $permissions =~ /:commit_access/) {
    -
    -	    # User would be permitted this action, if their
    -	    # credentials checked out -- test those now
    -
    -	    print STDERR "SoundSoftware.pm: User $redmine_user has required role, checking credentials\n";
    -
    -	    unless ($auth_source_id) {
    -                my $salted_password = Digest::SHA1::sha1_hex($salt.$pass_digest);
    -		if ($hashed_password eq $salted_password) {
    -		    print STDERR "SoundSoftware.pm: User $redmine_user authenticated via password\n";
    -		    $ret = 1;
    -		    last;
    -		}
    -	    } else {
    -		my $sthldap = $dbh->prepare(
    -		    "SELECT host,port,tls,account,account_password,base_dn,attr_login FROM auth_sources WHERE id = ?;"
    -		    );
    -		$sthldap->execute($auth_source_id);
    -		while (my @rowldap = $sthldap->fetchrow_array) {
    -		    my $ldap = Authen::Simple::LDAP->new(
    -			host    => ($rowldap[2] eq "1" || $rowldap[2] eq "t") ? "ldaps://$rowldap[0]" : $rowldap[0],
    -			port    => $rowldap[1],
    -			basedn  => $rowldap[5],
    -			binddn  => $rowldap[3] ? $rowldap[3] : "",
    -			bindpw  => $rowldap[4] ? $rowldap[4] : "",
    -			filter  => "(".$rowldap[6]."=%s)"
    -			);
    -		    if ($ldap->authenticate($redmine_user, $redmine_pass)) {
    -			print STDERR "SoundSoftware.pm: User $redmine_user authenticated via LDAP\n";
    -			$ret = 1;
    -		    }
    -		}
    -		$sthldap->finish();
    -		undef $sthldap;
    -	    }
    -	} else {
    -	    print STDERR "SoundSoftware.pm: User $redmine_user lacks required role for this project\n";
    -	}
    -    }
    -
    -    $sth->finish();
    -    undef $sth;
    -
    -    $ret;
    -}
    -
    -sub get_project_identifier {
    -    my $dbh = shift;
    -    my $r = shift;
    -
    -    my $location = $r->location;
    -    my ($repo) = $r->uri =~ m{$location/*([^/]+)};
    -
    -    return $repo if (!$repo);
    -
    -    $repo =~ s/[^a-zA-Z0-9\._-]//g;
    -
    -    # The original Redmine.pm returns the string just calculated as
    -    # the project identifier.  That won't do for us -- we may have
    -    # (and in fact already do have, in our test instance) projects
    -    # whose repository names differ from the project identifiers.
    -
    -    # This is a rather fundamental change because it means that almost
    -    # every request needs more than one database query -- which
    -    # prompts us to start passing around $dbh instead of connecting
    -    # locally within each function as is done in Redmine.pm.
    -
    -    my $sth = $dbh->prepare(
    -        "SELECT projects.identifier FROM projects, repositories WHERE repositories.project_id = projects.id AND repositories.url LIKE ?;"
    -    );
    -
    -    my $cfg = Apache2::Module::get_config
    -	(__PACKAGE__, $r->server, $r->per_dir_config);
    -
    -    my $prefix = $cfg->{SoundSoftwareRepoPrefix};
    -    if (!defined $prefix) { $prefix = '%/'; }
    -
    -    my $identifier = '';
    -
    -    $sth->execute($prefix . $repo);
    -    my $ret = 0;
    -    if (my @row = $sth->fetchrow_array) {
    -	$identifier = $row[0];
    -    }
    -    $sth->finish();
    -    undef $sth;
    -
    -    print STDERR "SoundSoftware.pm: Repository '$repo' belongs to project '$identifier'\n";
    -
    -    $identifier;
    -}
    -
    -sub get_realm {
    -    my $dbh = shift;
    -    my $project_id = shift;
    -    my $r = shift;
    -
    -    my $sth = $dbh->prepare(
    -        "SELECT projects.name FROM projects WHERE projects.identifier = ?;"
    -    );
    -
    -    my $name = $project_id;
    -
    -    $sth->execute($project_id);
    -    my $ret = 0;
    -    if (my @row = $sth->fetchrow_array) {
    -	$name = $row[0];
    -    }
    -    $sth->finish();
    -    undef $sth;
    -
    -    # be timid about characters not permitted in auth realm and revert
    -    # to project identifier if any are found
    -    if ($name =~ m/[^\w\d\s\._-]/) {
    -	$name = $project_id;
    -    }
    -
    -    my $realm = '"Mercurial repository for ' . "'$name'" . '"';
    -
    -    $realm;
    -}
    -
    -sub connect_database {
    -    my $r = shift;
    -    
    -    my $cfg = Apache2::Module::get_config
    -	(__PACKAGE__, $r->server, $r->per_dir_config);
    -
    -    return DBI->connect($cfg->{SoundSoftwareDSN},
    -	                $cfg->{SoundSoftwareDbUser},
    -		        $cfg->{SoundSoftwareDbPass});
    -}
    -
    -1;
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/soundsoftware/SoundSoftware-unsalted.pm
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/extra/soundsoftware/SoundSoftware-unsalted.pm	Mon Jul 25 14:23:37 2011 +0100
    @@ -0,0 +1,469 @@
    +package Apache::Authn::SoundSoftware;
    +
    +=head1 Apache::Authn::SoundSoftware
    +
    +SoundSoftware - a mod_perl module for Apache authentication against a
    +Redmine database and optional LDAP implementing the access control
    +rules required for the SoundSoftware.ac.uk repository site.
    +
    +=head1 SYNOPSIS
    +
    +This module is closely based on the Redmine.pm authentication module
    +provided with Redmine.  It is intended to be used for authentication
    +in front of a repository service such as hgwebdir.
    +
    +Requirements:
    +
    +1. Clone/pull from repo for public project: Any user, no
    +authentication required
    +
    +2. Clone/pull from repo for private project: Project members only
    +
    +3. Push to repo for public project: "Permitted" users only (this
    +probably means project members who are also identified in the hgrc web
    +section for the repository and so will be approved by hgwebdir?)
    +
    +4. Push to repo for private project: "Permitted" users only (as above)
    +
    +5. Push to any repo that is tracking an external repo: Refused always
    +
    +=head1 INSTALLATION
    +
    +Debian/ubuntu:
    +
    +  apt-get install libapache-dbi-perl libapache2-mod-perl2 \
    +    libdbd-mysql-perl libauthen-simple-ldap-perl libio-socket-ssl-perl
    +
    +Note that LDAP support is hardcoded "on" in this script (it is
    +optional in the original Redmine.pm).
    +
    +=head1 CONFIGURATION
    +
    +   ## This module has to be in your perl path
    +   ## eg:  /usr/local/lib/site_perl/Apache/Authn/SoundSoftware.pm
    +   PerlLoadModule Apache::Authn::SoundSoftware
    +
    +   # Example when using hgwebdir
    +   ScriptAlias / "/var/hg/hgwebdir.cgi/"
    +
    +   
    +       AuthName "Mercurial"
    +       AuthType Basic
    +       Require valid-user
    +       PerlAccessHandler Apache::Authn::SoundSoftware::access_handler
    +       PerlAuthenHandler Apache::Authn::SoundSoftware::authen_handler
    +       SoundSoftwareDSN "DBI:mysql:database=redmine;host=localhost"
    +       SoundSoftwareDbUser "redmine"
    +       SoundSoftwareDbPass "password"
    +       Options +ExecCGI
    +       AddHandler cgi-script .cgi
    +       ## Optional where clause (fulltext search would be slow and
    +       ## database dependant).
    +       # SoundSoftwareDbWhereClause "and members.role_id IN (1,2)"
    +       ## Optional prefix for local repository URLs
    +       # SoundSoftwareRepoPrefix "/var/hg/"
    +  
    +
    +See the original Redmine.pm for further configuration notes.
    +
    +=cut
    +
    +use strict;
    +use warnings FATAL => 'all', NONFATAL => 'redefine';
    +
    +use DBI;
    +use Digest::SHA1;
    +use Authen::Simple::LDAP;
    +use Apache2::Module;
    +use Apache2::Access;
    +use Apache2::ServerRec qw();
    +use Apache2::RequestRec qw();
    +use Apache2::RequestUtil qw();
    +use Apache2::Const qw(:common :override :cmd_how);
    +use APR::Pool ();
    +use APR::Table ();
    +
    +my @directives = (
    +  {
    +    name => 'SoundSoftwareDSN',
    +    req_override => OR_AUTHCFG,
    +    args_how => TAKE1,
    +    errmsg => 'Dsn in format used by Perl DBI. eg: "DBI:Pg:dbname=databasename;host=my.db.server"',
    +  },
    +  {
    +    name => 'SoundSoftwareDbUser',
    +    req_override => OR_AUTHCFG,
    +    args_how => TAKE1,
    +  },
    +  {
    +    name => 'SoundSoftwareDbPass',
    +    req_override => OR_AUTHCFG,
    +    args_how => TAKE1,
    +  },
    +  {
    +    name => 'SoundSoftwareDbWhereClause',
    +    req_override => OR_AUTHCFG,
    +    args_how => TAKE1,
    +  },
    +  {
    +    name => 'SoundSoftwareRepoPrefix',
    +    req_override => OR_AUTHCFG,
    +    args_how => TAKE1,
    +  },
    +);
    +
    +sub SoundSoftwareDSN { 
    +    my ($self, $parms, $arg) = @_;
    +    $self->{SoundSoftwareDSN} = $arg;
    +    my $query = "SELECT 
    +                 hashed_password, auth_source_id, permissions
    +              FROM members, projects, users, roles, member_roles
    +              WHERE 
    +                projects.id=members.project_id
    +                AND member_roles.member_id=members.id
    +                AND users.id=members.user_id 
    +                AND roles.id=member_roles.role_id
    +                AND users.status=1 
    +                AND login=? 
    +                AND identifier=? ";
    +    $self->{SoundSoftwareQuery} = trim($query);
    +}
    +
    +sub SoundSoftwareDbUser { set_val('SoundSoftwareDbUser', @_); }
    +sub SoundSoftwareDbPass { set_val('SoundSoftwareDbPass', @_); }
    +sub SoundSoftwareDbWhereClause { 
    +    my ($self, $parms, $arg) = @_;
    +    $self->{SoundSoftwareQuery} = trim($self->{SoundSoftwareQuery}.($arg ? $arg : "")." ");
    +}
    +
    +sub SoundSoftwareRepoPrefix { 
    +    my ($self, $parms, $arg) = @_;
    +    if ($arg) {
    +	$self->{SoundSoftwareRepoPrefix} = $arg;
    +    }
    +}
    +
    +sub trim {
    +    my $string = shift;
    +    $string =~ s/\s{2,}/ /g;
    +    return $string;
    +}
    +
    +sub set_val {
    +    my ($key, $self, $parms, $arg) = @_;
    +    $self->{$key} = $arg;
    +}
    +
    +Apache2::Module::add(__PACKAGE__, \@directives);
    +
    +
    +my %read_only_methods = map { $_ => 1 } qw/GET PROPFIND REPORT OPTIONS/;
    +
    +sub access_handler {
    +    my $r = shift;
    +
    +    print STDERR "SoundSoftware.pm: In access handler at " . scalar localtime() . "\n";
    +
    +    unless ($r->some_auth_required) {
    +	$r->log_reason("No authentication has been configured");
    +	return FORBIDDEN;
    +    }
    +
    +    my $method = $r->method;
    +
    +    print STDERR "SoundSoftware.pm: Method: $method, uri " . $r->uri . ", location " . $r->location . "\n";
    +    print STDERR "SoundSoftware.pm: Accept: " . $r->headers_in->{Accept} . "\n";
    +
    +    my $dbh = connect_database($r);
    +    unless ($dbh) {
    +	print STDERR "SoundSoftware.pm: Database connection failed!: " . $DBI::errstr . "\n";
    +	return FORBIDDEN;
    +    }
    +
    +    print STDERR "Connected to db, dbh is " . $dbh . "\n";
    +
    +    my $project_id = get_project_identifier($dbh, $r);
    +
    +    if (!defined $read_only_methods{$method}) {
    +        print STDERR "SoundSoftware.pm: Method is not read-only\n";
    +        if (project_repo_is_readonly($dbh, $project_id, $r)) {
    +            print STDERR "SoundSoftware.pm: Project repo is read-only, refusing access\n";
    +	    return FORBIDDEN;
    +        } else {
    +	    print STDERR "SoundSoftware.pm: Project repo is read-write, authentication handler required\n";
    +            return OK;
    +        }
    +    }
    +
    +    my $status = get_project_status($dbh, $project_id, $r);
    +
    +    $dbh->disconnect();
    +    undef $dbh;
    +
    +    if ($status == 0) { # nonexistent
    +	print STDERR "SoundSoftware.pm: Project does not exist, refusing access\n";
    +	return FORBIDDEN;
    +    } elsif ($status == 1) { # public
    +	print STDERR "SoundSoftware.pm: Project is public, no restriction here\n";
    +	$r->set_handlers(PerlAuthenHandler => [\&OK])
    +    } else { # private
    +	print STDERR "SoundSoftware.pm: Project is private, authentication handler required\n";
    +    }
    +
    +    return OK
    +}
    +
    +sub authen_handler {
    +    my $r = shift;
    +    
    +    print STDERR "SoundSoftware.pm: In authentication handler at " . scalar localtime() . "\n";
    +
    +    my $dbh = connect_database($r);
    +    unless ($dbh) {
    +        print STDERR "SoundSoftware.pm: Database connection failed!: " . $DBI::errstr . "\n";
    +        return AUTH_REQUIRED;
    +    }
    +    
    +    my $project_id = get_project_identifier($dbh, $r);
    +    my $realm = get_realm($dbh, $project_id, $r);
    +    $r->auth_name($realm);
    +
    +    my ($res, $redmine_pass) =  $r->get_basic_auth_pw();
    +    unless ($res == OK) {
    +	$dbh->disconnect();
    +	undef $dbh;
    +	return $res;
    +    }
    +    
    +    print STDERR "SoundSoftware.pm: User is " . $r->user . ", got password\n";
    +
    +    my $permitted = is_permitted($dbh, $project_id, $r->user, $redmine_pass, $r);
    +    
    +    $dbh->disconnect();
    +    undef $dbh;
    +
    +    if ($permitted) {
    +	return OK;
    +    } else {
    +	print STDERR "SoundSoftware.pm: Not permitted\n";
    +	$r->note_auth_failure();
    +	return AUTH_REQUIRED;
    +    }
    +}
    +
    +sub get_project_status {
    +    my $dbh = shift;
    +    my $project_id = shift;
    +    my $r = shift;
    +
    +    if (!defined $project_id or $project_id eq '') {
    +	return 0; # nonexistent
    +    }
    +    
    +    my $sth = $dbh->prepare(
    +        "SELECT is_public FROM projects WHERE projects.identifier = ?;"
    +    );
    +
    +    $sth->execute($project_id);
    +    my $ret = 0; # nonexistent
    +    if (my @row = $sth->fetchrow_array) {
    +    	if ($row[0] eq "1" || $row[0] eq "t") {
    +	    $ret = 1; # public
    +    	} else {
    +	    $ret = 2; # private
    +	}
    +    }
    +    $sth->finish();
    +    undef $sth;
    +
    +    $ret;
    +}
    +
    +sub project_repo_is_readonly {
    +    my $dbh = shift;
    +    my $project_id = shift;
    +    my $r = shift;
    +
    +    if (!defined $project_id or $project_id eq '') {
    +        return 0; # nonexistent
    +    }
    +
    +    my $sth = $dbh->prepare(
    +        "SELECT repositories.is_external FROM repositories, projects WHERE projects.identifier = ? AND repositories.project_id = projects.id;"
    +    );
    +
    +    $sth->execute($project_id);
    +    my $ret = 0; # nonexistent
    +    if (my @row = $sth->fetchrow_array) {
    +        if (defined($row[0]) && ($row[0] eq "1" || $row[0] eq "t")) {
    +            $ret = 1; # read-only (i.e. external)
    +        } else {
    +            $ret = 0; # read-write
    +        }
    +    }
    +    $sth->finish();
    +    undef $sth;
    +
    +    $ret;
    +}
    +
    +sub is_permitted {
    +    my $dbh = shift;
    +    my $project_id = shift;
    +    my $redmine_user = shift;
    +    my $redmine_pass = shift;
    +    my $r = shift;
    +
    +    my $pass_digest = Digest::SHA1::sha1_hex($redmine_pass);
    +
    +    my $cfg = Apache2::Module::get_config
    +	(__PACKAGE__, $r->server, $r->per_dir_config);
    +
    +    my $query = $cfg->{SoundSoftwareQuery};
    +    my $sth = $dbh->prepare($query);
    +    $sth->execute($redmine_user, $project_id);
    +
    +    my $ret;
    +    while (my ($hashed_password, $auth_source_id, $permissions) = $sth->fetchrow_array) {
    +
    +	# Test permissions for this user before we verify credentials
    +	# -- if the user is not permitted this action anyway, there's
    +	# not much point in e.g. contacting the LDAP
    +
    +	my $method = $r->method;
    +
    +	if ((defined $read_only_methods{$method} && $permissions =~ /:browse_repository/)
    +	    || $permissions =~ /:commit_access/) {
    +
    +	    # User would be permitted this action, if their
    +	    # credentials checked out -- test those now
    +
    +	    print STDERR "SoundSoftware.pm: User $redmine_user has required role, checking credentials\n";
    +
    +	    unless ($auth_source_id) {
    +		if ($hashed_password eq $pass_digest) {
    +		    print STDERR "SoundSoftware.pm: User $redmine_user authenticated via password\n";
    +		    $ret = 1;
    +		    last;
    +		}
    +	    } else {
    +		my $sthldap = $dbh->prepare(
    +		    "SELECT host,port,tls,account,account_password,base_dn,attr_login FROM auth_sources WHERE id = ?;"
    +		    );
    +		$sthldap->execute($auth_source_id);
    +		while (my @rowldap = $sthldap->fetchrow_array) {
    +		    my $ldap = Authen::Simple::LDAP->new(
    +			host    => ($rowldap[2] eq "1" || $rowldap[2] eq "t") ? "ldaps://$rowldap[0]" : $rowldap[0],
    +			port    => $rowldap[1],
    +			basedn  => $rowldap[5],
    +			binddn  => $rowldap[3] ? $rowldap[3] : "",
    +			bindpw  => $rowldap[4] ? $rowldap[4] : "",
    +			filter  => "(".$rowldap[6]."=%s)"
    +			);
    +		    if ($ldap->authenticate($redmine_user, $redmine_pass)) {
    +			print STDERR "SoundSoftware.pm: User $redmine_user authenticated via LDAP\n";
    +			$ret = 1;
    +		    }
    +		}
    +		$sthldap->finish();
    +		undef $sthldap;
    +	    }
    +	} else {
    +	    print STDERR "SoundSoftware.pm: User $redmine_user lacks required role for this project\n";
    +	}
    +    }
    +
    +    $sth->finish();
    +    undef $sth;
    +
    +    $ret;
    +}
    +
    +sub get_project_identifier {
    +    my $dbh = shift;
    +    my $r = shift;
    +
    +    my $location = $r->location;
    +    my ($repo) = $r->uri =~ m{$location/*([^/]+)};
    +
    +    return $repo if (!$repo);
    +
    +    $repo =~ s/[^a-zA-Z0-9\._-]//g;
    +
    +    # The original Redmine.pm returns the string just calculated as
    +    # the project identifier.  That won't do for us -- we may have
    +    # (and in fact already do have, in our test instance) projects
    +    # whose repository names differ from the project identifiers.
    +
    +    # This is a rather fundamental change because it means that almost
    +    # every request needs more than one database query -- which
    +    # prompts us to start passing around $dbh instead of connecting
    +    # locally within each function as is done in Redmine.pm.
    +
    +    my $sth = $dbh->prepare(
    +        "SELECT projects.identifier FROM projects, repositories WHERE repositories.project_id = projects.id AND repositories.url LIKE ?;"
    +    );
    +
    +    my $cfg = Apache2::Module::get_config
    +	(__PACKAGE__, $r->server, $r->per_dir_config);
    +
    +    my $prefix = $cfg->{SoundSoftwareRepoPrefix};
    +    if (!defined $prefix) { $prefix = '%/'; }
    +
    +    my $identifier = '';
    +
    +    $sth->execute($prefix . $repo);
    +    my $ret = 0;
    +    if (my @row = $sth->fetchrow_array) {
    +	$identifier = $row[0];
    +    }
    +    $sth->finish();
    +    undef $sth;
    +
    +    print STDERR "SoundSoftware.pm: Repository '$repo' belongs to project '$identifier'\n";
    +
    +    $identifier;
    +}
    +
    +sub get_realm {
    +    my $dbh = shift;
    +    my $project_id = shift;
    +    my $r = shift;
    +
    +    my $sth = $dbh->prepare(
    +        "SELECT projects.name FROM projects WHERE projects.identifier = ?;"
    +    );
    +
    +    my $name = $project_id;
    +
    +    $sth->execute($project_id);
    +    my $ret = 0;
    +    if (my @row = $sth->fetchrow_array) {
    +	$name = $row[0];
    +    }
    +    $sth->finish();
    +    undef $sth;
    +
    +    # be timid about characters not permitted in auth realm and revert
    +    # to project identifier if any are found
    +    if ($name =~ m/[^\w\d\s\._-]/) {
    +	$name = $project_id;
    +    }
    +
    +    my $realm = '"Mercurial repository for ' . "'$name'" . '"';
    +
    +    $realm;
    +}
    +
    +sub connect_database {
    +    my $r = shift;
    +    
    +    my $cfg = Apache2::Module::get_config
    +	(__PACKAGE__, $r->server, $r->per_dir_config);
    +
    +    return DBI->connect($cfg->{SoundSoftwareDSN},
    +	                $cfg->{SoundSoftwareDbUser},
    +		        $cfg->{SoundSoftwareDbPass});
    +}
    +
    +1;
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/soundsoftware/SoundSoftware.pm
    --- a/extra/soundsoftware/SoundSoftware.pm	Mon Mar 28 18:17:06 2011 +0100
    +++ b/extra/soundsoftware/SoundSoftware.pm	Mon Jul 25 14:23:37 2011 +0100
    @@ -116,7 +116,7 @@
         my ($self, $parms, $arg) = @_;
         $self->{SoundSoftwareDSN} = $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
    @@ -162,7 +162,7 @@
     sub access_handler {
         my $r = shift;
     
    -    print STDERR "SoundSoftware.pm: In access handler at " . scalar localtime() . "\n";
    +    print STDERR "SoundSoftware.pm:$$: In access handler at " . scalar localtime() . "\n";
     
         unless ($r->some_auth_required) {
     	$r->log_reason("No authentication has been configured");
    @@ -171,12 +171,12 @@
     
         my $method = $r->method;
     
    -    print STDERR "SoundSoftware.pm: Method: $method, uri " . $r->uri . ", location " . $r->location . "\n";
    -    print STDERR "SoundSoftware.pm: Accept: " . $r->headers_in->{Accept} . "\n";
    +    print STDERR "SoundSoftware.pm:$$: Method: $method, uri " . $r->uri . ", location " . $r->location . "\n";
    +    print STDERR "SoundSoftware.pm:$$: Accept: " . $r->headers_in->{Accept} . "\n";
     
         my $dbh = connect_database($r);
         unless ($dbh) {
    -	print STDERR "SoundSoftware.pm: Database connection failed!: " . $DBI::errstr . "\n";
    +	print STDERR "SoundSoftware.pm:$$: Database connection failed!: " . $DBI::errstr . "\n";
     	return FORBIDDEN;
         }
     
    @@ -185,12 +185,12 @@
         my $project_id = get_project_identifier($dbh, $r);
     
         if (!defined $read_only_methods{$method}) {
    -        print STDERR "SoundSoftware.pm: Method is not read-only\n";
    +        print STDERR "SoundSoftware.pm:$$: Method is not read-only\n";
             if (project_repo_is_readonly($dbh, $project_id, $r)) {
    -            print STDERR "SoundSoftware.pm: Project repo is read-only, refusing access\n";
    +            print STDERR "SoundSoftware.pm:$$: Project repo is read-only, refusing access\n";
     	    return FORBIDDEN;
             } else {
    -	    print STDERR "SoundSoftware.pm: Project repo is read-write, authentication handler required\n";
    +	    print STDERR "SoundSoftware.pm:$$: Project repo is read-write, authentication handler required\n";
                 return OK;
             }
         }
    @@ -201,13 +201,13 @@
         undef $dbh;
     
         if ($status == 0) { # nonexistent
    -	print STDERR "SoundSoftware.pm: Project does not exist, refusing access\n";
    +	print STDERR "SoundSoftware.pm:$$: Project does not exist, refusing access\n";
     	return FORBIDDEN;
         } elsif ($status == 1) { # public
    -	print STDERR "SoundSoftware.pm: Project is public, no restriction here\n";
    +	print STDERR "SoundSoftware.pm:$$: Project is public, no restriction here\n";
     	$r->set_handlers(PerlAuthenHandler => [\&OK])
         } else { # private
    -	print STDERR "SoundSoftware.pm: Project is private, authentication handler required\n";
    +	print STDERR "SoundSoftware.pm:$$: Project is private, authentication handler required\n";
         }
     
         return OK
    @@ -216,11 +216,11 @@
     sub authen_handler {
         my $r = shift;
         
    -    print STDERR "SoundSoftware.pm: In authentication handler at " . scalar localtime() . "\n";
    +    print STDERR "SoundSoftware.pm:$$: In authentication handler at " . scalar localtime() . "\n";
     
         my $dbh = connect_database($r);
         unless ($dbh) {
    -        print STDERR "SoundSoftware.pm: Database connection failed!: " . $DBI::errstr . "\n";
    +        print STDERR "SoundSoftware.pm:$$: Database connection failed!: " . $DBI::errstr . "\n";
             return AUTH_REQUIRED;
         }
         
    @@ -235,7 +235,7 @@
     	return $res;
         }
         
    -    print STDERR "SoundSoftware.pm: User is " . $r->user . ", got password\n";
    +    print STDERR "SoundSoftware.pm:$$: User is " . $r->user . ", got password\n";
     
         my $permitted = is_permitted($dbh, $project_id, $r->user, $redmine_pass, $r);
         
    @@ -245,7 +245,7 @@
         if ($permitted) {
     	return OK;
         } else {
    -	print STDERR "SoundSoftware.pm: Not permitted\n";
    +	print STDERR "SoundSoftware.pm:$$: Not permitted\n";
     	$r->note_auth_failure();
     	return AUTH_REQUIRED;
         }
    @@ -324,7 +324,7 @@
         $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) {
     
     	# Test permissions for this user before we verify credentials
     	# -- if the user is not permitted this action anyway, there's
    @@ -341,7 +341,8 @@
     	    print STDERR "SoundSoftware.pm: User $redmine_user has required role, checking credentials\n";
     
     	    unless ($auth_source_id) {
    -		if ($hashed_password eq $pass_digest) {
    +                my $salted_password = Digest::SHA1::sha1_hex($salt.$pass_digest);
    +		if ($hashed_password eq $salted_password) {
     		    print STDERR "SoundSoftware.pm: User $redmine_user authenticated via password\n";
     		    $ret = 1;
     		    last;
    @@ -361,7 +362,7 @@
     			filter  => "(".$rowldap[6]."=%s)"
     			);
     		    if ($ldap->authenticate($redmine_user, $redmine_pass)) {
    -			print STDERR "SoundSoftware.pm: User $redmine_user authenticated via LDAP\n";
    +			print STDERR "SoundSoftware.pm:$$: User $redmine_user authenticated via LDAP\n";
     			$ret = 1;
     		    }
     		}
    @@ -369,7 +370,7 @@
     		undef $sthldap;
     	    }
     	} else {
    -	    print STDERR "SoundSoftware.pm: User $redmine_user lacks required role for this project\n";
    +	    print STDERR "SoundSoftware.pm:$$: User $redmine_user lacks required role for this project\n";
     	}
         }
     
    @@ -420,7 +421,7 @@
         $sth->finish();
         undef $sth;
     
    -    print STDERR "SoundSoftware.pm: Repository '$repo' belongs to project '$identifier'\n";
    +    print STDERR "SoundSoftware.pm:$$: Repository '$repo' belongs to project '$identifier'\n";
     
         $identifier;
     }
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/soundsoftware/convert-external-repos.rb
    --- a/extra/soundsoftware/convert-external-repos.rb	Mon Mar 28 18:17:06 2011 +0100
    +++ b/extra/soundsoftware/convert-external-repos.rb	Mon Jul 25 14:23:37 2011 +0100
    @@ -62,6 +62,8 @@
     $http_pass    = ''
     $test         = false
     
    +$mirrordir    = '/var/mirror'
    +
     def log(text, options={})
       level = options[:level] || 0
       puts text unless $quiet or level > $verbose
    @@ -168,6 +170,14 @@
       end
     
       system($command, project.identifier, repos_path, external_url)
    +  
    +  $cache_clearance_file = File.join($mirrordir, project.identifier, 'url_changed')
    +  if File.file?($cache_clearance_file)
    +    log("\tproject repo url has changed, requesting cache clearance")
    +    if project.post(:repository_cache, :key => $api_key)
    +      File.delete($cache_clearance_file)
    +    end
    +  end
     
     end
       
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/soundsoftware/extract-docs.sh
    --- a/extra/soundsoftware/extract-docs.sh	Mon Mar 28 18:17:06 2011 +0100
    +++ b/extra/soundsoftware/extract-docs.sh	Mon Jul 25 14:23:37 2011 +0100
    @@ -12,6 +12,7 @@
     redgrp="redmine"
     
     apikey=""
    +apischeme="https"
     apihost=""
     apiuser=""
     apipass=""
    @@ -22,7 +23,7 @@
         *) progdir="$(pwd)/$progdir" ;;
     esac
     
    -types="doxygen javadoc" # Do Doxygen first (it can be used for Java too)
    +types="doxygen javadoc matlabdocs" # Do Doxygen first (it can be used for Java too)
     
     for x in $types; do
         if [ ! -x "$progdir/extract-$x.sh" ]; then
    @@ -36,9 +37,9 @@
         p="$1"
         if [ -n "$apikey" ]; then
     	if [ -n "$apiuser" ]; then
    -	    sudo -u docgen curl -u "$apiuser":"$apipass" "http://$apihost/sys/projects/$p/embedded.xml?enable=1&key=$apikey" -d ""
    +	    sudo -u docgen curl -u "$apiuser":"$apipass" "$apischeme://$apihost/sys/projects/$p/embedded.xml?enable=1&key=$apikey" -d ""
     	else
    -	    sudo -u docgen curl "http://$apihost/sys/projects/$p/embedded.xml?enable=1&key=$apikey" -d ""
    +	    sudo -u docgen curl "$apischeme://$apihost/sys/projects/$p/embedded.xml?enable=1&key=$apikey" -d ""
     	fi
         else 
     	echo "Can't enable Embedded, API not configured" 1>&2
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/soundsoftware/extract-javadoc.sh
    --- a/extra/soundsoftware/extract-javadoc.sh	Mon Mar 28 18:17:06 2011 +0100
    +++ b/extra/soundsoftware/extract-javadoc.sh	Mon Jul 25 14:23:37 2011 +0100
    @@ -50,23 +50,31 @@
     		continue
     	    fi
     	    if [ "$prefix" != "$current_prefix" ]; then
    +		echo "Package $package matches file path and has new prefix $prefix"
     		if [ -n "$current_packages" ]; then
     		    echo "Running Javadoc for packages $current_packages from prefix $current_prefix"
    +		    echo "Command is: javadoc -sourcepath "$current_prefix" -d "$targetdir" -subpackages $current_packages"
     		    javadoc -sourcepath "$current_prefix" -d "$targetdir" -subpackages $current_packages
     		fi
     		current_prefix="$prefix"
    -		current_packages=
    +		current_packages="$package"
     	    else
    +		echo "Package $package matches file path with same prefix as previous file"
     		current_packages="$current_packages $package"
     	    fi
     	done
     	prefix=${prefix:=$projectdir}
     	if [ -n "$current_packages" ]; then
     	    echo "Running Javadoc for packages $current_packages in prefix $current_prefix"
    +  	    echo "Command is: javadoc -sourcepath "$current_prefix" -d "$targetdir" -subpackages $current_packages"
     	    javadoc -sourcepath "$current_prefix" -d "$targetdir" -subpackages $current_packages
     	fi
         )
     
    +if [ -f "$targetdir"/overview-tree.html ]; then
    +    cp "$targetdir"/overview-tree.html "$targetdir"/index.html
    +fi
    +
     # for exit code:
     [ -f "$targetdir/index.html" ]
     
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/soundsoftware/extract-matlabdocs.sh
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/extra/soundsoftware/extract-matlabdocs.sh	Mon Jul 25 14:23:37 2011 +0100
    @@ -0,0 +1,47 @@
    +#!/bin/bash
    +
    +docdir="/var/doc"
    +
    +progdir=$(dirname $0)
    +case "$progdir" in
    +    /*) ;;
    +    *) progdir="$(pwd)/$progdir" ;;
    +esac
    +
    +project="$1"
    +projectdir="$2"
    +targetdir="$3"
    +
    +if [ -z "$project" ] || [ -z "$targetdir" ] || [ -z "$projectdir" ]; then
    +    echo "Usage: $0   "
    +    exit 2
    +fi
    +
    +if [ ! -d "$projectdir" ]; then
    +    echo "Project directory $projectdir not found"
    +    exit 1
    +fi
    +
    +if [ ! -d "$targetdir" ]; then
    +    echo "Target dir $targetdir not found"
    +    exit 1
    +fi
    +
    +if [ -f "$targetdir/index.html" ]; then
    +    echo "Target dir $targetdir already contains index.html"
    +    exit 1
    +fi
    +
    +mfile=$(find "$projectdir" -type f -name \*.m -print0 | xargs -0 grep -l '^% ' | head -1)
    +
    +if [ -z "$mfile" ]; then
    +    echo "No MATLAB files with comments found for project $project"
    +    exit 1
    +fi
    +
    +echo "Project $project contains at least one MATLAB file with comments"
    +
    +cd "$projectdir" || exit 1
    +
    +perl "$progdir/matlab-docs.pl" -c "$progdir/matlab-docs.conf" -d "$targetdir"
    +
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/soundsoftware/matlab-docs-credit.html
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/extra/soundsoftware/matlab-docs-credit.html	Mon Jul 25 14:23:37 2011 +0100
    @@ -0,0 +1,1 @@
    +
    Produced by mtree2html by Hartmut Pohlheim
    diff -r f7c525dc7585 -r 0b6c82dead28 extra/soundsoftware/matlab-docs.conf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extra/soundsoftware/matlab-docs.conf Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,166 @@ +# configuration file for generation of html-docu from m-files +# +# Author: Hartmut Pohlheim +# History: 05.11.2000 file created (parameters for mtree2html2001) +# +# The following options/variables must be changed/adapted: +# dirmfiles +# dirhtml +# csslink +# texttitleframelayout +# texttitlefiles +# +# The following options/variables should be adapted: +# authorfile +# filenametopframe +# codeheadmeta + +#======================================================================== +# Variables (possible keywords: set) +# to use the built-in settings, comment the line using # in first column +#======================================================================== + +#------------------------------------------------------------------------ +# dirmfiles: name of directory containing Matlab m-files +# dirhtml: name of directory to place the html-files into +# exthtml: extension used for the html files (.html or .htm) +# don't forget the point in front of the extension +#------------------------------------------------------------------------ +set dirmfiles = . +set dirhtml = doc-output +set exthtml = .html + +#------------------------------------------------------------------------ +# authorfile: name of file containing info about author (in html) +# if defined, this text is included at the bottom of the +# html files +#------------------------------------------------------------------------ +set authorfile = matlab-docs-credit.html + +#------------------------------------------------------------------------ +# csslink: text for linking to css file (style sheets) +# the text defined here is directly included into the head +# of the html file +#------------------------------------------------------------------------ +#set csslink = + +#------------------------------------------------------------------------ +# links2filescase: this is a bit difficult +# Matlab is case sensitive on UNIX, but case insensitive +# on Windows. Under UNIX Matlab function calls work +# only, when the case of file name and function call are +# identical, under Windows you can do what you want. +# This scripts help you, to keep an exact case in your +# project. +# exact - internal links are only generated, when case of file +# name and in source code are identical +# all - case doesn't matter +# exactupper - same as exact, additionally links are also vreated to +# all upper case function names in source code (often +# used by Mathworks) +# exactvery - same as exact, additionally info about not matching +# case is written to screen (stdout), this can be very +# helpful in cleaning up the case in a project +#------------------------------------------------------------------------ +set links2filescase = all + +#------------------------------------------------------------------------ +# texttitleframelayout: text of title for frame layout file (whole docu) +#------------------------------------------------------------------------ +set texttitleframelayout = MATLAB Function Documentation + +#------------------------------------------------------------------------ +# texttitle/headerindexalldirs: text of title and header for directory index +#------------------------------------------------------------------------ +set texttitleindexalldirs = Index of Directories +set textheaderindexalldirs = Index of Directories + +#------------------------------------------------------------------------ +# texttitle/headerindex: text of title and header for index file +#------------------------------------------------------------------------ +set texttitleindex = A-Z Index of Functions +set textheaderindex = A-Z Index of Functions + +#------------------------------------------------------------------------ +# texttitle/headerfiles: text of title and header for files +# name of file will be added at the end +#------------------------------------------------------------------------ +set texttitlefiles = Function +set textheaderfiles = Documentation of + +#------------------------------------------------------------------------ +# frames: whether to use frames in layout (yes or no) +#------------------------------------------------------------------------ +set frames = no + +#------------------------------------------------------------------------ +# filenametopframe: name of file including frame layout (highest level file) +# [default: index] +#------------------------------------------------------------------------ +set filenametopframe = index + +#------------------------------------------------------------------------ +# textjumpindexglobal: text displayed for jump to index of all files +# (global) +# textjumpindexlocal: text displayed for jump to index of files in actual +# directory (local) +#------------------------------------------------------------------------ +set textjumpindexglobal = Index of all files: +set textjumpindexlocal = this subdirectory only: + +#------------------------------------------------------------------------ +# includesource: include source of m-files in documentation [YES|no] +#------------------------------------------------------------------------ +set includesource = yes + +#------------------------------------------------------------------------ +# usecontentsm: use contents.m files as well for structured +# (hopefully) index [YES|no] +#------------------------------------------------------------------------ +set usecontentsm = no + +#------------------------------------------------------------------------ +# includesource: write/update contents.m files [yes|NO] +#------------------------------------------------------------------------ +set writecontentsm = no + +#------------------------------------------------------------------------ +# processtree: parse whole directory tree recursively [YES|no] +#------------------------------------------------------------------------ +set processtree = yes + +#------------------------------------------------------------------------ +# producetree: produce tree for html-files in same structure than +# tree of m-files [yes|NO] +# if no, all files are saved in the same directory, often +# easier for outside linking to files +#------------------------------------------------------------------------ +set producetree = yes + +#------------------------------------------------------------------------ +# codebodyindex/files: HTML-code for adding to BODY tag +# can be used for defining colors and +# backgroundimages of the files +# No longer recommended, use the css file +#------------------------------------------------------------------------ +set codebodyindex = +set codebodyfiles = + +#------------------------------------------------------------------------ +# codeheadmeta: HTML-code added in HEAD area, use for supplying META info +#------------------------------------------------------------------------ +set codeheadmeta = + +#------------------------------------------------------------------------ +# codehr: HTML-code used to define a
    , do what you want +#------------------------------------------------------------------------ +set codehr =
    + +#------------------------------------------------------------------------ +# codeheader: HTML-code added to tags, use for centering header text +# or changing the colour/size/font of the header text +#------------------------------------------------------------------------ +set codeheader = + + +# End of parameter file diff -r f7c525dc7585 -r 0b6c82dead28 extra/soundsoftware/matlab-docs.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extra/soundsoftware/matlab-docs.pl Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,1585 @@ +@rem = '--*-Perl-*--'; +@rem = ' +@echo off +perl -w -S %0.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 +goto endofperl +@rem '; +# perl -w -S %0.bat "$@" +#!/usr/bin/perl +# +# mtree2html_2000 - produce html files from Matlab m-files. +# use configuration file for flexibility +# can process tree of directories +# +# Copyright (C) 1996-2000 Hartmut Pohlheim. All rights reserved. +# includes small parts of m2html from Jeffrey C. Kantor 1995 +# +# Author: Hartmut Pohlheim +# History: 06.03.1996 file created +# 07.03.1996 first working version +# 08.03.1996 modularized, help text only once included +# 11.03.1996 clean up, some functions rwritten +# 18.04.1996 silent output with writing in one line only +# version 0.20 fixed +# 14.05.1996 start of adding tree structure, could create tree +# 15.05.1996 creating of index files for every directory +# 17.05.1996 first working version except compact A-Z index +# 20.05.1996 cleanup of actual version, more variables and +# configurable settings +# 21.05.1996 reading, update and creation of contents.m added +# 22.05.1996 creation of short index started +# 28.05.1996 jump letters for short index, +# 3 different directory indexes (short/long/contents) +# 29.05.1996 major cleanup, short and long index created from one function +# links for HTML and Indexes from 1 function, +# version 0.9 +# 30.05.1996 contents.m changed to Contents.m (because unix likes it) +# function definition can be in first line of m file before comments +# version 0.91 fixed +# 03.06.1996 contents file can be written as wanted, the links will be correct +# cross references in help block of m-file will be found and +# converted, even if the name of the function is written upper case +# version 0.92 fixed +# 05.06.1996 construction of dependency matrix changed, is able now to process +# even the whole matlab tree (previous version needed to much memory) +# removed warning for contents files in different directories +# version 0.94 fixed +# 06.06.1996 new link name matrices for ConstructHTMLFile created, +# everything is done in ConstructDependencyMatrix, +# both dependencies (calls and called) and matrix +# with all mentioned names in this m-file, thus, much +# less scanning in html construction +# script is now (nearly) linear scalable, thus, matlab-toolbox +# tree takes less than 1 hour on a Pentium120, with source +# version 0.96 fixed +# 10.06.1996 order of creation changed, first all indexes (includes +# update/creation of contents.m) and then ConstructDepency +# thus, AutoAdd section will be linked as well +# excludenames extended, some more common word function names added +# version 0.97 fixed +# 17.02.1998 writecontentsm as command line parameter added +# error of file not found will even appear when silent +# version 1.02 +# 21.05.2000 mark comments in source code specially (no fully correct, +# can't handle % in strings) +# version 1.11 +# 05.11.2000 link also to upper and mixed case m-files +# searching for .m files now really works (doesn't find grep.com any longer) +# file renamed to mtree2html2001 +# generated html code now all lower case +# inclusion of meta-description and meta-keywords in html files +# HTML4 compliance done (should be strict HTML4.0, quite near XHTML) +# version 1.23 +# +# 29.03.2011 (Chris Cannam) add frames option. + +$VERSION = '1.23'; +($PROGRAM = $0) =~ s@.*/@@; $PROGRAM = "\U$PROGRAM\E"; +$debug = 1; + +#------------------------------------------------------------------------ +# Define platform specific things +#------------------------------------------------------------------------ +# suffix for files to search is defined twice +# the first ($suffix) is for string creation and contains the . as well +# the second ($suffixforsearch) is for regular expression, handling of . is quite special +$suffix = ".m"; +$suffixforsearch = "m"; +# the directory separator +$dirsep = "/"; +# what is the current directory +$diract = "."; + +#------------------------------------------------------------------------ +# Define all variables and their standard settings +# documentation of variables is contained in accompanying rc file +#------------------------------------------------------------------------ +%var = +( + 'authorfile', '', + 'codebodyfiles', '', + 'codebodyindex', '', + 'codeheadmeta', '', + 'codehr', '
    ', + 'codeheader', '', + 'configfile', 'matlab-docs.conf', + 'csslink', '', + 'dirmfiles', $diract, + 'dirhtml', $diract, + 'exthtml', '.html', + 'frames', 'yes', + 'filenametopframe', 'index', + 'filenameindexlongglobal', 'indexlg', + 'filenameindexlonglocal', 'indexll', + 'filenameindexshortglobal', 'indexsg', + 'filenameindexshortlocal', 'indexsl', + 'filenameextensionframe', 'f', + 'filenameextensionindex', 'i', + 'filenameextensionjump', 'j', + 'filenamedirshort', 'dirtops', + 'filenamedirlong', 'dirtopl', + 'filenamedircontents', 'dirtopc', + 'includesource', 'yes', + 'links2filescase', 'all', + 'processtree', 'yes', + 'producetree', 'yes', + 'textjumpindexlocal', 'Local Index', + 'textjumpindexglobal', 'Global Index', + 'texttitleframelayout', 'Documentation of Matlab Files', + 'texttitleindexalldirs', 'Index of Directories', + 'textheaderindexalldirs', 'Index of Directories', + 'texttitleindex', '', + 'textheaderindex', '', + 'texttitlefiles', 'Documentation of ', + 'textheaderfiles', 'Documentation of ', + 'usecontentsm', 'yes', + 'writecontentsm', 'no' +); + + +# define all m-file names, that should be excluded from linking +# however, files will still be converted +@excludenames = ( 'all','ans','any','are', + 'cs', + 'demo','dos', + 'echo','edit','else','elseif','end','exist', + 'flag','for','function', + 'global', + 'help', + 'i','if','inf','info', + 'j', + 'more', + 'null', + 'return', + 'script','strings', + 'what','which','while','who','whos','why', + ); + +# Text for inclusion in created HTML/Frame files: Doctype and Charset +$TextDocTypeHTML = ''; +$TextDocTypeFrame = ''; +$TextMetaCharset = ''; + +#------------------------------------------------------------------------ +# Read the command line arguments +#------------------------------------------------------------------------ +if (@ARGV == 0) { + &DisplayHelp() if &CheckFileName($var{'configfile'}, 'configuration file'); +} + +# Print provided command line arguments on screen +foreach (@ARGV) { print " $_\n "; } + +# Get the options +use Getopt::Long; +@options = ('help|h', 'todo|t', 'version|v', + 'authorfile|a=s', 'configfile|c=s', 'dirhtml|html|d=s', + 'dirmfiles|mfiles|m=s', 'includesource|i=s', + 'processtree|r=s', 'producetree|p=s', + 'silent|quiet|q', 'writecontentsm|w=s'); +&GetOptions(@options) || die "use -h switch to display help statement\n"; + + +# Display help or todo list, when requested +&DisplayHelp() if $opt_help; +&DisplayTodo() if $opt_todo; +die "$PROGRAM v$VERSION\n" if $opt_version; + +$exit_status = 0; + +#------------------------------------------------------------------------ +# Read the config file +#------------------------------------------------------------------------ +$var{'configfile'} = $opt_configfile if $opt_configfile; +&GetConfigFile($var{'configfile'}); + + +#------------------------------------------------------------------------ +# Process/Check the command line otions +#------------------------------------------------------------------------ +$var{'dirhtml'} = $opt_dirhtml if $opt_dirhtml; +if (!(substr($var{'dirhtml'}, -1, 1) eq $dirsep)) { $var{'dirhtml'} = $var{'dirhtml'}.$dirsep; } +$var{'dirmfiles'} = $opt_dirmfiles if $opt_dirmfiles; +if (!(substr($var{'dirmfiles'}, -1, 1) eq $dirsep)) { $var{'dirmfiles'} = $var{'dirmfiles'}.$dirsep; } + +$var{'authorfile'} = $opt_author if $opt_author; +$var{'includesource'} = $opt_includesource if $opt_includesource; +if ($var{'includesource'} ne 'no') { $var{'includesource'} = 'yes'; } +$var{'processtree'} = $opt_processtree if $opt_processtree; +if ($var{'processtree'} ne 'no') { $var{'processtree'} = 'yes'; } +$var{'producetree'} = $opt_producetree if $opt_producetree; +if ($var{'producetree'} ne 'no') { $var{'producetree'} = 'yes'; } +if ($var{'processtree'} eq 'no') { $var{'producetree'} = 'no'; } +if ($var{'frames'} ne 'no') { $var{'frames'} = 'yes'; } +# if (($var{'processtree'} eq 'yes') && ($var{'producetree'} eq 'no')) { $var{'usecontentsm'} = 'no'; } + +$var{'writecontentsm'} = $opt_writecontentsm if $opt_writecontentsm; + +#------------------------------------------------------------------------ +# Do the real stuff +#------------------------------------------------------------------------ + +# Print variables on screen, when not silent +&ListVariables if !$opt_silent; + +# Check the author file +if ($var{'authorfile'} ne '') { + if (!($var{'authorfile'} =~ m,^/,)) { + # relative path: treat as relative to config file + my $cfd = $var{'configfile'}; + $cfd =~ s,/[^/]*$,/,; + $cfd =~ s,^[^/]*$,.,; + $var{'authorfile'} = "$cfd/" . $var{'authorfile'}; + } + if (&CheckFileName($var{'authorfile'}, 'author file')) { + $var{'authorfile'} = ''; + if (!$opt_silent) { print " Proceeding without author information!\n"; } + } +} + +# Call the function doing all the real work +&ConstructNameMatrix; + +&ConstructDependencyMatrix; + +&ConstructAllIndexFiles; + +&ConstructHTMLFiles; + +exit $exit_status; + +#------------------------------------------------------------------------ +# Construct list of all mfile names and initialize various data arrays. +#------------------------------------------------------------------------ +sub ConstructNameMatrix +{ + local(*MFILE); + local($file, $dirname); + local(@newdirectories); + local(%localnames); + + $RecDeep = 0; + &ParseTreeReadFiles($var{'dirmfiles'}, $RecDeep); + + foreach $dirname (@directories) { + if ($dirnumbermfiles{$dirname} > 0) { + push(@newdirectories, $dirname); + if (! defined($contentsname{$dirname})) { + $contentsname{$dirname} = 'Contents'; + if (($var{'writecontentsm'} eq 'no') && ($var{'usecontentsm'} eq 'yes')) { + print "\r ParseTree - for directory $dirname no contents file found!\n"; + print " create one or enable writing of contents file (writecontentsm = yes)!\n"; + } + } + } + } + @alldirectories = @directories; + @directories = @newdirectories; + + foreach $dirname (@directories) { + if ($debug > 0) { print "Dir: $dirname \t\t $dirnumbermfiles{$dirname} \t$contentsname{$dirname}\n"; } + } + + @names = sort(keys %mfile); + + # check, if name of directory is identical to name of file + @dirsinglenames = values(%dirnamesingle); + grep($localnames{$_}++, @dirsinglenames); + @dirandfilename = grep($localnames{$_}, @names); + if (@dirandfilename) { + print "\r Name clash between directory and file name: @dirandfilename\n"; + print " These files will be excluded from linking!\n"; + push(@excludenames, @dirandfilename); + } + + # construct names matrix for help text linking + # exclude some common words (and at the same time m-functions) from linking in help text + grep($localnames{$_}++, @excludenames); + @linknames = grep(!$localnames{$_}, @names); + + if ($debug > 2) { print "linknames (names of found m-files):\n @linknames\n"; } + +} + +#------------------------------------------------------------------------ +# Parse tree and collect all Files +#------------------------------------------------------------------------ +sub ParseTreeReadFiles +{ + local($dirname, $localRecDeep) = @_; + local($file, $name, $filewosuffix); + local($dirhtmlname, $dirmode); + local($relpath, $relpathtoindex, $replacevardir); + local(*CHECKDIR, *AKTDIR); + local(@ALLEFILES); + + opendir(AKTDIR, $dirname) || die "ParseTree - Can't open directory $dirname: $!"; + if ($debug > 1) { print "\nDirectory: $dirname\n"; } + + # create relative path + $_ = $dirname; $replacevardir = $var{'dirmfiles'}; + s/$replacevardir//; $relpath = $_; + s/[^\/]+/../g; $relpathtoindex = $_; + + # producetree no + if ($var{'producetree'} eq 'no') { $relpath = ''; $relpathtoindex = ''; } + + # names of directories (top-level and below top-level m-file-directory) + push(@directories, $dirname); + $dirnumbermfiles{$dirname} = 0; # set number of m-files for this dir to zero + # relative path from top-level directory, depends on directory name + $dirnamerelpath{$dirname} = $relpath; + # relative path from actual directory to top-level directory, depends on directory name + $dirnamerelpathtoindex{$dirname} = $relpathtoindex; + # recursion level for directory, depends on directory name + $dirnamerecdeep{$dirname} = $localRecDeep; + + # only the name of the directory, without path + $rindexprint = rindex($dirname, $dirsep, length($dirname)-2); + $rindsub = substr($dirname, $rindexprint+1, length($dirname)-$rindexprint-2); + $dirnamesingle{$dirname} = $rindsub; + + # create name of html-directories + $_ = $dirname; + s/$var{'dirmfiles'}/$var{'dirhtml'}/; + $dirhtmlname = $_; + if ($var{'producetree'} eq 'no') { $dirhtmlname = $var{'dirhtml'}; } + # try to open html directory, if error, then create directory, + # use same mode as for corresponding m-file directory + opendir(CHECKDIR,"$dirhtmlname") || do { + $dirmode = (stat($dirname))[2]; # print "$dirmode\n"; + mkdir("$dirhtmlname", $dirmode) || die ("Cannot create directory $dirhtmlname: $! !"); + }; + closedir(CHECKDIR); + + + # read everything from this directory and process them + @ALLEFILES = readdir(AKTDIR); + + foreach $file (@ALLEFILES) { + # exclude . and .. directories + next if $file eq '.'; next if $file eq '..'; + + # test for existense of entry (redundant, used for debugging) + if (-e $dirname.$file) { + # if it's a directory, call this function recursively + if (-d $dirname.$file) { + if ($var{'processtree'} eq 'yes') { + &ParseTreeReadFiles($dirname.$file.$dirsep, $localRecDeep+1); + } + } + # if it's a file - test for m-file, save name and create some arrays + elsif (-f $dirname.$file) { + if ($file =~ /\.$suffixforsearch$/i) { + # Remove the file suffix to establish the matlab identifiers + $filewosuffix = $file; + $filewosuffix =~ s/\.$suffixforsearch$//i; + # $filename = $name; + + # Contents file in unix must start with a capital letter (Contents.m) + # ensure, that m-file name is lower case, except the contents file + if (! ($filewosuffix =~ /^contents$/i)) { + # if ($var{'links2filescase'} eq 'low') { $filewosuffix = "\L$filewosuffix\E"; } + $filewosuffixlow = "\L$filewosuffix\E"; + } + else { $contentsname{$dirname} = $filewosuffix; } + + # internal handle name is always lower case + $name = $filewosuffixlow; + # file name is not lower case + $filename = $filewosuffix; + + # if don't use C|contents.m, then forget all C|contents.m + if ($var{'usecontentsm'} eq 'no') { if ($name =~ /contents/i) { next; } } + + # if m-file with this name already exists, use directory and name for name + # only the first occurence of name will be used for links + if (defined $mfile{$name}) { + if (! ($name =~ /^contents$/i) ) { + print "\r ParseTree - Name conflict: $name in $dirname already exists: $mfile{$name} !\n"; + print " $mfile{$name} will be used for links!\n"; + } + $name = $dirname.$name; + } + # mfile name with path + $mfile{$name} = $dirname.$file; + # mfile name (without path) + $mfilename{$name} = $filename; + # mfile directory + $mfiledir{$name} = $dirname; + + # html file name and full path, special extension of Contents files + if ($name =~ /contents/i) { $extrahtmlfilename = $dirnamesingle{$dirname}; } + else { $extrahtmlfilename = ''; } + $hfile{$name} = $dirhtmlname.$mfilename{$name}.$extrahtmlfilename.$var{'exthtml'}; + + # save relative html path + # if ($var{'producetree'} eq 'yes') { + $hfilerelpath{$name} = $relpath; + # } else { # if no tree to produce, relative path is empty + # $hfilerelpath{$name} = ''; + # } + + # create relative path from html file to directory with global index file + $hfileindexpath{$name} = $relpathtoindex; + + # Function declaration, if one exists, set default to script + $synopsis{$name} = ""; + $mtype{$name} = "script"; + + # First comment line + $apropos{$name} = ""; + + # count number of m-files in directories + $dirnumbermfiles{$dirname}++; + + if ($debug > 1) { + if ($opt_silent) { print "\r"; } + print " ParseTree: $name \t\t $mfile{$name} \t\t $hfile{$name}\t\t"; + if (!$opt_silent) { print "\n"; } + } + } + } + else { + print "Unknown type of file in $dirname: $file\n"; + } + } + else { print "Error: Not existing file in $dirname: $file\n"; } + } + + closedir(AKTDIR) + +} + +#------------------------------------------------------------------------ +# Construct Dependency matrix +# $dep{$x,$y} > 0 if $x includes a reference to $y. +#------------------------------------------------------------------------ +sub ConstructDependencyMatrix +{ + &ConstructDependencyMatrixReadFiles('all'); + &ConstructDependencyMatrixReally; +} + + +#------------------------------------------------------------------------ +# Construct Dependency matrix +# $dep{$x,$y} > 0 if $x includes a reference to $y. +#------------------------------------------------------------------------ +sub ConstructDependencyMatrixReadFiles +{ + local($whatstring) = @_; + local(*MFILE); + local($name, $inames); + local(%symbolsdep, %symbolsall); + + # Initialize as all zeros. + # foreach $name (@names) { grep($dep{$name,$_}=0,@names); if ($debug > 0) { print "\r DepMatrix anlegen: $name\t$#names\t"; } } + + # Compute the dependency matrix + $inames = -1; + foreach $name (@names) { + # Read each file and tabulate the distinct alphanumeric identifiers in + # an array of symbols. Also scan for: + # synopsis: The function declaration line + # apropos: The first line of the help text + + # look for whatstring, if all: process every file, if contents: process only contents files + if ($whatstring eq 'contents') { if (! ($name =~ /contents$/i) ) { next; } } + elsif ($whatstring eq 'all') { } # do nothing + else { print "\r ConstructDependency: Unknown parameter whatstring: $whatstring \n"; } + + undef %symbolsall; undef %symbolsdep; + open(MFILE,"<$mfile{$name}") || die("Can't open $mfile{$name}: $!\n"); + while () { + chop; + + # Split on nonalphanumerics, then look for all words, used for links later + # this one for all references + @wordsall = grep(/[a-zA-Z]\w*/, split('\W',$_)); + # set all words to lower case for link checking + undef @wordsall2; + # do case conversion not, case checking is done later + foreach (@wordsall) { push(@wordsall2, "\L$_\E"); } + # @wordsall2 = @wordsall; + grep($symbolsall{$_}++, @wordsall2); + + # Store first comment line, skip all others. + if (/^\s*%/) { + if (!$apropos{$name}) { + s/^\s*%\s*//; # remove % and leading white spaces on line + $_ = &SubstituteHTMLEntities($_); + $apropos{$name} = $_; + } + next; + } + + # If it's the function declaration line, then store it and skip + # but only, when first function definition (multiple function lines when private subfunctions in file + if ($synopsis{$name} eq '') { + if (/^\s*function/) { + s/^\s*function\s*//; + $synopsis{$name} = $_; + $mtype{$name} = "function"; + next; + } + } + + # Split off any trailing comments + if ($_ ne '') { + # this one for references in program code only + # when syntax parsing, here is a working place + ($statement) = split('%',$_,1); + @wordsdep = grep(/[a-zA-Z]\w*/,split('\W',$statement)); + # do case conversion not, case checking is done later + undef @wordsdep2; + foreach (@wordsdep) { push(@wordsdep2, "\L$_\E"); } + grep($symbolsdep{$_}++, @wordsdep2); + } + } + close MFILE; + + # compute intersection between %symbolsall and @linknames + delete($symbolsall{$name}); + # foreach $localsumall ($symbolsall) { + # $localsumall = "\L$localsumall\E"; + # } + @{'all'.$name} = grep($symbolsall{$_}, @linknames); + + # compute intersection between %symbolsdep and @linknames + delete($symbolsdep{$name}); + @{'depcalls'.$name} = grep($symbolsdep{$_}, @linknames); + + $inames++; print "\r DepCallsMatrix: $inames/$#names\t $name\t"; + if ($debug > 2) { print "\n depnames: @{'depcalls'.$name}\n all: @{'all'.$name}\n"; } + } +} + + +#------------------------------------------------------------------------ +# Construct Dependency matrix +# $dep{$x,$y} > 0 if $x includes a reference to $y. +#------------------------------------------------------------------------ +sub ConstructDependencyMatrixReally +{ + local($inames, $name); + + $inames = -1; + foreach $name (@names) { undef %{'depint'.$name}; } + foreach $name (@names) { + grep(${'depint'.$_}{$name}++, @{'depcalls'.$name}); + $inames++; print "\r DepCalledMatrix1: $inames/$#names\t $name\t"; + } + $inames = -1; + foreach $name (@names) { + # compute intersection between %depint.name{$_} and @linknames + if (defined (%{'depint'.$name})) { @{'depcalled'.$name} = grep(${'depint'.$name}{$_}, @linknames); } + $inames++; print "\r DepCalledMatrix2: $inames/$#names\t $name\t"; + if ($debug > 2) { print "\n depcalled: @{'depcalled'.$name}\n"; } + } + +} + + +#======================================================================== +# Construct all index files +#======================================================================== +sub ConstructAllIndexFiles +{ + local(@localnames); + local($ActDir); + local($name); + + # define variables and names for frame target + $GlobalNameFrameMainLeft = 'Cont_Main'; + $GlobalNameFrameMainRight = 'Cont_Lower'; + $GlobalNameFrameAZIndexsmall = 'IndexAZindex'; + $GlobalNameFrameAZIndexjump = 'IndexAZjump'; + + $indexcreated = 0; + + &ConstructHighestIndexFile; + $indexcreated++; + + # if ($var{'producetree'} eq 'yes') { + # moved next 2 lines out of if for producetree no + # &ConstructHighestIndexFile; + # $indexcreated++; + + foreach $ActDir (@directories) { + undef @localnames; + foreach $name (@names) { + local($pathsubstr) = substr($mfile{$name}, 0, rindex($mfile{$name}, "/")+1); + if ($ActDir eq $pathsubstr) { + if ($debug > 1) { print "IndexFile: $pathsubstr ActDir: $ActDir Hfilerelpath: $hfilerelpath{$name}\n"; } + push(@localnames, $name); + } + } + if ($debug > 2) { print "localnames: @localnames\n"; } + # create contents file and short|long index of files in local directory + &ConstructContentsmFile($ActDir, @localnames); + &ConstructAZIndexFile($ActDir, 'short', 'local', @localnames); + &ConstructAZIndexFile($ActDir, 'long', 'local', @localnames); + $indexcreated+=2; + } + # } else { + # &ConstructContentsmFile($var{'dirmfiles'}, @names); + # } + + # create short|long index of files in all directory + &ConstructAZIndexFile($var{'dirmfiles'}, 'short', 'global', @names); + &ConstructAZIndexFile($var{'dirmfiles'}, 'long', 'global', @names); + $indexcreated+=2; + + # if contents.m were created or updated, the dependency matrices should + # be updated as well + if ($var{'writecontentsm'} eq 'yes') { &ConstructDependencyMatrixReadFiles('contents');; } +} + + +#======================================================================== +# Construct the highest level index file +#======================================================================== +sub ConstructHighestIndexFile +{ + local(*IFILE); + local($indexfile, $filename); + + # Build the frame layout file, this files includes the layout of the frames + # Build the frame layout file name (highest one) + $indexfile = $var{'dirhtml'}.$var{'filenametopframe'}.$var{'exthtml'}; + + if ($var{'frames'} eq 'yes') { + + open(IFILE,">$indexfile") || die("Cannot open frame layout file $indexfile\n"); + + # Write the header of frame file + print IFILE "$TextDocTypeFrame\n\n\n$var{'codeheadmeta'}\n$TextMetaCharset\n"; + print IFILE " $var{'texttitleframelayout'}\n"; + print IFILE "\n"; + + # definition of 2 frames, left the tree of directories, + # right the index of that directory or the docu of a file + print IFILE "\n"; + print IFILE " \n"; + print IFILE " \n"; print IFILE "\n"; + + print IFILE "\n"; + + close(IFILE); + + if ($opt_silent) { print "\r"; } + print " Frame layout file created: $indexfile\t"; + if (!$opt_silent) { print "\n"; } + } + + for($irun=0; $irun <= 2; $irun++) { + # Build the top directory index file, these files include the directory tree + # Build the directory tree index file name + + # Create no directory file for contents, when no contents to use + if (($irun == 2) && ($var{'usecontentsm'} eq 'no')) { next; } + + # Assign the correct index file name + if ($irun == 0) { $filename = $var{'filenamedirshort'}; } + elsif ($irun == 1) { $filename = $var{'filenamedirlong'}; } + elsif ($irun == 2) { $filename = $var{'filenamedircontents'}; } + + $indexfile = $var{'dirhtml'}.$filename.$var{'exthtml'}; + + open(IFILE,">$indexfile") || die("Cannot open directory tree index file $indexfile\n"); + # Write header of HTML file + print IFILE "$TextDocTypeHTML\n\n\n$var{'codeheadmeta'}\n$TextMetaCharset\n$var{'csslink'}\n"; + + if ($var{'texttitleindexalldirs'} eq '') { + print IFILE "Index of Directories of $var{'dirmfiles'}\n"; + } else { + print IFILE "$var{'texttitleindexalldirs'}\n"; + } + + if ($var{'frames'} eq 'yes') { + print IFILE "\n"; + } + + print IFILE "\n"; + print IFILE "\n"; + print IFILE "
    \n"; + if ($var{'textheaderindexalldirs'} eq '') { + print IFILE "

    Index of Directories of $var{'dirmfiles'}

    \n"; + } else { + print IFILE "

    $var{'textheaderindexalldirs'}

    \n"; + } + print IFILE "

    \n"; + + if ($var{'frames'} eq 'yes') { + if ($irun == 0) { print IFILE "short\n"; } + else { print IFILE "short\n"; } + if ($irun == 1) { print IFILE " | long\n"; } + else { print IFILE " | long\n"; } + if ($var{'usecontentsm'} eq 'yes') { + if ($irun == 2) { print IFILE " | contents\n"; } + else { print IFILE " | contents\n"; } + } + } else { + if ($irun == 0) { print IFILE "short\n"; } + else { print IFILE "short\n"; } + if ($irun == 1) { print IFILE " | long\n"; } + else { print IFILE " | long\n"; } + if ($var{'usecontentsm'} eq 'yes') { + if ($irun == 2) { print IFILE " | contents\n"; } + else { print IFILE " | contents\n"; } + } + } + + print IFILE "


    \n\n"; + print IFILE "
      \n"; + + # go through all directories and create a list entry for each one, + # depending on recursion level create sublists + $prevrecdeeplevel = 0; + foreach $name (@alldirectories) { + $actrecdeeplevel = $dirnamerecdeep{$name}; + for( ; $prevrecdeeplevel < $actrecdeeplevel; $prevrecdeeplevel++ ) { print IFILE "
        \n"; } + for( ; $prevrecdeeplevel > $actrecdeeplevel; $prevrecdeeplevel-- ) { print IFILE "
      \n"; } + if ($irun == 0) { $indexfilenameused = $var{'filenameindexshortlocal'}.$var{'filenameextensionframe'}; } + elsif ($irun == 1) { $indexfilenameused = $var{'filenameindexlonglocal'}.$var{'filenameextensionframe'}; } + elsif ($irun == 2) { $indexfilenameused = $contentsname{$name}; } + else { die "ConstructHighestIndexFile: Unknown value of irun"; } + if ($dirnumbermfiles{$name} > 0) { + # producetree no + # if ($var{'producetree'} eq 'no') { $dirnamehere = ''; } + # else { $dirnamehere = '$dirnamerelpath{$name}'; } + # print IFILE "
    • $dirnamesingle{$name}\n"; + print IFILE "
    • $dirnamesingle{$name}
    • \n"; + } else { + # print directories with no m-files inside not + # print IFILE "
    • $dirnamesingle{$name}
    • \n"; + } + } + $actrecdeeplevel = 0; + for( ; $prevrecdeeplevel > $actrecdeeplevel; $prevrecdeeplevel-- ) { print IFILE "
    \n"; } + print IFILE "\n
    $var{'codehr'}\n"; + + # Include info about author from authorfile + &WriteFile2Handle($var{'authorfile'}, IFILE); + + print IFILE "\n"; + print IFILE "\n"; + print IFILE "
    \n\n\n"; + + close(IFILE); + + if ($opt_silent) { print "\r"; } + print " Directory - Indexfile created: $indexfile\t"; + if (!$opt_silent) { print "\n"; } + } +} + + +#======================================================================== +# Construct the A-Z index file (global/local and/or short/long) +#======================================================================== +sub ConstructAZIndexFile +{ + local($LocalActDir, $LocalShortLong, $LocalGlobalLocal, @localnames) = @_; + local(*IFILE); + local($name, $indexfilename, $dirpath); + local($firstletter, $firstone); + + if ($debug > 2) { print "localnames in AZ small: @localnames\n"; print " ActDir in A-Z: $LocalActDir\n"; } + + # extract filename of index file from parameters of function + if ($LocalShortLong eq 'short') { + if ($LocalGlobalLocal eq 'global') { $indexfilename = $var{'filenameindexshortglobal'}; } + elsif ($LocalGlobalLocal eq 'local') { $indexfilename = $var{'filenameindexshortlocal'}; } + else { die "wrong parameter for LocalGlobalLocal in ConstructAZIndexFile: $LocalGlobalLocal."; } + } elsif ($LocalShortLong eq 'long') { + if ($LocalGlobalLocal eq 'global') { $indexfilename = $var{'filenameindexlongglobal'}; } + elsif ($LocalGlobalLocal eq 'local') { $indexfilename = $var{'filenameindexlonglocal'}; } + else { die "wrong parameter for LocalGlobalLocal in ConstructAZIndexFile: $LocalGlobalLocal."; } + } else { die "wrong parameter for LocalShortLong in ConstructAZIndexFile: $LocalShortLong."; } + + # producetree no + # if ($var{'producetree'} eq 'no') { $dirnamehere = ''; } + # else { $dirnamehere = '$dirnamerelpath{$LocalActDir}'; } + # Build the index file name + # handle the global index file case separately (no extra directory name in file) + # the local index file name must be extended by the name of the directory + if ($LocalGlobalLocal eq 'global') { $extradirfilename = ''; } + else { $extradirfilename = $dirnamesingle{$LocalActDir}; } + $indexfile = $var{'dirhtml'}.$dirnamerelpath{$LocalActDir}.$indexfilename.$var{'filenameextensionindex'}.$extradirfilename.$var{'exthtml'}; + + if ($LocalShortLong eq 'short' and $extradirfilename eq '' and $var{'frames'} ne 'yes') { + # With no frames and no subdir path, this must go in the + # top-level index file instead + $indexfile = $var{'dirhtml'}.$var{'filenametopframe'}.$var{'exthtml'}; + } + + if ($debug > 2) { print " indexfilename (a-z small): $indexfile\n"; } + + open(IFILE,">$indexfile") || die("Cannot open index file $indexfile: $!\n"); + + # Write the header of HTML file + print IFILE "$TextDocTypeHTML\n\n\n$var{'codeheadmeta'}\n$TextMetaCharset\n$var{'csslink'}\n"; + + my $dirToPrint = $LocalActDir; + $dirToPrint =~ s,^./,,; + + if ($var{'texttitleindex'} eq '') { + print IFILE "Index of Matlab Files in Directory $dirToPrint\n"; + } else { + if ($LocalGlobalLocal eq 'global') { print IFILE "$var{'texttitleindex'}\n"; } + else { print IFILE "$var{'texttitleindex'} in Directory $dirToPrint\n"; } + } + + if ($var{'frames'} eq 'yes') { + print IFILE "\n"; + } + print IFILE "\n"; + + print IFILE "\n"; + print IFILE "
    \n"; + if ($var{'textheaderindex'} eq '') { + print IFILE "

    Index of Matlab Files in Directory $dirToPrint

    \n"; + } else { + if ($LocalGlobalLocal eq 'global') { print IFILE "

    $var{'textheaderindex'}

    \n"; } + else { print IFILE "

    $var{'textheaderindex'} in Directory $dirToPrint

    \n"; } + } + + # include links to indexes + &ConstructLinks2Index(IFILE, $dirnamerelpathtoindex{$LocalActDir}, $LocalActDir, $LocalGlobalLocal); + + # Collect the starting letters of m files in this directory or all m-files + for('a'..'z') { undef @{$_}; } + foreach $name (@localnames) { + if (! ($mfilename{$name} =~ /contents/i)) { + $firstletter = substr($mfilename{$name}, 0, 1); + # convert first letter always to lower case + # needed for reference to lower and upper case m-files + $firstletter = "\L$firstletter\E"; + push(@{$firstletter}, $name); + } + } + + if ($LocalShortLong eq 'short') { + # begin create short index + print IFILE "\n"; + + for('a'..'z') { + # print " $_: @{$_}\n"; + $numberofletter = $#{$_}+1; + $cols = 3; + if ($numberofletter > 0) { + print IFILE "\n\n"; + for ($count = 0; $count < $numberofletter; $count++) { + if (($count % $cols) == 0) { + if ($count > 0) { + print IFILE "\n"; + } + print IFILE ""; + } + $name = @{$_}[$count]; + if ($LocalGlobalLocal eq 'global') { $dirpath = $hfilerelpath{$name}; } else { $dirpath = ""; } + print IFILE ""; + } + + print IFILE "\n"; + + # $numberhalf = ($numberofletter + 1 - (($numberofletter+1) % 2))/2; + # if ($debug > 2) { print " $_: @{$_} \t $numberhalf \t $numberofletter\n"; } + # for($count = 0; $count < $numberhalf; $count++) { + # $name = @{$_}[$count]; + # if ($LocalGlobalLocal eq 'global') { $dirpath = $hfilerelpath{$name}; } else { $dirpath = ""; } + # print IFILE ""; + # if (($count + $numberhalf) < $numberofletter) { + # $name = @{$_}[$count + $numberhalf]; + # if ($LocalGlobalLocal eq 'global') { $dirpath = $hfilerelpath{$name}; } else { $dirpath = ""; } + # print IFILE "\n"; + # } else { + # print IFILE "\n"; + # } + # } + } + } + print IFILE "

    \U$_\E
    $mfilename{$name}
    $mfilename{$name}$mfilename{$name}
    \n
    $var{'codehr'}\n"; + + } elsif ($LocalShortLong eq 'long') { + # begin create long index + print IFILE "\n"; + print IFILE "\n"; + + for('a'..'z') { + # print " $_: @{$_}\n"; + $numberofletter = $#{$_}+1; + if ($numberofletter > 0) { + $firstone = 1; + foreach $name (@{$_}) { + if ($debug > 1) { print " AZinforeach1: $name \t\t $hfilerelpath{$name} \t\t $dirnamerelpath{$LocalActDir}\n"; } + if ($LocalGlobalLocal eq 'global') { $dirpath = $hfilerelpath{$name}; } else { $dirpath = ""; } + if (! ($mfilename{$name} =~ /contents/i)) { + if ($firstone == 1) { print IFILE "\n\n"; $firstone = 0; } + print IFILE "\n"; + } + } + } + } + print IFILE "
    NameSynopsis

    \U$_\E
    $mfilename{$name}$apropos{$name}
    \n
    $var{'codehr'}\n"; + } else { die "wrong parameter for LocalShortLong in ConstructAZIndexFile: $LocalShortLong."; } + + # Include info about author from authorfile + &WriteFile2Handle($var{'authorfile'}, IFILE); + + print IFILE "\n"; + print IFILE "\n"; + print IFILE "
    \n\n\n"; + + close(IFILE); + + if ($opt_silent) { print "\r"; } + print " Indexfile small (A-Z) created: $indexfile\t"; + if (!$opt_silent) { print "\n"; } + + + # Build the A-Z jump index file name + # handle the global index file case separately (no extra directory name in file) + if ($LocalGlobalLocal eq 'global') { $extradirfilename = ''; } + else { $extradirfilename = $dirnamesingle{$LocalActDir}; } + + if ($var{'frames'} eq 'yes') { + + $indexfile = $var{'dirhtml'}.$dirnamerelpath{$LocalActDir}.$indexfilename.$var{'filenameextensionjump'}.$extradirfilename.$var{'exthtml'}; + if ($debug > 2) { print " indexfilename (a-z jump): $indexfile\n"; } + open(IFILE,">$indexfile") || die("Cannot open jump index file $indexfile: $!\n"); + + # Write the header of HTML file + print IFILE "$TextDocTypeHTML\n\n\n$var{'codeheadmeta'}\n$TextMetaCharset\n$var{'csslink'}\n"; + + if ($var{'texttitleindex'} eq '') { + print IFILE "A-Z jump index in directory $dirToPrint\n"; + } else { + if ($LocalGlobalLocal eq 'global') { print IFILE "$var{'texttitleindex'}\n"; } + else { print IFILE "$var{'texttitleindex'} in Directory $dirToPrint\n"; } + } + + if ($var{'frames'} eq 'yes') { + print IFILE "\n"; + } + print IFILE "\n"; + print IFILE "\n"; + print IFILE "
    \n"; + + # Write the A-Z jump line, generate link for letters with files starting with this letter + # and only letters for no files starting with this letter + # use previously generated arrays with names of files sorted by starting letter + for('a'..'z') { + $numberofletter = $#{$_}+1; + if ($numberofletter > 0) { + print IFILE "\U$_\E \n"; + } else { + print IFILE "\U$_\E \n"; + } + } + + print IFILE "
    \n\n"; + + close(IFILE); + + if ($opt_silent) { print "\r"; } + print " Indexfile small (A-Z jump) created: $indexfile\t"; + if (!$opt_silent) { print "\n"; } + } + + + # Build the frame layout file, this file includes the layout of the frames + # Build the frame layout file name (for small/compact A-Z index) + # handle the global index file case separately (no extra directory name in file) + if ($LocalGlobalLocal eq 'global') { $extradirfilename = ''; } + else { $extradirfilename = $dirnamesingle{$LocalActDir}; } + + if ($var{'frames'} eq 'yes') { + + $indexfile = $var{'dirhtml'}.$dirnamerelpath{$LocalActDir}.$indexfilename.$var{'filenameextensionframe'}.$extradirfilename.$var{'exthtml'}; + if ($debug > 2) { print " indexfilename (a-z frame): $indexfile\n"; } + + open(IFILE,">$indexfile") || die("Cannot open jump index frame file $indexfile: $!\n"); + + # Write the header of Frame file + print IFILE "$TextDocTypeHTML\n\n\n$var{'codeheadmeta'}\n$TextMetaCharset\n$var{'csslink'}\n"; + + if ($var{'texttitleindex'} eq '') { + print IFILE "Index of Matlab Files in Directory $dirToPrint\n"; + } else { + if ($LocalGlobalLocal eq 'global') { print IFILE "$var{'texttitleindex'}\n"; } + else { print IFILE "$var{'texttitleindex'} in Directory $dirToPrint\n"; } + } + print IFILE "\n"; + + # definition of 2 frames, top the A-Z index, below the jump letter line + print IFILE "\n"; + print IFILE " \n"; + print IFILE " \n"; + print IFILE "\n"; + + print IFILE "\n"; + + close(IFILE); + + if ($opt_silent) { print "\r"; } + print " Frame layout file created: $indexfile\t"; + if (!$opt_silent) { print "\n"; } + } +} + + +#======================================================================== +# Construct the links to all indexes +#======================================================================== +sub ConstructLinks2Index +{ + local(*WRITEFILE, $LocalPath2Index, $PathContents, $LocalGlobalLocal) = @_; + + # include links to short/long - local/global index and C|contents.m + print WRITEFILE "\n

    "; + print WRITEFILE "$var{'textjumpindexglobal'} "; + + if ($var{'frames'} eq 'yes') { + print WRITEFILE "short | "; + print WRITEFILE "long\n"; + } else { + print WRITEFILE "short | "; + print WRITEFILE "long\n"; + } + + if ($LocalGlobalLocal eq 'local') { + if ($var{'usecontentsm'} eq 'yes') { + print WRITEFILE " | Local contents\n"; + } + if ($var{'frames'} eq 'yes') { + print WRITEFILE " | $var{'textjumpindexlocal'} "; + print WRITEFILE "short | "; + print WRITEFILE "long\n"; + } else { + print WRITEFILE " | $var{'textjumpindexlocal'} "; + print WRITEFILE "short | "; + print WRITEFILE "long\n"; + } + } + print WRITEFILE "

    \n\n"; + print WRITEFILE "$var{'codehr'}\n"; +} + + +#======================================================================== +# Construct the contents.m files or update +#======================================================================== +sub ConstructContentsmFile +{ + local($LocalActDir, @localnames) = @_; + local(*CFILE, $name,$newline); + local($contentsfile, $isincontentsonly); + local(@lines, @autoaddlines, @emptylines); + local($autoadd) = 'AutoAdd'; + local($autoaddsection) = 0; + local($emptylineflag) = 0; + local(%nameincontents); + + # Build the contents file name + $contentsfile = $LocalActDir.$contentsname{$LocalActDir}.$suffix; + + if (-e $contentsfile) { + open(CFILE,"<$contentsfile") || die("Cannot open contents file $contentsfile: $!\n"); + while () { + # Search for the specified string pattern + @words = split; + if ((@words >= 3) && ($words[2] eq '-')) { + $isincontentsonly = 0; + foreach $name (@localnames) { + if ($name eq $words[1]) { # old + # if ($mfilename{$name} eq $words[1]) { + $isincontentsonly = 1; + $nameincontents{$name} = 1; + $newline = sprintf("%% %-13s - %s\n", $mfilename{$name}, $apropos{$name}); + push(@lines, $newline); + } + } + # issue a warning, if file is in contents, but not as file in the directory + if ($isincontentsonly == 0) { + print "\rConstructContents: Obsolete entry $words[1] in $contentsfile ! Entry not used.\n"; + } + } else { + # look for the AutoAdd section, should be the second word + if ((@words >= 2) && ($words[1] eq $autoadd)) { $autoaddsection = 1; } + # push the red line in an array + push(@lines, $_); + } + } + close(CFILE); + } else { + $newline = "% MATLAB Files in directory $LocalActDir\n%\n"; + push(@lines, $newline); + + } + + # collect the file names, that were not included in original C|contents.m + foreach $name (@localnames) { + if (! defined $nameincontents{$name}) { + if (! ($mfilename{$name} =~ /contents/i)) { + $newline = sprintf("%% %-13s - %s\n", $mfilename{$name}, $apropos{$name}); + push(@autoaddlines, $newline); + } + } + } + + # write/update C|contents.m only if variable is set + if ($var{'writecontentsm'} eq 'yes') { + unlink($contentsfile); + open(CFILE,">$contentsfile") || die("Cannot open contents file $contentsfile: $!\n"); + # write old C|contents.m or header of new file, as long as comment lines + foreach $line (@lines) { + if ($emptylineflag == 0) { + if ($line =~ /^\s*%/) { print CFILE $line; } + else { $emptylineflag = 1; push(@emptylines, $line); } + } else { push(@emptylines, $line); } + } + # add header of AutoAdd section + if (($autoaddsection == 0) && (@autoaddlines > 0)) { print CFILE "%\n% $autoadd\n"; } + # add autoadd section lines (previously undocumented files + foreach $line (@autoaddlines) { print CFILE $line; } + # add tail of original C|contents.m (everything behind first non-comment line) + foreach $line (@emptylines) { print CFILE $line; } + print CFILE "\n"; + close CFILE; + if ($opt_silent) { print "\r"; } + print " Contents file created/updated: $contentsfile\t"; + if (!$opt_silent) { print "\n"; } + } +} + + +#======================================================================== +# Replace found special characters with their HTMl Entities +#======================================================================== +sub SubstituteHTMLEntities { + local($_) = @_; + + # Replace & <-> & < <-> < > <-> > " <-> " + s/&/&/g; s/\/>/g; s/\"/"/g; + return $_; +} + +#======================================================================== +# Replace found m-filenamestring with full link. +#======================================================================== +sub SubstituteName2Link { + local($_, $funname) = @_; + local($refstr1, $refstr2, $reffound); + + # Look for something matching in the line + if ( /(\W+)($funname)(\W+)/i ) { + $reffound = $2; + $refstr1 = ""; + $refstr2 = "<\/a>"; + # Do links only for exact case match + if ( ($var{'links2filescase'} eq 'exact') || ($var{'links2filescase'} eq 'exactvery') ) { + if ( /(\W+)($funname)(\W+)/g ) { + s/(\W+)($funname)(\W+)/$1$refstr1$funname$refstr2$3/g; + } + else { + # Print info for not matching case in references, good for check up of files + if ( ($var{'links2filescase'} eq 'exactvery') ) { + print "Diff in case found: $funname (case of file name) <-> $reffound (case in source code)\n"; + print " (source line) $_ \n"; + } + } + } + # Do links for exact match and additionally for all upper case (often used in original matlab help text) + elsif ( ($var{'links2filescase'} eq 'exactupper') ) { + s/(\W+)($funname)(\W+)/$1$refstr1$2$refstr2$3/g; + $funname2 = "\U$funname\E"; + s/(\W+)($funname2)(\W+)/$1$refstr1$2$refstr2$3/g; + } + # Do links for all case mixes, this calls for trouble under LINUX/UNIX + else { #elsif ( ($var{'links2filescase'} eq 'all') ) + s/(\W+)($funname)(\W+)/$1$refstr1$2$refstr2$3/ig; + } + } + + return $_; +} + +#======================================================================== +# Construct the html files for each matlab file. +# Need to reread each matlab file to find the help text. +# Note that we can't do this in a single loop because sometimes +# the help text maybe before the function declaration. +#======================================================================== +sub ConstructHTMLFiles +{ + local(*MFILE); + local(*HFILE); + + local($filescreated) = 0; + local($functionline); + + foreach $name (@names) { + # Create cross reference information already here, used for keywords as well + # Construct list of referenced functions + @xref = @{'depcalls'.$name}; # the functions, that this m-file calls + @yref = @{'depcalled'.$name}; # the functions, that this m-file is called from + # print " depcalls: @{'depcalls'.$name}\n depcalled: @{'depcalled'.$name}\n"; + # foreach $cname (@names) { next if $cname eq $name; push(@yref,$cname) if grep(/$name/,@{'depcalls'.$cname}); } + + + # Open m-file and html-file + open(MFILE,"<$mfile{$name}"); + open(HFILE,">$hfile{$name}"); + + # Write the header of HTML file + print HFILE "$TextDocTypeHTML\n\n\n$var{'codeheadmeta'}\n$TextMetaCharset\n$var{'csslink'}\n"; + + # Write meta tags: use apropos (one line function description) for description + # and cross reference function names for keywords (any better ideas?) + print HFILE "\n"; + print HFILE "\n"; + + # Write Title and start body of html-file + print HFILE "$var{'texttitlefiles'} $mfilename{$name}\n\n"; + print HFILE "\n"; + print HFILE "
    \n"; + print HFILE "

    $var{'textheaderfiles'} $mfilename{$name}

    \n"; + +# http://test.soundsoftware.ac.uk/cannam/projects/smallbox/repository/annotate/DL/RLS-DLA/SolveFISTA.m +# print HFILE "
    View in repository\n"; + + print HFILE "$var{'codehr'}\n"; + + # include links to short/long - local/global index and C|contents.m + &ConstructLinks2Index(HFILE, $hfileindexpath{$name}, $mfiledir{$name}, 'local'); + + # If this is a function, then write out the first line as a synopsis + if ($mtype{$name} eq "function") { + print HFILE "

    Function Synopsis

    \n"; + print HFILE "
    $synopsis{$name}
    \n$var{'codehr'}\n"; + } + + # Look for the matlab help text block + $functionline = "\n"; + do { + $_ = ; + # remember functionline, if before help text block + if (/^\s*function/) { $functionline = $_; } + } until (/^\s*%/ || eof); + if (! (eof(MFILE))) { + print HFILE "

    Help text

    \n"; + print HFILE "
    \n";
    +         while (/^\s*%/) {
    +            # First remove leading % and white space, then Substitute special characlers
    +            s/^\s*%//;
    +            $_ = &SubstituteHTMLEntities($_);
    +
    +            # check/create cross references
    +            foreach $funname (@{'all'.$name}) {
    +               if ($funname =~ /simulink/) { print "\n Simulink - Filename: $name;  scanname: $funname\n"; }
    +               next if $funname eq $name;
    +               $_ = &SubstituteName2Link($_, $funname);
    +            }
    +            print HFILE $_;
    +            if (! eof) { $_ = ; }
    +         }
    +         print HFILE "
    \n$var{'codehr'}\n"; + } + + # Write the cross reference information + if (@xref || @yref) { + print HFILE "

    Cross-Reference Information

    \n"; + print HFILE "\n\n\n\n\n\n\n
    "; + if (@xref) { + print HFILE "This $mtype{$name} calls"; + } + print HFILE ""; + if (@yref) { + print HFILE "This $mtype{$name} is called by"; + } + print HFILE "
    "; + if (@xref) { + print HFILE "\n
      \n"; + foreach $cname (sort @xref) { + print HFILE "
    • $mfilename{$cname}
    • \n"; + } + print HFILE "
    \n"; + } + print HFILE "
    "; + if (@yref) { + print HFILE "\n
      \n"; + foreach $cname (sort @yref) { + print HFILE "
    • $mfilename{$cname}
    • \n"; + } + print HFILE "
    \n"; + } + print HFILE "
    \n"; + print HFILE "$var{'codehr'}\n"; + } + + # Include source text if requested + if (($var{'includesource'} eq 'yes') && (! ($mfilename{$name} =~ /^contents$/i))) { + print HFILE "

    Listing of $mtype{$name} $mfilename{$name}

    \n"; + seek(MFILE,0,0); + print HFILE "
    \n";
    +         $IsStillHelp = 2;
    +         print HFILE $functionline;    # functionline from scanning of help
    +         while () {
    +            if ($IsStillHelp == 2) {
    +               next     if (/^\s*$/);
    +               next     if (/^\s*function/);
    +               if (/^\s*%/) { $IsStillHelp = 1; next; }
    +            } elsif ($IsStillHelp == 1) {
    +               next     if (/^\s*%/);
    +               $IsStillHelp = 0;
    +            }
    +            
    +            # Substritute special characters
    +            $_ = &SubstituteHTMLEntities($_);
    +            
    +            # check for comment in line and format with css em
    +            s/^(.*)%(.*?)([\s\r\n]+)$/$1%$2<\/em>$3/;
    +
    +            # check/create cross references
    +            foreach $funname (@{'all'.$name}) {
    +               next if $funname eq $name;
    +               $_ = &SubstituteName2Link($_, $funname);
    +            }
    +            print HFILE $_;
    +         }
    +         print HFILE "
    \n$var{'codehr'}\n"; + } + + # Include info about author from authorfile + &WriteFile2Handle($var{'authorfile'}, HFILE) ; + + print HFILE "\n"; + print HFILE "\n"; + print HFILE "
    \n\n\n"; + close(MFILE); + close(HFILE); + + # Print name of finished file + if ($opt_silent) { print "\r"; } + print " HTML-File created: $hfile{$name}\t"; + if (!$opt_silent) { print "\n"; } + $filescreated++; + } + + print "\n$PROGRAM: $indexcreated index and $filescreated files created.\n"; +} + +#======================================================================== +# Function: CheckFileName +# Purpose: . +#======================================================================== +sub CheckFileName { + local($filename, $description) = @_; + local(*CHECKFILE); + + open(CHECKFILE,"<$filename") || do { + if ($description eq '') {$description = 'file';} + # if (!$opt_silent) { print "Cannot open $description $filename: $!\n"; } + print "Cannot open $description $filename: $!\n"; + return 1; + }; + close(CHECKFILE); + return 0; + +} + +#======================================================================== +# Function: CheckDirName +# Purpose: . +#======================================================================== +sub CheckDirName { + local($dirname, $description) = @_; + local(*CHECKDIR); + + opendir(CHECKDIR,"$dirname") || die ("Cannot open $description directory $dirname: $!\n"); + closedir(CHECKDIR); +} + +#======================================================================== +# Function: WriteFile2Handle +# Purpose: . +#======================================================================== +sub WriteFile2Handle { + local($filename, *WRITEFILE) = @_; + local(*READFILE); + + if ($filename ne '') { + open(READFILE,"<$filename"); + @filecontents = ; + close(READFILE); + print WRITEFILE "@filecontents\n"; + # if (!$opt_silent) {print " Contents of $filename added\n"}; + } +} + + +#======================================================================== +# Function: GetConfigFile +# Purpose: Read user's configuration file, if such exists. +#======================================================================== +sub GetConfigFile +{ + local($filename) = @_; + local(*CONFIG); + local($value); + + if (&CheckFileName($filename, 'configuration file')) { + # if (!$opt_silent) { print " Proceeding using built-in defaults for configuration.\n"; } + print " Proceeding using built-in defaults for configuration.\n"; + return 0; + }; + + open(CONFIG,"< $filename"); + while () { + s/#.*$//; + next if /^\s*$/o; + + # match keyword: process one or more arguments + # keyword set + if (/^\s*set\s+(\S+)\s*=\s*(.*)/) { + # setting a configuration variable + if (defined $var{$1}) { + $var{$1} = $2; + if ($debug > 3) { print "$1: $var{$1}\n"; } + } + else { + print "$PROGRAM: unknown variable `$1' in configuration file\n" + } + } else { + chop($_); + print "$PROGRAM: unknown keyword in configuration file in line: `$_'\n" + } + } + close CONFIG; + 1; +} + + +#------------------------------------------------------------------------ +# DisplayHelp - display help text using -h or -help command-line switch +#------------------------------------------------------------------------ +sub DisplayHelp +{ + $help=< generation of docu, else display of help) + + $PROGRAM -dirmfiles matlab -dirhtml html + (generate html documentation for all m-files in directory matlab, + place html files in directory html, use built-in defaults for + all other parameters, this way all m-files in the directory + matlab and below are converted and the generated html-files are + placed in the directory html and below producing the same + directory structure than below matlab) + + $PROGRAM -quiet + (use built-in parameters from perl script, if configuration + file is found use these settings as well, do generation, + no display except critical errors, status of conversion and result) + + $PROGRAM -m toolbox -dirhtml doc/html -r yes -p no + (convert all m-files in directory toolbox and below and place + the generated html files in directory doc/html, read all m-files + recursively, however, the generated html files are placed in one + directory) + + $PROGRAM -m toolbox -dirhtml doc/html -i no -r no + (convert all m-files in directory toolbox and place + the generated html files in directory doc/html, do not read m-files + recursively, do not include source code in documentation) + +EofHelp + + die "$help"; +} + +#------------------------------------------------------------------------ +# DisplayTodo - display ToDo list using -t or -todo command-line switch +#------------------------------------------------------------------------ +sub DisplayTodo +{ + $todo=< 0) { + print "List of all variables and their values\n"; + foreach (sort keys %var) + { + if ($var{$_} eq '') { + $value = "empty"; + } else { + $value = $var{$_}; + } + print " $_\n $value\n"; + } + print "\n\n"; + } +} + + +__END__ +:endofperl diff -r f7c525dc7585 -r 0b6c82dead28 extra/soundsoftware/reposman-soundsoftware.rb --- a/extra/soundsoftware/reposman-soundsoftware.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/extra/soundsoftware/reposman-soundsoftware.rb Mon Jul 25 14:23:37 2011 +0100 @@ -7,7 +7,7 @@ # == Usage # # reposman [OPTIONS...] -s [DIR] -r [HOST] -# +# # Examples: # reposman --scm-dir=/var/svn --redmine-host=redmine.example.net --scm subversion # reposman -s /var/git -r redmine.example.net -u http://svn.example.net --scm git @@ -57,7 +57,7 @@ # -q, --quiet no log # # == References -# +# # You can find more information on the redmine's wiki : http://www.redmine.org/wiki/redmine/HowTos @@ -210,7 +210,7 @@ log("retrieved #{projects.size} projects", :level => 1) def set_owner_and_rights(project, repos_path, &block) - if RUBY_PLATFORM =~ /mswin/ + if mswin? yield if block_given? else uid, gid = Etc.getpwnam($svn_owner).uid, ($use_groupid ? Etc.getgrnam(project.identifier).gid : Etc.getgrnam($svn_group).gid) @@ -230,9 +230,9 @@ def owner_name(file) mswin? ? $svn_owner : - Etc.getpwuid( File.stat(file).uid ).name + Etc.getpwuid( File.stat(file).uid ).name end - + def mswin? (RUBY_PLATFORM =~ /(:?mswin|mingw)/) || (RUBY_PLATFORM == 'java' && (ENV['OS'] || ENV['os']) =~ /windows/i) end @@ -251,7 +251,6 @@ repos_path = File.join($repos_base, project.identifier).gsub(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR) create_repos = false - # Logic required for SoundSoftware.ac.uk repositories: # # * If the project has a repository path declared already, @@ -342,18 +341,7 @@ rescue => e log("\trepository #{repos_path} not registered in Redmine: #{e.message}"); end - log("\trepository #{repos_path} created"); end +end - if project.respond_to?(:repository) and project.repository.is_external? - external_url = project.repository.external_url; - log("\tproject #{project.identifier} has external repository url #{external_url}"); - if !external_url.match(/^https?:/) - # wot about git, svn/svn+ssh, etc? should we just check for a scheme at all? - log("\tthis is not an http(s) url: ignoring"); - end - end - -end - diff -r f7c525dc7585 -r 0b6c82dead28 extra/soundsoftware/update-external-repo.sh --- a/extra/soundsoftware/update-external-repo.sh Mon Mar 28 18:17:06 2011 +0100 +++ b/extra/soundsoftware/update-external-repo.sh Mon Jul 25 14:23:37 2011 +0100 @@ -1,7 +1,7 @@ #!/bin/sh mirrordir="/var/mirror" -logfile="/var/www/test-cannam/log/update-external-repo.log" +hg="/usr/local/bin/hg" project="$1" local_repo="$2" @@ -60,15 +60,40 @@ success="" +# If we have a record of the last successfully updated remote repo +# URL, check it against our current remote URL: if it has changed, we +# will need to start again with a new clone rather than pulling +# updates into the existing local mirror + +successfile="$project_mirror/last_successful_url" +if [ -f "$successfile" ]; then + last=$(cat "$successfile") + if [ x"$last" = x"$remote_repo" ]; then + echo "$$: Remote URL is unchanged from last successful update" + else + echo "$$: Remote URL has changed since last successful update:" + echo "$$: Last URL was $last, current is $remote_repo" + suffix="$$.$(date +%s)" + echo "$$: Moving existing repos to $suffix suffix and starting afresh" + mv "$project_repo_mirror" "$project_repo_mirror"."$suffix" + mv "$local_repo" "$local_repo"."$suffix" + mv "$successfile" "$successfile"."$suffix" + touch "$project_mirror/url_changed" + fi +fi + if [ -d "$project_repo_mirror" ]; then # Repo mirror exists: update it echo "$$: Mirror for project $project exists at $project_repo_mirror, updating" 1>&2 if [ -d "$project_repo_mirror/.hg" ]; then - hg --config extensions.convert= convert --datesort "$remote_repo" "$project_repo_mirror" && success=true + "$hg" --config extensions.convert= convert --datesort "$remote_repo" "$project_repo_mirror" && success=true + if [ -z "$success" ]; then + ( cd "$project_repo_mirror" && "$hg" pull "$remote_repo" ) && success=true + fi elif [ -d "$project_repo_mirror/.git" ]; then - ( cd "$project_repo_mirror" && git fetch "$remote_repo" ) && success=true + ( cd "$project_repo_mirror" && git pull "$remote_repo" master ) && success=true else echo "$$: ERROR: Repo mirror dir $project_repo_mirror exists but is not an Hg or git repo" 1>&2 fi @@ -81,12 +106,12 @@ case "$remote_repo" in *git*) git clone "$remote_repo" "$project_repo_mirror" || - hg --config extensions.convert= convert --datesort "$remote_repo" "$project_repo_mirror" + "$hg" --config extensions.convert= convert --datesort "$remote_repo" "$project_repo_mirror" ;; *) - hg --config extensions.convert= convert --datesort "$remote_repo" "$project_repo_mirror" || + "$hg" --config extensions.convert= convert --datesort "$remote_repo" "$project_repo_mirror" || git clone "$remote_repo" "$project_repo_mirror" || - hg clone "$remote_repo" "$project_repo_mirror" + "$hg" clone "$remote_repo" "$project_repo_mirror" ;; esac && success=true @@ -96,12 +121,12 @@ if [ -n "$success" ]; then echo "$$: Update successful, pulling into local repo at $local_repo" + if [ ! -d "$local_repo" ]; then + "$hg" init "$local_repo" + fi if [ -d "$project_repo_mirror/.git" ]; then - if [ ! -d "$local_repo" ]; then - hg init "$local_repo" - fi - ( cd "$local_repo" && hg --config extensions.hgext.git= pull "$project_repo_mirror" ) + ( cd "$local_repo" && "$hg" --config extensions.hggit= pull "$project_repo_mirror" ) && echo "$remote_repo" > "$successfile" else - ( cd "$local_repo" && hg pull "$project_repo_mirror" ) + ( cd "$local_repo" && "$hg" pull "$project_repo_mirror" ) && echo "$remote_repo" > "$successfile" fi fi diff -r f7c525dc7585 -r 0b6c82dead28 extra/svn/.svn/all-wcprops --- a/extra/svn/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/extra/svn/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,29 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 34 -/svn/!svn/ver/4309/trunk/extra/svn +V 48 +/svn/!svn/ver/5878/branches/1.2-stable/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/4309/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 diff -r f7c525dc7585 -r 0b6c82dead28 extra/svn/.svn/entries --- a/extra/svn/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/extra/svn/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/extra/svn +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/extra/svn http://redmine.rubyforge.org/svn -2010-10-29T22:55:50.222644Z -4309 -jbbarth +2011-05-17T13:32:08.404109Z +5825 +tmaruyama @@ -32,11 +32,11 @@ -2010-11-19T13:04:50.864947Z -a0d169b0fc20459335e531e4f3921ede -2010-10-24T21:00:05.611798Z -4288 -jplang +2011-07-14T09:24:22.000000Z +b9371e264b5907bf884bf17deba8c835 +2011-05-17T13:32:08.404109Z +5825 +tmaruyama has-props @@ -58,7 +58,7 @@ -10545 +10512 svnserve.wrapper file @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.967747Z +2011-07-14T09:24:10.000000Z f41d78e45e03554626edf5e4e6663d80 2007-04-02T19:01:31.084001Z 402 @@ -100,11 +100,11 @@ -2010-11-19T13:04:50.864947Z -5ed4546a59c9729cbd9b407ad0996b9b -2010-10-29T22:55:50.222644Z -4309 -jbbarth +2011-07-14T09:24:10.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-09-23T14:37:44.963747Z +2011-07-14T09:24:10.000000Z 96fdfe0a7a4913dbbfc1b871d7abab02 2007-04-01T19:43:59.029417Z 396 diff -r f7c525dc7585 -r 0b6c82dead28 extra/svn/.svn/text-base/Redmine.pm.svn-base --- a/extra/svn/.svn/text-base/Redmine.pm.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/extra/svn/.svn/text-base/Redmine.pm.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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; } diff -r f7c525dc7585 -r 0b6c82dead28 extra/svn/.svn/text-base/reposman.rb.svn-base --- a/extra/svn/.svn/text-base/reposman.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/extra/svn/.svn/text-base/reposman.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -7,7 +7,7 @@ # == Usage # # reposman [OPTIONS...] -s [DIR] -r [HOST] -# +# # Examples: # reposman --svn-dir=/var/svn --redmine-host=redmine.example.net --scm subversion # reposman -s /var/git -r redmine.example.net -u http://svn.example.net --scm git @@ -57,7 +57,7 @@ # -q, --quiet no log # # == References -# +# # You can find more information on the redmine's wiki : http://www.redmine.org/wiki/redmine/HowTos @@ -205,7 +205,7 @@ log("retrieved #{projects.size} projects", :level => 1) def set_owner_and_rights(project, repos_path, &block) - if RUBY_PLATFORM =~ /mswin/ + if mswin? yield if block_given? else uid, gid = Etc.getpwnam($svn_owner).uid, ($use_groupid ? Etc.getgrnam(project.identifier).gid : Etc.getgrnam($svn_group).gid) @@ -225,9 +225,9 @@ def owner_name(file) mswin? ? $svn_owner : - Etc.getpwuid( File.stat(file).uid ).name + Etc.getpwuid( File.stat(file).uid ).name end - + def mswin? (RUBY_PLATFORM =~ /(:?mswin|mingw)/) || (RUBY_PLATFORM == 'java' && (ENV['OS'] || ENV['os']) =~ /windows/i) end @@ -246,7 +246,6 @@ repos_path = File.join($repos_base, project.identifier).gsub(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR) if File.directory?(repos_path) - # we must verify that repository has the good owner and the good # rights before leaving other_read = other_read_right?(repos_path) @@ -304,9 +303,6 @@ log("\trepository #{repos_path} not registered in Redmine: #{e.message}"); end end - log("\trepository #{repos_path} created"); end - end - \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 extra/svn/Redmine.pm --- a/extra/svn/Redmine.pm Mon Mar 28 18:17:06 2011 +0100 +++ b/extra/svn/Redmine.pm Mon Jul 25 14:23:37 2011 +0100 @@ -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; } diff -r f7c525dc7585 -r 0b6c82dead28 extra/svn/reposman.rb --- a/extra/svn/reposman.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/extra/svn/reposman.rb Mon Jul 25 14:23:37 2011 +0100 @@ -7,7 +7,7 @@ # == Usage # # reposman [OPTIONS...] -s [DIR] -r [HOST] -# +# # Examples: # reposman --svn-dir=/var/svn --redmine-host=redmine.example.net --scm subversion # reposman -s /var/git -r redmine.example.net -u http://svn.example.net --scm git @@ -59,7 +59,7 @@ # -q, --quiet no log # # == References -# +# # You can find more information on the redmine's wiki : http://www.redmine.org/wiki/redmine/HowTos @@ -215,7 +215,7 @@ log("retrieved #{projects.size} projects", :level => 1) def set_owner_and_rights(project, repos_path, &block) - if RUBY_PLATFORM =~ /mswin/ + if mswin? yield if block_given? else uid, gid = Etc.getpwnam($svn_owner).uid, ($use_groupid ? Etc.getgrnam(project.identifier).gid : Etc.getgrnam($svn_group).gid) @@ -235,9 +235,9 @@ def owner_name(file) mswin? ? $svn_owner : - Etc.getpwuid( File.stat(file).uid ).name + Etc.getpwuid( File.stat(file).uid ).name end - + def mswin? (RUBY_PLATFORM =~ /(:?mswin|mingw)/) || (RUBY_PLATFORM == 'java' && (ENV['OS'] || ENV['os']) =~ /windows/i) end @@ -256,7 +256,6 @@ repos_path = File.join($repos_base, project.identifier).gsub(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR) if File.directory?(repos_path) - # we must verify that repository has the good owner and the good # rights before leaving other_read = other_read_right?(repos_path) @@ -314,9 +313,7 @@ log("\trepository #{repos_path} not registered in Redmine: #{e.message}"); end end - log("\trepository #{repos_path} created"); end +end -end - diff -r f7c525dc7585 -r 0b6c82dead28 files/.svn/all-wcprops --- a/files/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 28 -/svn/!svn/ver/67/trunk/files -END -delete.me -K 25 -svn:wc:ra_dav:version-url -V 38 -/svn/!svn/ver/67/trunk/files/delete.me -END diff -r f7c525dc7585 -r 0b6c82dead28 files/.svn/entries --- a/files/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/files/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/files +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/files http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.967747Z +2011-07-14T09:24:10.000000Z ae0415159f2c4dba3fc1a559d4c0f9f5 2006-06-28T18:11:03.549769Z 4 diff -r f7c525dc7585 -r 0b6c82dead28 files/delete.me --- a/files/delete.me Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -default directory for uploaded files \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 lib/.svn/all-wcprops --- a/lib/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,41 +1,17 @@ -K 25 -svn:wc:ra_dav:version-url -V 28 -/svn/!svn/ver/4406/trunk/lib -END -faster_csv.rb K 25 svn:wc:ra_dav:version-url V 42 -/svn/!svn/ver/3007/trunk/lib/faster_csv.rb +/svn/!svn/ver/6261/branches/1.2-stable/lib END redmine.rb K 25 svn:wc:ra_dav:version-url -V 39 -/svn/!svn/ver/4388/trunk/lib/redmine.rb -END -tabular_form_builder.rb -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/3804/trunk/lib/tabular_form_builder.rb +V 53 +/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine.rb END redcloth3.rb K 25 svn:wc:ra_dav:version-url -V 41 -/svn/!svn/ver/4374/trunk/lib/redcloth3.rb +V 55 +/svn/!svn/ver/5878/branches/1.2-stable/lib/redcloth3.rb END -ar_condition.rb -K 25 -svn:wc:ra_dav:version-url -V 44 -/svn/!svn/ver/1227/trunk/lib/ar_condition.rb -END -diff.rb -K 25 -svn:wc:ra_dav:version-url -V 36 -/svn/!svn/ver/2840/trunk/lib/diff.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 lib/.svn/entries --- a/lib/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib http://redmine.rubyforge.org/svn -2010-11-14T16:24:21.989522Z -4406 +2011-07-11T11:45:14.631570Z +6261 jplang @@ -38,7 +38,7 @@ -2010-09-23T14:37:44.983792Z +2011-07-14T09:24:10.000000Z 1657561b457dadfa5d004a393bdd1a2e 2009-11-04T13:22:26.440808Z 3007 @@ -78,10 +78,10 @@ -2010-11-19T13:04:51.440969Z -bdb16884474de1a2d37d4cc215f7f027 -2010-11-07T22:38:10.728638Z -4388 +2011-07-14T09:24:22.000000Z +0db4c288bb61c89e63cd92b6218a718a +2011-04-15T13:30:25.989544Z +5468 jplang has-props @@ -104,7 +104,7 @@ -12745 +13364 tabular_form_builder.rb file @@ -112,7 +112,7 @@ -2010-09-23T14:37:45.055767Z +2011-07-14T09:24:10.000000Z 9d8fb5ede85fd780f018b74b36a83034 2010-06-20T19:03:09.888571Z 3804 @@ -149,10 +149,10 @@ -2010-11-19T13:04:51.440969Z -d1a99a7a8d34e675199eec76eea82129 -2010-11-06T13:29:23.489999Z -4374 +2011-07-14T09:24:22.000000Z +ed903f4f804480cf72cd46a16cb64b92 +2011-03-14T20:35:36.619571Z +5133 jplang has-props @@ -175,7 +175,7 @@ -38666 +38769 ar_condition.rb file @@ -183,7 +183,7 @@ -2010-09-23T14:37:44.983792Z +2011-07-14T09:24:10.000000Z 55e7cfa4fcb3619e9939d29336ecdf02 2008-03-11T19:33:38.611682Z 1227 @@ -217,7 +217,7 @@ -2010-09-23T14:37:44.983792Z +2011-07-14T09:24:10.000000Z 1ecc6c4c4ae6aa3e75600673b4b78add 2009-08-15T22:41:40.505056Z 2840 diff -r f7c525dc7585 -r 0b6c82dead28 lib/.svn/text-base/redcloth3.rb.svn-base --- a/lib/.svn/text-base/redcloth3.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/.svn/text-base/redcloth3.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -296,11 +296,11 @@ rip_offtags text no_textile text escape_html_tags text + # need to do this before #hard_break and #blocks + block_textile_quotes text unless @lite_mode hard_break text unless @lite_mode refs text - # need to do this before text is split by #blocks - block_textile_quotes text blocks text end inline text @@ -707,11 +707,13 @@ atts = pba( atts ) # pass to prefix handler + replacement = nil if respond_to? "textile_#{ tag }", true - text.gsub!( $&, method( "textile_#{ tag }" ).call( tag, atts, cite, content ) ) + replacement = method( "textile_#{ tag }" ).call( tag, atts, cite, content ) elsif respond_to? "textile_#{ tagpre }_", true - text.gsub!( $&, method( "textile_#{ tagpre }_" ).call( tagpre, num, atts, cite, content ) ) + replacement = method( "textile_#{ tagpre }_" ).call( tagpre, num, atts, cite, content ) end + text.gsub!( $& ) { replacement } if replacement end end @@ -1078,7 +1080,7 @@ line = "" first.match(/<#{ OFFTAGS }([^>]*)>/) tag = $1 - $2.to_s.match(/(class\=\S+)/i) + $2.to_s.match(/(class\=("[^"]+"|'[^']+'))/i) tag << " #{$1}" if $1 @pre_list << "<#{ tag }>#{ aftertag }" end diff -r f7c525dc7585 -r 0b6c82dead28 lib/.svn/text-base/redmine.rb.svn-base --- a/lib/.svn/text-base/redmine.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/.svn/text-base/redmine.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -41,6 +41,8 @@ fields.register Redmine::CustomFieldFormat.new('list', :label => :label_list, :order => 5) fields.register Redmine::CustomFieldFormat.new('date', :label => :label_date, :order => 6) fields.register Redmine::CustomFieldFormat.new('bool', :label => :label_boolean, :order => 7) + fields.register Redmine::CustomFieldFormat.new('user', :label => :label_user, :only => %w(Issue TimeEntry Version Project), :edit_as => 'list', :order => 8) + fields.register Redmine::CustomFieldFormat.new('version', :label => :label_version, :only => %w(Issue TimeEntry Version Project), :edit_as => 'list', :order => 9) end # Permissions @@ -62,13 +64,15 @@ :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]} map.permission :edit_issues, {:issues => [:edit, :update, :bulk_edit, :bulk_update, :update_form], :journals => [:new]} map.permission :manage_issue_relations, {:issue_relations => [:new, :destroy]} map.permission :manage_subtasks, {} + map.permission :set_issues_private, {} + map.permission :set_own_issues_private, {}, :require => :loggedin map.permission :add_issue_notes, {:issues => [:edit, :update], :journals => [:new]} map.permission :edit_issue_notes, {:journals => :edit}, :require => :loggedin map.permission :edit_own_issue_notes, {:journals => :edit}, :require => :loggedin @@ -84,10 +88,10 @@ end map.project_module :time_tracking do |map| - map.permission :log_time, {:timelog => [:new, :create, :edit, :update]}, :require => :loggedin - map.permission :view_time_entries, :timelog => [:index], :time_entry_reports => [:report] - map.permission :edit_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy]}, :require => :member - map.permission :edit_own_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy]}, :require => :loggedin + map.permission :log_time, {:timelog => [:new, :create, :edit, :update, :bulk_edit, :bulk_update]}, :require => :loggedin + map.permission :view_time_entries, :timelog => [:index, :show], :time_entry_reports => [:report] + map.permission :edit_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy, :bulk_edit, :bulk_update]}, :require => :member + map.permission :edit_own_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy,:bulk_edit, :bulk_update]}, :require => :loggedin map.permission :manage_project_activities, {:project_enumerations => [:update, :destroy]}, :require => :member end @@ -229,3 +233,5 @@ Redmine::WikiFormatting.map do |format| format.register :textile, Redmine::WikiFormatting::Textile::Formatter, Redmine::WikiFormatting::Textile::Helper end + +ActionView::Template.register_template_handler :rsb, Redmine::Views::ApiTemplateHandler diff -r f7c525dc7585 -r 0b6c82dead28 lib/SVG/.svn/all-wcprops --- a/lib/SVG/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 32 -/svn/!svn/ver/3017/trunk/lib/SVG -END -GPL.txt -K 25 -svn:wc:ra_dav:version-url -V 39 -/svn/!svn/ver/380/trunk/lib/SVG/GPL.txt -END -LICENSE.txt -K 25 -svn:wc:ra_dav:version-url -V 43 -/svn/!svn/ver/380/trunk/lib/SVG/LICENSE.txt -END diff -r f7c525dc7585 -r 0b6c82dead28 lib/SVG/.svn/entries --- a/lib/SVG/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/SVG/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib/SVG +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/SVG http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.975748Z +2011-07-14T09:24:10.000000Z 393a5ca445f6965873eca0259a17f833 2007-03-25T17:11:46.804742Z 380 @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.979747Z +2011-07-14T09:24:10.000000Z 072cf60873854a186c6eba9b74dbe389 2007-03-25T17:11:46.804742Z 380 diff -r f7c525dc7585 -r 0b6c82dead28 lib/SVG/Graph/.svn/all-wcprops --- a/lib/SVG/Graph/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 38 -/svn/!svn/ver/3017/trunk/lib/SVG/Graph -END -Pie.rb -K 25 -svn:wc:ra_dav:version-url -V 45 -/svn/!svn/ver/2642/trunk/lib/SVG/Graph/Pie.rb -END -BarHorizontal.rb -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/2642/trunk/lib/SVG/Graph/BarHorizontal.rb -END -Plot.rb -K 25 -svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/2642/trunk/lib/SVG/Graph/Plot.rb -END -BarBase.rb -K 25 -svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/2642/trunk/lib/SVG/Graph/BarBase.rb -END -Graph.rb -K 25 -svn:wc:ra_dav:version-url -V 47 -/svn/!svn/ver/3017/trunk/lib/SVG/Graph/Graph.rb -END -Bar.rb -K 25 -svn:wc:ra_dav:version-url -V 45 -/svn/!svn/ver/2642/trunk/lib/SVG/Graph/Bar.rb -END -Line.rb -K 25 -svn:wc:ra_dav:version-url -V 45 -/svn/!svn/ver/380/trunk/lib/SVG/Graph/Line.rb -END -TimeSeries.rb -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/2642/trunk/lib/SVG/Graph/TimeSeries.rb -END -Schedule.rb -K 25 -svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/380/trunk/lib/SVG/Graph/Schedule.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 lib/SVG/Graph/.svn/entries --- a/lib/SVG/Graph/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/SVG/Graph/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib/SVG/Graph +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/SVG/Graph http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.979747Z +2011-07-14T09:24:10.000000Z 0a49ed37717b08c6bccdc843a03a333d 2009-03-30T19:58:17.407192Z 2642 @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.979747Z +2011-07-14T09:24:10.000000Z 55ff835de5a0fb0fd2d6a236b1c5c436 2009-03-30T19:58:17.407192Z 2642 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.979747Z +2011-07-14T09:24:10.000000Z a39e9963eaae7bb913b6d8d2dfe0506f 2009-03-30T19:58:17.407192Z 2642 @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.979747Z +2011-07-14T09:24:10.000000Z 184772c0f1732eadf12b0e8bc9e172f7 2009-03-30T19:58:17.407192Z 2642 @@ -168,7 +168,7 @@ -2010-09-23T14:37:44.979747Z +2011-07-14T09:24:10.000000Z fad5865539cbd7ba3433fd6d47b9d3f2 2009-11-07T10:40:54.677820Z 3017 @@ -202,7 +202,7 @@ -2010-09-23T14:37:44.979747Z +2011-07-14T09:24:10.000000Z cc9051d7617dfe6dd6cc47fe83fd6ec4 2009-03-30T19:58:17.407192Z 2642 @@ -236,7 +236,7 @@ -2010-09-23T14:37:44.979747Z +2011-07-14T09:24:10.000000Z f092a4b0f16876381bc9283058eeb48c 2007-03-25T17:11:46.804742Z 380 @@ -270,7 +270,7 @@ -2010-09-23T14:37:44.979747Z +2011-07-14T09:24:10.000000Z 73dbcb4a1cba46b4e46a81881d24ff1a 2009-03-30T19:58:17.407192Z 2642 @@ -304,7 +304,7 @@ -2010-09-23T14:37:44.979747Z +2011-07-14T09:24:10.000000Z d8e95d0e507a02a74a5ac3435560d3bd 2007-03-25T17:11:46.804742Z 380 diff -r f7c525dc7585 -r 0b6c82dead28 lib/generators/.svn/all-wcprops --- a/lib/generators/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 39 -/svn/!svn/ver/3771/trunk/lib/generators -END diff -r f7c525dc7585 -r 0b6c82dead28 lib/generators/.svn/entries --- a/lib/generators/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/generators/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib/generators +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/generators http://redmine.rubyforge.org/svn -2010-06-17T19:02:13.409991Z -3771 -edavis10 +2011-06-21T03:16:49.595160Z +6105 +jbbarth diff -r f7c525dc7585 -r 0b6c82dead28 lib/generators/redmine_plugin/.svn/all-wcprops --- a/lib/generators/redmine_plugin/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/3771/trunk/lib/generators/redmine_plugin -END -USAGE -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/2785/trunk/lib/generators/redmine_plugin/USAGE -END -redmine_plugin_generator.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/2785/trunk/lib/generators/redmine_plugin/redmine_plugin_generator.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 lib/generators/redmine_plugin/.svn/entries --- a/lib/generators/redmine_plugin/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/generators/redmine_plugin/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/generators/redmine_plugin http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.987751Z +2011-07-14T09:24:10.000000Z 334056a407de9091bb8774ba986c53f9 2009-06-10T03:39:02.884087Z 2785 @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.987751Z +2011-07-14T09:24:10.000000Z be5d60ef31ac822cd5650ab976dcc543 2009-06-10T03:39:02.884087Z 2785 diff -r f7c525dc7585 -r 0b6c82dead28 lib/generators/redmine_plugin/templates/.svn/all-wcprops --- a/lib/generators/redmine_plugin/templates/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/3771/trunk/lib/generators/redmine_plugin/templates -END -en.yml -K 25 -svn:wc:ra_dav:version-url -V 71 -/svn/!svn/ver/1786/trunk/lib/generators/redmine_plugin/templates/en.yml -END -README.rdoc -K 25 -svn:wc:ra_dav:version-url -V 76 -/svn/!svn/ver/1949/trunk/lib/generators/redmine_plugin/templates/README.rdoc -END -test_helper.rb.erb -K 25 -svn:wc:ra_dav:version-url -V 83 -/svn/!svn/ver/1949/trunk/lib/generators/redmine_plugin/templates/test_helper.rb.erb -END -en_rails_i18n.yml -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/2785/trunk/lib/generators/redmine_plugin/templates/en_rails_i18n.yml -END -init.rb.erb -K 25 -svn:wc:ra_dav:version-url -V 76 -/svn/!svn/ver/3771/trunk/lib/generators/redmine_plugin/templates/init.rb.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 lib/generators/redmine_plugin/templates/.svn/entries --- a/lib/generators/redmine_plugin/templates/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/generators/redmine_plugin/templates/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin/templates +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/generators/redmine_plugin/templates http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.987751Z +2011-07-14T09:24:10.000000Z 2d39c559d341be440cb60911ef125dd9 2008-09-05T10:31:06.632668Z 1786 @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.987751Z +2011-07-14T09:24:10.000000Z d97a21936cfb77543031f7d9a5d5131a 2008-10-25T04:37:31.779636Z 1949 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.991758Z +2011-07-14T09:24:10.000000Z d14592489e5b7d34b33d2487f4770b7d 2008-10-25T04:37:31.779636Z 1949 @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.991758Z +2011-07-14T09:24:10.000000Z ab791ada26df5c9c1a13b771e988a36f 2009-06-10T03:39:02.884087Z 2785 @@ -168,7 +168,7 @@ -2010-09-23T14:37:44.991758Z +2011-07-14T09:24:10.000000Z 39cb16a49db6c72cdd7a63447d5b188f 2010-06-17T19:02:13.409991Z 3771 diff -r f7c525dc7585 -r 0b6c82dead28 lib/generators/redmine_plugin_controller/.svn/all-wcprops --- a/lib/generators/redmine_plugin_controller/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/3770/trunk/lib/generators/redmine_plugin_controller -END -USAGE -K 25 -svn:wc:ra_dav:version-url -V 71 -/svn/!svn/ver/1786/trunk/lib/generators/redmine_plugin_controller/USAGE -END -redmine_plugin_controller_generator.rb -K 25 -svn:wc:ra_dav:version-url -V 104 -/svn/!svn/ver/3514/trunk/lib/generators/redmine_plugin_controller/redmine_plugin_controller_generator.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 lib/generators/redmine_plugin_controller/.svn/entries --- a/lib/generators/redmine_plugin_controller/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/generators/redmine_plugin_controller/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin_controller +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/generators/redmine_plugin_controller http://redmine.rubyforge.org/svn -2010-06-17T19:02:07.893033Z -3770 -edavis10 +2011-06-21T03:16:49.595160Z +6105 +jbbarth @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.991758Z +2011-07-14T09:24:10.000000Z 60c1792566a450d246dd66ff274ae06c 2008-09-05T10:31:06.632668Z 1786 @@ -66,11 +66,11 @@ -2010-09-23T14:37:44.991758Z +2011-07-14T09:28:12.000000Z 23b15404071adb39cb140a6113057f15 -2010-02-28T12:15:47.320153Z -3514 -jplang +2011-06-21T03:16:49.595160Z +6105 +jbbarth has-props diff -r f7c525dc7585 -r 0b6c82dead28 lib/generators/redmine_plugin_controller/templates/.svn/all-wcprops --- a/lib/generators/redmine_plugin_controller/templates/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 75 -/svn/!svn/ver/3770/trunk/lib/generators/redmine_plugin_controller/templates -END -view.html.erb -K 25 -svn:wc:ra_dav:version-url -V 89 -/svn/!svn/ver/1786/trunk/lib/generators/redmine_plugin_controller/templates/view.html.erb -END -helper.rb.erb -K 25 -svn:wc:ra_dav:version-url -V 89 -/svn/!svn/ver/1951/trunk/lib/generators/redmine_plugin_controller/templates/helper.rb.erb -END -functional_test.rb.erb -K 25 -svn:wc:ra_dav:version-url -V 98 -/svn/!svn/ver/1951/trunk/lib/generators/redmine_plugin_controller/templates/functional_test.rb.erb -END -controller.rb.erb -K 25 -svn:wc:ra_dav:version-url -V 93 -/svn/!svn/ver/3770/trunk/lib/generators/redmine_plugin_controller/templates/controller.rb.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 lib/generators/redmine_plugin_controller/templates/.svn/entries --- a/lib/generators/redmine_plugin_controller/templates/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/generators/redmine_plugin_controller/templates/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin_controller/templates +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/generators/redmine_plugin_controller/templates http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.995797Z +2011-07-14T09:24:10.000000Z 0ae9d2e8e624fef815f60164d47b6464 2008-09-05T10:31:06.632668Z 1786 @@ -66,7 +66,7 @@ -2010-09-23T14:37:44.995797Z +2011-07-14T09:24:10.000000Z e8491aac2379dbba3d3ddadc30f6db07 2008-10-25T09:35:51.426668Z 1951 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.995797Z +2011-07-14T09:24:10.000000Z 2fdd792e6b6825b4f1802ba4767e0435 2008-10-25T09:35:51.426668Z 1951 @@ -134,7 +134,7 @@ -2010-09-23T14:37:44.995797Z +2011-07-14T09:24:10.000000Z 22e765f47aacc324789509219797d087 2010-06-17T19:02:07.893033Z 3770 diff -r f7c525dc7585 -r 0b6c82dead28 lib/generators/redmine_plugin_model/.svn/all-wcprops --- a/lib/generators/redmine_plugin_model/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/3770/trunk/lib/generators/redmine_plugin_model -END -USAGE -K 25 -svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/1786/trunk/lib/generators/redmine_plugin_model/USAGE -END -redmine_plugin_model_generator.rb -K 25 -svn:wc:ra_dav:version-url -V 94 -/svn/!svn/ver/3514/trunk/lib/generators/redmine_plugin_model/redmine_plugin_model_generator.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 lib/generators/redmine_plugin_model/.svn/entries --- a/lib/generators/redmine_plugin_model/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/generators/redmine_plugin_model/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin_model +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/generators/redmine_plugin_model http://redmine.rubyforge.org/svn -2010-06-17T19:02:07.893033Z -3770 -edavis10 +2011-06-21T03:16:49.595160Z +6105 +jbbarth @@ -32,7 +32,7 @@ -2010-09-23T14:37:44.999760Z +2011-07-14T09:24:10.000000Z ca5ffbd9dfb099b2f38ca21c030ffea0 2008-09-05T10:31:06.632668Z 1786 @@ -66,11 +66,11 @@ -2010-09-23T14:37:44.999760Z +2011-07-14T09:28:12.000000Z ba0c0092c69cca4c21b1b26027f7472b -2010-02-28T12:15:47.320153Z -3514 -jplang +2011-06-21T03:16:49.595160Z +6105 +jbbarth has-props diff -r f7c525dc7585 -r 0b6c82dead28 lib/generators/redmine_plugin_model/templates/.svn/all-wcprops --- a/lib/generators/redmine_plugin_model/templates/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 70 -/svn/!svn/ver/3770/trunk/lib/generators/redmine_plugin_model/templates -END -migration.rb.erb -K 25 -svn:wc:ra_dav:version-url -V 87 -/svn/!svn/ver/1951/trunk/lib/generators/redmine_plugin_model/templates/migration.rb.erb -END -unit_test.rb.erb -K 25 -svn:wc:ra_dav:version-url -V 87 -/svn/!svn/ver/2926/trunk/lib/generators/redmine_plugin_model/templates/unit_test.rb.erb -END -fixtures.yml -K 25 -svn:wc:ra_dav:version-url -V 83 -/svn/!svn/ver/1786/trunk/lib/generators/redmine_plugin_model/templates/fixtures.yml -END -model.rb.erb -K 25 -svn:wc:ra_dav:version-url -V 83 -/svn/!svn/ver/3770/trunk/lib/generators/redmine_plugin_model/templates/model.rb.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 lib/generators/redmine_plugin_model/templates/.svn/entries --- a/lib/generators/redmine_plugin_model/templates/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/generators/redmine_plugin_model/templates/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin_model/templates +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/generators/redmine_plugin_model/templates http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.003823Z +2011-07-14T09:24:10.000000Z ce0817700ec27f10f7d07f998bff6991 2008-10-25T09:35:51.426668Z 1951 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.003823Z +2011-07-14T09:24:10.000000Z a4081d31f6d22e7655b4f6e9fb894a03 2009-10-17T21:08:33.644420Z 2926 @@ -100,7 +100,7 @@ -2010-09-23T14:37:44.999760Z +2011-07-14T09:24:10.000000Z 115e77dae670747c95b5ff22c01d4174 2008-09-05T10:31:06.632668Z 1786 @@ -134,7 +134,7 @@ -2010-09-23T14:37:45.003823Z +2011-07-14T09:24:10.000000Z 3a783571ccc96a2f639329700dda677b 2010-06-17T19:02:07.893033Z 3770 diff -r f7c525dc7585 -r 0b6c82dead28 lib/plugins/.svn/all-wcprops --- a/lib/plugins/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 35 -/svn/!svn/ver/774/trunk/lib/plugins -END diff -r f7c525dc7585 -r 0b6c82dead28 lib/plugins/.svn/entries --- a/lib/plugins/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/plugins/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib/plugins +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/plugins http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 lib/redcloth3.rb --- a/lib/redcloth3.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redcloth3.rb Mon Jul 25 14:23:37 2011 +0100 @@ -296,11 +296,11 @@ rip_offtags text no_textile text escape_html_tags text + # need to do this before #hard_break and #blocks + block_textile_quotes text unless @lite_mode hard_break text unless @lite_mode refs text - # need to do this before text is split by #blocks - block_textile_quotes text blocks text end inline text @@ -707,11 +707,13 @@ atts = pba( atts ) # pass to prefix handler + replacement = nil if respond_to? "textile_#{ tag }", true - text.gsub!( $&, method( "textile_#{ tag }" ).call( tag, atts, cite, content ) ) + replacement = method( "textile_#{ tag }" ).call( tag, atts, cite, content ) elsif respond_to? "textile_#{ tagpre }_", true - text.gsub!( $&, method( "textile_#{ tagpre }_" ).call( tagpre, num, atts, cite, content ) ) + replacement = method( "textile_#{ tagpre }_" ).call( tagpre, num, atts, cite, content ) end + text.gsub!( $& ) { replacement } if replacement end end @@ -1078,7 +1080,7 @@ line = "" first.match(/<#{ OFFTAGS }([^>]*)>/) tag = $1 - $2.to_s.match(/(class\=\S+)/i) + $2.to_s.match(/(class\=("[^"]+"|'[^']+'))/i) tag << " #{$1}" if $1 @pre_list << "<#{ tag }>#{ aftertag }" end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine.rb --- a/lib/redmine.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine.rb Mon Jul 25 14:23:37 2011 +0100 @@ -41,14 +41,16 @@ fields.register Redmine::CustomFieldFormat.new('list', :label => :label_list, :order => 5) fields.register Redmine::CustomFieldFormat.new('date', :label => :label_date, :order => 6) fields.register Redmine::CustomFieldFormat.new('bool', :label => :label_boolean, :order => 7) + fields.register Redmine::CustomFieldFormat.new('user', :label => :label_user, :only => %w(Issue TimeEntry Version Project), :edit_as => 'list', :order => 8) + fields.register Redmine::CustomFieldFormat.new('version', :label => :label_version, :only => %w(Issue TimeEntry Version Project), :edit_as => 'list', :order => 9) end # Permissions Redmine::AccessControl.map do |map| - map.permission :view_project, {:projects => [:show], :activities => [:index]}, :public => true + map.permission :view_project, {:projects => [:show], :activities => [:index], :members => [:index]}, :public => true map.permission :search_project, {:search => :index}, :public => true map.permission :add_project, {:projects => [:new, :create]}, :require => :loggedin - map.permission :edit_project, {:projects => [:settings, :edit, :update]}, :require => :member + map.permission :edit_project, {:projects => [:settings, :edit, :update, :overview]}, :require => :member map.permission :select_project_modules, {:projects => :modules}, :require => :member map.permission :manage_members, {:projects => :settings, :members => [:new, :edit, :destroy, :autocomplete_for_member]}, :require => :member map.permission :manage_versions, {:projects => :settings, :versions => [:new, :create, :edit, :update, :close_completed, :destroy]}, :require => :member @@ -62,13 +64,15 @@ :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]} map.permission :edit_issues, {:issues => [:edit, :update, :bulk_edit, :bulk_update, :update_form], :journals => [:new]} map.permission :manage_issue_relations, {:issue_relations => [:new, :destroy]} map.permission :manage_subtasks, {} + map.permission :set_issues_private, {} + map.permission :set_own_issues_private, {}, :require => :loggedin map.permission :add_issue_notes, {:issues => [:edit, :update], :journals => [:new]} map.permission :edit_issue_notes, {:journals => :edit}, :require => :loggedin map.permission :edit_own_issue_notes, {:journals => :edit}, :require => :loggedin @@ -84,10 +88,10 @@ end map.project_module :time_tracking do |map| - map.permission :log_time, {:timelog => [:new, :create, :edit, :update]}, :require => :loggedin - map.permission :view_time_entries, :timelog => [:index], :time_entry_reports => [:report] - map.permission :edit_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy]}, :require => :member - map.permission :edit_own_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy]}, :require => :loggedin + map.permission :log_time, {:timelog => [:new, :create, :edit, :update, :bulk_edit, :bulk_update]}, :require => :loggedin + map.permission :view_time_entries, :timelog => [:index, :show], :time_entry_reports => [:report] + map.permission :edit_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy, :bulk_edit, :bulk_update]}, :require => :member + map.permission :edit_own_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy,:bulk_edit, :bulk_update]}, :require => :loggedin map.permission :manage_project_activities, {:project_enumerations => [:update, :destroy]}, :require => :member end @@ -185,6 +189,8 @@ Redmine::MenuManager.map :project_menu do |menu| menu.push :overview, { :controller => 'projects', :action => 'show' } + menu.push :members, { :controller => 'members', :action => 'index' }, :param => :project_id + menu.push :news, { :controller => 'news', :action => 'index' }, :param => :project_id, :caption => :label_news_plural menu.push :activity, { :controller => 'activities', :action => 'index' } menu.push :roadmap, { :controller => 'versions', :action => 'index' }, :param => :project_id, :if => Proc.new { |p| p.shared_versions.any? } @@ -193,7 +199,6 @@ :html => { :accesskey => Redmine::AccessKeys.key_for(:new_issue) } menu.push :gantt, { :controller => 'gantts', :action => 'show' }, :param => :project_id, :caption => :label_gantt menu.push :calendar, { :controller => 'calendars', :action => 'show' }, :param => :project_id, :caption => :label_calendar - menu.push :news, { :controller => 'news', :action => 'index' }, :param => :project_id, :caption => :label_news_plural menu.push :documents, { :controller => 'documents', :action => 'index' }, :param => :project_id, :caption => :label_document_plural menu.push :wiki, { :controller => 'wiki', :action => 'show', :id => nil }, :param => :project_id, :if => Proc.new { |p| p.wiki && !p.wiki.new_record? } @@ -229,3 +234,5 @@ Redmine::WikiFormatting.map do |format| format.register :textile, Redmine::WikiFormatting::Textile::Formatter, Redmine::WikiFormatting::Textile::Helper end + +ActionView::Template.register_template_handler :rsb, Redmine::Views::ApiTemplateHandler diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/.svn/all-wcprops --- a/lib/redmine/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,143 +1,53 @@ K 25 svn:wc:ra_dav:version-url -V 36 -/svn/!svn/ver/4406/trunk/lib/redmine +V 50 +/svn/!svn/ver/6261/branches/1.2-stable/lib/redmine +END +plugin.rb +K 25 +svn:wc:ra_dav:version-url +V 60 +/svn/!svn/ver/6105/branches/1.2-stable/lib/redmine/plugin.rb END i18n.rb K 25 svn:wc:ra_dav:version-url -V 44 -/svn/!svn/ver/4183/trunk/lib/redmine/i18n.rb +V 58 +/svn/!svn/ver/6105/branches/1.2-stable/lib/redmine/i18n.rb END -pop3.rb +codeset_util.rb K 25 svn:wc:ra_dav:version-url -V 44 -/svn/!svn/ver/3330/trunk/lib/redmine/pop3.rb +V 66 +/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/codeset_util.rb END -platform.rb +version.rb K 25 svn:wc:ra_dav:version-url -V 48 -/svn/!svn/ver/1753/trunk/lib/redmine/platform.rb +V 61 +/svn/!svn/ver/6261/branches/1.2-stable/lib/redmine/version.rb END custom_field_format.rb K 25 svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/3675/trunk/lib/redmine/custom_field_format.rb -END -themes.rb -K 25 -svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/3710/trunk/lib/redmine/themes.rb -END -version.rb -K 25 -svn:wc:ra_dav:version-url -V 47 -/svn/!svn/ver/4349/trunk/lib/redmine/version.rb -END -imap.rb -K 25 -svn:wc:ra_dav:version-url -V 44 -/svn/!svn/ver/2220/trunk/lib/redmine/imap.rb +V 73 +/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/custom_field_format.rb END mime_type.rb K 25 svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/3258/trunk/lib/redmine/mime_type.rb -END -info.rb -K 25 -svn:wc:ra_dav:version-url -V 44 -/svn/!svn/ver/2776/trunk/lib/redmine/info.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 -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 -V 45 -/svn/!svn/ver/2234/trunk/lib/redmine/utils.rb -END -hook.rb -K 25 -svn:wc:ra_dav:version-url -V 44 -/svn/!svn/ver/4406/trunk/lib/redmine/hook.rb -END -access_control.rb -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/1907/trunk/lib/redmine/access_control.rb -END -search.rb -K 25 -svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/3444/trunk/lib/redmine/search.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 -about.rb -K 25 -svn:wc:ra_dav:version-url -V 45 -/svn/!svn/ver/2766/trunk/lib/redmine/about.rb -END -syntax_highlighting.rb -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/3619/trunk/lib/redmine/syntax_highlighting.rb +V 63 +/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/mime_type.rb END unified_diff.rb K 25 svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/3028/trunk/lib/redmine/unified_diff.rb +V 66 +/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/unified_diff.rb END notifiable.rb K 25 svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/4222/trunk/lib/redmine/notifiable.rb +V 64 +/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/notifiable.rb END diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/.svn/entries --- a/lib/redmine/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib/redmine +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine http://redmine.rubyforge.org/svn -2010-11-14T16:24:21.989522Z -4406 +2011-07-11T11:45:14.631570Z +6261 jplang @@ -35,10 +35,10 @@ -2010-09-23T14:37:45.031809Z -7905a0773e7d2f6b468fc5b9e107db4d -2010-01-17T13:53:13.544777Z -3330 +2011-07-14T09:24:10.000000Z +85ff863202dfbf2a6e9447a3bcf7cc06 +2011-01-22T12:09:07.652831Z +4737 jplang has-props @@ -61,7 +61,41 @@ -2173 +2461 + +codeset_util.rb +file + + + + +2011-06-06T13:20:53.000000Z +49dc0eec18109d69f897a5e3e1e7a44b +2011-04-16T06:43:49.720334Z +5474 +tmaruyama + + + + + + + + + + + + + + + + + + + + + +744 themes.rb file @@ -69,10 +103,10 @@ -2010-09-23T14:37:45.043748Z -209d3f63cbc76795042695c71f6230f1 -2010-04-30T12:44:19.138265Z -3710 +2011-07-14T09:24:10.000000Z +23fd3a13b8bcd6b3e2547e913d5fae18 +2010-12-22T21:41:08.746858Z +4559 jplang has-props @@ -95,7 +129,7 @@ -2311 +3420 imap.rb file @@ -103,7 +137,7 @@ -2010-09-23T14:37:45.031809Z +2011-07-14T09:24:10.000000Z caeedebd5c05aede1d232510d03ad136 2008-12-31T14:56:30.439880Z 2220 @@ -140,7 +174,7 @@ -2010-09-23T14:37:45.031809Z +2011-07-14T09:24:10.000000Z ddadcd03b97455adae2451a2140afbf6 2009-05-30T23:00:22.602473Z 2776 @@ -174,7 +208,7 @@ -2010-09-23T14:37:45.015759Z +2011-07-14T09:24:10.000000Z 41c2852d003d94cb23c231f06be62d12 2008-01-20T13:07:19.003764Z 1081 @@ -202,13 +236,16 @@ 1160 +helpers +dir + utils.rb file -2010-09-23T14:37:45.047759Z +2011-07-14T09:24:10.000000Z d04b071ce8f05b44ca6993c56fea9b1f 2009-01-04T17:09:25.896068Z 2234 @@ -236,16 +273,13 @@ 1466 -helpers -dir - access_control.rb file -2010-09-23T14:37:45.015759Z +2011-07-14T09:24:10.000000Z e7e4c44515553e36bffa6e8f8960080b 2008-09-25T18:51:03.022592Z 1907 @@ -279,7 +313,7 @@ -2010-09-23T14:37:45.043748Z +2011-07-14T09:24:10.000000Z 6f968bcc4f81562e9cbddb02ebc62601 2010-02-17T20:05:51.124365Z 3444 @@ -310,13 +344,47 @@ core_ext dir +configuration.rb +file + + + + +2011-07-14T09:24:10.000000Z +2f47dda69333c012a55496a3792c369e +2011-02-25T14:30:05.998365Z +4949 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +3639 + about.rb file -2010-09-23T14:37:45.015759Z +2011-07-14T09:24:10.000000Z 91ed592a8419f1bec48ba880c7a86e29 2009-05-25T19:10:26.065563Z 2766 @@ -350,7 +418,7 @@ -2010-09-23T14:37:45.043748Z +2011-07-14T09:24:10.000000Z 4a40844a6cd11aa7409bc8f4e9a2c74e 2010-03-28T11:30:48.135356Z 3619 @@ -384,11 +452,11 @@ -2010-11-19T13:04:51.416932Z -cfdd5556d40422dd9610d2124a2fefac -2010-09-28T21:09:06.467392Z -4222 -edavis10 +2011-07-14T09:24:22.000000Z +818a8c71d5080050c1fe5a95e1469a3d +2011-03-04T14:32:58.878627Z +5003 +jplang @@ -410,7 +478,7 @@ -916 +976 i18n.rb file @@ -418,11 +486,11 @@ -2010-11-19T13:04:51.412966Z -f1b6f1af024068879494612c2494e865 -2010-09-26T17:13:52.794850Z -4183 -edavis10 +2011-07-14T09:28:12.000000Z +cc684405103aabd5f4aea0c21fd7c732 +2011-06-21T03:16:49.595160Z +6105 +jbbarth has-props @@ -444,18 +512,52 @@ -2378 +2255 scm dir +safe_attributes.rb +file + + + + +2011-07-14T09:24:10.000000Z +7f659c02de1ea89806beda1772dc4d36 +2010-12-12T13:11:53.259618Z +4491 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +2579 + platform.rb file -2010-09-23T14:37:45.031809Z +2011-07-14T09:24:10.000000Z 68165c83be56d3204c582958d933ff0a 2008-08-25T11:01:37.715099Z 1753 @@ -483,51 +585,51 @@ 1009 +version.rb +file + + + + +2011-07-14T09:28:12.000000Z +af4770b66da6d84e5f63c4698ab09a37 +2011-07-11T11:45:14.631570Z +6261 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +1083 + custom_field_format.rb file -2010-09-23T14:37:45.023772Z -7fd1fcfb204480b0e9903fd03c53a563 -2010-04-16T15:34:05.970144Z -3675 -edavis10 - - - - - - - - - - - - - - - - - - - - - -2761 - -version.rb -file - - - - -2010-11-19T13:04:51.412966Z -8241f5642ac2d1aaa38fc1625f8816e6 -2010-11-01T00:37:19.679270Z -4349 -edavis10 +2011-07-14T09:24:22.000000Z +ae8c89a602b7d18e390aa1a7865a2319 +2011-04-01T14:02:05.869935Z +5275 +jplang has-props @@ -549,7 +651,7 @@ -1056 +3066 mime_type.rb file @@ -557,11 +659,11 @@ -2010-09-23T14:37:45.031809Z -dbfad515b1d5c277d2f8e9d67233185e -2009-12-29T13:28:30.604471Z -3258 -jplang +2011-07-14T09:24:22.000000Z +9494e5229ba69caf5121fd1f90c0fb9e +2011-03-22T04:35:48.334519Z +5190 +tmaruyama has-props @@ -583,21 +685,21 @@ -3498 +3525 + +wiki_formatting +dir views dir -wiki_formatting -dir - activity.rb file -2010-09-23T14:37:45.015759Z +2011-07-14T09:24:10.000000Z 88435997a6d77548eab82526df38caf1 2008-07-27T18:38:31.746909Z 1702 @@ -631,7 +733,7 @@ -2010-09-23T14:37:45.047759Z +2011-07-14T09:24:10.000000Z 648c40cc515e97d063d2c2f218cbbc23 2010-02-17T20:47:50.603139Z 3446 @@ -665,11 +767,11 @@ -2010-11-19T13:04:51.412966Z +2011-07-14T09:28:12.000000Z 81bc46012d5a0067e18e08bada197d8c -2010-10-25T23:32:01.793182Z -4293 -edavis10 +2011-06-21T03:16:49.595160Z +6105 +jbbarth has-props @@ -699,7 +801,7 @@ -2010-11-19T13:04:51.412966Z +2011-07-14T09:24:10.000000Z 7f3739a749929e1f65efb292620d361b 2010-11-14T16:24:21.989522Z 4406 @@ -733,7 +835,7 @@ -2010-11-19T13:04:51.416932Z +2011-07-14T09:24:10.000000Z dfacee092edce74d74e8ea7d7a54aeba 2010-11-14T16:24:21.989522Z 4406 @@ -767,7 +869,7 @@ -2010-09-23T14:37:45.019747Z +2011-07-14T09:24:10.000000Z 7632bcee464a923f5aa7c9eba29f8081 2008-04-26T11:59:51.889210Z 1361 @@ -795,16 +897,16 @@ 77 -unified_diff.rb +ciphering.rb file -2010-09-23T14:37:45.047759Z -69c22a4064f90e2ce460a0c9013c7cd0 -2009-11-11T13:25:53.648186Z -3028 +2011-07-14T09:24:10.000000Z +763ba2f765c62f378371f2472679c464 +2011-02-26T13:09:25.657748Z +4950 jplang has-props @@ -827,8 +929,42 @@ -5259 +2933 default_data dir +unified_diff.rb +file + + + + +2011-07-14T09:24:22.000000Z +34031c9894d99cfc79820222a06d34c5 +2011-03-11T20:23:29.177962Z +5094 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +7317 + diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/.svn/prop-base/ciphering.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/.svn/prop-base/ciphering.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/.svn/prop-base/configuration.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/.svn/prop-base/configuration.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/.svn/prop-base/safe_attributes.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/.svn/prop-base/safe_attributes.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/.svn/text-base/ciphering.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/.svn/text-base/ciphering.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/.svn/text-base/configuration.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/.svn/text-base/configuration.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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: + # * :file: the configuration file to load (default: config/configuration.yml) + # * :env: 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 diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/.svn/text-base/custom_field_format.rb.svn-base --- a/lib/redmine/.svn/text-base/custom_field_format.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/.svn/text-base/custom_field_format.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -22,12 +22,14 @@ cattr_accessor :available @@available = {} - attr_accessor :name, :order, :label + attr_accessor :name, :order, :label, :edit_as, :class_names def initialize(name, options={}) self.name = name self.label = options[:label] self.order = options[:order] + self.edit_as = options[:edit_as] || name + self.class_names = options[:only] end def format(value) @@ -47,12 +49,11 @@ return value } end - - # Allow displaying the edit type of another field_format - # - # Example: display a custom field as a list - def edit_as - name + + ['user', 'version'].each do |name| + define_method("format_as_#{name}") {|value| + return value.blank? ? "" : name.classify.constantize.find_by_id(value.to_i).to_s + } end class << self @@ -79,8 +80,10 @@ end # Return an array of custom field formats which can be used in select_tag - def as_select - @@available.values.sort {|a,b| + def as_select(class_name=nil) + fields = @@available.values + fields = fields.select {|field| field.class_names.nil? || field.class_names.include?(class_name)} + fields.sort {|a,b| a.order <=> b.order }.collect {|custom_field_format| [ l(custom_field_format.label), custom_field_format.name ] diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/.svn/text-base/i18n.rb.svn-base --- a/lib/redmine/.svn/text-base/i18n.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/.svn/text-base/i18n.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -37,7 +37,7 @@ def format_date(date) return nil unless date - Setting.date_format.blank? ? ::I18n.l(date.to_date, :count => date.strftime('%d')) : date.strftime(Setting.date_format) + Setting.date_format.blank? ? ::I18n.l(date.to_date) : date.strftime(Setting.date_format) end def format_time(time, include_date = true) @@ -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, :count => local.strftime('%d'), :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) diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/.svn/text-base/mime_type.rb.svn-base --- a/lib/redmine/.svn/text-base/mime_type.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/.svn/text-base/mime_type.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -37,6 +37,7 @@ 'text/xml' => 'xml,xsd,mxml', 'text/yaml' => 'yml,yaml', 'text/csv' => 'csv', + 'text/x-po' => 'po', 'image/gif' => 'gif', 'image/jpeg' => 'jpg,jpeg,jpe', 'image/png' => 'png', diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/.svn/text-base/notifiable.rb.svn-base --- a/lib/redmine/.svn/text-base/notifiable.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/.svn/text-base/notifiable.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -14,6 +14,7 @@ notifications << Notifiable.new('issue_status_updated', 'issue_updated') notifications << Notifiable.new('issue_priority_updated', 'issue_updated') notifications << Notifiable.new('news_added') + notifications << Notifiable.new('news_comment_added') notifications << Notifiable.new('document_added') notifications << Notifiable.new('file_added') notifications << Notifiable.new('message_posted') diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/.svn/text-base/pop3.rb.svn-base --- a/lib/redmine/.svn/text-base/pop3.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/.svn/text-base/pop3.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/.svn/text-base/safe_attributes.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/.svn/text-base/safe_attributes.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,75 @@ +# Redmine - project management software +# Copyright (C) 2006-2010 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 SafeAttributes + def self.included(base) + base.extend(ClassMethods) + end + + module ClassMethods + # Declares safe attributes + # An optional Proc can be given for conditional inclusion + # + # Example: + # safe_attributes 'title', 'pages' + # safe_attributes 'isbn', :if => {|book, user| book.author == user} + def safe_attributes(*args) + @safe_attributes ||= [] + if args.empty? + @safe_attributes + else + options = args.last.is_a?(Hash) ? args.pop : {} + @safe_attributes << [args, options] + end + end + end + + # Returns an array that can be safely set by user or current user + # + # Example: + # book.safe_attributes # => ['title', 'pages'] + # book.safe_attributes(book.author) # => ['title', 'pages', 'isbn'] + def safe_attribute_names(user=User.current) + names = [] + self.class.safe_attributes.collect do |attrs, options| + if options[:if].nil? || options[:if].call(self, user) + names += attrs.collect(&:to_s) + end + end + names.uniq + end + + # Returns a hash with unsafe attributes removed + # from the given attrs hash + # + # Example: + # book.delete_unsafe_attributes({'title' => 'My book', 'foo' => 'bar'}) + # # => {'title' => 'My book'} + def delete_unsafe_attributes(attrs, user=User.current) + safe = safe_attribute_names(user) + attrs.dup.delete_if {|k,v| !safe.include?(k)} + end + + # Sets attributes from attrs that are safe + # attrs is a Hash with string keys + def safe_attributes=(attrs, user=User.current) + return unless attrs.is_a?(Hash) + self.attributes = delete_unsafe_attributes(attrs, user) + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/.svn/text-base/themes.rb.svn-base --- a/lib/redmine/.svn/text-base/themes.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/.svn/text-base/themes.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -29,30 +29,65 @@ end # Return theme for given id, or nil if it's not found - def self.theme(id) - themes.find {|t| t.id == id} + def self.theme(id, options={}) + return nil if id.blank? + + found = themes.find {|t| t.id == id} + if found.nil? && options[:rescan] != false + rescan + found = theme(id, :rescan => false) + end + found end # Class used to represent a theme class Theme - attr_reader :name, :dir, :stylesheets + attr_reader :path, :name, :dir def initialize(path) + @path = path @dir = File.basename(path) @name = @dir.humanize - @stylesheets = Dir.glob("#{path}/stylesheets/*.css").collect {|f| File.basename(f).gsub(/\.css$/, '')} + @stylesheets = nil + @javascripts = nil end # Directory name used as the theme id def id; dir end - + + def ==(theme) + theme.is_a?(Theme) && theme.dir == dir + end + def <=>(theme) name <=> theme.name end + + def stylesheets + @stylesheets ||= assets("stylesheets", "css") + end + + def javascripts + @javascripts ||= assets("javascripts", "js") + end + + def stylesheet_path(source) + "/themes/#{dir}/stylesheets/#{source}" + end + + def javascript_path(source) + "/themes/#{dir}/javascripts/#{source}" + end + + private + + def assets(dir, ext) + Dir.glob("#{path}/#{dir}/*.#{ext}").collect {|f| File.basename(f).gsub(/\.#{ext}$/, '')} + end end private - + def self.scan_themes dirs = Dir.glob("#{Rails.public_path}/themes/*").select do |f| # A theme should at least override application.css @@ -64,13 +99,29 @@ end module ApplicationHelper + def current_theme + unless instance_variable_defined?(:@current_theme) + @current_theme = Redmine::Themes.theme(Setting.ui_theme) + end + @current_theme + end + def stylesheet_path(source) - @current_theme ||= Redmine::Themes.theme(Setting.ui_theme) - super((@current_theme && @current_theme.stylesheets.include?(source)) ? - "/themes/#{@current_theme.dir}/stylesheets/#{source}" : source) + if current_theme && current_theme.stylesheets.include?(source) + super current_theme.stylesheet_path(source) + else + super + end end def path_to_stylesheet(source) stylesheet_path source end + + # Returns the header tags for the current theme + def heads_for_theme + if current_theme && current_theme.javascripts.include?('theme') + javascript_include_tag current_theme.javascript_path('theme') + end + end end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/.svn/text-base/unified_diff.rb.svn-base --- a/lib/redmine/.svn/text-base/unified_diff.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/.svn/text-base/unified_diff.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -17,18 +17,28 @@ module Redmine # Class used to parse unified diffs - class UnifiedDiff < Array + class UnifiedDiff < Array + attr_reader :diff_type + def initialize(diff, options={}) options.assert_valid_keys(:type, :max_lines) diff = diff.split("\n") if diff.is_a?(String) - diff_type = options[:type] || 'inline' - + @diff_type = options[:type] || 'inline' lines = 0 @truncated = false - diff_table = DiffTable.new(diff_type) + 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,22 +50,20 @@ self << diff_table unless diff_table.empty? self end - + def truncated?; @truncated; end end # Class that represents a file diff - class DiffTable < Hash - attr_reader :file_name, :line_num_l, :line_num_r + class DiffTable < Array + attr_reader :file_name # Initialize with a Diff file and the type of Diff View # The type view must be inline or sbs (side_by_side) def initialize(type="inline") @parsing = false - @nb_line = 1 - @start = false - @before = 'same' - @second = true + @added = 0 + @removed = 0 @type = type end @@ -78,11 +86,21 @@ @line_num_l = $2.to_i @line_num_r = $5.to_i else - @nb_line += 1 if parse_line(line, @type) + parse_line(line, @type) end end return true end + + def each_line + prev_line_left, prev_line_right = nil, nil + each do |line| + spacing = prev_line_left && prev_line_right && (line.nb_line_left != prev_line_left+1) && (line.nb_line_right != prev_line_right+1) + yield spacing, line + prev_line_left = line.nb_line_left.to_i if line.nb_line_left.to_i > 0 + prev_line_right = line.nb_line_right.to_i if line.nb_line_right.to_i > 0 + end + end def inspect puts '### DIFF TABLE ###' @@ -92,74 +110,91 @@ end end - private - # Test if is a Side By Side type - def sbs?(type, func) - if @start and type == "sbs" - if @before == func and @second - tmp_nb_line = @nb_line - self[tmp_nb_line] = Diff.new - else - @second = false - tmp_nb_line = @start - @start += 1 - @nb_line -= 1 - end - else - tmp_nb_line = @nb_line - @start = @nb_line - self[tmp_nb_line] = Diff.new - @second = true - end - unless self[tmp_nb_line] - @nb_line += 1 - self[tmp_nb_line] = Diff.new - else - self[tmp_nb_line] - end - end + private # Escape the HTML for the diff def escapeHTML(line) CGI.escapeHTML(line) end + + def diff_for_added_line + if @type == 'sbs' && @removed > 0 && @added < @removed + self[-(@removed - @added)] + else + diff = Diff.new + self << diff + diff + end + end def parse_line(line, type="inline") if line[0, 1] == "+" - diff = sbs? type, 'add' - @before = 'add' + diff = diff_for_added_line diff.line_right = escapeHTML line[1..-1] diff.nb_line_right = @line_num_r diff.type_diff_right = 'diff_in' @line_num_r += 1 + @added += 1 true elsif line[0, 1] == "-" - diff = sbs? type, 'remove' - @before = 'remove' + diff = Diff.new diff.line_left = escapeHTML line[1..-1] diff.nb_line_left = @line_num_l diff.type_diff_left = 'diff_out' + self << diff @line_num_l += 1 + @removed += 1 true - elsif line[0, 1] =~ /\s/ - @before = 'same' - @start = false - diff = Diff.new - diff.line_right = escapeHTML line[1..-1] - diff.nb_line_right = @line_num_r - diff.line_left = escapeHTML line[1..-1] - diff.nb_line_left = @line_num_l - self[@nb_line] = diff - @line_num_l += 1 - @line_num_r += 1 - true - elsif line[0, 1] = "\\" + else + write_offsets + if line[0, 1] =~ /\s/ + diff = Diff.new + diff.line_right = escapeHTML line[1..-1] + diff.nb_line_right = @line_num_r + diff.line_left = escapeHTML line[1..-1] + diff.nb_line_left = @line_num_l + self << diff + @line_num_l += 1 + @line_num_r += 1 + true + elsif line[0, 1] = "\\" true else false end end end + + def write_offsets + if @added > 0 && @added == @removed + @added.times do |i| + line = self[-(1 + i)] + removed = (@type == 'sbs') ? line : self[-(1 + @added + i)] + offsets = offsets(removed.line_left, line.line_right) + removed.offsets = line.offsets = offsets + end + end + @added = 0 + @removed = 0 + end + + def offsets(line_left, line_right) + if line_left.present? && line_right.present? && line_left != line_right + max = [line_left.size, line_right.size].min + starting = 0 + while starting < max && line_left[starting] == line_right[starting] + starting += 1 + end + ending = -1 + while ending >= -(max - starting) && line_left[ending] == line_right[ending] + ending -= 1 + end + unless starting == 0 && ending == -1 + [starting, ending] + end + end + end + end # A line of diff class Diff @@ -169,6 +204,7 @@ attr_accessor :line_right attr_accessor :type_diff_right attr_accessor :type_diff_left + attr_accessor :offsets def initialize() self.nb_line_left = '' @@ -178,6 +214,38 @@ self.type_diff_right = '' self.type_diff_left = '' end + + def type_diff + type_diff_right == 'diff_in' ? type_diff_right : type_diff_left + end + + def line + type_diff_right == 'diff_in' ? line_right : line_left + end + + def html_line_left + if offsets + line_left.dup.insert(offsets.first, '').insert(offsets.last, '') + else + line_left + end + end + + def html_line_right + if offsets + line_right.dup.insert(offsets.first, '').insert(offsets.last, '') + else + line_right + end + end + + def html_line + if offsets + line.dup.insert(offsets.first, '').insert(offsets.last, '') + else + line + end + end def inspect puts '### Start Line Diff ###' diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/.svn/text-base/version.rb.svn-base --- a/lib/redmine/.svn/text-base/version.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/.svn/text-base/version.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -3,14 +3,14 @@ module Redmine module VERSION #:nodoc: MAJOR = 1 - MINOR = 0 - TINY = 3 - + MINOR = 2 + TINY = 1 + # Branch values: # * official release: nil # * stable branch: stable # * trunk: devel - BRANCH = 'devel' + BRANCH = 'stable' def self.revision revision = nil @@ -20,24 +20,25 @@ f = File.open(entries_path, 'r') entries = f.read f.close - if entries.match(%r{^\d+}) - revision = $1.to_i if entries.match(%r{^\d+\s+dir\s+(\d+)\s}) - else - xml = REXML::Document.new(entries) - revision = xml.elements['wc-entries'].elements[1].attributes['revision'].to_i - end - rescue - # Could not find the current revision - end - end - revision + if entries.match(%r{^\d+}) + revision = $1.to_i if entries.match(%r{^\d+\s+dir\s+(\d+)\s}) + else + xml = REXML::Document.new(entries) + revision = + xml.elements['wc-entries'].elements[1].attributes['revision'].to_i + end + rescue + # Could not find the current revision + end + end + revision end REVISION = self.revision - ARRAY = [MAJOR, MINOR, TINY, BRANCH, REVISION].compact - STRING = ARRAY.join('.') + ARRAY = [MAJOR, MINOR, TINY, BRANCH, REVISION].compact + STRING = ARRAY.join('.') - def self.to_a; ARRAY end + def self.to_a; ARRAY end def self.to_s; STRING end end end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/activity/.svn/all-wcprops --- a/lib/redmine/activity/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 45 -/svn/!svn/ver/3829/trunk/lib/redmine/activity -END -fetcher.rb -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/3829/trunk/lib/redmine/activity/fetcher.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/activity/.svn/entries --- a/lib/redmine/activity/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/activity/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib/redmine/activity +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/activity http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.019747Z +2011-07-14T09:24:10.000000Z 20597949bb74e98a3ffc97bc8a3ead7d 2010-07-06T02:22:03.226147Z 3829 diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/ciphering.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/ciphering.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/codeset_util.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/codeset_util.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,31 @@ +require 'iconv' + +module Redmine + module CodesetUtil + + def self.replace_invalid_utf8(str) + return str if str.nil? + 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 + ic = Iconv.new('UTF-8', 'UTF-8') + txtar = "" + begin + txtar += ic.iconv(str) + rescue Iconv::IllegalSequence + txtar += $!.success + str = '?' + $!.failed[1,$!.failed.length] + retry + rescue + txtar += $!.success + end + str = txtar + end + str + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/configuration.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/configuration.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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: + # * :file: the configuration file to load (default: config/configuration.yml) + # * :env: 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 diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/core_ext/.svn/all-wcprops --- a/lib/redmine/core_ext/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 45 -/svn/!svn/ver/2912/trunk/lib/redmine/core_ext -END -string.rb -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/2844/trunk/lib/redmine/core_ext/string.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/core_ext/.svn/entries --- a/lib/redmine/core_ext/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/core_ext/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib/redmine/core_ext +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/core_ext http://redmine.rubyforge.org/svn @@ -35,7 +35,7 @@ -2010-09-23T14:37:45.019747Z +2011-07-14T09:24:10.000000Z fcafa1cc4149d3a5de82816c61b7fa02 2009-08-17T16:32:24.020380Z 2844 diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/core_ext/string/.svn/all-wcprops --- a/lib/redmine/core_ext/string/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/2912/trunk/lib/redmine/core_ext/string -END -inflections.rb -K 25 -svn:wc:ra_dav:version-url -V 67 -/svn/!svn/ver/2844/trunk/lib/redmine/core_ext/string/inflections.rb -END -conversions.rb -K 25 -svn:wc:ra_dav:version-url -V 67 -/svn/!svn/ver/2912/trunk/lib/redmine/core_ext/string/conversions.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/core_ext/string/.svn/entries --- a/lib/redmine/core_ext/string/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/core_ext/string/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib/redmine/core_ext/string +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/core_ext/string http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.023772Z +2011-07-14T09:24:10.000000Z e614ecdb2fac85cd9f8808e7cff7f9de 2009-08-17T16:32:24.020380Z 2844 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.023772Z +2011-07-14T09:24:10.000000Z 1cc26c5de967944da3a6b07331512637 2009-10-10T15:09:19.510095Z 2912 diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/custom_field_format.rb --- a/lib/redmine/custom_field_format.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/custom_field_format.rb Mon Jul 25 14:23:37 2011 +0100 @@ -22,12 +22,14 @@ cattr_accessor :available @@available = {} - attr_accessor :name, :order, :label + attr_accessor :name, :order, :label, :edit_as, :class_names def initialize(name, options={}) self.name = name self.label = options[:label] self.order = options[:order] + self.edit_as = options[:edit_as] || name + self.class_names = options[:only] end def format(value) @@ -47,12 +49,11 @@ return value } end - - # Allow displaying the edit type of another field_format - # - # Example: display a custom field as a list - def edit_as - name + + ['user', 'version'].each do |name| + define_method("format_as_#{name}") {|value| + return value.blank? ? "" : name.classify.constantize.find_by_id(value.to_i).to_s + } end class << self @@ -79,8 +80,10 @@ end # Return an array of custom field formats which can be used in select_tag - def as_select - @@available.values.sort {|a,b| + def as_select(class_name=nil) + fields = @@available.values + fields = fields.select {|field| field.class_names.nil? || field.class_names.include?(class_name)} + fields.sort {|a,b| a.order <=> b.order }.collect {|custom_field_format| [ l(custom_field_format.label), custom_field_format.name ] diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/default_data/.svn/all-wcprops --- a/lib/redmine/default_data/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/default_data/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,11 +1,11 @@ K 25 svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/3820/trunk/lib/redmine/default_data +V 63 +/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/default_data END loader.rb K 25 svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/3820/trunk/lib/redmine/default_data/loader.rb +V 73 +/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/default_data/loader.rb END diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/default_data/.svn/entries --- a/lib/redmine/default_data/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/default_data/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib/redmine/default_data +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/default_data http://redmine.rubyforge.org/svn -2010-06-30T01:55:44.694582Z -3820 -edavis10 +2011-04-15T13:23:13.506236Z +5466 +jplang @@ -32,11 +32,11 @@ -2010-09-23T14:37:45.023772Z -41958e843a8ba03548eed089e8002549 -2010-06-30T01:55:44.694582Z -3820 -edavis10 +2011-07-14T09:24:22.000000Z +a052713b43f76c049afa9cba6ed46e77 +2011-04-15T13:23:13.506236Z +5466 +jplang has-props @@ -58,5 +58,5 @@ -10686 +10750 diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/default_data/.svn/text-base/loader.rb.svn-base --- a/lib/redmine/default_data/.svn/text-base/loader.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/default_data/.svn/text-base/loader.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -41,6 +41,7 @@ Role.transaction do # Roles manager = Role.create! :name => l(:default_role_manager), + :issues_visibility => 'all', :position => 1 manager.permissions = manager.setable_permissions.collect {|p| p.name} manager.save! diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/default_data/loader.rb --- a/lib/redmine/default_data/loader.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/default_data/loader.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -41,6 +41,7 @@ Role.transaction do # Roles manager = Role.create! :name => l(:default_role_manager), + :issues_visibility => 'all', :position => 1 manager.permissions = manager.setable_permissions.collect {|p| p.name} manager.save! diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/export/.svn/all-wcprops --- a/lib/redmine/export/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/export/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,11 +1,11 @@ K 25 svn:wc:ra_dav:version-url -V 43 -/svn/!svn/ver/4104/trunk/lib/redmine/export +V 57 +/svn/!svn/ver/6153/branches/1.2-stable/lib/redmine/export END pdf.rb K 25 svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/4104/trunk/lib/redmine/export/pdf.rb +V 64 +/svn/!svn/ver/6153/branches/1.2-stable/lib/redmine/export/pdf.rb END diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/export/.svn/entries --- a/lib/redmine/export/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/export/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib/redmine/export +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/export http://redmine.rubyforge.org/svn -2010-09-20T02:55:20.180218Z -4104 -edavis10 +2011-07-02T13:15:54.719761Z +6153 +tmaruyama @@ -32,11 +32,11 @@ -2010-09-24T12:48:29.791863Z -aa6093490555bdd119ba8f1d34cab080 -2010-09-20T02:55:20.180218Z -4104 -edavis10 +2011-07-14T09:28:12.000000Z +1a01e5ae7cc73f48f39fea205f6f4db2 +2011-07-02T13:15:54.719761Z +6153 +tmaruyama has-props @@ -58,5 +58,5 @@ -10771 +15568 diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/export/.svn/text-base/pdf.rb.svn-base --- a/lib/redmine/export/.svn/text-base/pdf.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/export/.svn/text-base/pdf.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,72 +1,87 @@ # encoding: utf-8 # # 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 # 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 'iconv' require 'rfpdf/fpdf' -require 'rfpdf/chinese' +require 'fpdf/chinese' +require 'fpdf/japanese' +require 'fpdf/korean' module Redmine module Export module PDF include ActionView::Helpers::TextHelper include ActionView::Helpers::NumberHelper - - class IFPDF < FPDF + + class ITCPDF < TCPDF include Redmine::I18n attr_accessor :footer_date - + def initialize(lang) - super() set_language_if_valid lang + pdf_encoding = l(:general_pdf_encoding).upcase + if RUBY_VERSION < '1.9' + @ic = Iconv.new(pdf_encoding, 'UTF-8') + end + super('P', 'mm', 'A4', (pdf_encoding == 'UTF-8'), pdf_encoding) case current_language.to_s.downcase - when 'ko' - extend(PDF_Korean) - AddUHCFont() - @font_for_content = 'UHC' - @font_for_footer = 'UHC' - when 'ja' - extend(PDF_Japanese) - AddSJISFont() - @font_for_content = 'SJIS' - @font_for_footer = 'SJIS' - when 'zh' - extend(PDF_Chinese) - AddGBFont() - @font_for_content = 'GB' - @font_for_footer = 'GB' - when 'zh-tw' - extend(PDF_Chinese) - AddBig5Font() - @font_for_content = 'Big5' - @font_for_footer = 'Big5' + when 'vi' + @font_for_content = 'DejaVuSans' + @font_for_footer = 'DejaVuSans' else - @font_for_content = 'Arial' - @font_for_footer = 'Helvetica' + case pdf_encoding + when 'UTF-8' + @font_for_content = 'FreeSans' + @font_for_footer = 'FreeSans' + when 'CP949' + extend(PDF_Korean) + AddUHCFont() + @font_for_content = 'UHC' + @font_for_footer = 'UHC' + when 'CP932', 'SJIS', 'SHIFT_JIS' + extend(PDF_Japanese) + AddSJISFont() + @font_for_content = 'SJIS' + @font_for_footer = 'SJIS' + when 'GB18030' + extend(PDF_Chinese) + AddGBFont() + @font_for_content = 'GB' + @font_for_footer = 'GB' + when 'BIG5' + extend(PDF_Chinese) + AddBig5Font() + @font_for_content = 'Big5' + @font_for_footer = 'Big5' + else + @font_for_content = 'Arial' + @font_for_footer = 'Helvetica' + end end SetCreator(Redmine::Info.app_name) SetFont(@font_for_content) end - + def SetFontStyle(style, size) SetFont(@font_for_content, style, size) end - + def SetTitle(txt) txt = begin utf16txt = Iconv.conv('UTF-16BE', 'UTF-8', txt) @@ -78,7 +93,7 @@ end || '' super(txt) end - + def textstring(s) # Format a text string if s =~ /^ space_left + pdf.AddPage("L") + base_x = pdf.GetX + base_y = pdf.GetY + end + + # write the cells on page + pdf.RDMCell(col_id_width, row_height, issue.id.to_s, "T", 0, 'C', 1) + issues_to_pdf_write_cells(pdf, col_values, col_width, row_height) + issues_to_pdf_draw_borders(pdf, base_x, base_y, base_y + max_height, col_id_width, col_width) + pdf.SetY(base_y + max_height); end + if issues.size == Setting.issues_export_limit.to_i pdf.SetFontStyle('B',10) - pdf.Cell(0, row_height, '...') + pdf.RDMCell(0, row_height, '...') end pdf.Output end + # Renders MultiCells and returns the maximum height used + def issues_to_pdf_write_cells(pdf, col_values, col_widths, + row_height, head=false) + base_y = pdf.GetY + max_height = row_height + col_values.each_with_index do |column, i| + col_x = pdf.GetX + if head == true + pdf.RDMMultiCell(col_widths[i], row_height, column.caption, "T", 'L', 1) + else + pdf.RDMMultiCell(col_widths[i], row_height, column, "T", 'L', 1) + end + max_height = (pdf.GetY - base_y) if (pdf.GetY - base_y) > max_height + pdf.SetXY(col_x + col_widths[i], base_y); + end + return max_height + end + + # Draw lines to close the row (MultiCell border drawing in not uniform) + def issues_to_pdf_draw_borders(pdf, top_x, top_y, lower_y, + id_width, col_widths) + col_x = top_x + id_width + pdf.Line(col_x, top_y, col_x, lower_y) # id right border + col_widths.each do |width| + col_x += width + pdf.Line(col_x, top_y, col_x, lower_y) # columns right border + end + pdf.Line(top_x, top_y, top_x, lower_y) # left border + pdf.Line(top_x, lower_y, col_x, lower_y) # bottom border + end + # Returns a PDF string of a single issue def issue_to_pdf(issue) - pdf = IFPDF.new(current_language) + pdf = ITCPDF.new(current_language) pdf.SetTitle("#{issue.project} - ##{issue.tracker} #{issue.id}") - pdf.AliasNbPages + pdf.alias_nb_pages pdf.footer_date = format_date(Date.today) pdf.AddPage - - pdf.SetFontStyle('B',11) - pdf.Cell(190,10, "#{issue.project} - #{issue.tracker} # #{issue.id}: #{issue.subject}") + pdf.SetFontStyle('B',11) + pdf.RDMMultiCell(190,5, + "#{issue.project} - #{issue.tracker} # #{issue.id}: #{issue.subject}") pdf.Ln - - y0 = pdf.GetY - + pdf.SetFontStyle('B',9) - pdf.Cell(35,5, l(:field_status) + ":","LT") + pdf.RDMCell(35,5, l(:field_status) + ":","LT") pdf.SetFontStyle('',9) - pdf.Cell(60,5, issue.status.to_s,"RT") + pdf.RDMCell(60,5, issue.status.to_s,"RT") pdf.SetFontStyle('B',9) - pdf.Cell(35,5, l(:field_priority) + ":","LT") + pdf.RDMCell(35,5, l(:field_priority) + ":","LT") pdf.SetFontStyle('',9) - pdf.Cell(60,5, issue.priority.to_s,"RT") + pdf.RDMCell(60,5, issue.priority.to_s,"RT") pdf.Ln - + pdf.SetFontStyle('B',9) - pdf.Cell(35,5, l(:field_author) + ":","L") + pdf.RDMCell(35,5, l(:field_author) + ":","L") pdf.SetFontStyle('',9) - pdf.Cell(60,5, issue.author.to_s,"R") + pdf.RDMCell(60,5, issue.author.to_s,"R") pdf.SetFontStyle('B',9) - pdf.Cell(35,5, l(:field_category) + ":","L") + pdf.RDMCell(35,5, l(:field_category) + ":","L") pdf.SetFontStyle('',9) - pdf.Cell(60,5, issue.category.to_s,"R") - pdf.Ln - + pdf.RDMCell(60,5, issue.category.to_s,"R") + pdf.Ln + pdf.SetFontStyle('B',9) - pdf.Cell(35,5, l(:field_created_on) + ":","L") + pdf.RDMCell(35,5, l(:field_created_on) + ":","L") pdf.SetFontStyle('',9) - pdf.Cell(60,5, format_date(issue.created_on),"R") + pdf.RDMCell(60,5, format_date(issue.created_on),"R") pdf.SetFontStyle('B',9) - pdf.Cell(35,5, l(:field_assigned_to) + ":","L") + pdf.RDMCell(35,5, l(:field_assigned_to) + ":","L") pdf.SetFontStyle('',9) - pdf.Cell(60,5, issue.assigned_to.to_s,"R") + pdf.RDMCell(60,5, issue.assigned_to.to_s,"R") pdf.Ln - + pdf.SetFontStyle('B',9) - pdf.Cell(35,5, l(:field_updated_on) + ":","LB") + pdf.RDMCell(35,5, l(:field_updated_on) + ":","LB") pdf.SetFontStyle('',9) - pdf.Cell(60,5, format_date(issue.updated_on),"RB") + pdf.RDMCell(60,5, format_date(issue.updated_on),"RB") pdf.SetFontStyle('B',9) - pdf.Cell(35,5, l(:field_due_date) + ":","LB") + pdf.RDMCell(35,5, l(:field_due_date) + ":","LB") pdf.SetFontStyle('',9) - pdf.Cell(60,5, format_date(issue.due_date),"RB") + pdf.RDMCell(60,5, format_date(issue.due_date),"RB") pdf.Ln - + for custom_value in issue.custom_field_values pdf.SetFontStyle('B',9) - pdf.Cell(35,5, custom_value.custom_field.name + ":","L") + pdf.RDMCell(35,5, custom_value.custom_field.name + ":","L") pdf.SetFontStyle('',9) - pdf.MultiCell(155,5, (show_value custom_value),"R") + pdf.RDMMultiCell(155,5, (show_value custom_value),"R") end - + + y0 = pdf.GetY + pdf.SetFontStyle('B',9) - pdf.Cell(35,5, l(:field_subject) + ":","LTB") + pdf.RDMCell(35,5, l(:field_subject) + ":","LT") pdf.SetFontStyle('',9) - pdf.Cell(155,5, issue.subject,"RTB") - pdf.Ln - + pdf.RDMMultiCell(155,5, issue.subject,"RT") + pdf.Line(pdf.GetX, y0, pdf.GetX, pdf.GetY) + pdf.SetFontStyle('B',9) - pdf.Cell(35,5, l(:field_description) + ":") + pdf.RDMCell(35+155, 5, l(:field_description), "LRT", 1) pdf.SetFontStyle('',9) - pdf.MultiCell(155,5, issue.description,"BR") - - pdf.Line(pdf.GetX, y0, pdf.GetX, pdf.GetY) - pdf.Line(pdf.GetX, pdf.GetY, 170, pdf.GetY) + pdf.RDMMultiCell(35+155, 5, issue.description.to_s, "LRB") pdf.Ln - - if issue.changesets.any? && User.current.allowed_to?(:view_changesets, issue.project) + + if issue.changesets.any? && + User.current.allowed_to?(:view_changesets, issue.project) pdf.SetFontStyle('B',9) - pdf.Cell(190,5, l(:label_associated_revisions), "B") + pdf.RDMCell(190,5, l(:label_associated_revisions), "B") pdf.Ln for changeset in issue.changesets pdf.SetFontStyle('B',8) - pdf.Cell(190,5, format_time(changeset.committed_on) + " - " + changeset.author.to_s) + csstr = "#{l(:label_revision)} #{changeset.format_identifier} - " + csstr += format_time(changeset.committed_on) + " - " + changeset.author.to_s + pdf.RDMCell(190, 5, csstr) pdf.Ln unless changeset.comments.blank? pdf.SetFontStyle('',8) - pdf.MultiCell(190,5, changeset.comments) - end + pdf.RDMMultiCell(190,5, changeset.comments.to_s) + end pdf.Ln end end - + pdf.SetFontStyle('B',9) - pdf.Cell(190,5, l(:label_history), "B") - pdf.Ln - for journal in issue.journals.find(:all, :include => [:user, :details], :order => "#{Journal.table_name}.created_on ASC") + pdf.RDMCell(190,5, l(:label_history), "B") + pdf.Ln + for journal in issue.journals.find( + :all, :include => [:user, :details], + :order => "#{Journal.table_name}.created_on ASC") pdf.SetFontStyle('B',8) - pdf.Cell(190,5, format_time(journal.created_on) + " - " + journal.user.name) + pdf.RDMCell(190,5, + format_time(journal.created_on) + " - " + journal.user.name) pdf.Ln pdf.SetFontStyle('I',8) for detail in journal.details - pdf.Cell(190,5, "- " + show_detail(detail, true)) - pdf.Ln + pdf.RDMMultiCell(190,5, "- " + show_detail(detail, true)) end if journal.notes? + pdf.Ln unless journal.details.empty? pdf.SetFontStyle('',8) - pdf.MultiCell(190,5, journal.notes) - end + pdf.RDMMultiCell(190,5, journal.notes.to_s) + end pdf.Ln end - + if issue.attachments.any? pdf.SetFontStyle('B',9) - pdf.Cell(190,5, l(:label_attachment_plural), "B") + pdf.RDMCell(190,5, l(:label_attachment_plural), "B") pdf.Ln for attachment in issue.attachments pdf.SetFontStyle('',8) - pdf.Cell(80,5, attachment.filename) - pdf.Cell(20,5, number_to_human_size(attachment.filesize),0,0,"R") - pdf.Cell(25,5, format_date(attachment.created_on),0,0,"R") - pdf.Cell(65,5, attachment.author.name,0,0,"R") + pdf.RDMCell(80,5, attachment.filename) + pdf.RDMCell(20,5, number_to_human_size(attachment.filesize),0,0,"R") + pdf.RDMCell(25,5, format_date(attachment.created_on),0,0,"R") + pdf.RDMCell(65,5, attachment.author.name,0,0,"R") pdf.Ln end end pdf.Output end + class RDMPdfEncoding + include Redmine::I18n + def self.rdm_pdf_iconv(ic, txt) + txt ||= '' + if txt.respond_to?(:force_encoding) + txt.force_encoding('UTF-8') + if l(:general_pdf_encoding).upcase != 'UTF-8' + txt = txt.encode(l(:general_pdf_encoding), :invalid => :replace, + :undef => :replace, :replace => '?') + else + txt = Redmine::CodesetUtil.replace_invalid_utf8(txt) + end + txt.force_encoding('ASCII-8BIT') + elsif RUBY_PLATFORM == 'java' + begin + ic ||= Iconv.new(l(:general_pdf_encoding), 'UTF-8') + txt = ic.iconv(txt) + rescue + txt = txt.gsub(%r{[^\r\n\t\x20-\x7e]}, '?') + end + else + ic ||= Iconv.new(l(:general_pdf_encoding), 'UTF-8') + txtar = "" + begin + txtar += ic.iconv(txt) + rescue Iconv::IllegalSequence + txtar += $!.success + txt = '?' + $!.failed[1,$!.failed.length] + retry + rescue + txtar += $!.success + end + txt = txtar + end + txt + end + end end end end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/export/pdf.rb --- a/lib/redmine/export/pdf.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/export/pdf.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,72 +1,87 @@ # encoding: utf-8 # # 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 # 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 'iconv' require 'rfpdf/fpdf' -require 'rfpdf/chinese' +require 'fpdf/chinese' +require 'fpdf/japanese' +require 'fpdf/korean' module Redmine module Export module PDF include ActionView::Helpers::TextHelper include ActionView::Helpers::NumberHelper - - class IFPDF < FPDF + + class ITCPDF < TCPDF include Redmine::I18n attr_accessor :footer_date - + def initialize(lang) - super() set_language_if_valid lang + pdf_encoding = l(:general_pdf_encoding).upcase + if RUBY_VERSION < '1.9' + @ic = Iconv.new(pdf_encoding, 'UTF-8') + end + super('P', 'mm', 'A4', (pdf_encoding == 'UTF-8'), pdf_encoding) case current_language.to_s.downcase - when 'ko' - extend(PDF_Korean) - AddUHCFont() - @font_for_content = 'UHC' - @font_for_footer = 'UHC' - when 'ja' - extend(PDF_Japanese) - AddSJISFont() - @font_for_content = 'SJIS' - @font_for_footer = 'SJIS' - when 'zh' - extend(PDF_Chinese) - AddGBFont() - @font_for_content = 'GB' - @font_for_footer = 'GB' - when 'zh-tw' - extend(PDF_Chinese) - AddBig5Font() - @font_for_content = 'Big5' - @font_for_footer = 'Big5' + when 'vi' + @font_for_content = 'DejaVuSans' + @font_for_footer = 'DejaVuSans' else - @font_for_content = 'Arial' - @font_for_footer = 'Helvetica' + case pdf_encoding + when 'UTF-8' + @font_for_content = 'FreeSans' + @font_for_footer = 'FreeSans' + when 'CP949' + extend(PDF_Korean) + AddUHCFont() + @font_for_content = 'UHC' + @font_for_footer = 'UHC' + when 'CP932', 'SJIS', 'SHIFT_JIS' + extend(PDF_Japanese) + AddSJISFont() + @font_for_content = 'SJIS' + @font_for_footer = 'SJIS' + when 'GB18030' + extend(PDF_Chinese) + AddGBFont() + @font_for_content = 'GB' + @font_for_footer = 'GB' + when 'BIG5' + extend(PDF_Chinese) + AddBig5Font() + @font_for_content = 'Big5' + @font_for_footer = 'Big5' + else + @font_for_content = 'Arial' + @font_for_footer = 'Helvetica' + end end SetCreator(Redmine::Info.app_name) SetFont(@font_for_content) end - + def SetFontStyle(style, size) SetFont(@font_for_content, style, size) end - + def SetTitle(txt) txt = begin utf16txt = Iconv.conv('UTF-16BE', 'UTF-8', txt) @@ -78,7 +93,7 @@ end || '' super(txt) end - + def textstring(s) # Format a text string if s =~ /^ space_left + pdf.AddPage("L") + base_x = pdf.GetX + base_y = pdf.GetY + end + + # write the cells on page + pdf.RDMCell(col_id_width, row_height, issue.id.to_s, "T", 0, 'C', 1) + issues_to_pdf_write_cells(pdf, col_values, col_width, row_height) + issues_to_pdf_draw_borders(pdf, base_x, base_y, base_y + max_height, col_id_width, col_width) + pdf.SetY(base_y + max_height); end + if issues.size == Setting.issues_export_limit.to_i pdf.SetFontStyle('B',10) - pdf.Cell(0, row_height, '...') + pdf.RDMCell(0, row_height, '...') end pdf.Output end + # Renders MultiCells and returns the maximum height used + def issues_to_pdf_write_cells(pdf, col_values, col_widths, + row_height, head=false) + base_y = pdf.GetY + max_height = row_height + col_values.each_with_index do |column, i| + col_x = pdf.GetX + if head == true + pdf.RDMMultiCell(col_widths[i], row_height, column.caption, "T", 'L', 1) + else + pdf.RDMMultiCell(col_widths[i], row_height, column, "T", 'L', 1) + end + max_height = (pdf.GetY - base_y) if (pdf.GetY - base_y) > max_height + pdf.SetXY(col_x + col_widths[i], base_y); + end + return max_height + end + + # Draw lines to close the row (MultiCell border drawing in not uniform) + def issues_to_pdf_draw_borders(pdf, top_x, top_y, lower_y, + id_width, col_widths) + col_x = top_x + id_width + pdf.Line(col_x, top_y, col_x, lower_y) # id right border + col_widths.each do |width| + col_x += width + pdf.Line(col_x, top_y, col_x, lower_y) # columns right border + end + pdf.Line(top_x, top_y, top_x, lower_y) # left border + pdf.Line(top_x, lower_y, col_x, lower_y) # bottom border + end + # Returns a PDF string of a single issue def issue_to_pdf(issue) - pdf = IFPDF.new(current_language) + pdf = ITCPDF.new(current_language) pdf.SetTitle("#{issue.project} - ##{issue.tracker} #{issue.id}") - pdf.AliasNbPages + pdf.alias_nb_pages pdf.footer_date = format_date(Date.today) pdf.AddPage - - pdf.SetFontStyle('B',11) - pdf.Cell(190,10, "#{issue.project} - #{issue.tracker} # #{issue.id}: #{issue.subject}") + pdf.SetFontStyle('B',11) + pdf.RDMMultiCell(190,5, + "#{issue.project} - #{issue.tracker} # #{issue.id}: #{issue.subject}") pdf.Ln - - y0 = pdf.GetY - + pdf.SetFontStyle('B',9) - pdf.Cell(35,5, l(:field_status) + ":","LT") + pdf.RDMCell(35,5, l(:field_status) + ":","LT") pdf.SetFontStyle('',9) - pdf.Cell(60,5, issue.status.to_s,"RT") + pdf.RDMCell(60,5, issue.status.to_s,"RT") pdf.SetFontStyle('B',9) - pdf.Cell(35,5, l(:field_priority) + ":","LT") + pdf.RDMCell(35,5, l(:field_priority) + ":","LT") pdf.SetFontStyle('',9) - pdf.Cell(60,5, issue.priority.to_s,"RT") + pdf.RDMCell(60,5, issue.priority.to_s,"RT") pdf.Ln - + pdf.SetFontStyle('B',9) - pdf.Cell(35,5, l(:field_author) + ":","L") + pdf.RDMCell(35,5, l(:field_author) + ":","L") pdf.SetFontStyle('',9) - pdf.Cell(60,5, issue.author.to_s,"R") + pdf.RDMCell(60,5, issue.author.to_s,"R") pdf.SetFontStyle('B',9) - pdf.Cell(35,5, l(:field_category) + ":","L") + pdf.RDMCell(35,5, l(:field_category) + ":","L") pdf.SetFontStyle('',9) - pdf.Cell(60,5, issue.category.to_s,"R") - pdf.Ln - + pdf.RDMCell(60,5, issue.category.to_s,"R") + pdf.Ln + pdf.SetFontStyle('B',9) - pdf.Cell(35,5, l(:field_created_on) + ":","L") + pdf.RDMCell(35,5, l(:field_created_on) + ":","L") pdf.SetFontStyle('',9) - pdf.Cell(60,5, format_date(issue.created_on),"R") + pdf.RDMCell(60,5, format_date(issue.created_on),"R") pdf.SetFontStyle('B',9) - pdf.Cell(35,5, l(:field_assigned_to) + ":","L") + pdf.RDMCell(35,5, l(:field_assigned_to) + ":","L") pdf.SetFontStyle('',9) - pdf.Cell(60,5, issue.assigned_to.to_s,"R") + pdf.RDMCell(60,5, issue.assigned_to.to_s,"R") pdf.Ln - + pdf.SetFontStyle('B',9) - pdf.Cell(35,5, l(:field_updated_on) + ":","LB") + pdf.RDMCell(35,5, l(:field_updated_on) + ":","LB") pdf.SetFontStyle('',9) - pdf.Cell(60,5, format_date(issue.updated_on),"RB") + pdf.RDMCell(60,5, format_date(issue.updated_on),"RB") pdf.SetFontStyle('B',9) - pdf.Cell(35,5, l(:field_due_date) + ":","LB") + pdf.RDMCell(35,5, l(:field_due_date) + ":","LB") pdf.SetFontStyle('',9) - pdf.Cell(60,5, format_date(issue.due_date),"RB") + pdf.RDMCell(60,5, format_date(issue.due_date),"RB") pdf.Ln - + for custom_value in issue.custom_field_values pdf.SetFontStyle('B',9) - pdf.Cell(35,5, custom_value.custom_field.name + ":","L") + pdf.RDMCell(35,5, custom_value.custom_field.name + ":","L") pdf.SetFontStyle('',9) - pdf.MultiCell(155,5, (show_value custom_value),"R") + pdf.RDMMultiCell(155,5, (show_value custom_value),"R") end - + + y0 = pdf.GetY + pdf.SetFontStyle('B',9) - pdf.Cell(35,5, l(:field_subject) + ":","LTB") + pdf.RDMCell(35,5, l(:field_subject) + ":","LT") pdf.SetFontStyle('',9) - pdf.Cell(155,5, issue.subject,"RTB") - pdf.Ln - + pdf.RDMMultiCell(155,5, issue.subject,"RT") + pdf.Line(pdf.GetX, y0, pdf.GetX, pdf.GetY) + pdf.SetFontStyle('B',9) - pdf.Cell(35,5, l(:field_description) + ":") + pdf.RDMCell(35+155, 5, l(:field_description), "LRT", 1) pdf.SetFontStyle('',9) - pdf.MultiCell(155,5, issue.description,"BR") - - pdf.Line(pdf.GetX, y0, pdf.GetX, pdf.GetY) - pdf.Line(pdf.GetX, pdf.GetY, 170, pdf.GetY) + pdf.RDMMultiCell(35+155, 5, issue.description.to_s, "LRB") pdf.Ln - - if issue.changesets.any? && User.current.allowed_to?(:view_changesets, issue.project) + + if issue.changesets.any? && + User.current.allowed_to?(:view_changesets, issue.project) pdf.SetFontStyle('B',9) - pdf.Cell(190,5, l(:label_associated_revisions), "B") + pdf.RDMCell(190,5, l(:label_associated_revisions), "B") pdf.Ln for changeset in issue.changesets pdf.SetFontStyle('B',8) - pdf.Cell(190,5, format_time(changeset.committed_on) + " - " + changeset.author.to_s) + csstr = "#{l(:label_revision)} #{changeset.format_identifier} - " + csstr += format_time(changeset.committed_on) + " - " + changeset.author.to_s + pdf.RDMCell(190, 5, csstr) pdf.Ln unless changeset.comments.blank? pdf.SetFontStyle('',8) - pdf.MultiCell(190,5, changeset.comments) - end + pdf.RDMMultiCell(190,5, changeset.comments.to_s) + end pdf.Ln end end - + pdf.SetFontStyle('B',9) - pdf.Cell(190,5, l(:label_history), "B") - pdf.Ln - for journal in issue.journals.find(:all, :include => [:user, :details], :order => "#{Journal.table_name}.created_on ASC") + pdf.RDMCell(190,5, l(:label_history), "B") + pdf.Ln + for journal in issue.journals.find( + :all, :include => [:user, :details], + :order => "#{Journal.table_name}.created_on ASC") pdf.SetFontStyle('B',8) - pdf.Cell(190,5, format_time(journal.created_on) + " - " + journal.user.name) + pdf.RDMCell(190,5, + format_time(journal.created_on) + " - " + journal.user.name) pdf.Ln pdf.SetFontStyle('I',8) for detail in journal.details - pdf.Cell(190,5, "- " + show_detail(detail, true)) - pdf.Ln + pdf.RDMMultiCell(190,5, "- " + show_detail(detail, true)) end if journal.notes? + pdf.Ln unless journal.details.empty? pdf.SetFontStyle('',8) - pdf.MultiCell(190,5, journal.notes) - end + pdf.RDMMultiCell(190,5, journal.notes.to_s) + end pdf.Ln end - + if issue.attachments.any? pdf.SetFontStyle('B',9) - pdf.Cell(190,5, l(:label_attachment_plural), "B") + pdf.RDMCell(190,5, l(:label_attachment_plural), "B") pdf.Ln for attachment in issue.attachments pdf.SetFontStyle('',8) - pdf.Cell(80,5, attachment.filename) - pdf.Cell(20,5, number_to_human_size(attachment.filesize),0,0,"R") - pdf.Cell(25,5, format_date(attachment.created_on),0,0,"R") - pdf.Cell(65,5, attachment.author.name,0,0,"R") + pdf.RDMCell(80,5, attachment.filename) + pdf.RDMCell(20,5, number_to_human_size(attachment.filesize),0,0,"R") + pdf.RDMCell(25,5, format_date(attachment.created_on),0,0,"R") + pdf.RDMCell(65,5, attachment.author.name,0,0,"R") pdf.Ln end end pdf.Output end + class RDMPdfEncoding + include Redmine::I18n + def self.rdm_pdf_iconv(ic, txt) + txt ||= '' + if txt.respond_to?(:force_encoding) + txt.force_encoding('UTF-8') + if l(:general_pdf_encoding).upcase != 'UTF-8' + txt = txt.encode(l(:general_pdf_encoding), :invalid => :replace, + :undef => :replace, :replace => '?') + else + txt = Redmine::CodesetUtil.replace_invalid_utf8(txt) + end + txt.force_encoding('ASCII-8BIT') + elsif RUBY_PLATFORM == 'java' + begin + ic ||= Iconv.new(l(:general_pdf_encoding), 'UTF-8') + txt = ic.iconv(txt) + rescue + txt = txt.gsub(%r{[^\r\n\t\x20-\x7e]}, '?') + end + else + ic ||= Iconv.new(l(:general_pdf_encoding), 'UTF-8') + txtar = "" + begin + txtar += ic.iconv(txt) + rescue Iconv::IllegalSequence + txtar += $!.success + txt = '?' + $!.failed[1,$!.failed.length] + retry + rescue + txtar += $!.success + end + txt = txtar + end + txt + end + end end end end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/helpers/.svn/all-wcprops --- a/lib/redmine/helpers/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/helpers/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,17 +1,17 @@ K 25 svn:wc:ra_dav:version-url -V 44 -/svn/!svn/ver/4392/trunk/lib/redmine/helpers +V 58 +/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/helpers END gantt.rb K 25 svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/4392/trunk/lib/redmine/helpers/gantt.rb +V 67 +/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/helpers/gantt.rb END calendar.rb K 25 svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/3166/trunk/lib/redmine/helpers/calendar.rb +V 70 +/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/helpers/calendar.rb END diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/helpers/.svn/entries --- a/lib/redmine/helpers/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/helpers/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib/redmine/helpers +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/helpers http://redmine.rubyforge.org/svn -2010-11-11T13:44:23.942520Z -4392 -jplang +2011-05-09T11:12:27.265905Z +5720 +tmaruyama @@ -32,10 +32,44 @@ -2010-11-19T13:04:51.408930Z -3c093f4a7147fe4ebdbaed2749d602f1 -2010-11-11T13:44:23.942520Z -4392 +2011-07-14T09:24:22.000000Z +111af23362cad335d5d23c03cc7668d1 +2011-05-09T11:12:27.265905Z +5720 +tmaruyama +has-props + + + + + + + + + + + + + + + + + + + + +31709 + +diff.rb +file + + + + +2011-07-14T09:24:10.000000Z +a3487dfca2baab10aacea141b7c0fc5f +2011-02-27T12:50:47.369941Z +4953 jplang has-props @@ -58,7 +92,7 @@ -40744 +2408 calendar.rb file @@ -66,11 +100,11 @@ -2010-09-23T14:37:45.027790Z -0a7d81755cf7c1519d4b4c1d84712139 -2009-12-13T04:06:55.726600Z -3166 -edavis10 +2011-07-14T09:24:22.000000Z +4e48abe08914d8b6e345e9752257a603 +2011-03-27T15:43:26.269165Z +5228 +jplang has-props @@ -92,5 +126,5 @@ -2733 +2787 diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/helpers/.svn/prop-base/diff.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/helpers/.svn/prop-base/diff.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/helpers/.svn/text-base/calendar.rb.svn-base --- a/lib/redmine/helpers/.svn/text-base/calendar.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/helpers/.svn/text-base/calendar.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -68,6 +68,8 @@ case Setting.start_of_week.to_i when 1 @first_dow ||= (1 - 1)%7 + 1 + when 6 + @first_dow ||= (6 - 1)%7 + 1 when 7 @first_dow ||= (7 - 1)%7 + 1 else diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/helpers/.svn/text-base/diff.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/helpers/.svn/text-base/diff.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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] = '' + words[add_at] + words[add_to] = words[add_to] + '' + end + if del_at + words.insert del_at - del_off + dels + words_add, '' + deleted + '' + dels += 1 + del_off += words_del + words_del = 0 + end + end + words.join(' ') + end + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/helpers/.svn/text-base/gantt.rb.svn-base --- a/lib/redmine/helpers/.svn/text-base/gantt.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/helpers/.svn/text-base/gantt.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ # Redmine - project management software -# Copyright (C) 2006-2008 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 # 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. @@ -34,14 +34,14 @@ end end - attr_reader :year_from, :month_from, :date_from, :date_to, :zoom, :months + attr_reader :year_from, :month_from, :date_from, :date_to, :zoom, :months, :truncated, :max_rows attr_accessor :query attr_accessor :project attr_accessor :view - + def initialize(options={}) options = options.dup - + if options[:year] && options[:year].to_i >0 @year_from = options[:year].to_i if options[:month] && options[:month].to_i >=1 && options[:month].to_i <= 12 @@ -53,232 +53,222 @@ @month_from ||= Date.today.month @year_from ||= Date.today.year end - + zoom = (options[:zoom] || User.current.pref[:gantt_zoom]).to_i - @zoom = (zoom > 0 && zoom < 5) ? zoom : 2 + @zoom = (zoom > 0 && zoom < 5) ? zoom : 2 months = (options[:months] || User.current.pref[:gantt_months]).to_i @months = (months > 0 && months < 25) ? months : 6 - + # Save gantt parameters as user preference (zoom and months count) if (User.current.logged? && (@zoom != User.current.pref[:gantt_zoom] || @months != User.current.pref[:gantt_months])) User.current.pref[:gantt_zoom], User.current.pref[:gantt_months] = @zoom, @months User.current.preference.save end - + @date_from = Date.civil(@year_from, @month_from, 1) @date_to = (@date_from >> @months) - 1 + + @subjects = '' + @lines = '' + @number_of_rows = nil + + @issue_ancestors = [] + + @truncated = false + if options.has_key?(:max_rows) + @max_rows = options[:max_rows] + else + @max_rows = Setting.gantt_items_limit.blank? ? nil : Setting.gantt_items_limit.to_i + end end def common_params { :controller => 'gantts', :action => 'show', :project_id => @project } end - + def params common_params.merge({ :zoom => zoom, :year => year_from, :month => month_from, :months => months }) end - + def params_previous common_params.merge({:year => (date_from << months).year, :month => (date_from << months).month, :zoom => zoom, :months => months }) end - + def params_next common_params.merge({:year => (date_from >> months).year, :month => (date_from >> months).month, :zoom => zoom, :months => months }) end - ### Extracted from the HTML view/helpers # Returns the number of rows that will be rendered on the Gantt chart def number_of_rows - if @project - return number_of_rows_on_project(@project) - else - Project.roots.inject(0) do |total, project| - total += number_of_rows_on_project(project) - end - end + return @number_of_rows if @number_of_rows + + rows = projects.inject(0) {|total, p| total += number_of_rows_on_project(p)} + rows > @max_rows ? @max_rows : rows end # Returns the number of rows that will be used to list a project on # the Gantt chart. This will recurse for each subproject. def number_of_rows_on_project(project) - # Remove the project requirement for Versions because it will - # restrict issues to only be on the current project. This - # ends up missing issues which are assigned to shared versions. - @query.project = nil if @query.project + return 0 unless projects.include?(project) - # One Root project count = 1 - # Issues without a Version - count += project.issues.for_gantt.without_version.with_query(@query).count - - # Versions - count += project.versions.count - - # Issues on the Versions - project.versions.each do |version| - count += version.fixed_issues.for_gantt.with_query(@query).count - end - - # Subprojects - project.children.each do |subproject| - count += number_of_rows_on_project(subproject) - end - + count += project_issues(project).size + count += project_versions(project).size count end # Renders the subjects of the Gantt chart, the left side. def subjects(options={}) - options = {:indent => 4, :render => :subject, :format => :html}.merge(options) - - output = '' - if @project - output << render_project(@project, options) - else - Project.roots.each do |project| - output << render_project(project, options) - end - end - - output + render(options.merge(:only => :subjects)) unless @subjects_rendered + @subjects end # Renders the lines of the Gantt chart, the right side def lines(options={}) - options = {:indent => 4, :render => :line, :format => :html}.merge(options) - output = '' + render(options.merge(:only => :lines)) unless @lines_rendered + @lines + end - if @project - output << render_project(@project, options) + # Returns issues that will be rendered + def issues + @issues ||= @query.issues( + :include => [:assigned_to, :tracker, :priority, :category, :fixed_version], + :order => "#{Project.table_name}.lft ASC, #{Issue.table_name}.id ASC", + :limit => @max_rows + ) + end + + # Return all the project nodes that will be displayed + def projects + return @projects if @projects + + ids = issues.collect(&:project).uniq.collect(&:id) + if ids.any? + # All issues projects and their visible ancestors + @projects = Project.visible.all( + :joins => "LEFT JOIN #{Project.table_name} child ON #{Project.table_name}.lft <= child.lft AND #{Project.table_name}.rgt >= child.rgt", + :conditions => ["child.id IN (?)", ids], + :order => "#{Project.table_name}.lft ASC" + ).uniq else - Project.roots.each do |project| - output << render_project(project, options) - end + @projects = [] end - - output + end + + # Returns the issues that belong to +project+ + def project_issues(project) + @issues_by_project ||= issues.group_by(&:project) + @issues_by_project[project] || [] + end + + # Returns the distinct versions of the issues that belong to +project+ + def project_versions(project) + project_issues(project).collect(&:fixed_version).compact.uniq + end + + # Returns the issues that belong to +project+ and are assigned to +version+ + def version_issues(project, version) + project_issues(project).select {|issue| issue.fixed_version == version} + end + + def render(options={}) + options = {:top => 0, :top_increment => 20, :indent_increment => 20, :render => :subject, :format => :html}.merge(options) + indent = options[:indent] || 4 + + @subjects = '' unless options[:only] == :lines + @lines = '' unless options[:only] == :subjects + @number_of_rows = 0 + + Project.project_tree(projects) do |project, level| + options[:indent] = indent + level * options[:indent_increment] + render_project(project, options) + break if abort? + end + + @subjects_rendered = true unless options[:only] == :lines + @lines_rendered = true unless options[:only] == :subjects + + render_end(options) end def render_project(project, options={}) - options[:top] = 0 unless options.key? :top - options[:indent_increment] = 20 unless options.key? :indent_increment - options[:top_increment] = 20 unless options.key? :top_increment + subject_for_project(project, options) unless options[:only] == :lines + line_for_project(project, options) unless options[:only] == :subjects - output = '' - # Project Header - project_header = if options[:render] == :subject - subject_for_project(project, options) - else - # :line - line_for_project(project, options) - end - output << project_header if options[:format] == :html - options[:top] += options[:top_increment] options[:indent] += options[:indent_increment] - - # Second, Issues without a version - issues = project.issues.for_gantt.without_version.with_query(@query) + @number_of_rows += 1 + return if abort? + + issues = project_issues(project).select {|i| i.fixed_version.nil?} + sort_issues!(issues) if issues - issue_rendering = render_issues(issues, options) - output << issue_rendering if options[:format] == :html + render_issues(issues, options) + return if abort? end - # Third, Versions - project.versions.sort.each do |version| - version_rendering = render_version(version, options) - output << version_rendering if options[:format] == :html - end - - # Fourth, subprojects - project.children.each do |project| - subproject_rendering = render_project(project, options) - output << subproject_rendering if options[:format] == :html + versions = project_versions(project) + versions.each do |version| + render_version(project, version, options) end # Remove indent to hit the next sibling options[:indent] -= options[:indent_increment] - - output end def render_issues(issues, options={}) - output = '' + @issue_ancestors = [] + issues.each do |i| - issue_rendering = if options[:render] == :subject - subject_for_issue(i, options) - else - # :line - line_for_issue(i, options) - end - output << issue_rendering if options[:format] == :html + subject_for_issue(i, options) unless options[:only] == :lines + line_for_issue(i, options) unless options[:only] == :subjects + options[:top] += options[:top_increment] + @number_of_rows += 1 + break if abort? end - output + + options[:indent] -= (options[:indent_increment] * @issue_ancestors.size) end - def render_version(version, options={}) - output = '' + def render_version(project, version, options={}) # Version header - version_rendering = if options[:render] == :subject - subject_for_version(version, options) - else - # :line - line_for_version(version, options) - end + subject_for_version(version, options) unless options[:only] == :lines + line_for_version(version, options) unless options[:only] == :subjects - output << version_rendering if options[:format] == :html - options[:top] += options[:top_increment] + @number_of_rows += 1 + return if abort? - # Remove the project requirement for Versions because it will - # restrict issues to only be on the current project. This - # ends up missing issues which are assigned to shared versions. - @query.project = nil if @query.project - - issues = version.fixed_issues.for_gantt.with_query(@query) + issues = version_issues(project, version) if issues + sort_issues!(issues) # Indent issues options[:indent] += options[:indent_increment] - output << render_issues(issues, options) + render_issues(issues, options) options[:indent] -= options[:indent_increment] end + end - output + def render_end(options={}) + case options[:format] + when :pdf + options[:pdf].Line(15, options[:top], PDF::TotalWidth, options[:top]) + end end def subject_for_project(project, options) case options[:format] when :html - output = '' - - output << "
    " - if project.is_a? Project - output << "" - output << view.link_to_project(project) - output << '' - else - ActiveRecord::Base.logger.debug "Gantt#subject_for_project was not given a project" - '' - end - output << "
    " - - output + subject = "" + subject << view.link_to_project(project) + subject << '' + html_subject(options, subject, :css => "project-name") when :image - - options[:image].fill('black') - options[:image].stroke('transparent') - options[:image].stroke_width(1) - options[:image].text(options[:indent], options[:top] + 2, project.name) + image_subject(options, project.name) when :pdf - options[:pdf].SetY(options[:top]) - options[:pdf].SetX(15) - - char_limit = PDF::MaxCharactorsForSubject - options[:indent] - options[:pdf].Cell(options[:subject_width]-15, 5, (" " * options[:indent]) +"#{project.name}".sub(/^(.{#{char_limit}}[^\s]*\s).*$/, '\1 (...)'), "LR") - - options[:pdf].SetY(options[:top]) - options[:pdf].SetX(options[:subject_width]) - options[:pdf].Cell(options[:g_width], 5, "", "LR") + pdf_new_page?(options) + pdf_subject(options, project.name) end end @@ -288,94 +278,16 @@ options[:zoom] ||= 1 options[:g_width] ||= (self.date_to - self.date_from + 1) * options[:zoom] - + coords = coordinates(project.start_date, project.due_date, nil, options[:zoom]) + label = h(project) + case options[:format] when :html - output = '' - i_left = ((project.start_date - self.date_from)*options[:zoom]).floor - - start_date = project.start_date - start_date ||= self.date_from - start_left = ((start_date - self.date_from)*options[:zoom]).floor - - i_end_date = ((project.due_date <= self.date_to) ? project.due_date : self.date_to ) - i_done_date = start_date + ((project.due_date - start_date+1)* project.completed_percent(:include_subprojects => true)/100).floor - i_done_date = (i_done_date <= self.date_from ? self.date_from : i_done_date ) - i_done_date = (i_done_date >= self.date_to ? self.date_to : i_done_date ) - - i_late_date = [i_end_date, Date.today].min if start_date < Date.today - i_end = ((i_end_date - self.date_from) * options[:zoom]).floor - - i_width = (i_end - i_left + 1).floor - 2 # total width of the issue (- 2 for left and right borders) - d_width = ((i_done_date - start_date)*options[:zoom]).floor - 2 # done width - l_width = i_late_date ? ((i_late_date - start_date+1)*options[:zoom]).floor - 2 : 0 # delay width - - # Bar graphic - - # Make sure that negative i_left and i_width don't - # overflow the subject - if i_end > 0 && i_left <= options[:g_width] - output << "
     
    " - end - - if l_width > 0 && i_left <= options[:g_width] - output << "
     
    " - end - if d_width > 0 && i_left <= options[:g_width] - output<< "
     
    " - end - - - # Starting diamond - if start_left <= options[:g_width] && start_left > 0 - output << "
     
    " - output << "
    " - output << "
    " - end - - # Ending diamond - # Don't show items too far ahead - if i_end <= options[:g_width] && i_end > 0 - output << "
     
    " - end - - # DIsplay the Project name and % - if i_end <= options[:g_width] - # Display the status even if it's floated off to the left - status_px = i_end + 12 # 12px for the diamond - status_px = 0 if status_px <= 0 - - output << "
    " - output << "#{h project } #{h project.completed_percent(:include_subprojects => true).to_i.to_s}%" - output << "
    " - end - - output + html_task(options, coords, :css => "project task", :label => label, :markers => true) when :image - options[:image].stroke('transparent') - i_left = options[:subject_width] + ((project.due_date - self.date_from)*options[:zoom]).floor - - # Make sure negative i_left doesn't overflow the subject - if i_left > options[:subject_width] - options[:image].fill('blue') - options[:image].rectangle(i_left, options[:top], i_left + 6, options[:top] - 6) - options[:image].fill('black') - options[:image].text(i_left + 11, options[:top] + 1, project.name) - end + image_task(options, coords, :label => label, :markers => true, :height => 3) when :pdf - options[:pdf].SetY(options[:top]+1.5) - i_left = ((project.due_date - @date_from)*options[:zoom]) - - # Make sure negative i_left doesn't overflow the subject - if i_left > 0 - options[:pdf].SetX(options[:subject_width] + i_left) - options[:pdf].SetFillColor(50,50,200) - options[:pdf].Cell(2, 2, "", 0, 0, "", 1) - - options[:pdf].SetY(options[:top]+1.5) - options[:pdf].SetX(options[:subject_width] + i_left + 3) - options[:pdf].Cell(30, 2, "#{project.name}") - end + pdf_task(options, coords, :label => label, :markers => true, :height => 0.8) end else ActiveRecord::Base.logger.debug "Gantt#line_for_project was not given a project with a start_date" @@ -386,34 +298,15 @@ def subject_for_version(version, options) case options[:format] when :html - output = '' - output << "
    " - if version.is_a? Version - output << "" - output << view.link_to_version(version) - output << '' - else - ActiveRecord::Base.logger.debug "Gantt#subject_for_version was not given a version" - '' - end - output << "
    " - - output + subject = "" + subject << view.link_to_version(version) + subject << '' + html_subject(options, subject, :css => "version-name") when :image - options[:image].fill('black') - options[:image].stroke('transparent') - options[:image].stroke_width(1) - options[:image].text(options[:indent], options[:top] + 2, version.to_s_with_project) + image_subject(options, version.to_s_with_project) when :pdf - options[:pdf].SetY(options[:top]) - options[:pdf].SetX(15) - - char_limit = PDF::MaxCharactorsForSubject - options[:indent] - options[:pdf].Cell(options[:subject_width]-15, 5, (" " * options[:indent]) +"#{version.to_s_with_project}".sub(/^(.{#{char_limit}}[^\s]*\s).*$/, '\1 (...)'), "LR") - - options[:pdf].SetY(options[:top]) - options[:pdf].SetX(options[:subject_width]) - options[:pdf].Cell(options[:g_width], 5, "", "LR") + pdf_new_page?(options) + pdf_subject(options, version.to_s_with_project) end end @@ -423,94 +316,17 @@ options[:zoom] ||= 1 options[:g_width] ||= (self.date_to - self.date_from + 1) * options[:zoom] + coords = coordinates(version.start_date, version.due_date, version.completed_pourcent, options[:zoom]) + label = "#{h version } #{h version.completed_pourcent.to_i.to_s}%" + label = h("#{version.project} -") + label unless @project && @project == version.project + case options[:format] when :html - output = '' - i_left = ((version.start_date - self.date_from)*options[:zoom]).floor - # TODO: or version.fixed_issues.collect(&:start_date).min - start_date = version.fixed_issues.minimum('start_date') if version.fixed_issues.present? - start_date ||= self.date_from - start_left = ((start_date - self.date_from)*options[:zoom]).floor - - i_end_date = ((version.due_date <= self.date_to) ? version.due_date : self.date_to ) - i_done_date = start_date + ((version.due_date - start_date+1)* version.completed_pourcent/100).floor - i_done_date = (i_done_date <= self.date_from ? self.date_from : i_done_date ) - i_done_date = (i_done_date >= self.date_to ? self.date_to : i_done_date ) - - i_late_date = [i_end_date, Date.today].min if start_date < Date.today - - i_width = (i_left - start_left + 1).floor - 2 # total width of the issue (- 2 for left and right borders) - d_width = ((i_done_date - start_date)*options[:zoom]).floor - 2 # done width - l_width = i_late_date ? ((i_late_date - start_date+1)*options[:zoom]).floor - 2 : 0 # delay width - - i_end = ((i_end_date - self.date_from) * options[:zoom]).floor # Ending pixel - - # Bar graphic - - # Make sure that negative i_left and i_width don't - # overflow the subject - if i_width > 0 && i_left <= options[:g_width] - output << "
     
    " - end - if l_width > 0 && i_left <= options[:g_width] - output << "
     
    " - end - if d_width > 0 && i_left <= options[:g_width] - output<< "
     
    " - end - - - # Starting diamond - if start_left <= options[:g_width] && start_left > 0 - output << "
     
    " - output << "
    " - output << "
    " - end - - # Ending diamond - # Don't show items too far ahead - if i_left <= options[:g_width] && i_end > 0 - output << "
     
    " - end - - # Display the Version name and % - if i_end <= options[:g_width] - # Display the status even if it's floated off to the left - status_px = i_end + 12 # 12px for the diamond - status_px = 0 if status_px <= 0 - - output << "
    " - output << h("#{version.project} -") unless @project && @project == version.project - output << "#{h version } #{h version.completed_pourcent.to_i.to_s}%" - output << "
    " - end - - output + html_task(options, coords, :css => "version task", :label => label, :markers => true) when :image - options[:image].stroke('transparent') - i_left = options[:subject_width] + ((version.start_date - @date_from)*options[:zoom]).floor - - # Make sure negative i_left doesn't overflow the subject - if i_left > options[:subject_width] - options[:image].fill('green') - options[:image].rectangle(i_left, options[:top], i_left + 6, options[:top] - 6) - options[:image].fill('black') - options[:image].text(i_left + 11, options[:top] + 1, version.name) - end + image_task(options, coords, :label => label, :markers => true, :height => 3) when :pdf - options[:pdf].SetY(options[:top]+1.5) - i_left = ((version.start_date - @date_from)*options[:zoom]) - - # Make sure negative i_left doesn't overflow the subject - if i_left > 0 - options[:pdf].SetX(options[:subject_width] + i_left) - options[:pdf].SetFillColor(50,200,50) - options[:pdf].Cell(2, 2, "", 0, 0, "", 1) - - options[:pdf].SetY(options[:top]+1.5) - options[:pdf].SetX(options[:subject_width] + i_left + 3) - options[:pdf].Cell(30, 2, "#{version.name}") - end + pdf_task(options, coords, :label => label, :markers => true, :height => 0.8) end else ActiveRecord::Base.logger.debug "Gantt#line_for_version was not given a version with a start_date" @@ -519,206 +335,55 @@ end def subject_for_issue(issue, options) - case options[:format] + while @issue_ancestors.any? && !issue.is_descendant_of?(@issue_ancestors.last) + @issue_ancestors.pop + options[:indent] -= options[:indent_increment] + end + + output = case options[:format] when :html - output = '' - output << "
    " - output << "
    " - if issue.is_a? Issue - css_classes = [] - css_classes << 'issue-overdue' if issue.overdue? - css_classes << 'issue-behind-schedule' if issue.behind_schedule? - css_classes << 'icon icon-issue' unless Setting.gravatar_enabled? && issue.assigned_to + css_classes = '' + css_classes << ' issue-overdue' if issue.overdue? + css_classes << ' issue-behind-schedule' if issue.behind_schedule? + css_classes << ' icon icon-issue' unless Setting.gravatar_enabled? && issue.assigned_to - if issue.assigned_to.present? - assigned_string = l(:field_assigned_to) + ": " + issue.assigned_to.name - output << view.avatar(issue.assigned_to, :class => 'gravatar icon-gravatar', :size => 10, :title => assigned_string) - end - output << "" - output << view.link_to_issue(issue) - output << '' - else - ActiveRecord::Base.logger.debug "Gantt#subject_for_issue was not given an issue" - '' + subject = "" + 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).to_s end - output << "
    " + subject << view.link_to_issue(issue) + subject << '' + html_subject(options, subject, :css => "issue-subject", :title => issue.subject) + "\n" + when :image + image_subject(options, issue.subject) + when :pdf + pdf_new_page?(options) + pdf_subject(options, issue.subject) + end - # Tooltip - if issue.is_a? Issue - output << "" - output << view.render_issue_tooltip(issue) - output << "" - end + unless issue.leaf? + @issue_ancestors << issue + options[:indent] += options[:indent_increment] + end - output << "
    " - output - when :image - options[:image].fill('black') - options[:image].stroke('transparent') - options[:image].stroke_width(1) - options[:image].text(options[:indent], options[:top] + 2, issue.subject) - when :pdf - options[:pdf].SetY(options[:top]) - options[:pdf].SetX(15) - - char_limit = PDF::MaxCharactorsForSubject - options[:indent] - options[:pdf].Cell(options[:subject_width]-15, 5, (" " * options[:indent]) +"#{issue.tracker} #{issue.id}: #{issue.subject}".sub(/^(.{#{char_limit}}[^\s]*\s).*$/, '\1 (...)'), "LR") - - options[:pdf].SetY(options[:top]) - options[:pdf].SetX(options[:subject_width]) - options[:pdf].Cell(options[:g_width], 5, "", "LR") - end + output end def line_for_issue(issue, options) # Skip issues that don't have a due_before (due_date or version's due_date) if issue.is_a?(Issue) && issue.due_before + coords = coordinates(issue.start_date, issue.due_before, issue.done_ratio, options[:zoom]) + label = "#{ issue.status.name } #{ issue.done_ratio }%" + case options[:format] when :html - output = '' - # Handle nil start_dates, rare but can happen. - i_start_date = if issue.start_date && issue.start_date >= self.date_from - issue.start_date - else - self.date_from - end - - i_end_date = ((issue.due_before && issue.due_before <= self.date_to) ? issue.due_before : self.date_to ) - i_done_date = i_start_date + ((issue.due_before - i_start_date+1)*issue.done_ratio/100).floor - i_done_date = (i_done_date <= self.date_from ? self.date_from : i_done_date ) - i_done_date = (i_done_date >= self.date_to ? self.date_to : i_done_date ) - - i_late_date = [i_end_date, Date.today].min if i_start_date < Date.today - - i_left = ((i_start_date - self.date_from)*options[:zoom]).floor - i_width = ((i_end_date - i_start_date + 1)*options[:zoom]).floor - 2 # total width of the issue (- 2 for left and right borders) - d_width = ((i_done_date - i_start_date)*options[:zoom]).floor - 2 # done width - l_width = i_late_date ? ((i_late_date - i_start_date+1)*options[:zoom]).floor - 2 : 0 # delay width - css = "task " + (issue.leaf? ? 'leaf' : 'parent') - - # Make sure that negative i_left and i_width don't - # overflow the subject - if i_width > 0 - output << "
     
    " - end - if l_width > 0 - output << "
     
    " - end - if d_width > 0 - output<< "
     
    " - end - - # Display the status even if it's floated off to the left - status_px = i_left + i_width + 5 - status_px = 5 if status_px <= 0 - - output << "
    " - output << issue.status.name - output << ' ' - output << (issue.done_ratio).to_i.to_s - output << "%" - output << "
    " - - output << "
    " - output << '' - output << view.render_issue_tooltip(issue) - output << "
    " - output - + html_task(options, coords, :css => "task " + (issue.leaf? ? 'leaf' : 'parent'), :label => label, :issue => issue, :markers => !issue.leaf?) when :image - # Handle nil start_dates, rare but can happen. - i_start_date = if issue.start_date && issue.start_date >= @date_from - issue.start_date - else - @date_from - end - - i_end_date = (issue.due_before <= date_to ? issue.due_before : date_to ) - i_done_date = i_start_date + ((issue.due_before - i_start_date+1)*issue.done_ratio/100).floor - i_done_date = (i_done_date <= @date_from ? @date_from : i_done_date ) - i_done_date = (i_done_date >= date_to ? date_to : i_done_date ) - i_late_date = [i_end_date, Date.today].min if i_start_date < Date.today - - i_left = options[:subject_width] + ((i_start_date - @date_from)*options[:zoom]).floor - i_width = ((i_end_date - i_start_date + 1)*options[:zoom]).floor # total width of the issue - d_width = ((i_done_date - i_start_date)*options[:zoom]).floor # done width - l_width = i_late_date ? ((i_late_date - i_start_date+1)*options[:zoom]).floor : 0 # delay width - - - # Make sure that negative i_left and i_width don't - # overflow the subject - if i_width > 0 - options[:image].fill('grey') - options[:image].rectangle(i_left, options[:top], i_left + i_width, options[:top] - 6) - options[:image].fill('red') - options[:image].rectangle(i_left, options[:top], i_left + l_width, options[:top] - 6) if l_width > 0 - options[:image].fill('blue') - options[:image].rectangle(i_left, options[:top], i_left + d_width, options[:top] - 6) if d_width > 0 - end - - # Show the status and % done next to the subject if it overflows - options[:image].fill('black') - if i_width > 0 - options[:image].text(i_left + i_width + 5,options[:top] + 1, "#{issue.status.name} #{issue.done_ratio}%") - else - options[:image].text(options[:subject_width] + 5,options[:top] + 1, "#{issue.status.name} #{issue.done_ratio}%") - end - + image_task(options, coords, :label => label) when :pdf - options[:pdf].SetY(options[:top]+1.5) - # Handle nil start_dates, rare but can happen. - i_start_date = if issue.start_date && issue.start_date >= @date_from - issue.start_date - else - @date_from - end - - i_end_date = (issue.due_before <= @date_to ? issue.due_before : @date_to ) - - i_done_date = i_start_date + ((issue.due_before - i_start_date+1)*issue.done_ratio/100).floor - i_done_date = (i_done_date <= @date_from ? @date_from : i_done_date ) - i_done_date = (i_done_date >= @date_to ? @date_to : i_done_date ) - - i_late_date = [i_end_date, Date.today].min if i_start_date < Date.today - - i_left = ((i_start_date - @date_from)*options[:zoom]) - i_width = ((i_end_date - i_start_date + 1)*options[:zoom]) - d_width = ((i_done_date - i_start_date)*options[:zoom]) - l_width = ((i_late_date - i_start_date+1)*options[:zoom]) if i_late_date - l_width ||= 0 - - # Make sure that negative i_left and i_width don't - # overflow the subject - if i_width > 0 - options[:pdf].SetX(options[:subject_width] + i_left) - options[:pdf].SetFillColor(200,200,200) - options[:pdf].Cell(i_width, 2, "", 0, 0, "", 1) - end - - if l_width > 0 - options[:pdf].SetY(options[:top]+1.5) - options[:pdf].SetX(options[:subject_width] + i_left) - options[:pdf].SetFillColor(255,100,100) - options[:pdf].Cell(l_width, 2, "", 0, 0, "", 1) - end - if d_width > 0 - options[:pdf].SetY(options[:top]+1.5) - options[:pdf].SetX(options[:subject_width] + i_left) - options[:pdf].SetFillColor(100,100,255) - options[:pdf].Cell(d_width, 2, "", 0, 0, "", 1) - end - - options[:pdf].SetY(options[:top]+1.5) - - # Make sure that negative i_left and i_width don't - # overflow the subject - if (i_left + i_width) >= 0 - options[:pdf].SetX(options[:subject_width] + i_left + i_width) - else - options[:pdf].SetX(options[:subject_width]) - end - options[:pdf].Cell(30, 2, "#{issue.status} #{issue.done_ratio}%") - end + pdf_task(options, coords, :label => label) + end else ActiveRecord::Base.logger.debug "GanttHelper#line_for_issue was not given an issue with a due_before" '' @@ -728,30 +393,31 @@ # Generates a gantt image # Only defined if RMagick is avalaible def to_image(format='PNG') - date_to = (@date_from >> @months)-1 + date_to = (@date_from >> @months)-1 show_weeks = @zoom > 1 show_days = @zoom > 2 - + subject_width = 400 - header_heigth = 18 + header_height = 18 # width of one day in pixels zoom = @zoom*2 g_width = (@date_to - @date_from + 1)*zoom g_height = 20 * number_of_rows + 30 - headers_heigth = (show_weeks ? 2*header_heigth : header_heigth) - height = g_height + headers_heigth - + headers_height = (show_weeks ? 2*header_height : header_height) + height = g_height + headers_height + imgl = Magick::ImageList.new imgl.new_image(subject_width+g_width+1, height) gc = Magick::Draw.new - + # Subjects - subjects(:image => gc, :top => (headers_heigth + 20), :indent => 4, :format => :image) - + gc.stroke('transparent') + subjects(:image => gc, :top => (headers_height + 20), :indent => 4, :format => :image) + # Months headers month_f = @date_from left = subject_width - @months.times do + @months.times do width = ((month_f >> 1) - month_f) * zoom gc.fill('white') gc.stroke('grey') @@ -764,11 +430,11 @@ left = left + width month_f = month_f >> 1 end - + # Weeks headers if show_weeks left = subject_width - height = header_heigth + height = header_height if @date_from.cwday == 1 # date_from is monday week_f = date_from @@ -779,7 +445,7 @@ gc.fill('white') gc.stroke('grey') gc.stroke_width(1) - gc.rectangle(left, header_heigth, left + width, 2*header_heigth + g_height-1) + gc.rectangle(left, header_height, left + width, 2*header_height + g_height-1) left = left + width end while week_f <= date_to @@ -787,110 +453,111 @@ gc.fill('white') gc.stroke('grey') gc.stroke_width(1) - gc.rectangle(left.round, header_heigth, left.round + width, 2*header_heigth + g_height-1) + gc.rectangle(left.round, header_height, left.round + width, 2*header_height + g_height-1) gc.fill('black') gc.stroke('transparent') gc.stroke_width(1) - gc.text(left.round + 2, header_heigth + 14, week_f.cweek.to_s) + gc.text(left.round + 2, header_height + 14, week_f.cweek.to_s) left = left + width week_f = week_f+7 end end - + # Days details (week-end in grey) if show_days left = subject_width - height = g_height + header_heigth - 1 + height = g_height + header_height - 1 wday = @date_from.cwday - (date_to - @date_from + 1).to_i.times do + (date_to - @date_from + 1).to_i.times do width = zoom gc.fill(wday == 6 || wday == 7 ? '#eee' : 'white') - gc.stroke('grey') + gc.stroke('#ddd') gc.stroke_width(1) - gc.rectangle(left, 2*header_heigth, left + width, 2*header_heigth + g_height-1) + gc.rectangle(left, 2*header_height, left + width, 2*header_height + g_height-1) left = left + width wday = wday + 1 wday = 1 if wday > 7 end end - + # border gc.fill('transparent') gc.stroke('grey') gc.stroke_width(1) - gc.rectangle(0, 0, subject_width+g_width, headers_heigth) + gc.rectangle(0, 0, subject_width+g_width, headers_height) gc.stroke('black') - gc.rectangle(0, 0, subject_width+g_width, g_height+ headers_heigth-1) - + gc.rectangle(0, 0, subject_width+g_width, g_height+ headers_height-1) + # content - top = headers_heigth + 20 - + top = headers_height + 20 + + gc.stroke('transparent') lines(:image => gc, :top => top, :zoom => zoom, :subject_width => subject_width, :format => :image) - + # today red line if Date.today >= @date_from and Date.today <= date_to gc.stroke('red') x = (Date.today-@date_from+1)*zoom + subject_width - gc.line(x, headers_heigth, x, headers_heigth + g_height-1) - end - + gc.line(x, headers_height, x, headers_height + g_height-1) + end + gc.draw(imgl) imgl.format = format imgl.to_blob end if Object.const_defined?(:Magick) def to_pdf - pdf = ::Redmine::Export::PDF::IFPDF.new(current_language) + pdf = ::Redmine::Export::PDF::ITCPDF.new(current_language) pdf.SetTitle("#{l(:label_gantt)} #{project}") - pdf.AliasNbPages + pdf.alias_nb_pages pdf.footer_date = format_date(Date.today) pdf.AddPage("L") pdf.SetFontStyle('B',12) pdf.SetX(15) - pdf.Cell(PDF::LeftPaneWidth, 20, project.to_s) + pdf.RDMCell(PDF::LeftPaneWidth, 20, project.to_s) pdf.Ln pdf.SetFontStyle('B',9) - + subject_width = PDF::LeftPaneWidth - header_heigth = 5 - - headers_heigth = header_heigth + header_height = 5 + + headers_height = header_height show_weeks = false show_days = false - + if self.months < 7 show_weeks = true - headers_heigth = 2*header_heigth + headers_height = 2*header_height if self.months < 3 show_days = true - headers_heigth = 3*header_heigth + headers_height = 3*header_height end end - + g_width = PDF.right_pane_width zoom = (g_width) / (self.date_to - self.date_from + 1) g_height = 120 - t_height = g_height + headers_heigth - + t_height = g_height + headers_height + y_start = pdf.GetY - + # Months headers month_f = self.date_from left = subject_width - height = header_heigth - self.months.times do - width = ((month_f >> 1) - month_f) * zoom + height = header_height + self.months.times do + width = ((month_f >> 1) - month_f) * zoom pdf.SetY(y_start) pdf.SetX(left) - pdf.Cell(width, height, "#{month_f.year}-#{month_f.month}", "LTR", 0, "C") + pdf.RDMCell(width, height, "#{month_f.year}-#{month_f.month}", "LTR", 0, "C") left = left + width month_f = month_f >> 1 - end - + end + # Weeks headers if show_weeks left = subject_width - height = header_heigth + height = header_height if self.date_from.cwday == 1 # self.date_from is monday week_f = self.date_from @@ -898,77 +565,296 @@ # find next monday after self.date_from week_f = self.date_from + (7 - self.date_from.cwday + 1) width = (7 - self.date_from.cwday + 1) * zoom-1 - pdf.SetY(y_start + header_heigth) + pdf.SetY(y_start + header_height) pdf.SetX(left) - pdf.Cell(width + 1, height, "", "LTR") + pdf.RDMCell(width + 1, height, "", "LTR") left = left + width+1 end while week_f <= self.date_to width = (week_f + 6 <= self.date_to) ? 7 * zoom : (self.date_to - week_f + 1) * zoom - pdf.SetY(y_start + header_heigth) + pdf.SetY(y_start + header_height) pdf.SetX(left) - pdf.Cell(width, height, (width >= 5 ? week_f.cweek.to_s : ""), "LTR", 0, "C") + pdf.RDMCell(width, height, (width >= 5 ? week_f.cweek.to_s : ""), "LTR", 0, "C") left = left + width week_f = week_f+7 end end - + # Days headers if show_days left = subject_width - height = header_heigth + height = header_height wday = self.date_from.cwday pdf.SetFontStyle('B',7) - (self.date_to - self.date_from + 1).to_i.times do + (self.date_to - self.date_from + 1).to_i.times do width = zoom - pdf.SetY(y_start + 2 * header_heigth) + pdf.SetY(y_start + 2 * header_height) pdf.SetX(left) - pdf.Cell(width, height, day_name(wday).first, "LTR", 0, "C") + pdf.RDMCell(width, height, day_name(wday).first, "LTR", 0, "C") left = left + width wday = wday + 1 wday = 1 if wday > 7 end end - + pdf.SetY(y_start) pdf.SetX(15) - pdf.Cell(subject_width+g_width-15, headers_heigth, "", 1) - + pdf.RDMCell(subject_width+g_width-15, headers_height, "", 1) + # Tasks - top = headers_heigth + y_start - pdf_subjects_and_lines(pdf, { - :top => top, - :zoom => zoom, - :subject_width => subject_width, - :g_width => g_width - }) + top = headers_height + y_start + options = { + :top => top, + :zoom => zoom, + :subject_width => subject_width, + :g_width => g_width, + :indent => 0, + :indent_increment => 5, + :top_increment => 5, + :format => :pdf, + :pdf => pdf + } + render(options) + pdf.Output + end - - pdf.Line(15, top, subject_width+g_width, top) - pdf.Output - - - end - private - # Renders both the subjects and lines of the Gantt chart for the - # PDF format - def pdf_subjects_and_lines(pdf, options = {}) - subject_options = {:indent => 0, :indent_increment => 5, :top_increment => 3, :render => :subject, :format => :pdf, :pdf => pdf}.merge(options) - line_options = {:indent => 0, :indent_increment => 5, :top_increment => 3, :render => :line, :format => :pdf, :pdf => pdf}.merge(options) + def coordinates(start_date, end_date, progress, zoom=nil) + zoom ||= @zoom - if @project - render_project(@project, subject_options) - render_project(@project, line_options) + coords = {} + if start_date && end_date && start_date < self.date_to && end_date > self.date_from + if start_date > self.date_from + coords[:start] = start_date - self.date_from + coords[:bar_start] = start_date - self.date_from + else + coords[:bar_start] = 0 + end + if end_date < self.date_to + coords[:end] = end_date - self.date_from + coords[:bar_end] = end_date - self.date_from + 1 + else + coords[:bar_end] = self.date_to - self.date_from + 1 + end + + if progress + progress_date = start_date + (end_date - start_date + 1) * (progress / 100.0) + if progress_date > self.date_from && progress_date > start_date + if progress_date < self.date_to + coords[:bar_progress_end] = progress_date - self.date_from + else + coords[:bar_progress_end] = self.date_to - self.date_from + 1 + end + end + + if progress_date < Date.today + late_date = [Date.today, end_date].min + if late_date > self.date_from && late_date > start_date + if late_date < self.date_to + coords[:bar_late_end] = late_date - self.date_from + 1 + else + coords[:bar_late_end] = self.date_to - self.date_from + 1 + end + end + end + end + end + + # Transforms dates into pixels witdh + coords.keys.each do |key| + coords[key] = (coords[key] * zoom).floor + end + coords + end + + # Sorts a collection of issues by start_date, due_date, id for gantt rendering + def sort_issues!(issues) + issues.sort! { |a, b| gantt_issue_compare(a, b, issues) } + end + + # TODO: top level issues should be sorted by start date + def gantt_issue_compare(x, y, issues) + if x.root_id == y.root_id + x.lft <=> y.lft else - Project.roots.each do |project| - render_project(project, subject_options) - render_project(project, line_options) - end + x.root_id <=> y.root_id end end + def current_limit + if @max_rows + @max_rows - @number_of_rows + else + nil + end + end + + def abort? + if @max_rows && @number_of_rows >= @max_rows + @truncated = true + end + end + + def pdf_new_page?(options) + if options[:top] > 180 + options[:pdf].Line(15, options[:top], PDF::TotalWidth, options[:top]) + options[:pdf].AddPage("L") + options[:top] = 15 + options[:pdf].Line(15, options[:top] - 0.1, PDF::TotalWidth, options[:top] - 0.1) + end + end + + def html_subject(params, subject, options={}) + 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 + + def pdf_subject(params, subject, options={}) + params[:pdf].SetY(params[:top]) + params[:pdf].SetX(15) + + char_limit = PDF::MaxCharactorsForSubject - params[:indent] + params[:pdf].RDMCell(params[:subject_width]-15, 5, (" " * params[:indent]) + subject.to_s.sub(/^(.{#{char_limit}}[^\s]*\s).*$/, '\1 (...)'), "LR") + + params[:pdf].SetY(params[:top]) + params[:pdf].SetX(params[:subject_width]) + params[:pdf].RDMCell(params[:g_width], 5, "", "LR") + end + + def image_subject(params, subject, options={}) + params[:image].fill('black') + params[:image].stroke('transparent') + params[:image].stroke_width(1) + params[:image].text(params[:indent], params[:top] + 2, subject) + end + + def html_task(params, coords, options={}) + output = '' + # Renders the task bar, with progress and late + if coords[:bar_start] && coords[:bar_end] + output << "
     
    " + + if coords[:bar_late_end] + output << "
     
    " + end + if coords[:bar_progress_end] + output << "
     
    " + end + end + # Renders the markers + if options[:markers] + if coords[:start] + output << "
     
    " + end + if coords[:end] + output << "
     
    " + end + end + # Renders the label on the right + if options[:label] + output << "
    " + output << options[:label] + output << "
    " + end + # Renders the tooltip + if options[:issue] && coords[:bar_start] && coords[:bar_end] + output << "
    " + output << '' + output << view.render_issue_tooltip(options[:issue]) + output << "
    " + end + @lines << output + output + end + + def pdf_task(params, coords, options={}) + height = options[:height] || 2 + + # Renders the task bar, with progress and late + if coords[:bar_start] && coords[:bar_end] + params[:pdf].SetY(params[:top]+1.5) + params[:pdf].SetX(params[:subject_width] + coords[:bar_start]) + params[:pdf].SetFillColor(200,200,200) + params[:pdf].RDMCell(coords[:bar_end] - coords[:bar_start], height, "", 0, 0, "", 1) + + if coords[:bar_late_end] + params[:pdf].SetY(params[:top]+1.5) + params[:pdf].SetX(params[:subject_width] + coords[:bar_start]) + params[:pdf].SetFillColor(255,100,100) + params[:pdf].RDMCell(coords[:bar_late_end] - coords[:bar_start], height, "", 0, 0, "", 1) + end + if coords[:bar_progress_end] + params[:pdf].SetY(params[:top]+1.5) + params[:pdf].SetX(params[:subject_width] + coords[:bar_start]) + params[:pdf].SetFillColor(90,200,90) + params[:pdf].RDMCell(coords[:bar_progress_end] - coords[:bar_start], height, "", 0, 0, "", 1) + end + end + # Renders the markers + if options[:markers] + if coords[:start] + params[:pdf].SetY(params[:top] + 1) + params[:pdf].SetX(params[:subject_width] + coords[:start] - 1) + params[:pdf].SetFillColor(50,50,200) + params[:pdf].RDMCell(2, 2, "", 0, 0, "", 1) + end + if coords[:end] + params[:pdf].SetY(params[:top] + 1) + params[:pdf].SetX(params[:subject_width] + coords[:end] - 1) + params[:pdf].SetFillColor(50,50,200) + params[:pdf].RDMCell(2, 2, "", 0, 0, "", 1) + end + end + # Renders the label on the right + if options[:label] + params[:pdf].SetX(params[:subject_width] + (coords[:bar_end] || 0) + 5) + params[:pdf].RDMCell(30, 2, options[:label]) + end + end + + def image_task(params, coords, options={}) + height = options[:height] || 6 + + # Renders the task bar, with progress and late + if coords[:bar_start] && coords[:bar_end] + params[:image].fill('#aaa') + params[:image].rectangle(params[:subject_width] + coords[:bar_start], params[:top], params[:subject_width] + coords[:bar_end], params[:top] - height) + + if coords[:bar_late_end] + params[:image].fill('#f66') + params[:image].rectangle(params[:subject_width] + coords[:bar_start], params[:top], params[:subject_width] + coords[:bar_late_end], params[:top] - height) + end + if coords[:bar_progress_end] + params[:image].fill('#00c600') + params[:image].rectangle(params[:subject_width] + coords[:bar_start], params[:top], params[:subject_width] + coords[:bar_progress_end], params[:top] - height) + end + end + # Renders the markers + if options[:markers] + if coords[:start] + x = params[:subject_width] + coords[:start] + y = params[:top] - height / 2 + params[:image].fill('blue') + params[:image].polygon(x-4, y, x, y-4, x+4, y, x, y+4) + end + if coords[:end] + x = params[:subject_width] + coords[:end] + params[:zoom] + y = params[:top] - height / 2 + params[:image].fill('blue') + params[:image].polygon(x-4, y, x, y-4, x+4, y, x, y+4) + end + end + # Renders the label on the right + if options[:label] + params[:image].fill('black') + params[:image].text(params[:subject_width] + (coords[:bar_end] || 0) + 5,params[:top] + 1, options[:label]) + end + end end end end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/helpers/calendar.rb --- a/lib/redmine/helpers/calendar.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/helpers/calendar.rb Mon Jul 25 14:23:37 2011 +0100 @@ -68,6 +68,8 @@ case Setting.start_of_week.to_i when 1 @first_dow ||= (1 - 1)%7 + 1 + when 6 + @first_dow ||= (6 - 1)%7 + 1 when 7 @first_dow ||= (7 - 1)%7 + 1 else diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/helpers/diff.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/helpers/diff.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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] = '' + words[add_at] + words[add_to] = words[add_to] + '' + end + if del_at + words.insert del_at - del_off + dels + words_add, '' + deleted + '' + dels += 1 + del_off += words_del + words_del = 0 + end + end + words.join(' ') + end + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/helpers/gantt.rb --- a/lib/redmine/helpers/gantt.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/helpers/gantt.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ # Redmine - project management software -# Copyright (C) 2006-2008 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 # 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. @@ -34,14 +34,14 @@ end end - attr_reader :year_from, :month_from, :date_from, :date_to, :zoom, :months + attr_reader :year_from, :month_from, :date_from, :date_to, :zoom, :months, :truncated, :max_rows attr_accessor :query attr_accessor :project attr_accessor :view - + def initialize(options={}) options = options.dup - + if options[:year] && options[:year].to_i >0 @year_from = options[:year].to_i if options[:month] && options[:month].to_i >=1 && options[:month].to_i <= 12 @@ -53,232 +53,222 @@ @month_from ||= Date.today.month @year_from ||= Date.today.year end - + zoom = (options[:zoom] || User.current.pref[:gantt_zoom]).to_i - @zoom = (zoom > 0 && zoom < 5) ? zoom : 2 + @zoom = (zoom > 0 && zoom < 5) ? zoom : 2 months = (options[:months] || User.current.pref[:gantt_months]).to_i @months = (months > 0 && months < 25) ? months : 6 - + # Save gantt parameters as user preference (zoom and months count) if (User.current.logged? && (@zoom != User.current.pref[:gantt_zoom] || @months != User.current.pref[:gantt_months])) User.current.pref[:gantt_zoom], User.current.pref[:gantt_months] = @zoom, @months User.current.preference.save end - + @date_from = Date.civil(@year_from, @month_from, 1) @date_to = (@date_from >> @months) - 1 + + @subjects = '' + @lines = '' + @number_of_rows = nil + + @issue_ancestors = [] + + @truncated = false + if options.has_key?(:max_rows) + @max_rows = options[:max_rows] + else + @max_rows = Setting.gantt_items_limit.blank? ? nil : Setting.gantt_items_limit.to_i + end end def common_params { :controller => 'gantts', :action => 'show', :project_id => @project } end - + def params common_params.merge({ :zoom => zoom, :year => year_from, :month => month_from, :months => months }) end - + def params_previous common_params.merge({:year => (date_from << months).year, :month => (date_from << months).month, :zoom => zoom, :months => months }) end - + def params_next common_params.merge({:year => (date_from >> months).year, :month => (date_from >> months).month, :zoom => zoom, :months => months }) end - ### Extracted from the HTML view/helpers # Returns the number of rows that will be rendered on the Gantt chart def number_of_rows - if @project - return number_of_rows_on_project(@project) - else - Project.roots.inject(0) do |total, project| - total += number_of_rows_on_project(project) - end - end + return @number_of_rows if @number_of_rows + + rows = projects.inject(0) {|total, p| total += number_of_rows_on_project(p)} + rows > @max_rows ? @max_rows : rows end # Returns the number of rows that will be used to list a project on # the Gantt chart. This will recurse for each subproject. def number_of_rows_on_project(project) - # Remove the project requirement for Versions because it will - # restrict issues to only be on the current project. This - # ends up missing issues which are assigned to shared versions. - @query.project = nil if @query.project + return 0 unless projects.include?(project) - # One Root project count = 1 - # Issues without a Version - count += project.issues.for_gantt.without_version.with_query(@query).count - - # Versions - count += project.versions.count - - # Issues on the Versions - project.versions.each do |version| - count += version.fixed_issues.for_gantt.with_query(@query).count - end - - # Subprojects - project.children.each do |subproject| - count += number_of_rows_on_project(subproject) - end - + count += project_issues(project).size + count += project_versions(project).size count end # Renders the subjects of the Gantt chart, the left side. def subjects(options={}) - options = {:indent => 4, :render => :subject, :format => :html}.merge(options) - - output = '' - if @project - output << render_project(@project, options) - else - Project.roots.each do |project| - output << render_project(project, options) - end - end - - output + render(options.merge(:only => :subjects)) unless @subjects_rendered + @subjects end # Renders the lines of the Gantt chart, the right side def lines(options={}) - options = {:indent => 4, :render => :line, :format => :html}.merge(options) - output = '' + render(options.merge(:only => :lines)) unless @lines_rendered + @lines + end - if @project - output << render_project(@project, options) + # Returns issues that will be rendered + def issues + @issues ||= @query.issues( + :include => [:assigned_to, :tracker, :priority, :category, :fixed_version], + :order => "#{Project.table_name}.lft ASC, #{Issue.table_name}.id ASC", + :limit => @max_rows + ) + end + + # Return all the project nodes that will be displayed + def projects + return @projects if @projects + + ids = issues.collect(&:project).uniq.collect(&:id) + if ids.any? + # All issues projects and their visible ancestors + @projects = Project.visible.all( + :joins => "LEFT JOIN #{Project.table_name} child ON #{Project.table_name}.lft <= child.lft AND #{Project.table_name}.rgt >= child.rgt", + :conditions => ["child.id IN (?)", ids], + :order => "#{Project.table_name}.lft ASC" + ).uniq else - Project.roots.each do |project| - output << render_project(project, options) - end + @projects = [] end - - output + end + + # Returns the issues that belong to +project+ + def project_issues(project) + @issues_by_project ||= issues.group_by(&:project) + @issues_by_project[project] || [] + end + + # Returns the distinct versions of the issues that belong to +project+ + def project_versions(project) + project_issues(project).collect(&:fixed_version).compact.uniq + end + + # Returns the issues that belong to +project+ and are assigned to +version+ + def version_issues(project, version) + project_issues(project).select {|issue| issue.fixed_version == version} + end + + def render(options={}) + options = {:top => 0, :top_increment => 20, :indent_increment => 20, :render => :subject, :format => :html}.merge(options) + indent = options[:indent] || 4 + + @subjects = '' unless options[:only] == :lines + @lines = '' unless options[:only] == :subjects + @number_of_rows = 0 + + Project.project_tree(projects) do |project, level| + options[:indent] = indent + level * options[:indent_increment] + render_project(project, options) + break if abort? + end + + @subjects_rendered = true unless options[:only] == :lines + @lines_rendered = true unless options[:only] == :subjects + + render_end(options) end def render_project(project, options={}) - options[:top] = 0 unless options.key? :top - options[:indent_increment] = 20 unless options.key? :indent_increment - options[:top_increment] = 20 unless options.key? :top_increment + subject_for_project(project, options) unless options[:only] == :lines + line_for_project(project, options) unless options[:only] == :subjects - output = '' - # Project Header - project_header = if options[:render] == :subject - subject_for_project(project, options) - else - # :line - line_for_project(project, options) - end - output << project_header if options[:format] == :html - options[:top] += options[:top_increment] options[:indent] += options[:indent_increment] - - # Second, Issues without a version - issues = project.issues.for_gantt.without_version.with_query(@query) + @number_of_rows += 1 + return if abort? + + issues = project_issues(project).select {|i| i.fixed_version.nil?} + sort_issues!(issues) if issues - issue_rendering = render_issues(issues, options) - output << issue_rendering if options[:format] == :html + render_issues(issues, options) + return if abort? end - # Third, Versions - project.versions.sort.each do |version| - version_rendering = render_version(version, options) - output << version_rendering if options[:format] == :html - end - - # Fourth, subprojects - project.children.each do |project| - subproject_rendering = render_project(project, options) - output << subproject_rendering if options[:format] == :html + versions = project_versions(project) + versions.each do |version| + render_version(project, version, options) end # Remove indent to hit the next sibling options[:indent] -= options[:indent_increment] - - output end def render_issues(issues, options={}) - output = '' + @issue_ancestors = [] + issues.each do |i| - issue_rendering = if options[:render] == :subject - subject_for_issue(i, options) - else - # :line - line_for_issue(i, options) - end - output << issue_rendering if options[:format] == :html + subject_for_issue(i, options) unless options[:only] == :lines + line_for_issue(i, options) unless options[:only] == :subjects + options[:top] += options[:top_increment] + @number_of_rows += 1 + break if abort? end - output + + options[:indent] -= (options[:indent_increment] * @issue_ancestors.size) end - def render_version(version, options={}) - output = '' + def render_version(project, version, options={}) # Version header - version_rendering = if options[:render] == :subject - subject_for_version(version, options) - else - # :line - line_for_version(version, options) - end + subject_for_version(version, options) unless options[:only] == :lines + line_for_version(version, options) unless options[:only] == :subjects - output << version_rendering if options[:format] == :html - options[:top] += options[:top_increment] + @number_of_rows += 1 + return if abort? - # Remove the project requirement for Versions because it will - # restrict issues to only be on the current project. This - # ends up missing issues which are assigned to shared versions. - @query.project = nil if @query.project - - issues = version.fixed_issues.for_gantt.with_query(@query) + issues = version_issues(project, version) if issues + sort_issues!(issues) # Indent issues options[:indent] += options[:indent_increment] - output << render_issues(issues, options) + render_issues(issues, options) options[:indent] -= options[:indent_increment] end + end - output + def render_end(options={}) + case options[:format] + when :pdf + options[:pdf].Line(15, options[:top], PDF::TotalWidth, options[:top]) + end end def subject_for_project(project, options) case options[:format] when :html - output = '' - - output << "
    " - if project.is_a? Project - output << "" - output << view.link_to_project(project) - output << '' - else - ActiveRecord::Base.logger.debug "Gantt#subject_for_project was not given a project" - '' - end - output << "
    " - - output + subject = "" + subject << view.link_to_project(project) + subject << '' + html_subject(options, subject, :css => "project-name") when :image - - options[:image].fill('black') - options[:image].stroke('transparent') - options[:image].stroke_width(1) - options[:image].text(options[:indent], options[:top] + 2, project.name) + image_subject(options, project.name) when :pdf - options[:pdf].SetY(options[:top]) - options[:pdf].SetX(15) - - char_limit = PDF::MaxCharactorsForSubject - options[:indent] - options[:pdf].Cell(options[:subject_width]-15, 5, (" " * options[:indent]) +"#{project.name}".sub(/^(.{#{char_limit}}[^\s]*\s).*$/, '\1 (...)'), "LR") - - options[:pdf].SetY(options[:top]) - options[:pdf].SetX(options[:subject_width]) - options[:pdf].Cell(options[:g_width], 5, "", "LR") + pdf_new_page?(options) + pdf_subject(options, project.name) end end @@ -288,94 +278,16 @@ options[:zoom] ||= 1 options[:g_width] ||= (self.date_to - self.date_from + 1) * options[:zoom] - + coords = coordinates(project.start_date, project.due_date, nil, options[:zoom]) + label = h(project) + case options[:format] when :html - output = '' - i_left = ((project.start_date - self.date_from)*options[:zoom]).floor - - start_date = project.start_date - start_date ||= self.date_from - start_left = ((start_date - self.date_from)*options[:zoom]).floor - - i_end_date = ((project.due_date <= self.date_to) ? project.due_date : self.date_to ) - i_done_date = start_date + ((project.due_date - start_date+1)* project.completed_percent(:include_subprojects => true)/100).floor - i_done_date = (i_done_date <= self.date_from ? self.date_from : i_done_date ) - i_done_date = (i_done_date >= self.date_to ? self.date_to : i_done_date ) - - i_late_date = [i_end_date, Date.today].min if start_date < Date.today - i_end = ((i_end_date - self.date_from) * options[:zoom]).floor - - i_width = (i_end - i_left + 1).floor - 2 # total width of the issue (- 2 for left and right borders) - d_width = ((i_done_date - start_date)*options[:zoom]).floor - 2 # done width - l_width = i_late_date ? ((i_late_date - start_date+1)*options[:zoom]).floor - 2 : 0 # delay width - - # Bar graphic - - # Make sure that negative i_left and i_width don't - # overflow the subject - if i_end > 0 && i_left <= options[:g_width] - output << "
     
    " - end - - if l_width > 0 && i_left <= options[:g_width] - output << "
     
    " - end - if d_width > 0 && i_left <= options[:g_width] - output<< "
     
    " - end - - - # Starting diamond - if start_left <= options[:g_width] && start_left > 0 - output << "
     
    " - output << "
    " - output << "
    " - end - - # Ending diamond - # Don't show items too far ahead - if i_end <= options[:g_width] && i_end > 0 - output << "
     
    " - end - - # DIsplay the Project name and % - if i_end <= options[:g_width] - # Display the status even if it's floated off to the left - status_px = i_end + 12 # 12px for the diamond - status_px = 0 if status_px <= 0 - - output << "
    " - output << "#{h project } #{h project.completed_percent(:include_subprojects => true).to_i.to_s}%" - output << "
    " - end - - output + html_task(options, coords, :css => "project task", :label => label, :markers => true) when :image - options[:image].stroke('transparent') - i_left = options[:subject_width] + ((project.due_date - self.date_from)*options[:zoom]).floor - - # Make sure negative i_left doesn't overflow the subject - if i_left > options[:subject_width] - options[:image].fill('blue') - options[:image].rectangle(i_left, options[:top], i_left + 6, options[:top] - 6) - options[:image].fill('black') - options[:image].text(i_left + 11, options[:top] + 1, project.name) - end + image_task(options, coords, :label => label, :markers => true, :height => 3) when :pdf - options[:pdf].SetY(options[:top]+1.5) - i_left = ((project.due_date - @date_from)*options[:zoom]) - - # Make sure negative i_left doesn't overflow the subject - if i_left > 0 - options[:pdf].SetX(options[:subject_width] + i_left) - options[:pdf].SetFillColor(50,50,200) - options[:pdf].Cell(2, 2, "", 0, 0, "", 1) - - options[:pdf].SetY(options[:top]+1.5) - options[:pdf].SetX(options[:subject_width] + i_left + 3) - options[:pdf].Cell(30, 2, "#{project.name}") - end + pdf_task(options, coords, :label => label, :markers => true, :height => 0.8) end else ActiveRecord::Base.logger.debug "Gantt#line_for_project was not given a project with a start_date" @@ -386,34 +298,15 @@ def subject_for_version(version, options) case options[:format] when :html - output = '' - output << "
    " - if version.is_a? Version - output << "" - output << view.link_to_version(version) - output << '' - else - ActiveRecord::Base.logger.debug "Gantt#subject_for_version was not given a version" - '' - end - output << "
    " - - output + subject = "" + subject << view.link_to_version(version) + subject << '' + html_subject(options, subject, :css => "version-name") when :image - options[:image].fill('black') - options[:image].stroke('transparent') - options[:image].stroke_width(1) - options[:image].text(options[:indent], options[:top] + 2, version.to_s_with_project) + image_subject(options, version.to_s_with_project) when :pdf - options[:pdf].SetY(options[:top]) - options[:pdf].SetX(15) - - char_limit = PDF::MaxCharactorsForSubject - options[:indent] - options[:pdf].Cell(options[:subject_width]-15, 5, (" " * options[:indent]) +"#{version.to_s_with_project}".sub(/^(.{#{char_limit}}[^\s]*\s).*$/, '\1 (...)'), "LR") - - options[:pdf].SetY(options[:top]) - options[:pdf].SetX(options[:subject_width]) - options[:pdf].Cell(options[:g_width], 5, "", "LR") + pdf_new_page?(options) + pdf_subject(options, version.to_s_with_project) end end @@ -423,94 +316,17 @@ options[:zoom] ||= 1 options[:g_width] ||= (self.date_to - self.date_from + 1) * options[:zoom] + coords = coordinates(version.start_date, version.due_date, version.completed_pourcent, options[:zoom]) + label = "#{h version } #{h version.completed_pourcent.to_i.to_s}%" + label = h("#{version.project} -") + label unless @project && @project == version.project + case options[:format] when :html - output = '' - i_left = ((version.start_date - self.date_from)*options[:zoom]).floor - # TODO: or version.fixed_issues.collect(&:start_date).min - start_date = version.fixed_issues.minimum('start_date') if version.fixed_issues.present? - start_date ||= self.date_from - start_left = ((start_date - self.date_from)*options[:zoom]).floor - - i_end_date = ((version.due_date <= self.date_to) ? version.due_date : self.date_to ) - i_done_date = start_date + ((version.due_date - start_date+1)* version.completed_pourcent/100).floor - i_done_date = (i_done_date <= self.date_from ? self.date_from : i_done_date ) - i_done_date = (i_done_date >= self.date_to ? self.date_to : i_done_date ) - - i_late_date = [i_end_date, Date.today].min if start_date < Date.today - - i_width = (i_left - start_left + 1).floor - 2 # total width of the issue (- 2 for left and right borders) - d_width = ((i_done_date - start_date)*options[:zoom]).floor - 2 # done width - l_width = i_late_date ? ((i_late_date - start_date+1)*options[:zoom]).floor - 2 : 0 # delay width - - i_end = ((i_end_date - self.date_from) * options[:zoom]).floor # Ending pixel - - # Bar graphic - - # Make sure that negative i_left and i_width don't - # overflow the subject - if i_width > 0 && i_left <= options[:g_width] - output << "
     
    " - end - if l_width > 0 && i_left <= options[:g_width] - output << "
     
    " - end - if d_width > 0 && i_left <= options[:g_width] - output<< "
     
    " - end - - - # Starting diamond - if start_left <= options[:g_width] && start_left > 0 - output << "
     
    " - output << "
    " - output << "
    " - end - - # Ending diamond - # Don't show items too far ahead - if i_left <= options[:g_width] && i_end > 0 - output << "
     
    " - end - - # Display the Version name and % - if i_end <= options[:g_width] - # Display the status even if it's floated off to the left - status_px = i_end + 12 # 12px for the diamond - status_px = 0 if status_px <= 0 - - output << "
    " - output << h("#{version.project} -") unless @project && @project == version.project - output << "#{h version } #{h version.completed_pourcent.to_i.to_s}%" - output << "
    " - end - - output + html_task(options, coords, :css => "version task", :label => label, :markers => true) when :image - options[:image].stroke('transparent') - i_left = options[:subject_width] + ((version.start_date - @date_from)*options[:zoom]).floor - - # Make sure negative i_left doesn't overflow the subject - if i_left > options[:subject_width] - options[:image].fill('green') - options[:image].rectangle(i_left, options[:top], i_left + 6, options[:top] - 6) - options[:image].fill('black') - options[:image].text(i_left + 11, options[:top] + 1, version.name) - end + image_task(options, coords, :label => label, :markers => true, :height => 3) when :pdf - options[:pdf].SetY(options[:top]+1.5) - i_left = ((version.start_date - @date_from)*options[:zoom]) - - # Make sure negative i_left doesn't overflow the subject - if i_left > 0 - options[:pdf].SetX(options[:subject_width] + i_left) - options[:pdf].SetFillColor(50,200,50) - options[:pdf].Cell(2, 2, "", 0, 0, "", 1) - - options[:pdf].SetY(options[:top]+1.5) - options[:pdf].SetX(options[:subject_width] + i_left + 3) - options[:pdf].Cell(30, 2, "#{version.name}") - end + pdf_task(options, coords, :label => label, :markers => true, :height => 0.8) end else ActiveRecord::Base.logger.debug "Gantt#line_for_version was not given a version with a start_date" @@ -519,206 +335,55 @@ end def subject_for_issue(issue, options) - case options[:format] + while @issue_ancestors.any? && !issue.is_descendant_of?(@issue_ancestors.last) + @issue_ancestors.pop + options[:indent] -= options[:indent_increment] + end + + output = case options[:format] when :html - output = '' - output << "
    " - output << "
    " - if issue.is_a? Issue - css_classes = [] - css_classes << 'issue-overdue' if issue.overdue? - css_classes << 'issue-behind-schedule' if issue.behind_schedule? - css_classes << 'icon icon-issue' unless Setting.gravatar_enabled? && issue.assigned_to + css_classes = '' + css_classes << ' issue-overdue' if issue.overdue? + css_classes << ' issue-behind-schedule' if issue.behind_schedule? + css_classes << ' icon icon-issue' unless Setting.gravatar_enabled? && issue.assigned_to - if issue.assigned_to.present? - assigned_string = l(:field_assigned_to) + ": " + issue.assigned_to.name - output << view.avatar(issue.assigned_to, :class => 'gravatar icon-gravatar', :size => 10, :title => assigned_string) - end - output << "" - output << view.link_to_issue(issue) - output << '' - else - ActiveRecord::Base.logger.debug "Gantt#subject_for_issue was not given an issue" - '' + subject = "" + 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).to_s end - output << "
    " + subject << view.link_to_issue(issue) + subject << '' + html_subject(options, subject, :css => "issue-subject", :title => issue.subject) + "\n" + when :image + image_subject(options, issue.subject) + when :pdf + pdf_new_page?(options) + pdf_subject(options, issue.subject) + end - # Tooltip - if issue.is_a? Issue - output << "" - output << view.render_issue_tooltip(issue) - output << "" - end + unless issue.leaf? + @issue_ancestors << issue + options[:indent] += options[:indent_increment] + end - output << "
    " - output - when :image - options[:image].fill('black') - options[:image].stroke('transparent') - options[:image].stroke_width(1) - options[:image].text(options[:indent], options[:top] + 2, issue.subject) - when :pdf - options[:pdf].SetY(options[:top]) - options[:pdf].SetX(15) - - char_limit = PDF::MaxCharactorsForSubject - options[:indent] - options[:pdf].Cell(options[:subject_width]-15, 5, (" " * options[:indent]) +"#{issue.tracker} #{issue.id}: #{issue.subject}".sub(/^(.{#{char_limit}}[^\s]*\s).*$/, '\1 (...)'), "LR") - - options[:pdf].SetY(options[:top]) - options[:pdf].SetX(options[:subject_width]) - options[:pdf].Cell(options[:g_width], 5, "", "LR") - end + output end def line_for_issue(issue, options) # Skip issues that don't have a due_before (due_date or version's due_date) if issue.is_a?(Issue) && issue.due_before + coords = coordinates(issue.start_date, issue.due_before, issue.done_ratio, options[:zoom]) + label = "#{ issue.status.name } #{ issue.done_ratio }%" + case options[:format] when :html - output = '' - # Handle nil start_dates, rare but can happen. - i_start_date = if issue.start_date && issue.start_date >= self.date_from - issue.start_date - else - self.date_from - end - - i_end_date = ((issue.due_before && issue.due_before <= self.date_to) ? issue.due_before : self.date_to ) - i_done_date = i_start_date + ((issue.due_before - i_start_date+1)*issue.done_ratio/100).floor - i_done_date = (i_done_date <= self.date_from ? self.date_from : i_done_date ) - i_done_date = (i_done_date >= self.date_to ? self.date_to : i_done_date ) - - i_late_date = [i_end_date, Date.today].min if i_start_date < Date.today - - i_left = ((i_start_date - self.date_from)*options[:zoom]).floor - i_width = ((i_end_date - i_start_date + 1)*options[:zoom]).floor - 2 # total width of the issue (- 2 for left and right borders) - d_width = ((i_done_date - i_start_date)*options[:zoom]).floor - 2 # done width - l_width = i_late_date ? ((i_late_date - i_start_date+1)*options[:zoom]).floor - 2 : 0 # delay width - css = "task " + (issue.leaf? ? 'leaf' : 'parent') - - # Make sure that negative i_left and i_width don't - # overflow the subject - if i_width > 0 - output << "
     
    " - end - if l_width > 0 - output << "
     
    " - end - if d_width > 0 - output<< "
     
    " - end - - # Display the status even if it's floated off to the left - status_px = i_left + i_width + 5 - status_px = 5 if status_px <= 0 - - output << "
    " - output << issue.status.name - output << ' ' - output << (issue.done_ratio).to_i.to_s - output << "%" - output << "
    " - - output << "
    " - output << '' - output << view.render_issue_tooltip(issue) - output << "
    " - output - + html_task(options, coords, :css => "task " + (issue.leaf? ? 'leaf' : 'parent'), :label => label, :issue => issue, :markers => !issue.leaf?) when :image - # Handle nil start_dates, rare but can happen. - i_start_date = if issue.start_date && issue.start_date >= @date_from - issue.start_date - else - @date_from - end - - i_end_date = (issue.due_before <= date_to ? issue.due_before : date_to ) - i_done_date = i_start_date + ((issue.due_before - i_start_date+1)*issue.done_ratio/100).floor - i_done_date = (i_done_date <= @date_from ? @date_from : i_done_date ) - i_done_date = (i_done_date >= date_to ? date_to : i_done_date ) - i_late_date = [i_end_date, Date.today].min if i_start_date < Date.today - - i_left = options[:subject_width] + ((i_start_date - @date_from)*options[:zoom]).floor - i_width = ((i_end_date - i_start_date + 1)*options[:zoom]).floor # total width of the issue - d_width = ((i_done_date - i_start_date)*options[:zoom]).floor # done width - l_width = i_late_date ? ((i_late_date - i_start_date+1)*options[:zoom]).floor : 0 # delay width - - - # Make sure that negative i_left and i_width don't - # overflow the subject - if i_width > 0 - options[:image].fill('grey') - options[:image].rectangle(i_left, options[:top], i_left + i_width, options[:top] - 6) - options[:image].fill('red') - options[:image].rectangle(i_left, options[:top], i_left + l_width, options[:top] - 6) if l_width > 0 - options[:image].fill('blue') - options[:image].rectangle(i_left, options[:top], i_left + d_width, options[:top] - 6) if d_width > 0 - end - - # Show the status and % done next to the subject if it overflows - options[:image].fill('black') - if i_width > 0 - options[:image].text(i_left + i_width + 5,options[:top] + 1, "#{issue.status.name} #{issue.done_ratio}%") - else - options[:image].text(options[:subject_width] + 5,options[:top] + 1, "#{issue.status.name} #{issue.done_ratio}%") - end - + image_task(options, coords, :label => label) when :pdf - options[:pdf].SetY(options[:top]+1.5) - # Handle nil start_dates, rare but can happen. - i_start_date = if issue.start_date && issue.start_date >= @date_from - issue.start_date - else - @date_from - end - - i_end_date = (issue.due_before <= @date_to ? issue.due_before : @date_to ) - - i_done_date = i_start_date + ((issue.due_before - i_start_date+1)*issue.done_ratio/100).floor - i_done_date = (i_done_date <= @date_from ? @date_from : i_done_date ) - i_done_date = (i_done_date >= @date_to ? @date_to : i_done_date ) - - i_late_date = [i_end_date, Date.today].min if i_start_date < Date.today - - i_left = ((i_start_date - @date_from)*options[:zoom]) - i_width = ((i_end_date - i_start_date + 1)*options[:zoom]) - d_width = ((i_done_date - i_start_date)*options[:zoom]) - l_width = ((i_late_date - i_start_date+1)*options[:zoom]) if i_late_date - l_width ||= 0 - - # Make sure that negative i_left and i_width don't - # overflow the subject - if i_width > 0 - options[:pdf].SetX(options[:subject_width] + i_left) - options[:pdf].SetFillColor(200,200,200) - options[:pdf].Cell(i_width, 2, "", 0, 0, "", 1) - end - - if l_width > 0 - options[:pdf].SetY(options[:top]+1.5) - options[:pdf].SetX(options[:subject_width] + i_left) - options[:pdf].SetFillColor(255,100,100) - options[:pdf].Cell(l_width, 2, "", 0, 0, "", 1) - end - if d_width > 0 - options[:pdf].SetY(options[:top]+1.5) - options[:pdf].SetX(options[:subject_width] + i_left) - options[:pdf].SetFillColor(100,100,255) - options[:pdf].Cell(d_width, 2, "", 0, 0, "", 1) - end - - options[:pdf].SetY(options[:top]+1.5) - - # Make sure that negative i_left and i_width don't - # overflow the subject - if (i_left + i_width) >= 0 - options[:pdf].SetX(options[:subject_width] + i_left + i_width) - else - options[:pdf].SetX(options[:subject_width]) - end - options[:pdf].Cell(30, 2, "#{issue.status} #{issue.done_ratio}%") - end + pdf_task(options, coords, :label => label) + end else ActiveRecord::Base.logger.debug "GanttHelper#line_for_issue was not given an issue with a due_before" '' @@ -728,30 +393,31 @@ # Generates a gantt image # Only defined if RMagick is avalaible def to_image(format='PNG') - date_to = (@date_from >> @months)-1 + date_to = (@date_from >> @months)-1 show_weeks = @zoom > 1 show_days = @zoom > 2 - + subject_width = 400 - header_heigth = 18 + header_height = 18 # width of one day in pixels zoom = @zoom*2 g_width = (@date_to - @date_from + 1)*zoom g_height = 20 * number_of_rows + 30 - headers_heigth = (show_weeks ? 2*header_heigth : header_heigth) - height = g_height + headers_heigth - + headers_height = (show_weeks ? 2*header_height : header_height) + height = g_height + headers_height + imgl = Magick::ImageList.new imgl.new_image(subject_width+g_width+1, height) gc = Magick::Draw.new - + # Subjects - subjects(:image => gc, :top => (headers_heigth + 20), :indent => 4, :format => :image) - + gc.stroke('transparent') + subjects(:image => gc, :top => (headers_height + 20), :indent => 4, :format => :image) + # Months headers month_f = @date_from left = subject_width - @months.times do + @months.times do width = ((month_f >> 1) - month_f) * zoom gc.fill('white') gc.stroke('grey') @@ -764,11 +430,11 @@ left = left + width month_f = month_f >> 1 end - + # Weeks headers if show_weeks left = subject_width - height = header_heigth + height = header_height if @date_from.cwday == 1 # date_from is monday week_f = date_from @@ -779,7 +445,7 @@ gc.fill('white') gc.stroke('grey') gc.stroke_width(1) - gc.rectangle(left, header_heigth, left + width, 2*header_heigth + g_height-1) + gc.rectangle(left, header_height, left + width, 2*header_height + g_height-1) left = left + width end while week_f <= date_to @@ -787,110 +453,111 @@ gc.fill('white') gc.stroke('grey') gc.stroke_width(1) - gc.rectangle(left.round, header_heigth, left.round + width, 2*header_heigth + g_height-1) + gc.rectangle(left.round, header_height, left.round + width, 2*header_height + g_height-1) gc.fill('black') gc.stroke('transparent') gc.stroke_width(1) - gc.text(left.round + 2, header_heigth + 14, week_f.cweek.to_s) + gc.text(left.round + 2, header_height + 14, week_f.cweek.to_s) left = left + width week_f = week_f+7 end end - + # Days details (week-end in grey) if show_days left = subject_width - height = g_height + header_heigth - 1 + height = g_height + header_height - 1 wday = @date_from.cwday - (date_to - @date_from + 1).to_i.times do + (date_to - @date_from + 1).to_i.times do width = zoom gc.fill(wday == 6 || wday == 7 ? '#eee' : 'white') - gc.stroke('grey') + gc.stroke('#ddd') gc.stroke_width(1) - gc.rectangle(left, 2*header_heigth, left + width, 2*header_heigth + g_height-1) + gc.rectangle(left, 2*header_height, left + width, 2*header_height + g_height-1) left = left + width wday = wday + 1 wday = 1 if wday > 7 end end - + # border gc.fill('transparent') gc.stroke('grey') gc.stroke_width(1) - gc.rectangle(0, 0, subject_width+g_width, headers_heigth) + gc.rectangle(0, 0, subject_width+g_width, headers_height) gc.stroke('black') - gc.rectangle(0, 0, subject_width+g_width, g_height+ headers_heigth-1) - + gc.rectangle(0, 0, subject_width+g_width, g_height+ headers_height-1) + # content - top = headers_heigth + 20 - + top = headers_height + 20 + + gc.stroke('transparent') lines(:image => gc, :top => top, :zoom => zoom, :subject_width => subject_width, :format => :image) - + # today red line if Date.today >= @date_from and Date.today <= date_to gc.stroke('red') x = (Date.today-@date_from+1)*zoom + subject_width - gc.line(x, headers_heigth, x, headers_heigth + g_height-1) - end - + gc.line(x, headers_height, x, headers_height + g_height-1) + end + gc.draw(imgl) imgl.format = format imgl.to_blob end if Object.const_defined?(:Magick) def to_pdf - pdf = ::Redmine::Export::PDF::IFPDF.new(current_language) + pdf = ::Redmine::Export::PDF::ITCPDF.new(current_language) pdf.SetTitle("#{l(:label_gantt)} #{project}") - pdf.AliasNbPages + pdf.alias_nb_pages pdf.footer_date = format_date(Date.today) pdf.AddPage("L") pdf.SetFontStyle('B',12) pdf.SetX(15) - pdf.Cell(PDF::LeftPaneWidth, 20, project.to_s) + pdf.RDMCell(PDF::LeftPaneWidth, 20, project.to_s) pdf.Ln pdf.SetFontStyle('B',9) - + subject_width = PDF::LeftPaneWidth - header_heigth = 5 - - headers_heigth = header_heigth + header_height = 5 + + headers_height = header_height show_weeks = false show_days = false - + if self.months < 7 show_weeks = true - headers_heigth = 2*header_heigth + headers_height = 2*header_height if self.months < 3 show_days = true - headers_heigth = 3*header_heigth + headers_height = 3*header_height end end - + g_width = PDF.right_pane_width zoom = (g_width) / (self.date_to - self.date_from + 1) g_height = 120 - t_height = g_height + headers_heigth - + t_height = g_height + headers_height + y_start = pdf.GetY - + # Months headers month_f = self.date_from left = subject_width - height = header_heigth - self.months.times do - width = ((month_f >> 1) - month_f) * zoom + height = header_height + self.months.times do + width = ((month_f >> 1) - month_f) * zoom pdf.SetY(y_start) pdf.SetX(left) - pdf.Cell(width, height, "#{month_f.year}-#{month_f.month}", "LTR", 0, "C") + pdf.RDMCell(width, height, "#{month_f.year}-#{month_f.month}", "LTR", 0, "C") left = left + width month_f = month_f >> 1 - end - + end + # Weeks headers if show_weeks left = subject_width - height = header_heigth + height = header_height if self.date_from.cwday == 1 # self.date_from is monday week_f = self.date_from @@ -898,77 +565,296 @@ # find next monday after self.date_from week_f = self.date_from + (7 - self.date_from.cwday + 1) width = (7 - self.date_from.cwday + 1) * zoom-1 - pdf.SetY(y_start + header_heigth) + pdf.SetY(y_start + header_height) pdf.SetX(left) - pdf.Cell(width + 1, height, "", "LTR") + pdf.RDMCell(width + 1, height, "", "LTR") left = left + width+1 end while week_f <= self.date_to width = (week_f + 6 <= self.date_to) ? 7 * zoom : (self.date_to - week_f + 1) * zoom - pdf.SetY(y_start + header_heigth) + pdf.SetY(y_start + header_height) pdf.SetX(left) - pdf.Cell(width, height, (width >= 5 ? week_f.cweek.to_s : ""), "LTR", 0, "C") + pdf.RDMCell(width, height, (width >= 5 ? week_f.cweek.to_s : ""), "LTR", 0, "C") left = left + width week_f = week_f+7 end end - + # Days headers if show_days left = subject_width - height = header_heigth + height = header_height wday = self.date_from.cwday pdf.SetFontStyle('B',7) - (self.date_to - self.date_from + 1).to_i.times do + (self.date_to - self.date_from + 1).to_i.times do width = zoom - pdf.SetY(y_start + 2 * header_heigth) + pdf.SetY(y_start + 2 * header_height) pdf.SetX(left) - pdf.Cell(width, height, day_name(wday).first, "LTR", 0, "C") + pdf.RDMCell(width, height, day_name(wday).first, "LTR", 0, "C") left = left + width wday = wday + 1 wday = 1 if wday > 7 end end - + pdf.SetY(y_start) pdf.SetX(15) - pdf.Cell(subject_width+g_width-15, headers_heigth, "", 1) - + pdf.RDMCell(subject_width+g_width-15, headers_height, "", 1) + # Tasks - top = headers_heigth + y_start - pdf_subjects_and_lines(pdf, { - :top => top, - :zoom => zoom, - :subject_width => subject_width, - :g_width => g_width - }) + top = headers_height + y_start + options = { + :top => top, + :zoom => zoom, + :subject_width => subject_width, + :g_width => g_width, + :indent => 0, + :indent_increment => 5, + :top_increment => 5, + :format => :pdf, + :pdf => pdf + } + render(options) + pdf.Output + end - - pdf.Line(15, top, subject_width+g_width, top) - pdf.Output - - - end - private - # Renders both the subjects and lines of the Gantt chart for the - # PDF format - def pdf_subjects_and_lines(pdf, options = {}) - subject_options = {:indent => 0, :indent_increment => 5, :top_increment => 3, :render => :subject, :format => :pdf, :pdf => pdf}.merge(options) - line_options = {:indent => 0, :indent_increment => 5, :top_increment => 3, :render => :line, :format => :pdf, :pdf => pdf}.merge(options) + def coordinates(start_date, end_date, progress, zoom=nil) + zoom ||= @zoom - if @project - render_project(@project, subject_options) - render_project(@project, line_options) + coords = {} + if start_date && end_date && start_date < self.date_to && end_date > self.date_from + if start_date > self.date_from + coords[:start] = start_date - self.date_from + coords[:bar_start] = start_date - self.date_from + else + coords[:bar_start] = 0 + end + if end_date < self.date_to + coords[:end] = end_date - self.date_from + coords[:bar_end] = end_date - self.date_from + 1 + else + coords[:bar_end] = self.date_to - self.date_from + 1 + end + + if progress + progress_date = start_date + (end_date - start_date + 1) * (progress / 100.0) + if progress_date > self.date_from && progress_date > start_date + if progress_date < self.date_to + coords[:bar_progress_end] = progress_date - self.date_from + else + coords[:bar_progress_end] = self.date_to - self.date_from + 1 + end + end + + if progress_date < Date.today + late_date = [Date.today, end_date].min + if late_date > self.date_from && late_date > start_date + if late_date < self.date_to + coords[:bar_late_end] = late_date - self.date_from + 1 + else + coords[:bar_late_end] = self.date_to - self.date_from + 1 + end + end + end + end + end + + # Transforms dates into pixels witdh + coords.keys.each do |key| + coords[key] = (coords[key] * zoom).floor + end + coords + end + + # Sorts a collection of issues by start_date, due_date, id for gantt rendering + def sort_issues!(issues) + issues.sort! { |a, b| gantt_issue_compare(a, b, issues) } + end + + # TODO: top level issues should be sorted by start date + def gantt_issue_compare(x, y, issues) + if x.root_id == y.root_id + x.lft <=> y.lft else - Project.roots.each do |project| - render_project(project, subject_options) - render_project(project, line_options) - end + x.root_id <=> y.root_id end end + def current_limit + if @max_rows + @max_rows - @number_of_rows + else + nil + end + end + + def abort? + if @max_rows && @number_of_rows >= @max_rows + @truncated = true + end + end + + def pdf_new_page?(options) + if options[:top] > 180 + options[:pdf].Line(15, options[:top], PDF::TotalWidth, options[:top]) + options[:pdf].AddPage("L") + options[:top] = 15 + options[:pdf].Line(15, options[:top] - 0.1, PDF::TotalWidth, options[:top] - 0.1) + end + end + + def html_subject(params, subject, options={}) + 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 + + def pdf_subject(params, subject, options={}) + params[:pdf].SetY(params[:top]) + params[:pdf].SetX(15) + + char_limit = PDF::MaxCharactorsForSubject - params[:indent] + params[:pdf].RDMCell(params[:subject_width]-15, 5, (" " * params[:indent]) + subject.to_s.sub(/^(.{#{char_limit}}[^\s]*\s).*$/, '\1 (...)'), "LR") + + params[:pdf].SetY(params[:top]) + params[:pdf].SetX(params[:subject_width]) + params[:pdf].RDMCell(params[:g_width], 5, "", "LR") + end + + def image_subject(params, subject, options={}) + params[:image].fill('black') + params[:image].stroke('transparent') + params[:image].stroke_width(1) + params[:image].text(params[:indent], params[:top] + 2, subject) + end + + def html_task(params, coords, options={}) + output = '' + # Renders the task bar, with progress and late + if coords[:bar_start] && coords[:bar_end] + output << "
     
    " + + if coords[:bar_late_end] + output << "
     
    " + end + if coords[:bar_progress_end] + output << "
     
    " + end + end + # Renders the markers + if options[:markers] + if coords[:start] + output << "
     
    " + end + if coords[:end] + output << "
     
    " + end + end + # Renders the label on the right + if options[:label] + output << "
    " + output << options[:label] + output << "
    " + end + # Renders the tooltip + if options[:issue] && coords[:bar_start] && coords[:bar_end] + output << "
    " + output << '' + output << view.render_issue_tooltip(options[:issue]) + output << "
    " + end + @lines << output + output + end + + def pdf_task(params, coords, options={}) + height = options[:height] || 2 + + # Renders the task bar, with progress and late + if coords[:bar_start] && coords[:bar_end] + params[:pdf].SetY(params[:top]+1.5) + params[:pdf].SetX(params[:subject_width] + coords[:bar_start]) + params[:pdf].SetFillColor(200,200,200) + params[:pdf].RDMCell(coords[:bar_end] - coords[:bar_start], height, "", 0, 0, "", 1) + + if coords[:bar_late_end] + params[:pdf].SetY(params[:top]+1.5) + params[:pdf].SetX(params[:subject_width] + coords[:bar_start]) + params[:pdf].SetFillColor(255,100,100) + params[:pdf].RDMCell(coords[:bar_late_end] - coords[:bar_start], height, "", 0, 0, "", 1) + end + if coords[:bar_progress_end] + params[:pdf].SetY(params[:top]+1.5) + params[:pdf].SetX(params[:subject_width] + coords[:bar_start]) + params[:pdf].SetFillColor(90,200,90) + params[:pdf].RDMCell(coords[:bar_progress_end] - coords[:bar_start], height, "", 0, 0, "", 1) + end + end + # Renders the markers + if options[:markers] + if coords[:start] + params[:pdf].SetY(params[:top] + 1) + params[:pdf].SetX(params[:subject_width] + coords[:start] - 1) + params[:pdf].SetFillColor(50,50,200) + params[:pdf].RDMCell(2, 2, "", 0, 0, "", 1) + end + if coords[:end] + params[:pdf].SetY(params[:top] + 1) + params[:pdf].SetX(params[:subject_width] + coords[:end] - 1) + params[:pdf].SetFillColor(50,50,200) + params[:pdf].RDMCell(2, 2, "", 0, 0, "", 1) + end + end + # Renders the label on the right + if options[:label] + params[:pdf].SetX(params[:subject_width] + (coords[:bar_end] || 0) + 5) + params[:pdf].RDMCell(30, 2, options[:label]) + end + end + + def image_task(params, coords, options={}) + height = options[:height] || 6 + + # Renders the task bar, with progress and late + if coords[:bar_start] && coords[:bar_end] + params[:image].fill('#aaa') + params[:image].rectangle(params[:subject_width] + coords[:bar_start], params[:top], params[:subject_width] + coords[:bar_end], params[:top] - height) + + if coords[:bar_late_end] + params[:image].fill('#f66') + params[:image].rectangle(params[:subject_width] + coords[:bar_start], params[:top], params[:subject_width] + coords[:bar_late_end], params[:top] - height) + end + if coords[:bar_progress_end] + params[:image].fill('#00c600') + params[:image].rectangle(params[:subject_width] + coords[:bar_start], params[:top], params[:subject_width] + coords[:bar_progress_end], params[:top] - height) + end + end + # Renders the markers + if options[:markers] + if coords[:start] + x = params[:subject_width] + coords[:start] + y = params[:top] - height / 2 + params[:image].fill('blue') + params[:image].polygon(x-4, y, x, y-4, x+4, y, x, y+4) + end + if coords[:end] + x = params[:subject_width] + coords[:end] + params[:zoom] + y = params[:top] - height / 2 + params[:image].fill('blue') + params[:image].polygon(x-4, y, x, y-4, x+4, y, x, y+4) + end + end + # Renders the label on the right + if options[:label] + params[:image].fill('black') + params[:image].text(params[:subject_width] + (coords[:bar_end] || 0) + 5,params[:top] + 1, options[:label]) + end + end end end end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/i18n.rb --- a/lib/redmine/i18n.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/i18n.rb Mon Jul 25 14:23:37 2011 +0100 @@ -37,7 +37,7 @@ def format_date(date) return nil unless date - Setting.date_format.blank? ? ::I18n.l(date.to_date, :count => date.strftime('%d')) : date.strftime(Setting.date_format) + Setting.date_format.blank? ? ::I18n.l(date.to_date) : date.strftime(Setting.date_format) end def format_time(time, include_date = true) @@ -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, :count => local.strftime('%d'), :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) diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/mime_type.rb --- a/lib/redmine/mime_type.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/mime_type.rb Mon Jul 25 14:23:37 2011 +0100 @@ -37,6 +37,7 @@ 'text/xml' => 'xml,xsd,mxml', 'text/yaml' => 'yml,yaml', 'text/csv' => 'csv', + 'text/x-po' => 'po', 'image/gif' => 'gif', 'image/jpeg' => 'jpg,jpeg,jpe', 'image/png' => 'png', diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/notifiable.rb --- a/lib/redmine/notifiable.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/notifiable.rb Mon Jul 25 14:23:37 2011 +0100 @@ -14,6 +14,7 @@ notifications << Notifiable.new('issue_status_updated', 'issue_updated') notifications << Notifiable.new('issue_priority_updated', 'issue_updated') notifications << Notifiable.new('news_added') + notifications << Notifiable.new('news_comment_added') notifications << Notifiable.new('document_added') notifications << Notifiable.new('file_added') notifications << Notifiable.new('message_posted') diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/pop3.rb --- a/lib/redmine/pop3.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/pop3.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/safe_attributes.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/safe_attributes.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,75 @@ +# Redmine - project management software +# Copyright (C) 2006-2010 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 SafeAttributes + def self.included(base) + base.extend(ClassMethods) + end + + module ClassMethods + # Declares safe attributes + # An optional Proc can be given for conditional inclusion + # + # Example: + # safe_attributes 'title', 'pages' + # safe_attributes 'isbn', :if => {|book, user| book.author == user} + def safe_attributes(*args) + @safe_attributes ||= [] + if args.empty? + @safe_attributes + else + options = args.last.is_a?(Hash) ? args.pop : {} + @safe_attributes << [args, options] + end + end + end + + # Returns an array that can be safely set by user or current user + # + # Example: + # book.safe_attributes # => ['title', 'pages'] + # book.safe_attributes(book.author) # => ['title', 'pages', 'isbn'] + def safe_attribute_names(user=User.current) + names = [] + self.class.safe_attributes.collect do |attrs, options| + if options[:if].nil? || options[:if].call(self, user) + names += attrs.collect(&:to_s) + end + end + names.uniq + end + + # Returns a hash with unsafe attributes removed + # from the given attrs hash + # + # Example: + # book.delete_unsafe_attributes({'title' => 'My book', 'foo' => 'bar'}) + # # => {'title' => 'My book'} + def delete_unsafe_attributes(attrs, user=User.current) + safe = safe_attribute_names(user) + attrs.dup.delete_if {|k,v| !safe.include?(k)} + end + + # Sets attributes from attrs that are safe + # attrs is a Hash with string keys + def safe_attributes=(attrs, user=User.current) + return unless attrs.is_a?(Hash) + self.attributes = delete_unsafe_attributes(attrs, user) + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/.svn/all-wcprops --- a/lib/redmine/scm/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,11 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 40 -/svn/!svn/ver/4386/trunk/lib/redmine/scm +V 54 +/svn/!svn/ver/6253/branches/1.2-stable/lib/redmine/scm END -base.rb -K 25 -svn:wc:ra_dav:version-url -V 48 -/svn/!svn/ver/3440/trunk/lib/redmine/scm/base.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/.svn/entries --- a/lib/redmine/scm/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib/redmine/scm +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/scm http://redmine.rubyforge.org/svn -2010-11-07T15:19:05.831621Z -4386 -jbbarth +2011-07-11T02:08:03.947910Z +6253 +tmaruyama @@ -35,7 +35,7 @@ -2010-09-23T14:37:45.043748Z +2011-07-14T09:24:10.000000Z 3a053c03d210decd9105a24ff5e1aa8f 2010-02-16T22:41:59.625572Z 3440 diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/.svn/all-wcprops --- a/lib/redmine/scm/adapters/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/adapters/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,53 +1,53 @@ K 25 svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/4386/trunk/lib/redmine/scm/adapters +V 63 +/svn/!svn/ver/6253/branches/1.2-stable/lib/redmine/scm/adapters END subversion_adapter.rb K 25 svn:wc:ra_dav:version-url -V 71 -/svn/!svn/ver/3800/trunk/lib/redmine/scm/adapters/subversion_adapter.rb +V 85 +/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/scm/adapters/subversion_adapter.rb END bazaar_adapter.rb K 25 svn:wc:ra_dav:version-url -V 67 -/svn/!svn/ver/3723/trunk/lib/redmine/scm/adapters/bazaar_adapter.rb +V 81 +/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/scm/adapters/bazaar_adapter.rb END abstract_adapter.rb K 25 svn:wc:ra_dav:version-url -V 69 -/svn/!svn/ver/3469/trunk/lib/redmine/scm/adapters/abstract_adapter.rb +V 83 +/svn/!svn/ver/6105/branches/1.2-stable/lib/redmine/scm/adapters/abstract_adapter.rb END git_adapter.rb K 25 svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/4386/trunk/lib/redmine/scm/adapters/git_adapter.rb +V 78 +/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/scm/adapters/git_adapter.rb END mercurial_adapter.rb K 25 svn:wc:ra_dav:version-url -V 70 -/svn/!svn/ver/3722/trunk/lib/redmine/scm/adapters/mercurial_adapter.rb +V 84 +/svn/!svn/ver/6253/branches/1.2-stable/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 +V 85 +/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/scm/adapters/filesystem_adapter.rb END cvs_adapter.rb K 25 svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/2135/trunk/lib/redmine/scm/adapters/cvs_adapter.rb +V 78 +/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/scm/adapters/cvs_adapter.rb END darcs_adapter.rb K 25 svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/2232/trunk/lib/redmine/scm/adapters/darcs_adapter.rb +V 80 +/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/scm/adapters/darcs_adapter.rb END diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/.svn/entries --- a/lib/redmine/scm/adapters/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/adapters/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib/redmine/scm/adapters +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/scm/adapters http://redmine.rubyforge.org/svn -2010-11-07T15:19:05.831621Z -4386 -jbbarth +2011-07-11T02:08:03.947910Z +6253 +tmaruyama @@ -32,11 +32,12 @@ -2010-09-23T14:37:45.043748Z -638ab1af3838c9e8d9f7688224ebf18b -2010-06-20T16:08:26.745839Z -3800 -edavis10 +2011-07-14T09:24:22.000000Z +bf7d7b180f55d2100736e363ce125552 +2011-05-10T17:52:56.415969Z +5731 +tmaruyama +has-props @@ -57,8 +58,7 @@ - -10736 +11495 bazaar_adapter.rb file @@ -66,11 +66,11 @@ -2010-09-23T14:37:45.039790Z -5a2dba12961234e4853397c87cef0b5e -2010-05-01T09:56:59.025016Z -3723 -jplang +2011-07-14T09:24:22.000000Z +8bcb2a65cfdf8d27dc53f10469887018 +2011-05-06T12:57:32.851840Z +5668 +tmaruyama has-props @@ -92,7 +92,7 @@ -7225 +8398 mercurial dir @@ -103,11 +103,11 @@ -2010-09-24T11:56:52.980004Z -b23f6bf941ce74af0650c41e1094ba8a -2010-02-21T14:38:34.467603Z -3469 -jplang +2011-07-14T09:28:12.000000Z +d2cd43405e57519c00a107de2b3d6ae5 +2011-06-21T03:16:49.595160Z +6105 +jbbarth has-props @@ -129,7 +129,7 @@ -9610 +9870 git_adapter.rb file @@ -137,11 +137,11 @@ -2010-11-19T13:04:51.245032Z -6b1c25eff34500f43f3b7cf9c0a78bec -2010-11-07T15:19:05.831621Z -4386 -jbbarth +2011-07-14T09:24:22.000000Z +8b7b85fc7884f18402dfd33412bb1632 +2011-05-21T02:39:42.521746Z +5870 +tmaruyama has-props @@ -163,7 +163,7 @@ -9867 +13537 mercurial_adapter.rb file @@ -171,11 +171,11 @@ -2010-09-24T11:56:52.992085Z -c16d3e25388f47c99f1633eab2140ba7 -2010-05-01T09:55:40.597772Z -3722 -jplang +2011-07-14T09:28:12.000000Z +4ccc46fcc4b9e3fca57dad66cdedd298 +2011-07-11T02:08:03.947910Z +6253 +tmaruyama has-props @@ -197,7 +197,7 @@ -8130 +11989 filesystem_adapter.rb file @@ -205,11 +205,11 @@ -2010-09-23T14:37:45.039790Z -5f311f051bcb17a87475757807f8a63e -2008-06-08T15:44:23.440995Z -1510 -jplang +2011-07-14T09:24:22.000000Z +23ac49fabb89c7578c173ef09c7f280f +2011-05-21T02:17:34.152882Z +5864 +tmaruyama has-props @@ -231,7 +231,7 @@ -3509 +4409 cvs_adapter.rb file @@ -239,11 +239,11 @@ -2010-09-23T14:37:45.039790Z -19e0348377774a0c41b78a3f0a482284 -2008-12-14T15:57:13.349302Z -2135 -jplang +2011-07-14T09:24:22.000000Z +0c56303ba5340dfff7860be537a1ccc1 +2011-05-21T02:18:53.346845Z +5866 +tmaruyama has-props @@ -265,7 +265,7 @@ -13401 +16766 darcs_adapter.rb file @@ -273,11 +273,11 @@ -2010-09-23T14:37:45.039790Z -dc6df25045764c81cdfcdb441997823b -2009-01-04T13:27:48.560402Z -2232 -jplang +2011-07-14T09:24:22.000000Z +f039e19c659f52d26c9be8a566b90539 +2011-05-06T12:57:54.181968Z +5669 +tmaruyama has-props @@ -299,5 +299,5 @@ -7515 +8935 diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/.svn/text-base/abstract_adapter.rb.svn-base --- a/lib/redmine/scm/adapters/.svn/text-base/abstract_adapter.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/adapters/.svn/text-base/abstract_adapter.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -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,20 +82,24 @@ def supports_annotate? respond_to?('annotate') end - + def root_url @root_url end - + def url @url end - + + def path_encoding + nil + end + # get info about the svn repository def info return nil end - + # Returns the entry identified by path and revision identifier # or nil if entry doesn't exist in the repository def entry(path=nil, identifier=nil) @@ -94,10 +115,10 @@ es ? es.detect {|e| e.name == search_name} : nil end end - + # Returns an Entries collection # or nil if the given path doesn't exist in the repository - def entries(path=nil, identifier=nil) + def entries(path=nil, identifier=nil, options={}) return nil end @@ -105,30 +126,30 @@ return nil end - def tags + def tags return nil end def default_branch return nil end - + def properties(path, identifier=nil) return nil end - + def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={}) return nil end - + def diff(path, identifier_from, identifier_to=nil) return nil end - + def cat(path, identifier=nil) return nil end - + def with_leading_slash(path) path ||= '' (path[0,1]!="/") ? "/#{path}" : path @@ -138,7 +159,7 @@ path ||= '' (path[-1,1] == "/") ? path : "#{path}/" end - + def without_leading_slash(path) path ||= '' path.gsub(%r{^/+}, '') @@ -148,13 +169,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 @@ -162,71 +179,95 @@ info = self.info info ? info.root_url : nil end - + def target(path) path ||= '' 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 logger && logger.debug? + logger.debug "Shelling out: #{strip_credential(cmd)}" + end if Rails.env == 'development' # Capture stderr when running in dev environment 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 rescue Errno::ENOENT => e msg = strip_credential(e.message) # The command failed, log it and re-raise - logger.error("SCM command failed, make sure that your SCM binary (eg. svn) is in PATH (#{ENV['PATH']}): #{strip_credential(cmd)}\n with: #{msg}") + logmsg = "SCM command failed, " + logmsg += "make sure that your SCM command (e.g. svn) is " + logmsg += "in PATH (#{ENV['PATH']})\n" + logmsg += "You can configure your scm commands in config/configuration.yml.\n" + logmsg += "#{strip_credential(cmd)}\n" + logmsg += "with: #{msg}" + logger.error(logmsg) raise CommandFailed.new(msg) end - end - + end + # Hides username/password in a given command def self.strip_credential(cmd) q = (Redmine::Platform.mswin? ? '"' : "'") cmd.to_s.gsub(/(\-\-(password|username))\s+(#{q}[^#{q}]+#{q}|[^#{q}]\S+)/, '\\1 xxxx') end - + 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| + sort {|x,y| if x.kind == y.kind x.name.to_s <=> y.name.to_s else x.kind <=> y.kind end - } + } end - + def revisions revisions ||= Revisions.new(collect{|entry| entry.lastrev}.compact) end end - + class Info attr_accessor :root_url, :lastrev def initialize(attributes={}) @@ -234,7 +275,7 @@ self.lastrev = attributes[:lastrev] end end - + class Entry attr_accessor :name, :path, :kind, :size, :lastrev def initialize(attributes={}) @@ -244,20 +285,20 @@ self.size = attributes[:size].to_i if attributes[:size] self.lastrev = attributes[:lastrev] end - + def is_file? 'file' == self.kind end - + def is_dir? 'dir' == self.kind end - + def is_text? Redmine::MimeType.is_type?('text', name) end end - + class Revisions < Array def latest sort {|x,y| @@ -267,63 +308,48 @@ 0 end }.last - end + end end - + class Revision - attr_accessor :identifier, :scmid, :name, :author, :time, :message, :paths, :revision, :branch + attr_accessor :scmid, :name, :author, :time, :message, + :paths, :revision, :branch, :identifier def initialize(attributes={}) self.identifier = attributes[:identifier] - self.scmid = attributes[:scmid] - self.name = attributes[:name] || self.identifier - self.author = attributes[:author] - self.time = attributes[:time] - self.message = attributes[:message] || "" - self.paths = attributes[:paths] - self.revision = attributes[:revision] - self.branch = attributes[:branch] + self.scmid = attributes[:scmid] + self.name = attributes[:name] || self.identifier + self.author = attributes[:author] + self.time = attributes[:time] + self.message = attributes[:message] || "" + self.paths = attributes[:paths] + self.revision = attributes[:revision] + self.branch = attributes[:branch] 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 + # Returns the readable identifier. + def format_identifier + self.identifier.to_s end end - + class Annotate attr_reader :lines, :revisions - + def initialize @lines = [] @revisions = [] end - + def add_line(line, revision) @lines << line @revisions << revision end - + def content content = lines.join("\n") end - + def empty? lines.empty? end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/.svn/text-base/bazaar_adapter.rb.svn-base --- a/lib/redmine/scm/adapters/.svn/text-base/bazaar_adapter.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/adapters/.svn/text-base/bazaar_adapter.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -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,15 +75,15 @@ 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) + def entries(path=nil, identifier=nil, options={}) path ||= '' entries = Entries.new - cmd = "#{BZR_BIN} ls -v --show-ids" - identifier = -1 unless identifier && identifier.to_i > 0 - cmd << " -r#{identifier.to_i}" + 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)}" shellout(cmd) do |io| prefix = "#{url}/#{path}".gsub('\\', '/') @@ -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 = 'last:1' unless identifier_from and identifier_from.to_i > 0 - identifier_to = 1 unless identifier_to and identifier_to.to_i > 0 + 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.to_i}..#{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 @@ -88,7 +120,6 @@ parsing = nil else next unless revision - if line =~ /^revno: (\d+)($|\s\[merge\]$)/ revision.identifier = $1.to_i elsif line =~ /^committer: (.+)$/ @@ -132,15 +163,18 @@ return nil if $? && $?.exitstatus != 0 revisions end - + def diff(path, identifier_from, identifier_to=nil) path ||= '' if identifier_to - identifier_to = identifier_to.to_i + identifier_to = identifier_to.to_i else identifier_to = identifier_from.to_i - 1 end - cmd = "#{BZR_BIN} diff -r#{identifier_to}..#{identifier_from} #{target(path)}" + if identifier_from + identifier_from = identifier_from.to_i + end + cmd = "#{self.class.sq_bin} diff -r#{identifier_to}..#{identifier_from} #{target(path)}" diff = [] shellout(cmd) do |io| io.each_line do |line| @@ -150,9 +184,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 @@ -163,9 +197,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 @@ -174,7 +208,13 @@ identifier = nil io.each_line do |line| next unless line =~ %r{^(\d+) ([^|]+)\| (.*)$} - blame.add_line($3.rstrip, Revision.new(:identifier => $1.to_i, :author => $2.strip)) + rev = $1 + blame.add_line($3.rstrip, + Revision.new( + :identifier => rev, + :revision => rev, + :author => $2.strip + )) end end return nil if $? && $?.exitstatus != 0 diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/.svn/text-base/cvs_adapter.rb.svn-base --- a/lib/redmine/scm/adapters/.svn/text-base/cvs_adapter.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/adapters/.svn/text-base/cvs_adapter.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -5,12 +5,12 @@ # 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. @@ -23,256 +23,317 @@ class CvsAdapter < AbstractAdapter # CVS executable name - CVS_BIN = "cvs" - + CVS_BIN = Redmine::Configuration['scm_cvs_command'] || "cvs" + + # raised if scm command exited with error, e.g. unknown revision. + class ScmCommandAborted < CommandFailed; end + + 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) + # url -> the project-path, relative to the cvsroot (eg. module name) # root_url -> the good old, sometimes damned, CVSROOT - # login -> unnecessary + # login -> unnecessary # password -> unnecessary too - def initialize(url, root_url=nil, login=nil, password=nil) - @url = url - @login = login if login && !login.empty? + def initialize(url, root_url=nil, login=nil, password=nil, + path_encoding=nil) + @path_encoding = path_encoding.blank? ? 'UTF-8' : path_encoding + @url = url + # TODO: better Exception here (IllegalArgumentException) + raise CommandFailed if root_url.blank? + @root_url = root_url + + # These are unused. + @login = login if login && !login.empty? @password = (password || "") if @login - #TODO: better Exception here (IllegalArgumentException) - raise CommandFailed if root_url.blank? - @root_url = root_url end - - def root_url - @root_url + + def path_encoding + @path_encoding end - - def url - @url - end - + def info logger.debug " 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) - def entries(path=nil, identifier=nil) + def entries(path=nil, identifier=nil, options={}) logger.debug " entries '#{path}' with identifier '#{identifier}'" - path_with_project="#{url}#{with_leading_slash(path)}" + path_locale = scm_iconv(@path_encoding, 'UTF-8', path) + path_locale.force_encoding("ASCII-8BIT") if path_locale.respond_to?(:force_encoding) entries = Entries.new - cmd = "#{CVS_BIN} -d #{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) + cmd_args = %w|-q rls -e| + cmd_args << "-D" << time_to_cvstime_rlog(identifier) if identifier + cmd_args << path_with_proj(path) + scm_cmd(*cmd_args) do |io| + io.each_line() do |line| + fields = line.chop.split('/',-1) logger.debug(">>InspectLine #{fields.inspect}") - if fields[0]!="D" - entries << Entry.new({:name => fields[-5], + time = nil + # Thu Dec 13 16:27:22 2007 + time_l = fields[-3].split(' ') + if time_l.size == 5 && time_l[4].length == 4 + begin + time = Time.parse( + "#{time_l[1]} #{time_l[2]} #{time_l[3]} GMT #{time_l[4]}") + rescue + end + end + entries << Entry.new( + { + :name => scm_iconv('UTF-8', @path_encoding, fields[-5]), #:path => fields[-4].include?(path)?fields[-4]:(path + "/"+ fields[-4]), - :path => "#{path}/#{fields[-5]}", + :path => scm_iconv('UTF-8', @path_encoding, "#{path_locale}/#{fields[-5]}"), :kind => 'file', :size => nil, - :lastrev => Revision.new({ - :revision => fields[-4], - :name => fields[-4], - :time => Time.parse(fields[-3]), - :author => '' + :lastrev => Revision.new( + { + :revision => fields[-4], + :name => scm_iconv('UTF-8', @path_encoding, fields[-4]), + :time => time, + :author => '' + }) }) - }) else - entries << Entry.new({:name => fields[1], - :path => "#{path}/#{fields[1]}", - :kind => 'dir', - :size => nil, + entries << Entry.new( + { + :name => scm_iconv('UTF-8', @path_encoding, fields[1]), + :path => scm_iconv('UTF-8', @path_encoding, "#{path_locale}/#{fields[1]}"), + :kind => 'dir', + :size => nil, :lastrev => nil - }) + }) end - } + end end - return nil if $? && $?.exitstatus != 0 entries.sort_by_name - end + rescue ScmCommandAborted + nil + 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 " revisions path:'#{path}',identifier_from #{identifier_from}, identifier_to #{identifier_to}" - - path_with_project="#{url}#{with_leading_slash(path)}" - cmd = "#{CVS_BIN} -d #{root_url} rlog" - cmd << " -d\">#{time_to_cvstime(identifier_from)}\"" if identifier_from - cmd << " #{shell_quote path_with_project}" - shellout(cmd) do |io| - state="entry_start" - - commit_log=String.new - revision=nil - date=nil - author=nil - entry_path=nil - entry_name=nil - file_state=nil - branch_map=nil - - io.each_line() do |line| - - if state!="revision" && /^#{ENDLOG}/ =~ line - commit_log=String.new - revision=nil - state="entry_start" + path_with_project_utf8 = path_with_proj(path) + path_with_project_locale = scm_iconv(@path_encoding, 'UTF-8', path_with_project_utf8) + logger.debug " revisions path:" + + "'#{path}',identifier_from #{identifier_from}, identifier_to #{identifier_to}" + cmd_args = %w|-q rlog| + cmd_args << "-d" << ">#{time_to_cvstime_rlog(identifier_from)}" if identifier_from + cmd_args << path_with_project_utf8 + scm_cmd(*cmd_args) do |io| + state = "entry_start" + commit_log = String.new + revision = nil + date = nil + author = nil + entry_path = nil + entry_name = nil + file_state = nil + branch_map = nil + io.each_line() do |line| + if state != "revision" && /^#{ENDLOG}/ =~ line + commit_log = String.new + revision = nil + state = "entry_start" end - - if state=="entry_start" - branch_map=Hash.new - if /^RCS file: #{Regexp.escape(root_url_path)}\/#{Regexp.escape(path_with_project)}(.+),v$/ =~ line + if state == "entry_start" + branch_map = Hash.new + if /^RCS file: #{Regexp.escape(root_url_path)}\/#{Regexp.escape(path_with_project_locale)}(.+),v$/ =~ line entry_path = normalize_cvs_path($1) entry_name = normalize_path(File.basename($1)) logger.debug("Path #{entry_path} <=> Name #{entry_name}") elsif /^head: (.+)$/ =~ line entry_headRev = $1 #unless entry.nil? elsif /^symbolic names:/ =~ line - state="symbolic" #unless entry.nil? + state = "symbolic" #unless entry.nil? elsif /^#{STARTLOG}/ =~ line - commit_log=String.new - state="revision" - end + commit_log = String.new + state = "revision" + end next - elsif state=="symbolic" - if /^(.*):\s(.*)/ =~ (line.strip) - branch_map[$1]=$2 + elsif state == "symbolic" + if /^(.*):\s(.*)/ =~ (line.strip) + branch_map[$1] = $2 else - state="tags" + state = "tags" next - end - elsif state=="tags" + end + elsif state == "tags" if /^#{STARTLOG}/ =~ line commit_log = "" - state="revision" + state = "revision" elsif /^#{ENDLOG}/ =~ line - state="head" + state = "head" end next - elsif state=="revision" - if /^#{ENDLOG}/ =~ line || /^#{STARTLOG}/ =~ line + elsif state == "revision" + if /^#{ENDLOG}/ =~ line || /^#{STARTLOG}/ =~ line if revision - - revHelper=CvsRevisionHelper.new(revision) - revBranch="HEAD" - - branch_map.each() do |branch_name,branch_point| + revHelper = CvsRevisionHelper.new(revision) + revBranch = "HEAD" + branch_map.each() do |branch_name, branch_point| if revHelper.is_in_branch_with_symbol(branch_point) - revBranch=branch_name + revBranch = branch_name end end - logger.debug("********** YIELD Revision #{revision}::#{revBranch}") - - yield Revision.new({ - :time => date, - :author => author, - :message=>commit_log.chomp, + yield Revision.new({ + :time => date, + :author => author, + :message => commit_log.chomp, :paths => [{ :revision => revision, - :branch=> revBranch, - :path=>entry_path, - :name=>entry_name, - :kind=>'file', - :action=>file_state - }] - }) + :branch => revBranch, + :path => scm_iconv('UTF-8', @path_encoding, entry_path), + :name => scm_iconv('UTF-8', @path_encoding, entry_name), + :kind => 'file', + :action => file_state + }] + }) end - - commit_log=String.new - revision=nil - + commit_log = String.new + revision = nil if /^#{ENDLOG}/ =~ line - state="entry_start" + state = "entry_start" end next end - + if /^branches: (.+)$/ =~ line - #TODO: version.branch = $1 + # TODO: version.branch = $1 elsif /^revision (\d+(?:\.\d+)+).*$/ =~ line - revision = $1 + revision = $1 elsif /^date:\s+(\d+.\d+.\d+\s+\d+:\d+:\d+)/ =~ line - date = Time.parse($1) - author = /author: ([^;]+)/.match(line)[1] - file_state = /state: ([^;]+)/.match(line)[1] - #TODO: linechanges only available in CVS.... maybe a feature our SVN implementation. i'm sure, they are - # useful for stats or something else + date = Time.parse($1) + line_utf8 = scm_iconv('UTF-8', options[:log_encoding], line) + author_utf8 = /author: ([^;]+)/.match(line_utf8)[1] + author = scm_iconv(options[:log_encoding], 'UTF-8', author_utf8) + file_state = /state: ([^;]+)/.match(line)[1] + # TODO: + # linechanges only available in CVS.... + # maybe a feature our SVN implementation. + # I'm sure, they are useful for stats or something else # linechanges =/lines: \+(\d+) -(\d+)/.match(line) # unless linechanges.nil? # version.line_plus = linechanges[1] # 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 - + rescue ScmCommandAborted + Revisions.new + end + def diff(path, identifier_from, identifier_to=nil) - logger.debug " diff path:'#{path}',identifier_from #{identifier_from}, identifier_to #{identifier_to}" - path_with_project="#{url}#{with_leading_slash(path)}" - cmd = "#{CVS_BIN} -d #{root_url} rdiff -u -r#{identifier_to} -r#{identifier_from} #{shell_quote path_with_project}" + logger.debug " diff path:'#{path}'" + + ",identifier_from #{identifier_from}, identifier_to #{identifier_to}" + cmd_args = %w|rdiff -u| + cmd_args << "-r#{identifier_to}" + cmd_args << "-r#{identifier_from}" + cmd_args << path_with_proj(path) diff = [] - shellout(cmd) do |io| + scm_cmd(*cmd_args) do |io| io.each_line do |line| diff << line end end - return nil if $? && $?.exitstatus != 0 diff - end - + rescue ScmCommandAborted + nil + end + def cat(path, identifier=nil) identifier = (identifier) ? identifier : "HEAD" logger.debug " cat path:'#{path}',identifier #{identifier}" - path_with_project="#{url}#{with_leading_slash(path)}" - cmd = "#{CVS_BIN} -d #{root_url} co" - cmd << " -D \"#{time_to_cvstime(identifier)}\"" if identifier - cmd << " -p #{shell_quote path_with_project}" + cmd_args = %w|-q co| + cmd_args << "-D" << time_to_cvstime(identifier) if identifier + cmd_args << "-p" << path_with_proj(path) cat = nil - shellout(cmd) do |io| + scm_cmd(*cmd_args) do |io| + io.binmode cat = io.read end - return nil if $? && $?.exitstatus != 0 cat - end + rescue ScmCommandAborted + nil + end def annotate(path, identifier=nil) identifier = (identifier) ? identifier : "HEAD" logger.debug " annotate path:'#{path}',identifier #{identifier}" - path_with_project="#{url}#{with_leading_slash(path)}" - cmd = "#{CVS_BIN} -d #{root_url} rannotate -r#{identifier} #{shell_quote path_with_project}" + cmd_args = %w|rannotate| + cmd_args << "-D" << time_to_cvstime(identifier) if identifier + cmd_args << path_with_proj(path) blame = Annotate.new - shellout(cmd) do |io| + scm_cmd(*cmd_args) do |io| io.each_line do |line| next unless line =~ %r{^([\d\.]+)\s+\(([^\)]+)\s+[^\)]+\):\s(.*)$} - blame.add_line($3.rstrip, Revision.new(:revision => $1, :author => $2.strip)) + blame.add_line( + $3.rstrip, + Revision.new( + :revision => $1, + :identifier => nil, + :author => $2.strip + )) end end - return nil if $? && $?.exitstatus != 0 blame + rescue ScmCommandAborted + Annotate.new end - + private - + # Returns the root url without the connexion string # :pserver:anonymous@foo.bar:/path => /path # :ext:cvsservername:/path => /path @@ -283,78 +344,117 @@ # convert a date/time into the CVS-format def time_to_cvstime(time) return nil if time.nil? + time = Time.now if time == 'HEAD' + unless time.kind_of? Time time = Time.parse(time) end - return time.strftime("%Y-%m-%d %H:%M:%S") + return time_to_cvstime_rlog(time) 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\//,'')) end - + def normalize_path(path) path.sub(/^(\/)*(.*)/,'\2').sub(/(.*)(,v)+/,'\1') - end - end - + end + + def path_with_proj(path) + "#{url}#{with_leading_slash(path)}" + end + private :path_with_proj + + class Revision < Redmine::Scm::Adapters::Revision + # Returns the readable identifier + def format_identifier + revision.to_s + end + end + + def scm_cmd(*args, &block) + full_args = [CVS_BIN, '-d', root_url] + full_args += args + full_args_locale = [] + full_args.map do |e| + full_args_locale << scm_iconv(@path_encoding, 'UTF-8', e) + end + ret = shellout(full_args_locale.map { |e| shell_quote e.to_s }.join(' '), &block) + if $? && $?.exitstatus != 0 + raise ScmCommandAborted, "cvs exited with non-zero status: #{$?.exitstatus}" + end + ret + end + private :scm_cmd + end + class CvsRevisionHelper attr_accessor :complete_rev, :revision, :base, :branchid - + def initialize(complete_rev) @complete_rev = complete_rev parseRevision() end - + def branchPoint return @base end - + def branchVersion if isBranchRevision return @base+"."+@branchid end return @base end - + def isBranchRevision !@branchid.nil? end - + def prevRev - unless @revision==0 - return buildRevision(@revision-1) + unless @revision == 0 + return buildRevision( @revision - 1 ) end - return buildRevision(@revision) + return buildRevision( @revision ) end - + def is_in_branch_with_symbol(branch_symbol) - bpieces=branch_symbol.split(".") - branch_start="#{bpieces[0..-3].join(".")}.#{bpieces[-1]}" - return (branchVersion==branch_start) + bpieces = branch_symbol.split(".") + branch_start = "#{bpieces[0..-3].join(".")}.#{bpieces[-1]}" + return ( branchVersion == branch_start ) end - + private def buildRevision(rev) - if rev== 0 - @base - elsif @branchid.nil? - @base+"."+rev.to_s + if rev == 0 + if @branchid.nil? + @base + ".0" + else + @base + end + elsif @branchid.nil? + @base + "." + rev.to_s else - @base+"."+@branchid+"."+rev.to_s + @base + "." + @branchid + "." + rev.to_s end end - + # Interpretiert die cvs revisionsnummern wie z.b. 1.14 oder 1.3.0.15 def parseRevision() - pieces=@complete_rev.split(".") - @revision=pieces.last.to_i - baseSize=1 - baseSize+=(pieces.size/2) - @base=pieces[0..-baseSize].join(".") + pieces = @complete_rev.split(".") + @revision = pieces.last.to_i + baseSize = 1 + baseSize += (pieces.size / 2) + @base = pieces[0..-baseSize].join(".") if baseSize > 2 - @branchid=pieces[-2] - end + @branchid = pieces[-2] + end end end end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/.svn/text-base/darcs_adapter.rb.svn-base --- a/lib/redmine/scm/adapters/.svn/text-base/darcs_adapter.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/adapters/.svn/text-base/darcs_adapter.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -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) + def entries(path=nil, identifier=nil, options={}) path_prefix = (path.blank? ? '' : "#{path}/") - path = '.' if path.blank? - entries = Entries.new - cmd = "#{DARCS_BIN} annotate --repodir #{@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 #{@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 #{@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 #{@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 #{@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| diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/.svn/text-base/filesystem_adapter.rb.svn-base --- a/lib/redmine/scm/adapters/.svn/text-base/filesystem_adapter.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/adapters/.svn/text-base/filesystem_adapter.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 # # FileSystem adapter # File written by Paul Rivier, at Demotera. @@ -8,12 +8,12 @@ # 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. @@ -23,19 +23,30 @@ 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.blank? ? 'UTF-8' : path_encoding + end + + def path_encoding + @path_encoding end def format_path_ends(path, leading=true, trailling=true) - path = leading ? with_leading_slash(path) : + path = leading ? with_leading_slash(path) : without_leading_slash(path) - trailling ? with_trailling_slash(path) : - without_trailling_slash(path) + trailling ? with_trailling_slash(path) : + without_trailling_slash(path) end def info @@ -46,47 +57,61 @@ rescue CommandFailed return nil end - - def entries(path="", identifier=nil) + + def entries(path="", identifier=nil, options={}) 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) + next if e_utf8.blank? + 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), - :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 .. + :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(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 diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/.svn/text-base/git_adapter.rb.svn-base --- a/lib/redmine/scm/adapters/.svn/text-base/git_adapter.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/adapters/.svn/text-base/git_adapter.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -19,10 +19,55 @@ module Redmine module Scm - module Adapters + module Adapters class GitAdapter < AbstractAdapter + # 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 + @path_encoding = path_encoding.blank? ? 'UTF-8' : path_encoding + end + + def path_encoding + @path_encoding + end def info begin @@ -35,99 +80,129 @@ def branches return @branches if @branches @branches = [] - cmd = "#{GIT_BIN} --git-dir #{target('')} branch --no-color" - shellout(cmd) do |io| + cmd_args = %w|branch --no-color| + scm_cmd(*cmd_args) do |io| io.each_line do |line| @branches << line.match('\s*\*?\s*(.*)$')[1] end end @branches.sort! + rescue ScmCommandAborted + nil end def tags return @tags if @tags - cmd = "#{GIT_BIN} --git-dir #{target('')} tag" - shellout(cmd) do |io| + cmd_args = %w|tag| + scm_cmd(*cmd_args) do |io| @tags = io.readlines.sort!.map{|t| t.strip} end + rescue ScmCommandAborted + nil + end + + def default_branch + bras = self.branches + return nil if bras.nil? + bras.include?('master') ? 'master' : bras.first + end + + def entry(path=nil, identifier=nil) + parts = path.to_s.split(%r{[\/\\]}).select {|n| !n.blank?} + search_path = parts[0..-2].join('/') + search_name = parts[-1] + if search_path.blank? && search_name.blank? + # Root entry + Entry.new(:path => '', :kind => 'dir') + else + # Search for the entry in the parent directory + es = entries(search_path, identifier, + options = {:report_last_commit => false}) + es ? es.detect {|e| e.name == search_name} : nil + end end - def default_branch - branches.include?('master') ? 'master' : branches.first - end - - def entries(path=nil, identifier=nil) + def entries(path=nil, identifier=nil, options={}) path ||= '' + p = scm_iconv(@path_encoding, 'UTF-8', path) entries = Entries.new - cmd = "#{GIT_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| + cmd_args = %w|ls-tree -l| + cmd_args << "HEAD:#{p}" if identifier.nil? + cmd_args << "#{identifier}:#{p}" if identifier + scm_cmd(*cmd_args) do |io| io.each_line do |line| e = line.chomp.to_s if e =~ /^\d+\s+(\w+)\s+([0-9a-f]{40})\s+([0-9-]+)\t(.+)$/ type = $1 - sha = $2 + sha = $2 size = $3 name = $4 - full_path = path.empty? ? name : "#{path}/#{name}" - entries << Entry.new({:name => name, - :path => full_path, + if name.respond_to?(:force_encoding) + name.force_encoding(@path_encoding) + end + full_path = p.empty? ? name : "#{p}/#{name}" + n = scm_iconv('UTF-8', @path_encoding, name) + full_p = scm_iconv('UTF-8', @path_encoding, full_path) + entries << Entry.new({:name => n, + :path => full_p, :kind => (type == "tree") ? 'dir' : 'file', :size => (type == "tree") ? nil : size, - :lastrev => lastrev(full_path,identifier) + :lastrev => options[:report_last_commit] ? + lastrev(full_path, identifier) : Revision.new }) unless entries.detect{|entry| entry.name == name} end end end - return nil if $? && $?.exitstatus != 0 entries.sort_by_name + rescue ScmCommandAborted + nil 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? - shellout(cmd) do |io| - begin - id = io.gets.split[1] - author = io.gets.match('Author:\s+(.*)$')[1] - 2.times { io.gets } - time = Time.parse(io.gets.match('CommitDate:\s+(.*)$')[1]).localtime + 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 = [] + 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]) Revision.new({ :identifier => id, - :scmid => id, - :author => author, - :time => time, - :message => nil, - :paths => nil - }) - rescue NoMethodError => e + :scmid => id, + :author => author, + :time => time, + :message => nil, + :paths => nil + }) + rescue NoMethodError => e logger.error("The revision '#{path}' has a wrong format") return nil - end end + rescue ScmCommandAborted + nil end def revisions(path, identifier_from, identifier_to, options={}) - revisions = Revisions.new + revs = 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 << "--" << scm_iconv(@path_encoding, 'UTF-8', 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]} " 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 - revno = 1 io.each_line do |line| if line =~ /^commit ([0-9a-f]{40})$/ @@ -137,20 +212,19 @@ parsing_descr = 0 revision = Revision.new({ :identifier => changeset[:commit], - :scmid => changeset[:commit], - :author => changeset[:author], - :time => Time.parse(changeset[:date]), - :message => changeset[:description], - :paths => files + :scmid => changeset[:commit], + :author => changeset[:author], + :time => Time.parse(changeset[:date]), + :message => changeset[:description], + :paths => files }) if block_given? yield revision else - revisions << revision + revs << revision end changeset = {} files = [] - revno = revno + 1 end changeset[:commit] = $1 elsif (parsing_descr == 0) && line =~ /^(\w+):\s*(.*)$/ @@ -165,73 +239,75 @@ parsing_descr = 1 changeset[:description] = "" elsif (parsing_descr == 1 || parsing_descr == 2) \ - && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\t(.+)$/ + && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\t(.+)$/ parsing_descr = 2 - fileaction = $1 - filepath = $2 - files << {:action => fileaction, :path => filepath} + fileaction = $1 + filepath = $2 + p = scm_iconv('UTF-8', @path_encoding, filepath) + files << {:action => fileaction, :path => p} elsif (parsing_descr == 1 || parsing_descr == 2) \ - && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\d+\s+(\S+)\t(.+)$/ + && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\d+\s+(\S+)\t(.+)$/ parsing_descr = 2 - fileaction = $1 - filepath = $3 - files << {:action => fileaction, :path => filepath} + fileaction = $1 + filepath = $3 + p = scm_iconv('UTF-8', @path_encoding, filepath) + files << {:action => fileaction, :path => p} elsif (parsing_descr == 1) && line.chomp.to_s == "" parsing_descr = 2 elsif (parsing_descr == 1) changeset[:description] << line[4..-1] end - end + end if changeset[:commit] revision = Revision.new({ :identifier => changeset[:commit], - :scmid => changeset[:commit], - :author => changeset[:author], - :time => Time.parse(changeset[:date]), - :message => changeset[:description], - :paths => files - }) - + :scmid => changeset[:commit], + :author => changeset[:author], + :time => Time.parse(changeset[:date]), + :message => changeset[:description], + :paths => files + }) if block_given? yield revision else - revisions << revision + revs << revision end end end - - return nil if $? && $?.exitstatus != 0 - revisions + revs + rescue ScmCommandAborted => e + logger.error("git log #{from_to.to_s} error: #{e.message}") + revs end def diff(path, identifier_from, identifier_to=nil) path ||= '' - + cmd_args = [] if identifier_to - cmd = "#{GIT_BIN} --git-dir #{target('')} diff --no-color #{shell_quote identifier_to} #{shell_quote identifier_from}" + cmd_args << "diff" << "--no-color" << identifier_to << identifier_from else - cmd = "#{GIT_BIN} --git-dir #{target('')} show --no-color #{shell_quote identifier_from}" + cmd_args << "show" << "--no-color" << identifier_from end - - cmd << " -- #{shell_quote path}" unless path.empty? + cmd_args << "--" << scm_iconv(@path_encoding, 'UTF-8', path) unless path.empty? diff = [] - shellout(cmd) do |io| + scm_cmd *cmd_args do |io| io.each_line do |line| diff << line end end - return nil if $? && $?.exitstatus != 0 diff + rescue ScmCommandAborted + nil end - + 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_args = %w|blame| + cmd_args << "-p" << identifier << "--" << scm_iconv(@path_encoding, 'UTF-8', path) blame = Annotate.new content = nil - shellout(cmd) { |io| io.binmode; content = io.read } - return nil if $? && $?.exitstatus != 0 + scm_cmd(*cmd_args) { |io| io.binmode; content = io.read } # git annotates binary files return nil if content.is_binary_data? identifier = '' @@ -243,27 +319,59 @@ elsif line =~ /^author (.+)/ authors_by_commit[identifier] = $1.strip elsif line =~ /^\t(.*)/ - blame.add_line($1, Revision.new(:identifier => identifier, :author => authors_by_commit[identifier])) + blame.add_line($1, Revision.new( + :identifier => identifier, + :revision => identifier, + :scmid => identifier, + :author => authors_by_commit[identifier] + )) identifier = '' author = '' end end blame + rescue ScmCommandAborted + nil 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_args = %w|show --no-color| + cmd_args << "#{identifier}:#{scm_iconv(@path_encoding, 'UTF-8', path)}" cat = nil - shellout(cmd) do |io| + scm_cmd(*cmd_args) do |io| io.binmode cat = io.read end - return nil if $? && $?.exitstatus != 0 cat + rescue ScmCommandAborted + nil end + + class Revision < Redmine::Scm::Adapters::Revision + # Returns the readable identifier + def format_identifier + identifier[0,8] + end + end + + def scm_cmd(*args, &block) + repo_path = root_url || url + full_args = [GIT_BIN, '--git-dir', repo_path] + if self.class.client_version_above?([1, 7, 2]) + full_args << '-c' << 'core.quotepath=false' + full_args << '-c' << 'log.decorate=no' + end + 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 diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/.svn/text-base/mercurial_adapter.rb.svn-base --- a/lib/redmine/scm/adapters/.svn/text-base/mercurial_adapter.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/adapters/.svn/text-base/mercurial_adapter.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,204 +1,330 @@ -# 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 # 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 'redmine/scm/adapters/abstract_adapter' +require 'cgi' 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_above?([0, 9, 5]) + 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 - if theversion.match(/^\d+(\.\d+)+/) - theversion.split(".").collect(&:to_i) + 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 - %x{#{HG_BIN} --version}.match(/\(version (.*)\)/)[1] + shellout("#{sq_bin} --version") { |io| io.read }.to_s end - + def template_path @@template_path ||= template_path_for(client_version) end - + def template_path_for(version) if ((version <=> [0,9,5]) > 0) || version.empty? ver = "1.0" else ver = "0.9.5" end - "#{TEMPLATES_DIR}/#{TEMPLATE_NAME}-#{ver}.#{TEMPLATE_EXTENSION}" + "#{HELPERS_DIR}/#{TEMPLATE_NAME}-#{ver}.#{TEMPLATE_EXTENSION}" end end - + + def initialize(url, root_url=nil, login=nil, password=nil, path_encoding=nil) + super + @path_encoding = path_encoding.blank? ? 'UTF-8' : path_encoding + end + + def path_encoding + @path_encoding + end + def info - cmd = "#{HG_BIN} -R #{target('')} root" - root_url = nil - shellout(cmd) do |io| - root_url = io.read + tip = summary['repository']['tip'] + Info.new(:root_url => CGI.unescape(summary['repository']['root']), + :lastrev => Revision.new(:revision => tip['revision'], + :scmid => tip['node'])) + # rescue HgCommandAborted + rescue Exception => e + logger.error "hg: error during getting info: #{e.message}" + nil + 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 - 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 + Hash[*alist.flatten] end - - def entries(path=nil, identifier=nil) - path ||= '' + + 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 + end + private :summary + + def entries(path=nil, identifier=nil, options={}) + 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 - cmd = "#{HG_BIN} -R #{target('')} --cwd #{target('')} locate" - cmd << " -r " + (identifier ? identifier.to_s : "tip") - 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} + 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 + + 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 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 + # Mercurial < 1.5 does not support footer template for '' + ActiveSupport::XmlMini.parse("#{output}")['log'] + rescue + end + end + as_ary(log['logentry']).each do |le| + cpalist = as_ary(le['paths']['path-copied']).map do |e| + [e['__content__'], e['copyfrom-path']].map do |s| + scm_iconv('UTF-8', @path_encoding, CGI.unescape(s)) end 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['node'] : 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__']), + :message => le['msg']['__content__'], + :paths => paths) end - return nil if $? && $?.exitstatus != 0 - entries.sort_by_name + self end - - # Fetch 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 #{identifier_from.to_i}:#{identifier_to.to_i}" - elsif identifier_from - cmd << " -r #{identifier_from.to_i}:" + + # Returns list of nodes in the specified branch + def nodes_in_branch(branch, options={}) + hg_args = ['rhlog', '--template', '{node|short}\n', '--rhbranch', CGI.escape(branch)] + hg_args << '--from' << CGI.escape(branch) + hg_args << '--to' << '0' + hg_args << '--limit' << options[:limit] if options[:limit] + hg(*hg_args) { |io| io.readlines.map { |e| e.chomp } } + end + + def diff(path, identifier_from, identifier_to=nil) + 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 - cmd << " --limit #{options[:limit].to_i}" if options[:limit] - cmd << " #{path}" if path - shellout(cmd) do |io| - begin - # HG doesn't close the XML Document... - doc = REXML::Document.new(io.read << "") - 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 => "/#{path.text}", - :from_path => from_path ? "/#{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 - rescue - logger.debug($!) - end + unless path.blank? + p = scm_iconv(@path_encoding, 'UTF-8', path) + hg_args << CGI.escape(hgtarget(p)) end - return nil if $? && $?.exitstatus != 0 - revisions - end - - def diff(path, identifier_from, identifier_to=nil) - path ||= '' - if identifier_to - identifier_to = identifier_to.to_i - else - identifier_to = identifier_from.to_i - 1 - end - cmd = "#{HG_BIN} -R #{target('')} diff -r #{identifier_to} -r #{identifier_from} --nodates" - cmd << " -I #{target(path)}" unless path.empty? diff = [] - 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 " + (identifier ? identifier.to_s : "tip") - cmd << " #{target(path)}" - cat = nil - shellout(cmd) do |io| + p = CGI.escape(scm_iconv(@path_encoding, 'UTF-8', path)) + hg 'rhcat', '-r', CGI.escape(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 -n -u" - cmd << " -r " + (identifier ? identifier.to_s : "tip") - cmd << " -r #{identifier.to_i}" if 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', CGI.escape(hgrev(identifier)), hgtarget(p) do |io| io.each_line do |line| - next unless line =~ %r{^([^:]+)\s(\d+):(.*)$} - blame.add_line($3.rstrip, Revision.new(:identifier => $2.to_i, :author => $1.strip)) + 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 + # means not found or cannot be annotated + Annotate.new end + + class Revision < Redmine::Scm::Adapters::Revision + # Returns the readable identifier + def format_identifier + "#{revision}:#{scmid}" + 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, 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 diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/.svn/text-base/subversion_adapter.rb.svn-base --- a/lib/redmine/scm/adapters/.svn/text-base/subversion_adapter.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/adapters/.svn/text-base/subversion_adapter.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,256 +1,291 @@ -# Redmine - project management software -# Copyright (C) 2006-2010 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 'redmine/scm/adapters/abstract_adapter' -require 'uri' - -module Redmine - module Scm - module Adapters - class SubversionAdapter < AbstractAdapter - - # SVN executable name - SVN_BIN = "svn" - - class << self - def client_version - @@client_version ||= (svn_binary_version || []) - 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.gets.to_s.match(%r{((\d+\.)+\d+)}) - version = m[0].scan(%r{\d+}).collect(&:to_i) - end - end - return nil if $? && $?.exitstatus != 0 - version - end - end - - # Get info about the svn repository - def info - cmd = "#{SVN_BIN} info --xml #{target}" - cmd << credentials_string - info = nil - shellout(cmd) do |io| - output = io.read - begin - doc = ActiveSupport::XmlMini.parse(output) - #root_url = doc.elements["info/entry/repository/root"].text - info = Info.new({:root_url => doc['info']['entry']['repository']['root']['__content__'], - :lastrev => Revision.new({ - :identifier => doc['info']['entry']['commit']['revision'], - :time => Time.parse(doc['info']['entry']['commit']['date']['__content__']).localtime, - :author => (doc['info']['entry']['commit']['author'] ? doc['info']['entry']['commit']['author']['__content__'] : "") - }) - }) - rescue - end - end - return nil if $? && $?.exitstatus != 0 - info - 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 << credentials_string - shellout(cmd) do |io| - output = io.read - begin - doc = ActiveSupport::XmlMini.parse(output) - each_xml_element(doc['lists']['list'], 'entry') do |entry| - commit = entry['commit'] - commit_date = commit['date'] - # Skip directory if there is no commit date (usually that - # means that we don't have read access to it) - next if entry['kind'] == 'dir' && commit_date.nil? - name = entry['name']['__content__'] - entries << Entry.new({:name => URI.unescape(name), - :path => ((path.empty? ? "" : "#{path}/") + name), - :kind => entry['kind'], - :size => ((s = entry['size']) ? s['__content__'].to_i : nil), - :lastrev => Revision.new({ - :identifier => commit['revision'], - :time => Time.parse(commit_date['__content__'].to_s).localtime, - :author => ((a = commit['author']) ? a['__content__'] : nil) - }) - }) - end - rescue Exception => e - logger.error("Error parsing svn output: #{e.message}") - logger.error("Output was:\n #{output}") - end - end - return nil if $? && $?.exitstatus != 0 - 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 << credentials_string - properties = {} - shellout(cmd) do |io| - output = io.read - begin - doc = ActiveSupport::XmlMini.parse(output) - each_xml_element(doc['properties']['target'], 'property') do |property| - properties[ property['name'] ] = property['__content__'].to_s - end - rescue - end - end - return nil if $? && $?.exitstatus != 0 - properties - 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 : "HEAD" - identifier_to = (identifier_to and identifier_to.to_i > 0) ? identifier_to.to_i : 1 - revisions = Revisions.new - cmd = "#{SVN_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 - begin - doc = ActiveSupport::XmlMini.parse(output) - each_xml_element(doc['log'], 'logentry') do |logentry| - paths = [] - each_xml_element(logentry['paths'], 'path') do |path| - paths << {:action => path['action'], - :path => path['__content__'], - :from_path => path['copyfrom-path'], - :from_revision => path['copyfrom-rev'] - } - end if logentry['paths'] && logentry['paths']['path'] - paths.sort! { |x,y| x[:path] <=> y[:path] } - - revisions << Revision.new({:identifier => logentry['revision'], - :author => (logentry['author'] ? logentry['author']['__content__'] : ""), - :time => Time.parse(logentry['date']['__content__'].to_s).localtime, - :message => logentry['msg']['__content__'], - :paths => paths - }) - end - rescue - end - end - 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 << "#{identifier_to}:" - cmd << "#{identifier_from}" - cmd << " #{target(path)}@#{identifier_from}" - cmd << credentials_string - diff = [] - shellout(cmd) do |io| - io.each_line do |line| - diff << line - end - end - 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 << credentials_string - cat = nil - shellout(cmd) do |io| - io.binmode - cat = io.read - end - 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 << credentials_string - blame = Annotate.new - shellout(cmd) do |io| - io.each_line do |line| - next unless line =~ %r{^\s*(\d+)\s*(\S+)\s(.*)$} - blame.add_line($3.rstrip, Revision.new(:identifier => $1.to_i, :author => $2.strip)) - end - end - return nil if $? && $?.exitstatus != 0 - blame - end - - private - - def credentials_string - str = '' - str << " --username #{shell_quote(@login)}" unless @login.blank? - str << " --password #{shell_quote(@password)}" unless @login.blank? || @password.blank? - str << " --no-auth-cache --non-interactive" - str - end - - # Helper that iterates over the child elements of a xml node - # MiniXml returns a hash when a single child is found or an array of hashes for multiple children - def each_xml_element(node, name) - if node && node[name] - if node[name].is_a?(Hash) - yield node[name] - else - node[name].each do |element| - yield element - end - end - end - end - - def target(path = '') - base = path.match(/^\//) ? root_url : url - uri = "#{base}/#{path}" - uri = URI.escape(URI.escape(uri), '[]') - shell_quote(uri.gsub(/[?<>\*]/, '')) - end - end - end - end -end +# 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 'redmine/scm/adapters/abstract_adapter' +require 'uri' + +module Redmine + module Scm + module Adapters + class SubversionAdapter < AbstractAdapter + + # SVN executable name + 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 + # --xml options are introduced in 1.3. + # http://subversion.apache.org/docs/release-notes/1.3.html + client_version_above?([1, 3]) + end + + def svn_binary_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 svn repository + def info + 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 + info = Info.new({:root_url => doc['info']['entry']['repository']['root']['__content__'], + :lastrev => Revision.new({ + :identifier => doc['info']['entry']['commit']['revision'], + :time => Time.parse(doc['info']['entry']['commit']['date']['__content__']).localtime, + :author => (doc['info']['entry']['commit']['author'] ? doc['info']['entry']['commit']['author']['__content__'] : "") + }) + }) + rescue + end + end + return nil if $? && $?.exitstatus != 0 + info + 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, options={}) + path ||= '' + identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD" + entries = Entries.new + 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| + commit = entry['commit'] + commit_date = commit['date'] + # Skip directory if there is no commit date (usually that + # means that we don't have read access to it) + next if entry['kind'] == 'dir' && commit_date.nil? + name = entry['name']['__content__'] + entries << Entry.new({:name => URI.unescape(name), + :path => ((path.empty? ? "" : "#{path}/") + name), + :kind => entry['kind'], + :size => ((s = entry['size']) ? s['__content__'].to_i : nil), + :lastrev => Revision.new({ + :identifier => commit['revision'], + :time => Time.parse(commit_date['__content__'].to_s).localtime, + :author => ((a = commit['author']) ? a['__content__'] : nil) + }) + }) + end + rescue Exception => e + logger.error("Error parsing svn output: #{e.message}") + logger.error("Output was:\n #{output}") + end + end + return nil if $? && $?.exitstatus != 0 + 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 = "#{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| + properties[ property['name'] ] = property['__content__'].to_s + end + rescue + end + end + 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 = "#{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| + paths = [] + each_xml_element(logentry['paths'], 'path') do |path| + paths << {:action => path['action'], + :path => path['__content__'], + :from_path => path['copyfrom-path'], + :from_revision => path['copyfrom-rev'] + } + end if logentry['paths'] && logentry['paths']['path'] + paths.sort! { |x,y| x[:path] <=> y[:path] } + + revisions << Revision.new({:identifier => logentry['revision'], + :author => (logentry['author'] ? logentry['author']['__content__'] : ""), + :time => Time.parse(logentry['date']['__content__'].to_s).localtime, + :message => logentry['msg']['__content__'], + :paths => paths + }) + end + rescue + end + end + 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 = "#{self.class.sq_bin} diff -r " + cmd << "#{identifier_to}:" + cmd << "#{identifier_from}" + cmd << " #{target(path)}@#{identifier_from}" + cmd << credentials_string + diff = [] + shellout(cmd) do |io| + io.each_line do |line| + diff << line + end + end + return nil if $? && $?.exitstatus != 0 + diff + end + + def cat(path, identifier=nil) + identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD" + cmd = "#{self.class.sq_bin} cat #{target(path)}@#{identifier}" + cmd << credentials_string + cat = nil + shellout(cmd) do |io| + io.binmode + cat = io.read + end + return nil if $? && $?.exitstatus != 0 + cat + end + + def annotate(path, identifier=nil) + identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD" + cmd = "#{self.class.sq_bin} blame #{target(path)}@#{identifier}" + cmd << credentials_string + blame = Annotate.new + shellout(cmd) do |io| + io.each_line do |line| + next unless line =~ %r{^\s*(\d+)\s*(\S+)\s(.*)$} + rev = $1 + blame.add_line($3.rstrip, + Revision.new( + :identifier => rev, + :revision => rev, + :author => $2.strip + )) + end + end + return nil if $? && $?.exitstatus != 0 + blame + end + + private + + def credentials_string + str = '' + str << " --username #{shell_quote(@login)}" unless @login.blank? + str << " --password #{shell_quote(@password)}" unless @login.blank? || @password.blank? + str << " --no-auth-cache --non-interactive" + str + end + + # Helper that iterates over the child elements of a xml node + # MiniXml returns a hash when a single child is found + # or an array of hashes for multiple children + def each_xml_element(node, name) + if node && node[name] + if node[name].is_a?(Hash) + yield node[name] + else + node[name].each do |element| + yield element + end + end + end + end + + def target(path = '') + base = path.match(/^\//) ? root_url : url + uri = "#{base}/#{path}" + uri = URI.escape(URI.escape(uri), '[]') + shell_quote(uri.gsub(/[?<>\*]/, '')) + end + end + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/abstract_adapter.rb --- a/lib/redmine/scm/adapters/abstract_adapter.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/adapters/abstract_adapter.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -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,20 +82,24 @@ def supports_annotate? respond_to?('annotate') end - + def root_url @root_url end - + def url @url end - + + def path_encoding + nil + end + # get info about the svn repository def info return nil end - + # Returns the entry identified by path and revision identifier # or nil if entry doesn't exist in the repository def entry(path=nil, identifier=nil) @@ -94,10 +115,10 @@ es ? es.detect {|e| e.name == search_name} : nil end end - + # Returns an Entries collection # or nil if the given path doesn't exist in the repository - def entries(path=nil, identifier=nil) + def entries(path=nil, identifier=nil, options={}) return nil end @@ -105,30 +126,30 @@ return nil end - def tags + def tags return nil end def default_branch return nil end - + def properties(path, identifier=nil) return nil end - + def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={}) return nil end - + def diff(path, identifier_from, identifier_to=nil) return nil end - + def cat(path, identifier=nil) return nil end - + def with_leading_slash(path) path ||= '' (path[0,1]!="/") ? "/#{path}" : path @@ -138,7 +159,7 @@ path ||= '' (path[-1,1] == "/") ? path : "#{path}/" end - + def without_leading_slash(path) path ||= '' path.gsub(%r{^/+}, '') @@ -148,13 +169,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 @@ -162,71 +179,95 @@ info = self.info info ? info.root_url : nil end - + def target(path) path ||= '' 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 logger && logger.debug? + logger.debug "Shelling out: #{strip_credential(cmd)}" + end if Rails.env == 'development' # Capture stderr when running in dev environment 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 rescue Errno::ENOENT => e msg = strip_credential(e.message) # The command failed, log it and re-raise - logger.error("SCM command failed, make sure that your SCM binary (eg. svn) is in PATH (#{ENV['PATH']}): #{strip_credential(cmd)}\n with: #{msg}") + logmsg = "SCM command failed, " + logmsg += "make sure that your SCM command (e.g. svn) is " + logmsg += "in PATH (#{ENV['PATH']})\n" + logmsg += "You can configure your scm commands in config/configuration.yml.\n" + logmsg += "#{strip_credential(cmd)}\n" + logmsg += "with: #{msg}" + logger.error(logmsg) raise CommandFailed.new(msg) end - end - + end + # Hides username/password in a given command def self.strip_credential(cmd) q = (Redmine::Platform.mswin? ? '"' : "'") cmd.to_s.gsub(/(\-\-(password|username))\s+(#{q}[^#{q}]+#{q}|[^#{q}]\S+)/, '\\1 xxxx') end - + 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| + sort {|x,y| if x.kind == y.kind x.name.to_s <=> y.name.to_s else x.kind <=> y.kind end - } + } end - + def revisions revisions ||= Revisions.new(collect{|entry| entry.lastrev}.compact) end end - + class Info attr_accessor :root_url, :lastrev def initialize(attributes={}) @@ -234,7 +275,7 @@ self.lastrev = attributes[:lastrev] end end - + class Entry attr_accessor :name, :path, :kind, :size, :lastrev def initialize(attributes={}) @@ -244,20 +285,20 @@ self.size = attributes[:size].to_i if attributes[:size] self.lastrev = attributes[:lastrev] end - + def is_file? 'file' == self.kind end - + def is_dir? 'dir' == self.kind end - + def is_text? Redmine::MimeType.is_type?('text', name) end end - + class Revisions < Array def latest sort {|x,y| @@ -267,70 +308,48 @@ 0 end }.last - end + end end - + class Revision - attr_accessor :scmid, :name, :author, :time, :message, :paths, :revision, :branch - attr_writer :identifier + attr_accessor :scmid, :name, :author, :time, :message, + :paths, :revision, :branch, :identifier def initialize(attributes={}) self.identifier = attributes[:identifier] - self.scmid = attributes[:scmid] - self.name = attributes[:name] || self.identifier - self.author = attributes[:author] - self.time = attributes[:time] - self.message = attributes[:message] || "" - self.paths = attributes[:paths] - self.revision = attributes[:revision] - self.branch = attributes[:branch] + self.scmid = attributes[:scmid] + self.name = attributes[:name] || self.identifier + self.author = attributes[:author] + self.time = attributes[:time] + self.message = attributes[:message] || "" + self.paths = attributes[:paths] + self.revision = attributes[:revision] + self.branch = attributes[:branch] end - # Returns the identifier of this revision. - # e.g. revision number for centralized system; hash id for DVCS - def identifier - @identifier || scmid || revision - 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 + # Returns the readable identifier. + def format_identifier + self.identifier.to_s end end - + class Annotate attr_reader :lines, :revisions - + def initialize @lines = [] @revisions = [] end - + def add_line(line, revision) @lines << line @revisions << revision end - + def content content = lines.join("\n") end - + def empty? lines.empty? end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/bazaar_adapter.rb --- a/lib/redmine/scm/adapters/bazaar_adapter.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/adapters/bazaar_adapter.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -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,15 +75,15 @@ 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) + def entries(path=nil, identifier=nil, options={}) path ||= '' entries = Entries.new - cmd = "#{BZR_BIN} ls -v --show-ids" - identifier = -1 unless identifier && identifier.to_i > 0 - cmd << " -r#{identifier.to_i}" + 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)}" shellout(cmd) do |io| prefix = "#{url}/#{path}".gsub('\\', '/') @@ -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 = 'last:1' unless identifier_from and identifier_from.to_i > 0 - identifier_to = 1 unless identifier_to and identifier_to.to_i > 0 + 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.to_i}..#{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 @@ -88,7 +120,6 @@ parsing = nil else next unless revision - if line =~ /^revno: (\d+)($|\s\[merge\]$)/ revision.identifier = $1.to_i elsif line =~ /^committer: (.+)$/ @@ -132,15 +163,18 @@ return nil if $? && $?.exitstatus != 0 revisions end - + def diff(path, identifier_from, identifier_to=nil) path ||= '' if identifier_to - identifier_to = identifier_to.to_i + identifier_to = identifier_to.to_i else identifier_to = identifier_from.to_i - 1 end - cmd = "#{BZR_BIN} diff -r#{identifier_to}..#{identifier_from} #{target(path)}" + if identifier_from + identifier_from = identifier_from.to_i + end + cmd = "#{self.class.sq_bin} diff -r#{identifier_to}..#{identifier_from} #{target(path)}" diff = [] shellout(cmd) do |io| io.each_line do |line| @@ -150,9 +184,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 @@ -163,9 +197,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 @@ -174,7 +208,13 @@ identifier = nil io.each_line do |line| next unless line =~ %r{^(\d+) ([^|]+)\| (.*)$} - blame.add_line($3.rstrip, Revision.new(:identifier => $1.to_i, :author => $2.strip)) + rev = $1 + blame.add_line($3.rstrip, + Revision.new( + :identifier => rev, + :revision => rev, + :author => $2.strip + )) end end return nil if $? && $?.exitstatus != 0 diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/cvs_adapter.rb --- a/lib/redmine/scm/adapters/cvs_adapter.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/adapters/cvs_adapter.rb Mon Jul 25 14:23:37 2011 +0100 @@ -5,12 +5,12 @@ # 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. @@ -23,256 +23,317 @@ class CvsAdapter < AbstractAdapter # CVS executable name - CVS_BIN = "cvs" - + CVS_BIN = Redmine::Configuration['scm_cvs_command'] || "cvs" + + # raised if scm command exited with error, e.g. unknown revision. + class ScmCommandAborted < CommandFailed; end + + 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) + # url -> the project-path, relative to the cvsroot (eg. module name) # root_url -> the good old, sometimes damned, CVSROOT - # login -> unnecessary + # login -> unnecessary # password -> unnecessary too - def initialize(url, root_url=nil, login=nil, password=nil) - @url = url - @login = login if login && !login.empty? + def initialize(url, root_url=nil, login=nil, password=nil, + path_encoding=nil) + @path_encoding = path_encoding.blank? ? 'UTF-8' : path_encoding + @url = url + # TODO: better Exception here (IllegalArgumentException) + raise CommandFailed if root_url.blank? + @root_url = root_url + + # These are unused. + @login = login if login && !login.empty? @password = (password || "") if @login - #TODO: better Exception here (IllegalArgumentException) - raise CommandFailed if root_url.blank? - @root_url = root_url end - - def root_url - @root_url + + def path_encoding + @path_encoding end - - def url - @url - end - + def info logger.debug " 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) - def entries(path=nil, identifier=nil) + def entries(path=nil, identifier=nil, options={}) logger.debug " entries '#{path}' with identifier '#{identifier}'" - path_with_project="#{url}#{with_leading_slash(path)}" + path_locale = scm_iconv(@path_encoding, 'UTF-8', path) + path_locale.force_encoding("ASCII-8BIT") if path_locale.respond_to?(:force_encoding) entries = Entries.new - cmd = "#{CVS_BIN} -d #{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) + cmd_args = %w|-q rls -e| + cmd_args << "-D" << time_to_cvstime_rlog(identifier) if identifier + cmd_args << path_with_proj(path) + scm_cmd(*cmd_args) do |io| + io.each_line() do |line| + fields = line.chop.split('/',-1) logger.debug(">>InspectLine #{fields.inspect}") - if fields[0]!="D" - entries << Entry.new({:name => fields[-5], + time = nil + # Thu Dec 13 16:27:22 2007 + time_l = fields[-3].split(' ') + if time_l.size == 5 && time_l[4].length == 4 + begin + time = Time.parse( + "#{time_l[1]} #{time_l[2]} #{time_l[3]} GMT #{time_l[4]}") + rescue + end + end + entries << Entry.new( + { + :name => scm_iconv('UTF-8', @path_encoding, fields[-5]), #:path => fields[-4].include?(path)?fields[-4]:(path + "/"+ fields[-4]), - :path => "#{path}/#{fields[-5]}", + :path => scm_iconv('UTF-8', @path_encoding, "#{path_locale}/#{fields[-5]}"), :kind => 'file', :size => nil, - :lastrev => Revision.new({ - :revision => fields[-4], - :name => fields[-4], - :time => Time.parse(fields[-3]), - :author => '' + :lastrev => Revision.new( + { + :revision => fields[-4], + :name => scm_iconv('UTF-8', @path_encoding, fields[-4]), + :time => time, + :author => '' + }) }) - }) else - entries << Entry.new({:name => fields[1], - :path => "#{path}/#{fields[1]}", - :kind => 'dir', - :size => nil, + entries << Entry.new( + { + :name => scm_iconv('UTF-8', @path_encoding, fields[1]), + :path => scm_iconv('UTF-8', @path_encoding, "#{path_locale}/#{fields[1]}"), + :kind => 'dir', + :size => nil, :lastrev => nil - }) + }) end - } + end end - return nil if $? && $?.exitstatus != 0 entries.sort_by_name - end + rescue ScmCommandAborted + nil + 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 " revisions path:'#{path}',identifier_from #{identifier_from}, identifier_to #{identifier_to}" - - path_with_project="#{url}#{with_leading_slash(path)}" - cmd = "#{CVS_BIN} -d #{root_url} rlog" - cmd << " -d\">#{time_to_cvstime(identifier_from)}\"" if identifier_from - cmd << " #{shell_quote path_with_project}" - shellout(cmd) do |io| - state="entry_start" - - commit_log=String.new - revision=nil - date=nil - author=nil - entry_path=nil - entry_name=nil - file_state=nil - branch_map=nil - - io.each_line() do |line| - - if state!="revision" && /^#{ENDLOG}/ =~ line - commit_log=String.new - revision=nil - state="entry_start" + path_with_project_utf8 = path_with_proj(path) + path_with_project_locale = scm_iconv(@path_encoding, 'UTF-8', path_with_project_utf8) + logger.debug " revisions path:" + + "'#{path}',identifier_from #{identifier_from}, identifier_to #{identifier_to}" + cmd_args = %w|-q rlog| + cmd_args << "-d" << ">#{time_to_cvstime_rlog(identifier_from)}" if identifier_from + cmd_args << path_with_project_utf8 + scm_cmd(*cmd_args) do |io| + state = "entry_start" + commit_log = String.new + revision = nil + date = nil + author = nil + entry_path = nil + entry_name = nil + file_state = nil + branch_map = nil + io.each_line() do |line| + if state != "revision" && /^#{ENDLOG}/ =~ line + commit_log = String.new + revision = nil + state = "entry_start" end - - if state=="entry_start" - branch_map=Hash.new - if /^RCS file: #{Regexp.escape(root_url_path)}\/#{Regexp.escape(path_with_project)}(.+),v$/ =~ line + if state == "entry_start" + branch_map = Hash.new + if /^RCS file: #{Regexp.escape(root_url_path)}\/#{Regexp.escape(path_with_project_locale)}(.+),v$/ =~ line entry_path = normalize_cvs_path($1) entry_name = normalize_path(File.basename($1)) logger.debug("Path #{entry_path} <=> Name #{entry_name}") elsif /^head: (.+)$/ =~ line entry_headRev = $1 #unless entry.nil? elsif /^symbolic names:/ =~ line - state="symbolic" #unless entry.nil? + state = "symbolic" #unless entry.nil? elsif /^#{STARTLOG}/ =~ line - commit_log=String.new - state="revision" - end + commit_log = String.new + state = "revision" + end next - elsif state=="symbolic" - if /^(.*):\s(.*)/ =~ (line.strip) - branch_map[$1]=$2 + elsif state == "symbolic" + if /^(.*):\s(.*)/ =~ (line.strip) + branch_map[$1] = $2 else - state="tags" + state = "tags" next - end - elsif state=="tags" + end + elsif state == "tags" if /^#{STARTLOG}/ =~ line commit_log = "" - state="revision" + state = "revision" elsif /^#{ENDLOG}/ =~ line - state="head" + state = "head" end next - elsif state=="revision" - if /^#{ENDLOG}/ =~ line || /^#{STARTLOG}/ =~ line + elsif state == "revision" + if /^#{ENDLOG}/ =~ line || /^#{STARTLOG}/ =~ line if revision - - revHelper=CvsRevisionHelper.new(revision) - revBranch="HEAD" - - branch_map.each() do |branch_name,branch_point| + revHelper = CvsRevisionHelper.new(revision) + revBranch = "HEAD" + branch_map.each() do |branch_name, branch_point| if revHelper.is_in_branch_with_symbol(branch_point) - revBranch=branch_name + revBranch = branch_name end end - logger.debug("********** YIELD Revision #{revision}::#{revBranch}") - - yield Revision.new({ - :time => date, - :author => author, - :message=>commit_log.chomp, + yield Revision.new({ + :time => date, + :author => author, + :message => commit_log.chomp, :paths => [{ :revision => revision, - :branch=> revBranch, - :path=>entry_path, - :name=>entry_name, - :kind=>'file', - :action=>file_state - }] - }) + :branch => revBranch, + :path => scm_iconv('UTF-8', @path_encoding, entry_path), + :name => scm_iconv('UTF-8', @path_encoding, entry_name), + :kind => 'file', + :action => file_state + }] + }) end - - commit_log=String.new - revision=nil - + commit_log = String.new + revision = nil if /^#{ENDLOG}/ =~ line - state="entry_start" + state = "entry_start" end next end - + if /^branches: (.+)$/ =~ line - #TODO: version.branch = $1 + # TODO: version.branch = $1 elsif /^revision (\d+(?:\.\d+)+).*$/ =~ line - revision = $1 + revision = $1 elsif /^date:\s+(\d+.\d+.\d+\s+\d+:\d+:\d+)/ =~ line - date = Time.parse($1) - author = /author: ([^;]+)/.match(line)[1] - file_state = /state: ([^;]+)/.match(line)[1] - #TODO: linechanges only available in CVS.... maybe a feature our SVN implementation. i'm sure, they are - # useful for stats or something else + date = Time.parse($1) + line_utf8 = scm_iconv('UTF-8', options[:log_encoding], line) + author_utf8 = /author: ([^;]+)/.match(line_utf8)[1] + author = scm_iconv(options[:log_encoding], 'UTF-8', author_utf8) + file_state = /state: ([^;]+)/.match(line)[1] + # TODO: + # linechanges only available in CVS.... + # maybe a feature our SVN implementation. + # I'm sure, they are useful for stats or something else # linechanges =/lines: \+(\d+) -(\d+)/.match(line) # unless linechanges.nil? # version.line_plus = linechanges[1] # 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 - + rescue ScmCommandAborted + Revisions.new + end + def diff(path, identifier_from, identifier_to=nil) - logger.debug " diff path:'#{path}',identifier_from #{identifier_from}, identifier_to #{identifier_to}" - path_with_project="#{url}#{with_leading_slash(path)}" - cmd = "#{CVS_BIN} -d #{root_url} rdiff -u -r#{identifier_to} -r#{identifier_from} #{shell_quote path_with_project}" + logger.debug " diff path:'#{path}'" + + ",identifier_from #{identifier_from}, identifier_to #{identifier_to}" + cmd_args = %w|rdiff -u| + cmd_args << "-r#{identifier_to}" + cmd_args << "-r#{identifier_from}" + cmd_args << path_with_proj(path) diff = [] - shellout(cmd) do |io| + scm_cmd(*cmd_args) do |io| io.each_line do |line| diff << line end end - return nil if $? && $?.exitstatus != 0 diff - end - + rescue ScmCommandAborted + nil + end + def cat(path, identifier=nil) identifier = (identifier) ? identifier : "HEAD" logger.debug " cat path:'#{path}',identifier #{identifier}" - path_with_project="#{url}#{with_leading_slash(path)}" - cmd = "#{CVS_BIN} -d #{root_url} co" - cmd << " -D \"#{time_to_cvstime(identifier)}\"" if identifier - cmd << " -p #{shell_quote path_with_project}" + cmd_args = %w|-q co| + cmd_args << "-D" << time_to_cvstime(identifier) if identifier + cmd_args << "-p" << path_with_proj(path) cat = nil - shellout(cmd) do |io| + scm_cmd(*cmd_args) do |io| + io.binmode cat = io.read end - return nil if $? && $?.exitstatus != 0 cat - end + rescue ScmCommandAborted + nil + end def annotate(path, identifier=nil) identifier = (identifier) ? identifier : "HEAD" logger.debug " annotate path:'#{path}',identifier #{identifier}" - path_with_project="#{url}#{with_leading_slash(path)}" - cmd = "#{CVS_BIN} -d #{root_url} rannotate -r#{identifier} #{shell_quote path_with_project}" + cmd_args = %w|rannotate| + cmd_args << "-D" << time_to_cvstime(identifier) if identifier + cmd_args << path_with_proj(path) blame = Annotate.new - shellout(cmd) do |io| + scm_cmd(*cmd_args) do |io| io.each_line do |line| next unless line =~ %r{^([\d\.]+)\s+\(([^\)]+)\s+[^\)]+\):\s(.*)$} - blame.add_line($3.rstrip, Revision.new(:revision => $1, :author => $2.strip)) + blame.add_line( + $3.rstrip, + Revision.new( + :revision => $1, + :identifier => nil, + :author => $2.strip + )) end end - return nil if $? && $?.exitstatus != 0 blame + rescue ScmCommandAborted + Annotate.new end - + private - + # Returns the root url without the connexion string # :pserver:anonymous@foo.bar:/path => /path # :ext:cvsservername:/path => /path @@ -283,78 +344,117 @@ # convert a date/time into the CVS-format def time_to_cvstime(time) return nil if time.nil? + time = Time.now if time == 'HEAD' + unless time.kind_of? Time time = Time.parse(time) end - return time.strftime("%Y-%m-%d %H:%M:%S") + return time_to_cvstime_rlog(time) 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\//,'')) end - + def normalize_path(path) path.sub(/^(\/)*(.*)/,'\2').sub(/(.*)(,v)+/,'\1') - end - end - + end + + def path_with_proj(path) + "#{url}#{with_leading_slash(path)}" + end + private :path_with_proj + + class Revision < Redmine::Scm::Adapters::Revision + # Returns the readable identifier + def format_identifier + revision.to_s + end + end + + def scm_cmd(*args, &block) + full_args = [CVS_BIN, '-d', root_url] + full_args += args + full_args_locale = [] + full_args.map do |e| + full_args_locale << scm_iconv(@path_encoding, 'UTF-8', e) + end + ret = shellout(full_args_locale.map { |e| shell_quote e.to_s }.join(' '), &block) + if $? && $?.exitstatus != 0 + raise ScmCommandAborted, "cvs exited with non-zero status: #{$?.exitstatus}" + end + ret + end + private :scm_cmd + end + class CvsRevisionHelper attr_accessor :complete_rev, :revision, :base, :branchid - + def initialize(complete_rev) @complete_rev = complete_rev parseRevision() end - + def branchPoint return @base end - + def branchVersion if isBranchRevision return @base+"."+@branchid end return @base end - + def isBranchRevision !@branchid.nil? end - + def prevRev - unless @revision==0 - return buildRevision(@revision-1) + unless @revision == 0 + return buildRevision( @revision - 1 ) end - return buildRevision(@revision) + return buildRevision( @revision ) end - + def is_in_branch_with_symbol(branch_symbol) - bpieces=branch_symbol.split(".") - branch_start="#{bpieces[0..-3].join(".")}.#{bpieces[-1]}" - return (branchVersion==branch_start) + bpieces = branch_symbol.split(".") + branch_start = "#{bpieces[0..-3].join(".")}.#{bpieces[-1]}" + return ( branchVersion == branch_start ) end - + private def buildRevision(rev) - if rev== 0 - @base - elsif @branchid.nil? - @base+"."+rev.to_s + if rev == 0 + if @branchid.nil? + @base + ".0" + else + @base + end + elsif @branchid.nil? + @base + "." + rev.to_s else - @base+"."+@branchid+"."+rev.to_s + @base + "." + @branchid + "." + rev.to_s end end - + # Interpretiert die cvs revisionsnummern wie z.b. 1.14 oder 1.3.0.15 def parseRevision() - pieces=@complete_rev.split(".") - @revision=pieces.last.to_i - baseSize=1 - baseSize+=(pieces.size/2) - @base=pieces[0..-baseSize].join(".") + pieces = @complete_rev.split(".") + @revision = pieces.last.to_i + baseSize = 1 + baseSize += (pieces.size / 2) + @base = pieces[0..-baseSize].join(".") if baseSize > 2 - @branchid=pieces[-2] - end + @branchid = pieces[-2] + end end end end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/darcs_adapter.rb --- a/lib/redmine/scm/adapters/darcs_adapter.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/adapters/darcs_adapter.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -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) + def entries(path=nil, identifier=nil, options={}) path_prefix = (path.blank? ? '' : "#{path}/") - path = '.' if path.blank? - entries = Entries.new - cmd = "#{DARCS_BIN} annotate --repodir #{@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 #{@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 #{@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 #{@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 #{@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| diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/filesystem_adapter.rb --- a/lib/redmine/scm/adapters/filesystem_adapter.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/adapters/filesystem_adapter.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 # # FileSystem adapter # File written by Paul Rivier, at Demotera. @@ -8,12 +8,12 @@ # 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. @@ -23,19 +23,30 @@ 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.blank? ? 'UTF-8' : path_encoding + end + + def path_encoding + @path_encoding end def format_path_ends(path, leading=true, trailling=true) - path = leading ? with_leading_slash(path) : + path = leading ? with_leading_slash(path) : without_leading_slash(path) - trailling ? with_trailling_slash(path) : - without_trailling_slash(path) + trailling ? with_trailling_slash(path) : + without_trailling_slash(path) end def info @@ -46,47 +57,61 @@ rescue CommandFailed return nil end - - def entries(path="", identifier=nil) + + def entries(path="", identifier=nil, options={}) 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) + next if e_utf8.blank? + 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), - :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 .. + :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(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 diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/git_adapter.rb --- a/lib/redmine/scm/adapters/git_adapter.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/adapters/git_adapter.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ -# 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 # 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. @@ -19,10 +19,55 @@ module Redmine module Scm - module Adapters + module Adapters class GitAdapter < AbstractAdapter + # 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 + @path_encoding = path_encoding.blank? ? 'UTF-8' : path_encoding + end + + def path_encoding + @path_encoding + end def info begin @@ -35,99 +80,129 @@ def branches return @branches if @branches @branches = [] - cmd = "#{GIT_BIN} --git-dir #{target('')} branch --no-color" - shellout(cmd) do |io| + cmd_args = %w|branch --no-color| + scm_cmd(*cmd_args) do |io| io.each_line do |line| @branches << line.match('\s*\*?\s*(.*)$')[1] end end @branches.sort! + rescue ScmCommandAborted + nil end def tags return @tags if @tags - cmd = "#{GIT_BIN} --git-dir #{target('')} tag" - shellout(cmd) do |io| + cmd_args = %w|tag| + scm_cmd(*cmd_args) do |io| @tags = io.readlines.sort!.map{|t| t.strip} end + rescue ScmCommandAborted + nil + end + + def default_branch + bras = self.branches + return nil if bras.nil? + bras.include?('master') ? 'master' : bras.first + end + + def entry(path=nil, identifier=nil) + parts = path.to_s.split(%r{[\/\\]}).select {|n| !n.blank?} + search_path = parts[0..-2].join('/') + search_name = parts[-1] + if search_path.blank? && search_name.blank? + # Root entry + Entry.new(:path => '', :kind => 'dir') + else + # Search for the entry in the parent directory + es = entries(search_path, identifier, + options = {:report_last_commit => false}) + es ? es.detect {|e| e.name == search_name} : nil + end end - def default_branch - branches.include?('master') ? 'master' : branches.first - end - - def entries(path=nil, identifier=nil) + def entries(path=nil, identifier=nil, options={}) path ||= '' + p = scm_iconv(@path_encoding, 'UTF-8', path) entries = Entries.new - cmd = "#{GIT_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| + cmd_args = %w|ls-tree -l| + cmd_args << "HEAD:#{p}" if identifier.nil? + cmd_args << "#{identifier}:#{p}" if identifier + scm_cmd(*cmd_args) do |io| io.each_line do |line| e = line.chomp.to_s if e =~ /^\d+\s+(\w+)\s+([0-9a-f]{40})\s+([0-9-]+)\t(.+)$/ type = $1 - sha = $2 + sha = $2 size = $3 name = $4 - full_path = path.empty? ? name : "#{path}/#{name}" - entries << Entry.new({:name => name, - :path => full_path, + if name.respond_to?(:force_encoding) + name.force_encoding(@path_encoding) + end + full_path = p.empty? ? name : "#{p}/#{name}" + n = scm_iconv('UTF-8', @path_encoding, name) + full_p = scm_iconv('UTF-8', @path_encoding, full_path) + entries << Entry.new({:name => n, + :path => full_p, :kind => (type == "tree") ? 'dir' : 'file', :size => (type == "tree") ? nil : size, - :lastrev => lastrev(full_path,identifier) + :lastrev => options[:report_last_commit] ? + lastrev(full_path, identifier) : Revision.new }) unless entries.detect{|entry| entry.name == name} end end end - return nil if $? && $?.exitstatus != 0 entries.sort_by_name + rescue ScmCommandAborted + nil 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? - shellout(cmd) do |io| - begin - id = io.gets.split[1] - author = io.gets.match('Author:\s+(.*)$')[1] - 2.times { io.gets } - time = Time.parse(io.gets.match('CommitDate:\s+(.*)$')[1]).localtime + 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 = [] + 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]) Revision.new({ :identifier => id, - :scmid => id, - :author => author, - :time => time, - :message => nil, - :paths => nil - }) - rescue NoMethodError => e + :scmid => id, + :author => author, + :time => time, + :message => nil, + :paths => nil + }) + rescue NoMethodError => e logger.error("The revision '#{path}' has a wrong format") return nil - end end + rescue ScmCommandAborted + nil end def revisions(path, identifier_from, identifier_to, options={}) - revisions = Revisions.new + revs = 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 << "--" << scm_iconv(@path_encoding, 'UTF-8', 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]} " 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 - revno = 1 io.each_line do |line| if line =~ /^commit ([0-9a-f]{40})$/ @@ -137,20 +212,19 @@ parsing_descr = 0 revision = Revision.new({ :identifier => changeset[:commit], - :scmid => changeset[:commit], - :author => changeset[:author], - :time => Time.parse(changeset[:date]), - :message => changeset[:description], - :paths => files + :scmid => changeset[:commit], + :author => changeset[:author], + :time => Time.parse(changeset[:date]), + :message => changeset[:description], + :paths => files }) if block_given? yield revision else - revisions << revision + revs << revision end changeset = {} files = [] - revno = revno + 1 end changeset[:commit] = $1 elsif (parsing_descr == 0) && line =~ /^(\w+):\s*(.*)$/ @@ -165,73 +239,75 @@ parsing_descr = 1 changeset[:description] = "" elsif (parsing_descr == 1 || parsing_descr == 2) \ - && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\t(.+)$/ + && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\t(.+)$/ parsing_descr = 2 - fileaction = $1 - filepath = $2 - files << {:action => fileaction, :path => filepath} + fileaction = $1 + filepath = $2 + p = scm_iconv('UTF-8', @path_encoding, filepath) + files << {:action => fileaction, :path => p} elsif (parsing_descr == 1 || parsing_descr == 2) \ - && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\d+\s+(\S+)\t(.+)$/ + && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\d+\s+(\S+)\t(.+)$/ parsing_descr = 2 - fileaction = $1 - filepath = $3 - files << {:action => fileaction, :path => filepath} + fileaction = $1 + filepath = $3 + p = scm_iconv('UTF-8', @path_encoding, filepath) + files << {:action => fileaction, :path => p} elsif (parsing_descr == 1) && line.chomp.to_s == "" parsing_descr = 2 elsif (parsing_descr == 1) changeset[:description] << line[4..-1] end - end + end if changeset[:commit] revision = Revision.new({ :identifier => changeset[:commit], - :scmid => changeset[:commit], - :author => changeset[:author], - :time => Time.parse(changeset[:date]), - :message => changeset[:description], - :paths => files - }) - + :scmid => changeset[:commit], + :author => changeset[:author], + :time => Time.parse(changeset[:date]), + :message => changeset[:description], + :paths => files + }) if block_given? yield revision else - revisions << revision + revs << revision end end end - - return nil if $? && $?.exitstatus != 0 - revisions + revs + rescue ScmCommandAborted => e + logger.error("git log #{from_to.to_s} error: #{e.message}") + revs end def diff(path, identifier_from, identifier_to=nil) path ||= '' - + cmd_args = [] if identifier_to - cmd = "#{GIT_BIN} --git-dir #{target('')} diff --no-color #{shell_quote identifier_to} #{shell_quote identifier_from}" + cmd_args << "diff" << "--no-color" << identifier_to << identifier_from else - cmd = "#{GIT_BIN} --git-dir #{target('')} show --no-color #{shell_quote identifier_from}" + cmd_args << "show" << "--no-color" << identifier_from end - - cmd << " -- #{shell_quote path}" unless path.empty? + cmd_args << "--" << scm_iconv(@path_encoding, 'UTF-8', path) unless path.empty? diff = [] - shellout(cmd) do |io| + scm_cmd *cmd_args do |io| io.each_line do |line| diff << line end end - return nil if $? && $?.exitstatus != 0 diff + rescue ScmCommandAborted + nil end - + 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_args = %w|blame| + cmd_args << "-p" << identifier << "--" << scm_iconv(@path_encoding, 'UTF-8', path) blame = Annotate.new content = nil - shellout(cmd) { |io| io.binmode; content = io.read } - return nil if $? && $?.exitstatus != 0 + scm_cmd(*cmd_args) { |io| io.binmode; content = io.read } # git annotates binary files return nil if content.is_binary_data? identifier = '' @@ -243,27 +319,59 @@ elsif line =~ /^author (.+)/ authors_by_commit[identifier] = $1.strip elsif line =~ /^\t(.*)/ - blame.add_line($1, Revision.new(:identifier => identifier, :author => authors_by_commit[identifier])) + blame.add_line($1, Revision.new( + :identifier => identifier, + :revision => identifier, + :scmid => identifier, + :author => authors_by_commit[identifier] + )) identifier = '' author = '' end end blame + rescue ScmCommandAborted + nil 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_args = %w|show --no-color| + cmd_args << "#{identifier}:#{scm_iconv(@path_encoding, 'UTF-8', path)}" cat = nil - shellout(cmd) do |io| + scm_cmd(*cmd_args) do |io| io.binmode cat = io.read end - return nil if $? && $?.exitstatus != 0 cat + rescue ScmCommandAborted + nil end + + class Revision < Redmine::Scm::Adapters::Revision + # Returns the readable identifier + def format_identifier + identifier[0,8] + end + end + + def scm_cmd(*args, &block) + repo_path = root_url || url + full_args = [GIT_BIN, '--git-dir', repo_path] + if self.class.client_version_above?([1, 7, 2]) + full_args << '-c' << 'core.quotepath=false' + full_args << '-c' << 'log.decorate=no' + end + 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 diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/mercurial/.svn/all-wcprops --- a/lib/redmine/scm/adapters/mercurial/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/adapters/mercurial/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,17 +1,11 @@ K 25 svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/1499/trunk/lib/redmine/scm/adapters/mercurial +V 73 +/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/scm/adapters/mercurial END -hg-template-0.9.5.tmpl +redminehelper.py K 25 svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/1499/trunk/lib/redmine/scm/adapters/mercurial/hg-template-0.9.5.tmpl +V 90 +/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/scm/adapters/mercurial/redminehelper.py END -hg-template-1.0.tmpl -K 25 -svn:wc:ra_dav:version-url -V 80 -/svn/!svn/ver/1499/trunk/lib/redmine/scm/adapters/mercurial/hg-template-1.0.tmpl -END diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/mercurial/.svn/dir-prop-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/scm/adapters/mercurial/.svn/dir-prop-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,7 @@ +K 10 +svn:ignore +V 36 +redminehelper.pyc +redminehelper.pyo + +END diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/mercurial/.svn/entries --- a/lib/redmine/scm/adapters/mercurial/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/adapters/mercurial/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib/redmine/scm/adapters/mercurial +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/scm/adapters/mercurial http://redmine.rubyforge.org/svn -2008-06-07T09:19:50.659015Z -1499 -jplang - +2011-03-14T02:23:54.474379Z +5112 +tmaruyama +has-props @@ -32,11 +32,11 @@ -2010-09-24T11:56:52.980004Z -6ba619703ae315a3683836144d19773c -2008-06-07T09:19:50.659015Z -1499 -jplang +2011-07-14T09:24:10.000000Z +961af0eb6ab17203d985cdeac685937e +2011-01-05T15:02:24.961855Z +4633 +tmaruyama has-props @@ -58,7 +58,41 @@ -812 +824 + +redminehelper.py +file + + + + +2011-07-14T09:24:22.000000Z +e00d9a9bc9249ea3dca63636370ba377 +2011-03-14T02:23:54.474379Z +5112 +tmaruyama + + + + + + + + + + + + + + + + + + + + + +7856 hg-template-1.0.tmpl file @@ -66,11 +100,11 @@ -2010-09-24T11:56:52.992085Z -2cd7a2264dff3758a1d3340af87a615f -2008-06-07T09:19:50.659015Z -1499 -jplang +2011-07-14T09:24:10.000000Z +9d5de62ae8cdc141d3f8b970dbba07a0 +2011-01-05T15:02:24.961855Z +4633 +tmaruyama has-props @@ -92,5 +126,5 @@ -825 +840 diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/mercurial/.svn/text-base/hg-template-0.9.5.tmpl.svn-base --- a/lib/redmine/scm/adapters/mercurial/.svn/text-base/hg-template-0.9.5.tmpl.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/adapters/mercurial/.svn/text-base/hg-template-0.9.5.tmpl.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -3,10 +3,10 @@ changeset_verbose = 'This template must be used with --debug option\n' changeset_debug = '\n{author|escape}\n{date|isodate}\n\n{files}{file_adds}{file_dels}{file_copies}\n{desc|escape}\n{tags}\n\n' -file = '{file|escape}\n' -file_add = '{file_add|escape}\n' -file_del = '{file_del|escape}\n' -file_copy = '{name|urlescape}\n' +file = '{file|urlescape}\n' +file_add = '{file_add|urlescape}\n' +file_del = '{file_del|urlescape}\n' +file_copy = '{name|urlescape}\n' tag = '{tag|escape}\n' header='\n\n\n' # footer="" \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/mercurial/.svn/text-base/hg-template-1.0.tmpl.svn-base --- a/lib/redmine/scm/adapters/mercurial/.svn/text-base/hg-template-1.0.tmpl.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/adapters/mercurial/.svn/text-base/hg-template-1.0.tmpl.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,12 +1,12 @@ changeset = 'This template must be used with --debug option\n' changeset_quiet = 'This template must be used with --debug option\n' changeset_verbose = 'This template must be used with --debug option\n' -changeset_debug = '\n{author|escape}\n{date|isodate}\n\n{file_mods}{file_adds}{file_dels}{file_copies}\n{desc|escape}\n{tags}\n\n' +changeset_debug = '\n{author|escape}\n{date|isodatesec}\n\n{file_mods}{file_adds}{file_dels}{file_copies}\n{desc|escape}\n{tags}\n\n' -file_mod = '{file_mod|escape}\n' -file_add = '{file_add|escape}\n' -file_del = '{file_del|escape}\n' -file_copy = '{name|urlescape}\n' +file_mod = '{file_mod|urlescape}\n' +file_add = '{file_add|urlescape}\n' +file_del = '{file_del|urlescape}\n' +file_copy = '{name|urlescape}\n' tag = '{tag|escape}\n' header='\n\n\n' # footer="" diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/mercurial/.svn/text-base/redminehelper.py.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/scm/adapters/mercurial/.svn/text-base/redminehelper.py.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,219 @@ +# redminehelper: Redmine helper extension for Mercurial +# +# Copyright 2010 Alessio Franceschelli (alefranz.net) +# Copyright 2010-2011 Yuya Nishihara +# +# 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:: + + + + + + + + ... + + + +Output example of 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('\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('\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('\n' + % (r, _x(node.short(n)), _x(t))) + +def _manifest(ui, repo, path, rev): + ctx = repo.changectx(rev) + ui.write('\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('\n' + % _x(urllib.quote(name[:-1]))) + else: + fctx = repo.filectx(f, fileid=n) + tm, tzoffset = fctx.date() + ui.write('\n' + % (_u(name), fctx.rev(), _x(node.short(fctx.node())), + tm, fctx.size(), )) + + ui.write('\n') + +def rhannotate(ui, repo, *pats, **opts): + rev = urllib.unquote_plus(opts.pop('rev', None)) + opts['rev'] = rev + return commands.annotate(ui, repo, *map(urllib.unquote_plus, pats), **opts) + +def rhcat(ui, repo, file1, *pats, **opts): + rev = urllib.unquote_plus(opts.pop('rev', None)) + opts['rev'] = rev + 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 rhlog(ui, repo, *pats, **opts): + rev = opts.pop('rev') + bra0 = opts.pop('branch') + from_rev = urllib.unquote_plus(opts.pop('from', None)) + to_rev = urllib.unquote_plus(opts.pop('to' , None)) + bra = urllib.unquote_plus(opts.pop('rhbranch', None)) + from_rev = from_rev.replace('"', '\\"') + to_rev = to_rev.replace('"', '\\"') + opts['rev'] = ['"%s":"%s"' % (from_rev, to_rev)] + opts['branch'] = [bra] + return commands.log(ui, repo, *map(urllib.unquote_plus, pats), **opts) + +def rhmanifest(ui, repo, path='', **opts): + """output the sub-manifest of the specified directory""" + ui.write('\n') + ui.write('\n') + ui.write('\n' % _u(repo.root)) + try: + _manifest(ui, repo, urllib.unquote_plus(path), urllib.unquote_plus(opts.get('rev'))) + finally: + ui.write('\n') + ui.write('\n') + +def rhsummary(ui, repo, **opts): + """output the summary of the repository""" + ui.write('\n') + ui.write('\n') + ui.write('\n' % _u(repo.root)) + try: + _tip(ui, repo) + _tags(ui, repo) + _branches(ui, repo) + # TODO: bookmarks in core (Mercurial>=1.8) + finally: + ui.write('\n') + ui.write('\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]...'), + 'rhlog': (rhlog, + [ + ('r', 'rev', [], 'show the specified revision'), + ('b', 'branch', [], + 'show changesets within the given named branch', 'BRANCH'), + ('l', 'limit', '', + 'limit number of changes displayed', 'NUM'), + ('d', 'date', '', + 'show revisions matching date spec', 'DATE'), + ('u', 'user', [], + 'revisions committed by user', 'USER'), + ('', 'from', '', + '', ''), + ('', 'to', '', + '', ''), + ('', 'rhbranch', '', + '', ''), + ('', 'template', '', + 'display with template', 'TEMPLATE')], + 'hg rhlog [OPTION]... [FILE]'), + 'rhmanifest': (rhmanifest, + [('r', 'rev', '', 'show the specified revision')], + 'hg rhmanifest [-r REV] [PATH]'), + 'rhsummary': (rhsummary, [], 'hg rhsummary'), +} diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/mercurial/hg-template-0.9.5.tmpl --- a/lib/redmine/scm/adapters/mercurial/hg-template-0.9.5.tmpl Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/adapters/mercurial/hg-template-0.9.5.tmpl Mon Jul 25 14:23:37 2011 +0100 @@ -3,10 +3,10 @@ changeset_verbose = 'This template must be used with --debug option\n' changeset_debug = '\n{author|escape}\n{date|isodate}\n\n{files}{file_adds}{file_dels}{file_copies}\n{desc|escape}\n{tags}\n\n' -file = '{file|escape}\n' -file_add = '{file_add|escape}\n' -file_del = '{file_del|escape}\n' -file_copy = '{name|urlescape}\n' +file = '{file|urlescape}\n' +file_add = '{file_add|urlescape}\n' +file_del = '{file_del|urlescape}\n' +file_copy = '{name|urlescape}\n' tag = '{tag|escape}\n' header='\n\n\n' footer='' diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/mercurial/hg-template-1.0.tmpl --- a/lib/redmine/scm/adapters/mercurial/hg-template-1.0.tmpl Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/adapters/mercurial/hg-template-1.0.tmpl Mon Jul 25 14:23:37 2011 +0100 @@ -1,12 +1,12 @@ changeset = 'This template must be used with --debug option\n' changeset_quiet = 'This template must be used with --debug option\n' changeset_verbose = 'This template must be used with --debug option\n' -changeset_debug = '\n{author|escape}\n{date|isodate}\n\n{file_mods}{file_adds}{file_dels}{file_copies}\n{desc|escape}\n{tags}\n\n' +changeset_debug = '\n{author|escape}\n{date|isodatesec}\n\n{file_mods}{file_adds}{file_dels}{file_copies}\n{desc|escape}\n{tags}\n\n' -file_mod = '{file_mod|escape}\n' -file_add = '{file_add|escape}\n' -file_del = '{file_del|escape}\n' -file_copy = '{name|urlescape}\n' +file_mod = '{file_mod|urlescape}\n' +file_add = '{file_add|urlescape}\n' +file_del = '{file_del|urlescape}\n' +file_copy = '{name|urlescape}\n' tag = '{tag|escape}\n' header='\n\n\n' footer='' diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/mercurial/redminehelper.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/scm/adapters/mercurial/redminehelper.py Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,219 @@ +# redminehelper: Redmine helper extension for Mercurial +# +# Copyright 2010 Alessio Franceschelli (alefranz.net) +# Copyright 2010-2011 Yuya Nishihara +# +# 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:: + + + + + + + + ... + + + +Output example of 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('\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('\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('\n' + % (r, _x(node.short(n)), _x(t))) + +def _manifest(ui, repo, path, rev): + ctx = repo.changectx(rev) + ui.write('\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('\n' + % _x(urllib.quote(name[:-1]))) + else: + fctx = repo.filectx(f, fileid=n) + tm, tzoffset = fctx.date() + ui.write('\n' + % (_u(name), fctx.rev(), _x(node.short(fctx.node())), + tm, fctx.size(), )) + + ui.write('\n') + +def rhannotate(ui, repo, *pats, **opts): + rev = urllib.unquote_plus(opts.pop('rev', None)) + opts['rev'] = rev + return commands.annotate(ui, repo, *map(urllib.unquote_plus, pats), **opts) + +def rhcat(ui, repo, file1, *pats, **opts): + rev = urllib.unquote_plus(opts.pop('rev', None)) + opts['rev'] = rev + 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 rhlog(ui, repo, *pats, **opts): + rev = opts.pop('rev') + bra0 = opts.pop('branch') + from_rev = urllib.unquote_plus(opts.pop('from', None)) + to_rev = urllib.unquote_plus(opts.pop('to' , None)) + bra = urllib.unquote_plus(opts.pop('rhbranch', None)) + from_rev = from_rev.replace('"', '\\"') + to_rev = to_rev.replace('"', '\\"') + opts['rev'] = ['"%s":"%s"' % (from_rev, to_rev)] + opts['branch'] = [bra] + return commands.log(ui, repo, *map(urllib.unquote_plus, pats), **opts) + +def rhmanifest(ui, repo, path='', **opts): + """output the sub-manifest of the specified directory""" + ui.write('\n') + ui.write('\n') + ui.write('\n' % _u(repo.root)) + try: + _manifest(ui, repo, urllib.unquote_plus(path), urllib.unquote_plus(opts.get('rev'))) + finally: + ui.write('\n') + ui.write('\n') + +def rhsummary(ui, repo, **opts): + """output the summary of the repository""" + ui.write('\n') + ui.write('\n') + ui.write('\n' % _u(repo.root)) + try: + _tip(ui, repo) + _tags(ui, repo) + _branches(ui, repo) + # TODO: bookmarks in core (Mercurial>=1.8) + finally: + ui.write('\n') + ui.write('\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]...'), + 'rhlog': (rhlog, + [ + ('r', 'rev', [], 'show the specified revision'), + ('b', 'branch', [], + 'show changesets within the given named branch', 'BRANCH'), + ('l', 'limit', '', + 'limit number of changes displayed', 'NUM'), + ('d', 'date', '', + 'show revisions matching date spec', 'DATE'), + ('u', 'user', [], + 'revisions committed by user', 'USER'), + ('', 'from', '', + '', ''), + ('', 'to', '', + '', ''), + ('', 'rhbranch', '', + '', ''), + ('', 'template', '', + 'display with template', 'TEMPLATE')], + 'hg rhlog [OPTION]... [FILE]'), + 'rhmanifest': (rhmanifest, + [('r', 'rev', '', 'show the specified revision')], + 'hg rhmanifest [-r REV] [PATH]'), + 'rhsummary': (rhsummary, [], 'hg rhsummary'), +} diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/mercurial_adapter.rb --- a/lib/redmine/scm/adapters/mercurial_adapter.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/adapters/mercurial_adapter.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,137 +1,186 @@ -# 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 # 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 'redmine/scm/adapters/abstract_adapter' -require 'rexml/document' +require 'cgi' module Redmine module Scm - module Adapters + module Adapters class MercurialAdapter < AbstractAdapter - + # Mercurial executable name - HG_BIN = "hg" - HG_HELPER_EXT = "#{RAILS_ROOT}/extra/mercurial/redminehelper.py" - 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 + @@client_version ||= (hgversion || []) end - - def hgversion + + def client_available + client_version_above?([0, 9, 5]) + 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. - hgversion_str.to_s.split('.').map { |e| e.to_i } + 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 - private :hgversion - - def hgversion_str - shellout("#{HG_BIN} --version") { |io| io.gets }.to_s[/\d+(\.\d+)+/] + + def hgversion_from_command_line + shellout("#{sq_bin} --version") { |io| io.read }.to_s end - private :hgversion_str - + def template_path - template_path_for(client_version) + @@template_path ||= template_path_for(client_version) end - + def template_path_for(version) if ((version <=> [0,9,5]) > 0) || version.empty? ver = "1.0" else ver = "0.9.5" end - "#{TEMPLATES_DIR}/#{TEMPLATE_NAME}-#{ver}.#{TEMPLATE_EXTENSION}" + "#{HELPERS_DIR}/#{TEMPLATE_NAME}-#{ver}.#{TEMPLATE_EXTENSION}" end - private :template_path_for end - + + def initialize(url, root_url=nil, login=nil, password=nil, path_encoding=nil) + super + @path_encoding = path_encoding.blank? ? 'UTF-8' : path_encoding + end + + def path_encoding + @path_encoding + end + def info - tip = summary['tip'].first - Info.new(:root_url => summary['root'].first['path'], - :lastrev => Revision.new(:identifier => tip['rev'].to_i, - :revision => tip['rev'], + tip = summary['repository']['tip'] + Info.new(:root_url => CGI.unescape(summary['repository']['root']), + :lastrev => Revision.new(:revision => tip['revision'], :scmid => tip['node'])) + # rescue HgCommandAborted + rescue Exception => e + logger.error "hg: error during getting info: #{e.message}" + nil end def tags - summary['tags'].map { |e| e['name'] } + as_ary(summary['repository']['tag']).map { |e| e['name'] } end - + # Returns map of {'tag' => 'nodeid', ...} def tagmap - alist = summary['tags'].map { |e| e.values_at('name', 'node') } + alist = as_ary(summary['repository']['tag']).map do |e| + e.values_at('name', 'node') + end Hash[*alist.flatten] end - + def branches - summary['branches'].map { |e| e['name'] } + as_ary(summary['repository']['branch']).map { |e| e['name'] } end # Returns map of {'branch' => 'nodeid', ...} def branchmap - alist = summary['branches'].map { |e| e.values_at('name', 'node') } + alist = as_ary(summary['repository']['branch']).map do |e| + e.values_at('name', 'node') + end Hash[*alist.flatten] end - # NOTE: DO NOT IMPLEMENT default_branch !! - # It's used as the default revision by RepositoriesController. - def summary - @summary ||= fetchg 'rhsummary' + 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 end private :summary - - def entries(path=nil, identifier=nil) + + def entries(path=nil, identifier=nil, options={}) + 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 - fetched_entries = fetchg('rhentries', '-r', hgrev(identifier), - without_leading_slash(path.to_s)) - - fetched_entries['dirs'].each do |e| - entries << Entry.new(:name => e['name'], - :path => "#{with_trailling_slash(path)}#{e['name']}", - :kind => 'dir') + 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 - fetched_entries['files'].each do |e| - entries << Entry.new(:name => e['name'], - :path => "#{with_trailling_slash(path)}#{e['name']}", - :kind => 'file', - :size => e['size'].to_i, - :lastrev => Revision.new(:identifier => e['rev'].to_i, - :time => Time.at(e['time'].to_i))) + 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 - - # TODO: is this api necessary? + def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={}) - revisions = Revisions.new - each_revision { |e| revisions << e } - revisions + 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 @@ -140,85 +189,113 @@ 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 << without_leading_slash(path) unless path.blank? - doc = hg(*hg_args) { |io| REXML::Document.new(io.read) } - # TODO: ??? HG doesn't close the XML Document... - - doc.each_element('log/logentry') do |le| - cpalist = le.get_elements('paths/path-copied').map do |e| - [e.text, e.attributes['copyfrom-path']] + 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 + ActiveSupport::XmlMini.parse("#{output}")['log'] + rescue + end + end + as_ary(log['logentry']).each do |le| + cpalist = as_ary(le['paths']['path-copied']).map do |e| + [e['__content__'], e['copyfrom-path']].map do |s| + scm_iconv('UTF-8', @path_encoding, CGI.unescape(s)) + end end cpmap = Hash[*cpalist.flatten] - - paths = le.get_elements('paths/path').map do |e| - {:action => e.attributes['action'], :path => with_leading_slash(e.text), - :from_path => (cpmap.member?(e.text) ? with_leading_slash(cpmap[e.text]) : nil), - :from_revision => (cpmap.member?(e.text) ? le.attributes['revision'] : nil)} + 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['node'] : nil)} end.sort { |a, b| a[:path] <=> b[:path] } - - yield Revision.new(:identifier => le.attributes['revision'], - :revision => le.attributes['revision'], - :scmid => le.attributes['node'], - :author => (le.elements['author'].text rescue ''), - :time => Time.parse(le.elements['date'].text).localtime, - :message => le.elements['msg'].text, - :paths => paths) + yield Revision.new(:revision => le['revision'], + :scmid => le['node'], + :author => (le['author']['__content__'] rescue ''), + :time => Time.parse(le['date']['__content__']), + :message => le['msg']['__content__'], + :paths => paths) end self end # Returns list of nodes in the specified branch - def nodes_in_branch(branch, path=nil, identifier_from=nil, identifier_to=nil, options={}) - hg_args = ['log', '--template', '{node|short}\n', '-b', branch] - hg_args << '-r' << "#{hgrev(identifier_from)}:#{hgrev(identifier_to)}" + def nodes_in_branch(branch, options={}) + hg_args = ['rhlog', '--template', '{node|short}\n', '--rhbranch', CGI.escape(branch)] + hg_args << '--from' << CGI.escape(branch) + hg_args << '--to' << '0' hg_args << '--limit' << options[:limit] if options[:limit] - hg_args << without_leading_slash(path) unless path.blank? hg(*hg_args) { |io| io.readlines.map { |e| e.chomp } } end - + def diff(path, identifier_from, identifier_to=nil) - hg_args = ['diff', '--nodates'] + 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 - hg_args << without_leading_slash(path) unless path.blank? - + unless path.blank? + p = scm_iconv(@path_encoding, 'UTF-8', path) + hg_args << CGI.escape(hgtarget(p)) + end + diff = [] hg *hg_args do |io| - io.collect + io.each_line do |line| + diff << line + end end + diff rescue HgCommandAborted nil # means not found end - + def cat(path, identifier=nil) - hg 'cat', '-r', hgrev(identifier), without_leading_slash(path) do |io| + p = CGI.escape(scm_iconv(@path_encoding, 'UTF-8', path)) + hg 'rhcat', '-r', CGI.escape(hgrev(identifier)), hgtarget(p) do |io| io.binmode io.read end rescue HgCommandAborted nil # means not found end - + def annotate(path, identifier=nil) + p = CGI.escape(scm_iconv(@path_encoding, 'UTF-8', path)) blame = Annotate.new - hg 'annotate', '-ncu', '-r', hgrev(identifier), without_leading_slash(path) do |io| - io.each do |line| - next unless line =~ %r{^([^:]+)\s(\d+)\s([0-9a-f]+):(.*)$} - r = Revision.new(:author => $1.strip, :revision => $2, :scmid => $3) + hg 'rhannotate', '-ncu', '-r', CGI.escape(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 blame rescue HgCommandAborted - nil # means not found or cannot be annotated + # means not found or cannot be annotated + Annotate.new + end + + class Revision < Redmine::Scm::Adapters::Revision + # Returns the readable identifier + def format_identifier + "#{revision}:#{scmid}" + end end # Runs 'hg' command with the given args def hg(*args, &block) - full_args = [HG_BIN, '--cwd', url] + 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 @@ -228,37 +305,25 @@ end private :hg - # Runs 'hg' helper, then parses output to return - def fetchg(*args) - # command output example: - # :tip: rev node - # 100 abcdef012345 - # :tags: rev node name - # 100 abcdef012345 tip - # ... - data = Hash.new { |h, k| h[k] = [] } - hg(*args) do |io| - key, attrs = nil, nil - io.each do |line| - next if line.chomp.empty? - if /^:(\w+): ([\w ]+)/ =~ line - key = $1 - attrs = $2.split(/ /) - elsif key - alist = attrs.zip(line.chomp.split(/ /, attrs.size)) - data[key] << Hash[*alist.flatten] - end - end - end - data - end - private :fetchg - # Returns correct revision identifier - def hgrev(identifier) - 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 diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/scm/adapters/subversion_adapter.rb --- a/lib/redmine/scm/adapters/subversion_adapter.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/scm/adapters/subversion_adapter.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,256 +1,291 @@ -# Redmine - project management software -# Copyright (C) 2006-2010 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 'redmine/scm/adapters/abstract_adapter' -require 'uri' - -module Redmine - module Scm - module Adapters - class SubversionAdapter < AbstractAdapter - - # SVN executable name - SVN_BIN = "svn" - - class << self - def client_version - @@client_version ||= (svn_binary_version || []) - 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.gets.to_s.match(%r{((\d+\.)+\d+)}) - version = m[0].scan(%r{\d+}).collect(&:to_i) - end - end - return nil if $? && $?.exitstatus != 0 - version - end - end - - # Get info about the svn repository - def info - cmd = "#{SVN_BIN} info --xml #{target}" - cmd << credentials_string - info = nil - shellout(cmd) do |io| - output = io.read - begin - doc = ActiveSupport::XmlMini.parse(output) - #root_url = doc.elements["info/entry/repository/root"].text - info = Info.new({:root_url => doc['info']['entry']['repository']['root']['__content__'], - :lastrev => Revision.new({ - :identifier => doc['info']['entry']['commit']['revision'], - :time => Time.parse(doc['info']['entry']['commit']['date']['__content__']).localtime, - :author => (doc['info']['entry']['commit']['author'] ? doc['info']['entry']['commit']['author']['__content__'] : "") - }) - }) - rescue - end - end - return nil if $? && $?.exitstatus != 0 - info - 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 << credentials_string - shellout(cmd) do |io| - output = io.read - begin - doc = ActiveSupport::XmlMini.parse(output) - each_xml_element(doc['lists']['list'], 'entry') do |entry| - commit = entry['commit'] - commit_date = commit['date'] - # Skip directory if there is no commit date (usually that - # means that we don't have read access to it) - next if entry['kind'] == 'dir' && commit_date.nil? - name = entry['name']['__content__'] - entries << Entry.new({:name => URI.unescape(name), - :path => ((path.empty? ? "" : "#{path}/") + name), - :kind => entry['kind'], - :size => ((s = entry['size']) ? s['__content__'].to_i : nil), - :lastrev => Revision.new({ - :identifier => commit['revision'], - :time => Time.parse(commit_date['__content__'].to_s).localtime, - :author => ((a = commit['author']) ? a['__content__'] : nil) - }) - }) - end - rescue Exception => e - logger.error("Error parsing svn output: #{e.message}") - logger.error("Output was:\n #{output}") - end - end - return nil if $? && $?.exitstatus != 0 - 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 << credentials_string - properties = {} - shellout(cmd) do |io| - output = io.read - begin - doc = ActiveSupport::XmlMini.parse(output) - each_xml_element(doc['properties']['target'], 'property') do |property| - properties[ property['name'] ] = property['__content__'].to_s - end - rescue - end - end - return nil if $? && $?.exitstatus != 0 - properties - 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 : "HEAD" - identifier_to = (identifier_to and identifier_to.to_i > 0) ? identifier_to.to_i : 1 - revisions = Revisions.new - cmd = "#{SVN_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 - begin - doc = ActiveSupport::XmlMini.parse(output) - each_xml_element(doc['log'], 'logentry') do |logentry| - paths = [] - each_xml_element(logentry['paths'], 'path') do |path| - paths << {:action => path['action'], - :path => path['__content__'], - :from_path => path['copyfrom-path'], - :from_revision => path['copyfrom-rev'] - } - end if logentry['paths'] && logentry['paths']['path'] - paths.sort! { |x,y| x[:path] <=> y[:path] } - - revisions << Revision.new({:identifier => logentry['revision'], - :author => (logentry['author'] ? logentry['author']['__content__'] : ""), - :time => Time.parse(logentry['date']['__content__'].to_s).localtime, - :message => logentry['msg']['__content__'], - :paths => paths - }) - end - rescue - end - end - 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 << "#{identifier_to}:" - cmd << "#{identifier_from}" - cmd << " #{target(path)}@#{identifier_from}" - cmd << credentials_string - diff = [] - shellout(cmd) do |io| - io.each_line do |line| - diff << line - end - end - 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 << credentials_string - cat = nil - shellout(cmd) do |io| - io.binmode - cat = io.read - end - 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 << credentials_string - blame = Annotate.new - shellout(cmd) do |io| - io.each_line do |line| - next unless line =~ %r{^\s*(\d+)\s*(\S+)\s(.*)$} - blame.add_line($3.rstrip, Revision.new(:identifier => $1.to_i, :author => $2.strip)) - end - end - return nil if $? && $?.exitstatus != 0 - blame - end - - private - - def credentials_string - str = '' - str << " --username #{shell_quote(@login)}" unless @login.blank? - str << " --password #{shell_quote(@password)}" unless @login.blank? || @password.blank? - str << " --no-auth-cache --non-interactive" - str - end - - # Helper that iterates over the child elements of a xml node - # MiniXml returns a hash when a single child is found or an array of hashes for multiple children - def each_xml_element(node, name) - if node && node[name] - if node[name].is_a?(Hash) - yield node[name] - else - node[name].each do |element| - yield element - end - end - end - end - - def target(path = '') - base = path.match(/^\//) ? root_url : url - uri = "#{base}/#{path}" - uri = URI.escape(URI.escape(uri), '[]') - shell_quote(uri.gsub(/[?<>\*]/, '')) - end - end - end - end -end +# 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 'redmine/scm/adapters/abstract_adapter' +require 'uri' + +module Redmine + module Scm + module Adapters + class SubversionAdapter < AbstractAdapter + + # SVN executable name + 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 + # --xml options are introduced in 1.3. + # http://subversion.apache.org/docs/release-notes/1.3.html + client_version_above?([1, 3]) + end + + def svn_binary_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 svn repository + def info + 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 + info = Info.new({:root_url => doc['info']['entry']['repository']['root']['__content__'], + :lastrev => Revision.new({ + :identifier => doc['info']['entry']['commit']['revision'], + :time => Time.parse(doc['info']['entry']['commit']['date']['__content__']).localtime, + :author => (doc['info']['entry']['commit']['author'] ? doc['info']['entry']['commit']['author']['__content__'] : "") + }) + }) + rescue + end + end + return nil if $? && $?.exitstatus != 0 + info + 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, options={}) + path ||= '' + identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD" + entries = Entries.new + 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| + commit = entry['commit'] + commit_date = commit['date'] + # Skip directory if there is no commit date (usually that + # means that we don't have read access to it) + next if entry['kind'] == 'dir' && commit_date.nil? + name = entry['name']['__content__'] + entries << Entry.new({:name => URI.unescape(name), + :path => ((path.empty? ? "" : "#{path}/") + name), + :kind => entry['kind'], + :size => ((s = entry['size']) ? s['__content__'].to_i : nil), + :lastrev => Revision.new({ + :identifier => commit['revision'], + :time => Time.parse(commit_date['__content__'].to_s).localtime, + :author => ((a = commit['author']) ? a['__content__'] : nil) + }) + }) + end + rescue Exception => e + logger.error("Error parsing svn output: #{e.message}") + logger.error("Output was:\n #{output}") + end + end + return nil if $? && $?.exitstatus != 0 + 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 = "#{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| + properties[ property['name'] ] = property['__content__'].to_s + end + rescue + end + end + 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 = "#{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| + paths = [] + each_xml_element(logentry['paths'], 'path') do |path| + paths << {:action => path['action'], + :path => path['__content__'], + :from_path => path['copyfrom-path'], + :from_revision => path['copyfrom-rev'] + } + end if logentry['paths'] && logentry['paths']['path'] + paths.sort! { |x,y| x[:path] <=> y[:path] } + + revisions << Revision.new({:identifier => logentry['revision'], + :author => (logentry['author'] ? logentry['author']['__content__'] : ""), + :time => Time.parse(logentry['date']['__content__'].to_s).localtime, + :message => logentry['msg']['__content__'], + :paths => paths + }) + end + rescue + end + end + 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 = "#{self.class.sq_bin} diff -r " + cmd << "#{identifier_to}:" + cmd << "#{identifier_from}" + cmd << " #{target(path)}@#{identifier_from}" + cmd << credentials_string + diff = [] + shellout(cmd) do |io| + io.each_line do |line| + diff << line + end + end + return nil if $? && $?.exitstatus != 0 + diff + end + + def cat(path, identifier=nil) + identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD" + cmd = "#{self.class.sq_bin} cat #{target(path)}@#{identifier}" + cmd << credentials_string + cat = nil + shellout(cmd) do |io| + io.binmode + cat = io.read + end + return nil if $? && $?.exitstatus != 0 + cat + end + + def annotate(path, identifier=nil) + identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD" + cmd = "#{self.class.sq_bin} blame #{target(path)}@#{identifier}" + cmd << credentials_string + blame = Annotate.new + shellout(cmd) do |io| + io.each_line do |line| + next unless line =~ %r{^\s*(\d+)\s*(\S+)\s(.*)$} + rev = $1 + blame.add_line($3.rstrip, + Revision.new( + :identifier => rev, + :revision => rev, + :author => $2.strip + )) + end + end + return nil if $? && $?.exitstatus != 0 + blame + end + + private + + def credentials_string + str = '' + str << " --username #{shell_quote(@login)}" unless @login.blank? + str << " --password #{shell_quote(@password)}" unless @login.blank? || @password.blank? + str << " --no-auth-cache --non-interactive" + str + end + + # Helper that iterates over the child elements of a xml node + # MiniXml returns a hash when a single child is found + # or an array of hashes for multiple children + def each_xml_element(node, name) + if node && node[name] + if node[name].is_a?(Hash) + yield node[name] + else + node[name].each do |element| + yield element + end + end + end + end + + def target(path = '') + base = path.match(/^\//) ? root_url : url + uri = "#{base}/#{path}" + uri = URI.escape(URI.escape(uri), '[]') + shell_quote(uri.gsub(/[?<>\*]/, '')) + end + end + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/themes.rb --- a/lib/redmine/themes.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/themes.rb Mon Jul 25 14:23:37 2011 +0100 @@ -29,30 +29,65 @@ end # Return theme for given id, or nil if it's not found - def self.theme(id) - themes.find {|t| t.id == id} + def self.theme(id, options={}) + return nil if id.blank? + + found = themes.find {|t| t.id == id} + if found.nil? && options[:rescan] != false + rescan + found = theme(id, :rescan => false) + end + found end # Class used to represent a theme class Theme - attr_reader :name, :dir, :stylesheets + attr_reader :path, :name, :dir def initialize(path) + @path = path @dir = File.basename(path) @name = @dir.humanize - @stylesheets = Dir.glob("#{path}/stylesheets/*.css").collect {|f| File.basename(f).gsub(/\.css$/, '')} + @stylesheets = nil + @javascripts = nil end # Directory name used as the theme id def id; dir end - + + def ==(theme) + theme.is_a?(Theme) && theme.dir == dir + end + def <=>(theme) name <=> theme.name end + + def stylesheets + @stylesheets ||= assets("stylesheets", "css") + end + + def javascripts + @javascripts ||= assets("javascripts", "js") + end + + def stylesheet_path(source) + "/themes/#{dir}/stylesheets/#{source}" + end + + def javascript_path(source) + "/themes/#{dir}/javascripts/#{source}" + end + + private + + def assets(dir, ext) + Dir.glob("#{path}/#{dir}/*.#{ext}").collect {|f| File.basename(f).gsub(/\.#{ext}$/, '')} + end end private - + def self.scan_themes dirs = Dir.glob("#{Rails.public_path}/themes/*").select do |f| # A theme should at least override application.css @@ -64,13 +99,29 @@ end module ApplicationHelper + def current_theme + unless instance_variable_defined?(:@current_theme) + @current_theme = Redmine::Themes.theme(Setting.ui_theme) + end + @current_theme + end + def stylesheet_path(source) - @current_theme ||= Redmine::Themes.theme(Setting.ui_theme) - super((@current_theme && @current_theme.stylesheets.include?(source)) ? - "/themes/#{@current_theme.dir}/stylesheets/#{source}" : source) + if current_theme && current_theme.stylesheets.include?(source) + super current_theme.stylesheet_path(source) + else + super + end end def path_to_stylesheet(source) stylesheet_path source end + + # Returns the header tags for the current theme + def heads_for_theme + if current_theme && current_theme.javascripts.include?('theme') + javascript_include_tag current_theme.javascript_path('theme') + end + end end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/unified_diff.rb --- a/lib/redmine/unified_diff.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/unified_diff.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -17,18 +17,28 @@ module Redmine # Class used to parse unified diffs - class UnifiedDiff < Array + class UnifiedDiff < Array + attr_reader :diff_type + def initialize(diff, options={}) options.assert_valid_keys(:type, :max_lines) diff = diff.split("\n") if diff.is_a?(String) - diff_type = options[:type] || 'inline' - + @diff_type = options[:type] || 'inline' lines = 0 @truncated = false - diff_table = DiffTable.new(diff_type) + 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,22 +50,20 @@ self << diff_table unless diff_table.empty? self end - + def truncated?; @truncated; end end # Class that represents a file diff - class DiffTable < Hash - attr_reader :file_name, :line_num_l, :line_num_r + class DiffTable < Array + attr_reader :file_name # Initialize with a Diff file and the type of Diff View # The type view must be inline or sbs (side_by_side) def initialize(type="inline") @parsing = false - @nb_line = 1 - @start = false - @before = 'same' - @second = true + @added = 0 + @removed = 0 @type = type end @@ -78,11 +86,21 @@ @line_num_l = $2.to_i @line_num_r = $5.to_i else - @nb_line += 1 if parse_line(line, @type) + parse_line(line, @type) end end return true end + + def each_line + prev_line_left, prev_line_right = nil, nil + each do |line| + spacing = prev_line_left && prev_line_right && (line.nb_line_left != prev_line_left+1) && (line.nb_line_right != prev_line_right+1) + yield spacing, line + prev_line_left = line.nb_line_left.to_i if line.nb_line_left.to_i > 0 + prev_line_right = line.nb_line_right.to_i if line.nb_line_right.to_i > 0 + end + end def inspect puts '### DIFF TABLE ###' @@ -92,74 +110,91 @@ end end - private - # Test if is a Side By Side type - def sbs?(type, func) - if @start and type == "sbs" - if @before == func and @second - tmp_nb_line = @nb_line - self[tmp_nb_line] = Diff.new - else - @second = false - tmp_nb_line = @start - @start += 1 - @nb_line -= 1 - end - else - tmp_nb_line = @nb_line - @start = @nb_line - self[tmp_nb_line] = Diff.new - @second = true - end - unless self[tmp_nb_line] - @nb_line += 1 - self[tmp_nb_line] = Diff.new - else - self[tmp_nb_line] - end - end + private # Escape the HTML for the diff def escapeHTML(line) CGI.escapeHTML(line) end + + def diff_for_added_line + if @type == 'sbs' && @removed > 0 && @added < @removed + self[-(@removed - @added)] + else + diff = Diff.new + self << diff + diff + end + end def parse_line(line, type="inline") if line[0, 1] == "+" - diff = sbs? type, 'add' - @before = 'add' + diff = diff_for_added_line diff.line_right = escapeHTML line[1..-1] diff.nb_line_right = @line_num_r diff.type_diff_right = 'diff_in' @line_num_r += 1 + @added += 1 true elsif line[0, 1] == "-" - diff = sbs? type, 'remove' - @before = 'remove' + diff = Diff.new diff.line_left = escapeHTML line[1..-1] diff.nb_line_left = @line_num_l diff.type_diff_left = 'diff_out' + self << diff @line_num_l += 1 + @removed += 1 true - elsif line[0, 1] =~ /\s/ - @before = 'same' - @start = false - diff = Diff.new - diff.line_right = escapeHTML line[1..-1] - diff.nb_line_right = @line_num_r - diff.line_left = escapeHTML line[1..-1] - diff.nb_line_left = @line_num_l - self[@nb_line] = diff - @line_num_l += 1 - @line_num_r += 1 - true - elsif line[0, 1] = "\\" + else + write_offsets + if line[0, 1] =~ /\s/ + diff = Diff.new + diff.line_right = escapeHTML line[1..-1] + diff.nb_line_right = @line_num_r + diff.line_left = escapeHTML line[1..-1] + diff.nb_line_left = @line_num_l + self << diff + @line_num_l += 1 + @line_num_r += 1 + true + elsif line[0, 1] = "\\" true else false end end end + + def write_offsets + if @added > 0 && @added == @removed + @added.times do |i| + line = self[-(1 + i)] + removed = (@type == 'sbs') ? line : self[-(1 + @added + i)] + offsets = offsets(removed.line_left, line.line_right) + removed.offsets = line.offsets = offsets + end + end + @added = 0 + @removed = 0 + end + + def offsets(line_left, line_right) + if line_left.present? && line_right.present? && line_left != line_right + max = [line_left.size, line_right.size].min + starting = 0 + while starting < max && line_left[starting] == line_right[starting] + starting += 1 + end + ending = -1 + while ending >= -(max - starting) && line_left[ending] == line_right[ending] + ending -= 1 + end + unless starting == 0 && ending == -1 + [starting, ending] + end + end + end + end # A line of diff class Diff @@ -169,6 +204,7 @@ attr_accessor :line_right attr_accessor :type_diff_right attr_accessor :type_diff_left + attr_accessor :offsets def initialize() self.nb_line_left = '' @@ -178,6 +214,38 @@ self.type_diff_right = '' self.type_diff_left = '' end + + def type_diff + type_diff_right == 'diff_in' ? type_diff_right : type_diff_left + end + + def line + type_diff_right == 'diff_in' ? line_right : line_left + end + + def html_line_left + if offsets + line_left.dup.insert(offsets.first, '').insert(offsets.last, '') + else + line_left + end + end + + def html_line_right + if offsets + line_right.dup.insert(offsets.first, '').insert(offsets.last, '') + else + line_right + end + end + + def html_line + if offsets + line.dup.insert(offsets.first, '').insert(offsets.last, '') + else + line + end + end def inspect puts '### Start Line Diff ###' diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/version.rb --- a/lib/redmine/version.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/version.rb Mon Jul 25 14:23:37 2011 +0100 @@ -3,14 +3,14 @@ module Redmine module VERSION #:nodoc: MAJOR = 1 - MINOR = 0 - TINY = 3 - + MINOR = 2 + TINY = 1 + # Branch values: # * official release: nil # * stable branch: stable # * trunk: devel - BRANCH = 'devel' + BRANCH = 'stable' def self.revision revision = nil @@ -20,24 +20,25 @@ f = File.open(entries_path, 'r') entries = f.read f.close - if entries.match(%r{^\d+}) - revision = $1.to_i if entries.match(%r{^\d+\s+dir\s+(\d+)\s}) - else - xml = REXML::Document.new(entries) - revision = xml.elements['wc-entries'].elements[1].attributes['revision'].to_i - end - rescue - # Could not find the current revision - end - end - revision + if entries.match(%r{^\d+}) + revision = $1.to_i if entries.match(%r{^\d+\s+dir\s+(\d+)\s}) + else + xml = REXML::Document.new(entries) + revision = + xml.elements['wc-entries'].elements[1].attributes['revision'].to_i + end + rescue + # Could not find the current revision + end + end + revision end REVISION = self.revision - ARRAY = [MAJOR, MINOR, TINY, BRANCH, REVISION].compact - STRING = ARRAY.join('.') + ARRAY = [MAJOR, MINOR, TINY, BRANCH, REVISION].compact + STRING = ARRAY.join('.') - def self.to_a; ARRAY end + def self.to_a; ARRAY end def self.to_s; STRING end end end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/views/.svn/all-wcprops --- a/lib/redmine/views/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/views/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,7 +1,13 @@ K 25 svn:wc:ra_dav:version-url V 42 -/svn/!svn/ver/2659/trunk/lib/redmine/views +/svn/!svn/ver/4489/trunk/lib/redmine/views +END +api_template_handler.rb +K 25 +svn:wc:ra_dav:version-url +V 66 +/svn/!svn/ver/4452/trunk/lib/redmine/views/api_template_handler.rb END other_formats_builder.rb K 25 @@ -9,3 +15,9 @@ V 67 /svn/!svn/ver/2334/trunk/lib/redmine/views/other_formats_builder.rb END +builders.rb +K 25 +svn:wc:ra_dav:version-url +V 54 +/svn/!svn/ver/4452/trunk/lib/redmine/views/builders.rb +END diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/views/.svn/entries --- a/lib/redmine/views/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/views/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib/redmine/views +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/views http://redmine.rubyforge.org/svn -2009-04-05T13:33:54.194067Z -2659 -jplang +2011-06-21T03:16:49.595160Z +6105 +jbbarth @@ -29,13 +29,47 @@ my_page dir +api_template_handler.rb +file + + + + +2011-07-14T09:24:10.000000Z +e0e38b713c41ea63221dd877c6939983 +2010-12-03T11:25:21.858858Z +4452 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +1122 + other_formats_builder.rb file -2010-09-23T14:37:45.047759Z +2011-07-14T09:24:10.000000Z 849e9df27c041f540e690c6192939edf 2009-01-29T13:54:44.887081Z 2334 @@ -63,3 +97,40 @@ 1287 +builders +dir + +builders.rb +file + + + + +2011-07-14T09:24:10.000000Z +04feeced33ca55e9fb99099efe2fdcf6 +2010-12-03T11:25:21.858858Z +4452 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +1195 + diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/views/.svn/prop-base/api_template_handler.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/views/.svn/prop-base/api_template_handler.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/views/.svn/prop-base/builders.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/views/.svn/prop-base/builders.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/views/.svn/text-base/api_template_handler.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/views/.svn/text-base/api_template_handler.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,28 @@ +# Redmine - project management software +# Copyright (C) 2006-2010 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 Views + class ApiTemplateHandler < ActionView::TemplateHandler + include ActionView::TemplateHandlers::Compilable + + def compile(template) + "Redmine::Views::Builders.for(params[:format]) do |api|; #{template.source}; self.output_buffer = api.output; end" + end + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/views/.svn/text-base/builders.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/views/.svn/text-base/builders.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,35 @@ +# Redmine - project management software +# Copyright (C) 2006-2010 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 Views + module Builders + def self.for(format, &block) + builder = case format + when 'xml', :xml; Builders::Xml.new + when 'json', :json; Builders::Json.new + else; raise "No builder for format #{format}" + end + if block + block.call(builder) + else + builder + end + end + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/views/api_template_handler.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/views/api_template_handler.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,28 @@ +# Redmine - project management software +# Copyright (C) 2006-2010 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 Views + class ApiTemplateHandler < ActionView::TemplateHandler + include ActionView::TemplateHandlers::Compilable + + def compile(template) + "Redmine::Views::Builders.for(params[:format]) do |api|; #{template.source}; self.output_buffer = api.output; end" + end + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/views/builders.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/views/builders.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,35 @@ +# Redmine - project management software +# Copyright (C) 2006-2010 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 Views + module Builders + def self.for(format, &block) + builder = case format + when 'xml', :xml; Builders::Xml.new + when 'json', :json; Builders::Json.new + else; raise "No builder for format #{format}" + end + if block + block.call(builder) + else + builder + end + end + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/views/builders/.svn/all-wcprops --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/views/builders/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,23 @@ +K 25 +svn:wc:ra_dav:version-url +V 51 +/svn/!svn/ver/4489/trunk/lib/redmine/views/builders +END +structure.rb +K 25 +svn:wc:ra_dav:version-url +V 64 +/svn/!svn/ver/4489/trunk/lib/redmine/views/builders/structure.rb +END +xml.rb +K 25 +svn:wc:ra_dav:version-url +V 58 +/svn/!svn/ver/4489/trunk/lib/redmine/views/builders/xml.rb +END +json.rb +K 25 +svn:wc:ra_dav:version-url +V 59 +/svn/!svn/ver/4452/trunk/lib/redmine/views/builders/json.rb +END diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/views/builders/.svn/entries --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/views/builders/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,130 @@ +10 + +dir +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/views/builders +http://redmine.rubyforge.org/svn + + + +2010-12-11T13:13:49.013705Z +4489 +jplang + + + + + + + + + + + + + + +e93f8b46-1217-0410-a6f0-8f06a7374b81 + +structure.rb +file + + + + +2011-07-14T09:24:10.000000Z +8816150c9264dfa6e639af165670cbb1 +2010-12-11T13:13:49.013705Z +4489 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +2361 + +xml.rb +file + + + + +2011-07-14T09:24:10.000000Z +f9654f4bc43dbb5c01d5be2d6b045dd7 +2010-12-11T13:13:49.013705Z +4489 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +1405 + +json.rb +file + + + + +2011-07-14T09:24:10.000000Z +4b47e2fa5030d1cdad48f3abb5ab7c44 +2010-12-03T11:25:21.858858Z +4452 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +989 + diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/views/builders/.svn/prop-base/json.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/views/builders/.svn/prop-base/json.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/views/builders/.svn/prop-base/structure.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/views/builders/.svn/prop-base/structure.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/views/builders/.svn/prop-base/xml.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/views/builders/.svn/prop-base/xml.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/views/builders/.svn/text-base/json.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/views/builders/.svn/text-base/json.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,30 @@ +# Redmine - project management software +# Copyright (C) 2006-2010 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 'blankslate' + +module Redmine + module Views + module Builders + class Json < Structure + def output + @struct.first.to_json + end + end + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/views/builders/.svn/text-base/structure.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/views/builders/.svn/text-base/structure.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,75 @@ +# Redmine - project management software +# Copyright (C) 2006-2010 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 'blankslate' + +module Redmine + module Views + module Builders + class Structure < BlankSlate + def initialize + @struct = [{}] + end + + def array(tag, options={}, &block) + @struct << [] + block.call(self) + ret = @struct.pop + @struct.last[tag] = ret + @struct.last.merge!(options) if options + end + + def method_missing(sym, *args, &block) + if args.any? + if args.first.is_a?(Hash) + if @struct.last.is_a?(Array) + @struct.last << args.first unless block + else + @struct.last[sym] = args.first + end + else + if @struct.last.is_a?(Array) + @struct.last << (args.last || {}).merge(:value => args.first) + else + @struct.last[sym] = args.first + end + end + end + + if block + @struct << (args.first.is_a?(Hash) ? args.first : {}) + block.call(self) + ret = @struct.pop + if @struct.last.is_a?(Array) + @struct.last << ret + else + if @struct.last.has_key?(sym) && @struct.last[sym].is_a?(Hash) + @struct.last[sym].merge! ret + else + @struct.last[sym] = ret + end + end + end + end + + def output + raise "Need to implement #{self.class.name}#output" + end + end + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/views/builders/.svn/text-base/xml.rb.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/views/builders/.svn/text-base/xml.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,45 @@ +# Redmine - project management software +# Copyright (C) 2006-2010 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 Views + module Builders + class Xml < ::Builder::XmlMarkup + def initialize + super + instruct! + end + + def output + target! + end + + def method_missing(sym, *args, &block) + if args.size == 1 && args.first.is_a?(Time) + __send__ sym, args.first.xmlschema, &block + else + super + end + end + + def array(name, options={}, &block) + __send__ name, (options || {}).merge(:type => 'array'), &block + end + end + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/views/builders/json.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/views/builders/json.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,30 @@ +# Redmine - project management software +# Copyright (C) 2006-2010 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 'blankslate' + +module Redmine + module Views + module Builders + class Json < Structure + def output + @struct.first.to_json + end + end + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/views/builders/structure.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/views/builders/structure.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,75 @@ +# Redmine - project management software +# Copyright (C) 2006-2010 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 'blankslate' + +module Redmine + module Views + module Builders + class Structure < BlankSlate + def initialize + @struct = [{}] + end + + def array(tag, options={}, &block) + @struct << [] + block.call(self) + ret = @struct.pop + @struct.last[tag] = ret + @struct.last.merge!(options) if options + end + + def method_missing(sym, *args, &block) + if args.any? + if args.first.is_a?(Hash) + if @struct.last.is_a?(Array) + @struct.last << args.first unless block + else + @struct.last[sym] = args.first + end + else + if @struct.last.is_a?(Array) + @struct.last << (args.last || {}).merge(:value => args.first) + else + @struct.last[sym] = args.first + end + end + end + + if block + @struct << (args.first.is_a?(Hash) ? args.first : {}) + block.call(self) + ret = @struct.pop + if @struct.last.is_a?(Array) + @struct.last << ret + else + if @struct.last.has_key?(sym) && @struct.last[sym].is_a?(Hash) + @struct.last[sym].merge! ret + else + @struct.last[sym] = ret + end + end + end + end + + def output + raise "Need to implement #{self.class.name}#output" + end + end + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/views/builders/xml.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/views/builders/xml.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,45 @@ +# Redmine - project management software +# Copyright (C) 2006-2010 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 Views + module Builders + class Xml < ::Builder::XmlMarkup + def initialize + super + instruct! + end + + def output + target! + end + + def method_missing(sym, *args, &block) + if args.size == 1 && args.first.is_a?(Time) + __send__ sym, args.first.xmlschema, &block + else + super + end + end + + def array(name, options={}, &block) + __send__ name, (options || {}).merge(:type => 'array'), &block + end + end + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/views/my_page/.svn/all-wcprops --- a/lib/redmine/views/my_page/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/2659/trunk/lib/redmine/views/my_page -END -block.rb -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/2659/trunk/lib/redmine/views/my_page/block.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/views/my_page/.svn/entries --- a/lib/redmine/views/my_page/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/views/my_page/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib/redmine/views/my_page +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/views/my_page http://redmine.rubyforge.org/svn -2009-04-05T13:33:54.194067Z -2659 -jplang +2011-06-21T03:16:49.595160Z +6105 +jbbarth @@ -32,11 +32,11 @@ -2010-09-23T14:37:45.047759Z +2011-07-14T09:28:12.000000Z b06dfe20a85191516f81de5874f37ec6 -2009-04-05T13:33:54.194067Z -2659 -jplang +2011-06-21T03:16:49.595160Z +6105 +jbbarth has-props diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/wiki_formatting/.svn/all-wcprops --- a/lib/redmine/wiki_formatting/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/wiki_formatting/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,11 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/4376/trunk/lib/redmine/wiki_formatting +V 66 +/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/wiki_formatting END -macros.rb -K 25 -svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/4376/trunk/lib/redmine/wiki_formatting/macros.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/wiki_formatting/.svn/entries --- a/lib/redmine/wiki_formatting/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/wiki_formatting/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib/redmine/wiki_formatting +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/wiki_formatting http://redmine.rubyforge.org/svn -2010-11-06T17:47:27.890964Z -4376 +2011-03-28T20:16:05.752041Z +5242 jplang @@ -32,7 +32,7 @@ -2010-11-19T13:04:51.401011Z +2011-07-14T09:24:10.000000Z 879f8ce24a6bb5e4f5ea3b6f798b7a63 2010-11-06T17:47:27.890964Z 4376 diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/wiki_formatting/textile/.svn/all-wcprops --- a/lib/redmine/wiki_formatting/textile/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/wiki_formatting/textile/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,17 +1,17 @@ K 25 svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/4376/trunk/lib/redmine/wiki_formatting/textile +V 74 +/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/wiki_formatting/textile END helper.rb K 25 svn:wc:ra_dav:version-url -V 70 -/svn/!svn/ver/3025/trunk/lib/redmine/wiki_formatting/textile/helper.rb +V 84 +/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/wiki_formatting/textile/helper.rb END formatter.rb K 25 svn:wc:ra_dav:version-url -V 73 -/svn/!svn/ver/4376/trunk/lib/redmine/wiki_formatting/textile/formatter.rb +V 87 +/svn/!svn/ver/5878/branches/1.2-stable/lib/redmine/wiki_formatting/textile/formatter.rb END diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/wiki_formatting/textile/.svn/entries --- a/lib/redmine/wiki_formatting/textile/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/wiki_formatting/textile/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib/redmine/wiki_formatting/textile +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/redmine/wiki_formatting/textile http://redmine.rubyforge.org/svn -2010-11-06T17:47:27.890964Z -4376 +2011-03-28T20:16:05.752041Z +5242 jplang @@ -32,10 +32,10 @@ -2010-09-23T14:37:45.051779Z -dec83b1d0d7f682d1ebf1f172fe3c90b -2009-11-11T10:55:19.574870Z -3025 +2011-07-14T09:24:22.000000Z +e4c07fbafae7798129e133c528e1eec8 +2011-03-28T20:16:05.752041Z +5242 jplang has-props @@ -58,7 +58,7 @@ -1936 +2123 formatter.rb file @@ -66,10 +66,10 @@ -2010-11-19T13:04:51.401011Z -b8052f700ecb0991fabdd3a5b684a412 -2010-11-06T17:47:27.890964Z -4376 +2011-07-14T09:24:22.000000Z +aeba307e1011ac3f15b25fd91065ae2e +2011-03-14T20:35:36.619571Z +5133 jplang has-props @@ -92,5 +92,5 @@ -4724 +4722 diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/wiki_formatting/textile/.svn/text-base/formatter.rb.svn-base --- a/lib/redmine/wiki_formatting/textile/.svn/text-base/formatter.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/wiki_formatting/textile/.svn/text-base/formatter.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -43,7 +43,7 @@ # Patch for RedCloth. Fixed in RedCloth r128 but _why hasn't released it yet. # http://code.whytheluckystiff.net/redcloth/changeset/128 def hard_break( text ) - text.gsub!( /(.)\n(?!\n|\Z|>| *([#*=]+(\s|$)|[{|]))/, "\\1
    " ) if hard_breaks + text.gsub!( /(.)\n(?!\n|\Z| *([#*=]+(\s|$)|[{|]))/, "\\1
    " ) if hard_breaks end # Patch to add code highlighting support to RedCloth diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/wiki_formatting/textile/.svn/text-base/helper.rb.svn-base --- a/lib/redmine/wiki_formatting/textile/.svn/text-base/helper.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/wiki_formatting/textile/.svn/text-base/helper.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,5 +1,5 @@ # Redmine - project management software -# Copyright (C) 2006-2008 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 @@ -20,17 +20,13 @@ module Textile module Helper def wikitoolbar_for(field_id) + heads_for_wiki_formatter # Is there a simple way to link to a public resource? url = "#{Redmine::Utils.relative_url_root}/help/wiki_syntax.html" - - help_link = l(:setting_text_formatting) + ': ' + - link_to(l(:label_help), url, - :onclick => "window.open(\"#{ url }\", \"\", \"resizable=yes, location=no, width=300, height=640, menubar=no, status=no, scrollbars=yes\"); return false;") + help_link = link_to(l(:setting_text_formatting), url, + :onclick => "window.open(\"#{ url }\", \"\", \"resizable=yes, location=no, width=300, height=640, menubar=no, status=no, scrollbars=yes\"); return false;") - javascript_include_tag('jstoolbar/jstoolbar') + - javascript_include_tag('jstoolbar/textile') + - javascript_include_tag("jstoolbar/lang/jstoolbar-#{current_language.to_s.downcase}") + - javascript_tag("var wikiToolbar = new jsToolBar($('#{field_id}')); wikiToolbar.setHelpLink('#{help_link}'); wikiToolbar.draw();") + javascript_tag("var wikiToolbar = new jsToolBar($('#{field_id}')); wikiToolbar.setHelpLink('#{escape_javascript help_link}'); wikiToolbar.draw();") end def initial_page_content(page) @@ -38,7 +34,15 @@ end def heads_for_wiki_formatter - stylesheet_link_tag 'jstoolbar' + unless @heads_for_wiki_formatter_included + content_for :header_tags do + javascript_include_tag('jstoolbar/jstoolbar') + + javascript_include_tag('jstoolbar/textile') + + javascript_include_tag("jstoolbar/lang/jstoolbar-#{current_language.to_s.downcase}") + + stylesheet_link_tag('jstoolbar') + end + @heads_for_wiki_formatter_included = true + end end end end diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/wiki_formatting/textile/formatter.rb --- a/lib/redmine/wiki_formatting/textile/formatter.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/wiki_formatting/textile/formatter.rb Mon Jul 25 14:23:37 2011 +0100 @@ -43,7 +43,7 @@ # Patch for RedCloth. Fixed in RedCloth r128 but _why hasn't released it yet. # http://code.whytheluckystiff.net/redcloth/changeset/128 def hard_break( text ) - text.gsub!( /(.)\n(?!\n|\Z|>| *([#*=]+(\s|$)|[{|]))/, "\\1
    " ) if hard_breaks + text.gsub!( /(.)\n(?!\n|\Z| *([#*=]+(\s|$)|[{|]))/, "\\1
    " ) if hard_breaks end # Patch to add code highlighting support to RedCloth diff -r f7c525dc7585 -r 0b6c82dead28 lib/redmine/wiki_formatting/textile/helper.rb --- a/lib/redmine/wiki_formatting/textile/helper.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/redmine/wiki_formatting/textile/helper.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,5 +1,5 @@ # Redmine - project management software -# Copyright (C) 2006-2008 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 @@ -20,17 +20,13 @@ module Textile module Helper def wikitoolbar_for(field_id) + heads_for_wiki_formatter # Is there a simple way to link to a public resource? url = "#{Redmine::Utils.relative_url_root}/help/wiki_syntax.html" - - help_link = l(:setting_text_formatting) + ': ' + - link_to(l(:label_help), url, - :onclick => "window.open(\"#{ url }\", \"\", \"resizable=yes, location=no, width=300, height=640, menubar=no, status=no, scrollbars=yes\"); return false;") + help_link = link_to(l(:setting_text_formatting), url, + :onclick => "window.open(\"#{ url }\", \"\", \"resizable=yes, location=no, width=300, height=640, menubar=no, status=no, scrollbars=yes\"); return false;") - javascript_include_tag('jstoolbar/jstoolbar') + - javascript_include_tag('jstoolbar/textile') + - javascript_include_tag("jstoolbar/lang/jstoolbar-#{current_language.to_s.downcase}") + - javascript_tag("var wikiToolbar = new jsToolBar($('#{field_id}')); wikiToolbar.setHelpLink('#{help_link}'); wikiToolbar.draw();") + javascript_tag("var wikiToolbar = new jsToolBar($('#{field_id}')); wikiToolbar.setHelpLink('#{escape_javascript help_link}'); wikiToolbar.draw();") end def initial_page_content(page) @@ -38,7 +34,15 @@ end def heads_for_wiki_formatter - stylesheet_link_tag 'jstoolbar' + unless @heads_for_wiki_formatter_included + content_for :header_tags do + javascript_include_tag('jstoolbar/jstoolbar') + + javascript_include_tag('jstoolbar/textile') + + javascript_include_tag("jstoolbar/lang/jstoolbar-#{current_language.to_s.downcase}") + + stylesheet_link_tag('jstoolbar') + end + @heads_for_wiki_formatter_included = true + end end end end diff -r f7c525dc7585 -r 0b6c82dead28 lib/tasks/.svn/all-wcprops --- a/lib/tasks/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/tasks/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,119 +1,29 @@ K 25 svn:wc:ra_dav:version-url -V 34 -/svn/!svn/ver/4405/trunk/lib/tasks +V 48 +/svn/!svn/ver/6105/branches/1.2-stable/lib/tasks END -deprecated.rake +locales.rake K 25 svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/691/trunk/lib/tasks/deprecated.rake -END -jdbc.rake -K 25 -svn:wc:ra_dav:version-url -V 44 -/svn/!svn/ver/3721/trunk/lib/tasks/jdbc.rake +V 61 +/svn/!svn/ver/5878/branches/1.2-stable/lib/tasks/locales.rake END extract_fixtures.rake K 25 svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/67/trunk/lib/tasks/extract_fixtures.rake -END -reminder.rake -K 25 -svn:wc:ra_dav:version-url -V 48 -/svn/!svn/ver/4167/trunk/lib/tasks/reminder.rake +V 70 +/svn/!svn/ver/6105/branches/1.2-stable/lib/tasks/extract_fixtures.rake END initializers.rake K 25 svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/4405/trunk/lib/tasks/initializers.rake -END -metrics.rake -K 25 -svn:wc:ra_dav:version-url -V 47 -/svn/!svn/ver/2825/trunk/lib/tasks/metrics.rake -END -permissions.rake -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/3948/trunk/lib/tasks/permissions.rake -END -load_default_data.rake -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/2592/trunk/lib/tasks/load_default_data.rake -END -testing.rake -K 25 -svn:wc:ra_dav:version-url -V 47 -/svn/!svn/ver/3060/trunk/lib/tasks/testing.rake -END -watchers.rake -K 25 -svn:wc:ra_dav:version-url -V 48 -/svn/!svn/ver/3167/trunk/lib/tasks/watchers.rake -END -yardoc.rake -K 25 -svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/3922/trunk/lib/tasks/yardoc.rake -END -plugins.rake -K 25 -svn:wc:ra_dav:version-url -V 47 -/svn/!svn/ver/1786/trunk/lib/tasks/plugins.rake -END -locales.rake -K 25 -svn:wc:ra_dav:version-url -V 47 -/svn/!svn/ver/4254/trunk/lib/tasks/locales.rake -END -migrate_from_trac.rake -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/3517/trunk/lib/tasks/migrate_from_trac.rake -END -migrate_from_mantis.rake -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/4403/trunk/lib/tasks/migrate_from_mantis.rake +V 66 +/svn/!svn/ver/6105/branches/1.2-stable/lib/tasks/initializers.rake END email.rake K 25 svn:wc:ra_dav:version-url -V 45 -/svn/!svn/ver/4256/trunk/lib/tasks/email.rake +V 59 +/svn/!svn/ver/5943/branches/1.2-stable/lib/tasks/email.rake END -migrate_plugins.rake -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/752/trunk/lib/tasks/migrate_plugins.rake -END -ci.rake -K 25 -svn:wc:ra_dav:version-url -V 42 -/svn/!svn/ver/3919/trunk/lib/tasks/ci.rake -END -fetch_changesets.rake -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/1155/trunk/lib/tasks/fetch_changesets.rake -END diff -r f7c525dc7585 -r 0b6c82dead28 lib/tasks/.svn/entries --- a/lib/tasks/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/tasks/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/lib/tasks +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/lib/tasks http://redmine.rubyforge.org/svn -2010-11-14T15:14:19.280754Z -4405 -jplang +2011-06-21T03:16:49.595160Z +6105 +jbbarth @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.063748Z +2011-07-14T09:24:10.000000Z 03301be8b264b5cb46d05896861dcc4d 2007-09-02T08:08:10.346505Z 691 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.063748Z +2011-07-14T09:24:10.000000Z 2ee57ccc06c675e55c38a4153a27c7c3 2010-05-01T09:37:46.451305Z 3721 @@ -100,11 +100,11 @@ -2010-09-23T14:37:45.063748Z -0c57af5536009680bb8c3c3302fc628d -2006-07-29T09:32:58.780216Z -12 -jplang +2011-07-14T09:28:12.000000Z +7a4ab6c4928c49aa5194dec204164068 +2011-06-21T03:16:49.595160Z +6105 +jbbarth @@ -126,7 +126,7 @@ -877 +863 reminder.rake file @@ -134,7 +134,7 @@ -2010-09-24T12:48:29.799790Z +2011-07-14T09:24:10.000000Z 07fcf57752978d65a694eb57adcc0851 2010-09-20T23:17:51.402972Z 4167 @@ -162,47 +162,13 @@ 1606 -initializers.rake -file - - - - -2010-11-19T13:04:51.424933Z -c25b466de7654465538a91e5f5ab32b9 -2010-11-14T15:14:19.280754Z -4405 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -1343 - metrics.rake file -2010-09-23T14:37:45.063748Z +2011-07-14T09:24:10.000000Z 0254f4ee916dee0a2572e63e947f8a1b 2009-07-27T00:55:43.057910Z 2825 @@ -230,13 +196,81 @@ 113 +initializers.rake +file + + + + +2011-07-14T09:28:12.000000Z +c25b466de7654465538a91e5f5ab32b9 +2011-06-21T03:16:49.595160Z +6105 +jbbarth +has-props + + + + + + + + + + + + + + + + + + + + +1343 + +ciphering.rake +file + + + + +2011-07-14T09:24:10.000000Z +b522c20249b1fad89c3276d10ccaaf6b +2011-02-26T13:09:25.657748Z +4950 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +1409 + permissions.rake file -2010-09-23T14:37:45.063748Z +2011-07-14T09:24:10.000000Z 010fbb563237ff01803aa47736cf863e 2010-08-18T17:23:23.071766Z 3948 @@ -270,7 +304,7 @@ -2010-09-23T14:37:45.063748Z +2011-07-14T09:24:10.000000Z 984c757ee4c8fa78f649f8dd34b715cf 2009-03-15T10:03:56.604709Z 2592 @@ -304,11 +338,11 @@ -2010-09-23T14:37:45.067787Z -5d4cbb1125484cf9c8f3f693c53f8fd1 -2009-11-15T13:43:31.750664Z -3060 -jplang +2011-07-14T09:24:10.000000Z +ca73c8345daa839f0145c671ad94b91f +2011-02-11T15:30:45.959165Z +4806 +tmaruyama @@ -330,7 +364,7 @@ -1419 +3376 watchers.rake file @@ -338,7 +372,7 @@ -2010-09-23T14:37:45.067787Z +2011-07-14T09:24:10.000000Z 16eaf27a5959829a12961ff16e233600 2009-12-13T12:39:22.716082Z 3167 @@ -366,13 +400,47 @@ 180 +plugins.rake +file + + + + +2011-07-14T09:24:10.000000Z +f27a83cf3f04d7906ac2f3ca40d01a20 +2008-09-05T10:31:06.632668Z +1786 +jplang + + + + + + + + + + + + + + + + + + + + + +1256 + yardoc.rake file -2010-09-23T14:37:45.067787Z +2011-07-14T09:24:10.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-07-14T09:24:22.000000Z +d8372de066f74a4f6e71b5795a316cf3 +2011-05-10T11:41:30.089198Z +5724 +tmaruyama has-props @@ -466,7 +500,7 @@ -3360 +4206 migrate_from_trac.rake file @@ -474,10 +508,10 @@ -2010-09-23T14:37:45.063748Z -6e8b343999b28febc71dd621a519ce9d -2010-02-28T16:51:36.195546Z -3517 +2011-07-14T09:24:10.000000Z +db60f05f7cd325cbdd984f0b6d7b42ea +2010-12-31T15:30:50.544770Z +4599 jplang has-props @@ -500,7 +534,7 @@ -30294 +30358 migrate_from_mantis.rake file @@ -508,10 +542,10 @@ -2010-11-19T13:04:51.424933Z -d58affc991ec64b615bcbf3f9a1bb176 -2010-11-14T13:16:39.968867Z -4403 +2011-07-14T09:24:10.000000Z +ba7db3c8df92c72d300288ec7276dbad +2011-01-28T19:45:09.952949Z +4765 jplang @@ -534,7 +568,7 @@ -19253 +19166 email.rake file @@ -542,11 +576,11 @@ -2010-11-19T13:04:51.424933Z -7875b7a15307c626a93c284f33757320 -2010-10-15T22:50:33.240825Z -4256 -edavis10 +2011-07-14T09:24:22.000000Z +6d17052a266b55a94e9d8de784cc1331 +2011-05-28T03:34:47.536780Z +5943 +tmaruyama @@ -568,7 +602,7 @@ -8244 +8145 migrate_plugins.rake file @@ -576,7 +610,7 @@ -2010-09-23T14:37:45.063748Z +2011-07-14T09:24:10.000000Z 82e0901f7cbdda05ed63c12a764c3614 2007-09-23T17:19:27.414302Z 752 @@ -610,11 +644,11 @@ -2010-09-23T14:37:45.063748Z -ad1435c02c82525ceb302114492c28f8 -2010-08-06T20:46:44.980912Z -3919 -edavis10 +2011-07-14T09:24:10.000000Z +93f8964aea856c06fb2eaa62ca2023c2 +2011-01-06T18:52:37.169690Z +4643 +jplang @@ -636,7 +670,7 @@ -1077 +1118 fetch_changesets.rake file @@ -644,7 +678,7 @@ -2010-09-23T14:37:45.063748Z +2011-07-14T09:24:10.000000Z 320b77011663b1209247bb809bc43ecb 2008-02-16T16:25:58.204498Z 1155 diff -r f7c525dc7585 -r 0b6c82dead28 lib/tasks/.svn/prop-base/ciphering.rake.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/tasks/.svn/prop-base/ciphering.rake.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 lib/tasks/.svn/text-base/ci.rake.svn-base --- a/lib/tasks/.svn/text-base/ci.rake.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/tasks/.svn/text-base/ci.rake.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -16,6 +16,7 @@ Rake::Task["db:create"].invoke Rake::Task["db:migrate"].invoke Rake::Task["db:schema:dump"].invoke + Rake::Task["test:scm:update"].invoke end desc "Build Redmine" diff -r f7c525dc7585 -r 0b6c82dead28 lib/tasks/.svn/text-base/ciphering.rake.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/tasks/.svn/text-base/ciphering.rake.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 lib/tasks/.svn/text-base/email.rake.svn-base --- a/lib/tasks/.svn/text-base/email.rake.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/tasks/.svn/text-base/email.rake.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ # Redmine - project management software -# Copyright (C) 2006-2008 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 # 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. @@ -29,7 +29,7 @@ create: create a user account no_permission_check=1 disable permission checking when receiving the email - + Issue attributes control options: project=PROJECT identifier of the target project status=STATUS name of the target status @@ -58,10 +58,10 @@ options[:allow_override] = ENV['allow_override'] if ENV['allow_override'] options[:unknown_user] = ENV['unknown_user'] if ENV['unknown_user'] options[:no_permission_check] = ENV['no_permission_check'] if ENV['no_permission_check'] - + MailHandler.receive(STDIN.read, options) end - + desc <<-END_DESC Read emails from an IMAP server. @@ -73,7 +73,7 @@ create: create a user account no_permission_check=1 disable permission checking when receiving the email - + Available IMAP options: host=HOST IMAP server host (default: 127.0.0.1) port=PORT IMAP server port (default: 143) @@ -81,7 +81,7 @@ username=USERNAME IMAP account password=PASSWORD IMAP password folder=FOLDER IMAP folder to read (default: INBOX) - + Issue attributes control options: project=PROJECT identifier of the target project status=STATUS name of the target status @@ -91,22 +91,22 @@ allow_override=ATTRS allow email content to override attributes specified by previous options ATTRS is a comma separated list of attributes - + Processed emails control options: move_on_success=MAILBOX move emails that were successfully received to MAILBOX instead of deleting them move_on_failure=MAILBOX move emails that were ignored to MAILBOX - + Examples: # No project specified. Emails MUST contain the 'Project' keyword: - + rake redmine:email:receive_iamp RAILS_ENV="production" \\ host=imap.foo.bar username=redmine@example.net password=xxx # Fixed project and default tracker specified, but emails can override # both tracker and priority attributes: - + rake redmine:email:receive_iamp RAILS_ENV="production" \\ host=imap.foo.bar username=redmine@example.net password=xxx ssl=1 \\ project=foo \\ @@ -123,7 +123,7 @@ :folder => ENV['folder'], :move_on_success => ENV['move_on_success'], :move_on_failure => ENV['move_on_failure']} - + options = { :issue => {} } %w(project status tracker category priority).each { |a| options[:issue][a.to_sym] = ENV[a] if ENV[a] } options[:allow_override] = ENV['allow_override'] if ENV['allow_override'] @@ -132,7 +132,7 @@ Redmine::IMAP.check(imap_options, options) end - + desc <<-END_DESC Read emails from an POP3 server. @@ -148,7 +148,7 @@ See redmine:email:receive_imap for more options and examples. END_DESC - + task :receive_pop3 => :environment do pop_options = {:host => ENV['host'], :port => ENV['port'], @@ -156,24 +156,24 @@ :username => ENV['username'], :password => ENV['password'], :delete_unprocessed => ENV['delete_unprocessed']} - + options = { :issue => {} } %w(project status tracker category priority).each { |a| options[:issue][a.to_sym] = ENV[a] if ENV[a] } options[:allow_override] = ENV['allow_override'] if ENV['allow_override'] options[:unknown_user] = ENV['unknown_user'] if ENV['unknown_user'] options[:no_permission_check] = ENV['no_permission_check'] if ENV['no_permission_check'] - + Redmine::POP3.check(pop_options, options) end - + desc "Send a test email to the user with the provided login name" task :test, :login, :needs => :environment do |task, args| include Redmine::I18n - abort l(:notice_email_error, "Please include the user login to test with. Example: login=examle-login") if args[:login].blank? + abort l(:notice_email_error, "Please include the user login to test with. Example: rake redmine:email:test[login]") if args[:login].blank? user = User.find_by_login(args[:login]) - abort l(:notice_email_error, "User #{args[:login]} not found") unless user.logged? - + abort l(:notice_email_error, "User #{args[:login]} not found") unless user && user.logged? + ActionMailer::Base.raise_delivery_errors = true begin Mailer.deliver_test(User.current) diff -r f7c525dc7585 -r 0b6c82dead28 lib/tasks/.svn/text-base/extract_fixtures.rake.svn-base --- a/lib/tasks/.svn/text-base/extract_fixtures.rake.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/tasks/.svn/text-base/extract_fixtures.rake.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -10,15 +10,13 @@ File.open("#{RAILS_ROOT}/#{table_name}.yml", 'w' ) do |file| data = ActiveRecord::Base.connection.select_all(sql % table_name) file.write data.inject({}) { |hash, record| - - # cast extracted values - ActiveRecord::Base.connection.columns(table_name).each { |col| - record[col.name] = col.type_cast(record[col.name]) if record[col.name] - } - - hash["#{table_name}_#{i.succ!}"] = record - hash + # cast extracted values + ActiveRecord::Base.connection.columns(table_name).each { |col| + record[col.name] = col.type_cast(record[col.name]) if record[col.name] + } + hash["#{table_name}_#{i.succ!}"] = record + hash }.to_yaml end end -end \ No newline at end of file +end diff -r f7c525dc7585 -r 0b6c82dead28 lib/tasks/.svn/text-base/locales.rake.svn-base --- a/lib/tasks/.svn/text-base/locales.rake.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/tasks/.svn/text-base/locales.rake.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,22 +1,29 @@ +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 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| puts "Updating file #{file}" file_strings = YAML.load(File.read(file)) file_strings = file_strings[file_strings.keys.first] - + missing_keys = en_strings.keys - file_strings.keys next if missing_keys.empty? - + puts "==> Missing #{missing_keys.size} keys (#{missing_keys.join(', ')})" lang = File.open(file, 'a') - + missing_keys.each do |key| {key => en_strings[key]}.to_yaml.each_line do |line| next if line =~ /^---/ || line.empty? @@ -24,11 +31,31 @@ lang << " #{line}" end end - + 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). @@ -44,7 +71,7 @@ deletes = ENV['key'] ? Regexp.union(ENV['key'].split(',')) : nil # Ignore multiline keys (begin with | or >) and keys with children (nothing meaningful after :) delete_regex = /\A #{deletes}: +[^\|>\s#].*\z/ - + files.each do |path| # Skip certain locales (puts "Skipping #{path}"; next) if File.basename(path, ".yml") =~ skips @@ -53,7 +80,7 @@ File.open(path, 'w') {|file| orig_content.each_line {|line| file.puts line unless line.chomp =~ delete_regex}} end end - + desc <<-END_DESC Adds a new top-level translation string to all locale file (only works for childless keys, probably doesn\'t work on windows, doesn't check for duplicates). diff -r f7c525dc7585 -r 0b6c82dead28 lib/tasks/.svn/text-base/migrate_from_mantis.rake.svn-base --- a/lib/tasks/.svn/text-base/migrate_from_mantis.rake.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/tasks/.svn/text-base/migrate_from_mantis.rake.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -88,13 +88,11 @@ def firstname @firstname = realname.blank? ? username : realname.split.first[0..29] - @firstname.gsub!(/[^\w\s\'\-]/i, '') @firstname end def lastname @lastname = realname.blank? ? '-' : realname.split[1..-1].join(' ')[0..29] - @lastname.gsub!(/[^\w\s\'\-]/i, '') @lastname = '-' if @lastname.blank? @lastname end @@ -224,7 +222,7 @@ end def name - read_attribute(:name)[0..29].gsub(/[^\w\s\'\-]/, '-') + read_attribute(:name)[0..29] end end @@ -289,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 diff -r f7c525dc7585 -r 0b6c82dead28 lib/tasks/.svn/text-base/migrate_from_trac.rake.svn-base --- a/lib/tasks/.svn/text-base/migrate_from_trac.rake.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/tasks/.svn/text-base/migrate_from_trac.rake.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -167,7 +167,7 @@ has_many :attachments, :class_name => "TracAttachment", :finder_sql => "SELECT DISTINCT attachment.* FROM #{TracMigrate::TracAttachment.table_name}" + " WHERE #{TracMigrate::TracAttachment.table_name}.type = 'ticket'" + - ' AND #{TracMigrate::TracAttachment.table_name}.id = \'#{id}\'' + ' AND #{TracMigrate::TracAttachment.table_name}.id = \'#{TracMigrate::TracAttachment.connection.quote_string(id.to_s)}\'' has_many :customs, :class_name => "TracTicketCustom", :foreign_key => :ticket def ticket_type @@ -207,7 +207,7 @@ has_many :attachments, :class_name => "TracAttachment", :finder_sql => "SELECT DISTINCT attachment.* FROM #{TracMigrate::TracAttachment.table_name}" + " WHERE #{TracMigrate::TracAttachment.table_name}.type = 'wiki'" + - ' AND #{TracMigrate::TracAttachment.table_name}.id = \'#{id}\'' + ' AND #{TracMigrate::TracAttachment.table_name}.id = \'#{TracMigrate::TracAttachment.connection.quote_string(id.to_s)}\'' def self.columns # Hides readonly Trac field to prevent clash with AR readonly? method (Rails 2.0) @@ -246,8 +246,8 @@ ln = ($2 || '-').strip u = User.new :mail => mail.gsub(/[^-@a-z0-9\.]/i, '-'), - :firstname => fn[0, limit_for(User, 'firstname')].gsub(/[^\w\s\'\-]/i, '-'), - :lastname => ln[0, limit_for(User, 'lastname')].gsub(/[^\w\s\'\-]/i, '-') + :firstname => fn[0, limit_for(User, 'firstname')], + :lastname => ln[0, limit_for(User, 'lastname')] u.login = username[0,limit_for(User, 'login')].gsub(/[^a-z0-9_\-@\.]/i, '-') u.password = 'trac' diff -r f7c525dc7585 -r 0b6c82dead28 lib/tasks/.svn/text-base/testing.rake.svn-base --- a/lib/tasks/.svn/text-base/testing.rake.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/tasks/.svn/text-base/testing.rake.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,41 +1,91 @@ -### From http://svn.geekdaily.org/public/rails/plugins/generally_useful/tasks/coverage_via_rcov.rake - -namespace :test do - desc 'Measures test coverage' - task :coverage do - rm_f "coverage" - rm_f "coverage.data" - rcov = "rcov --rails --aggregate coverage.data --text-summary -Ilib --html" - files = Dir.glob("test/**/*_test.rb").join(" ") - system("#{rcov} #{files}") - system("open coverage/index.html") if PLATFORM['darwin'] - end - - namespace :scm do - namespace :setup do - desc "Creates directory for test repositories" - task :create_dir do - FileUtils.mkdir_p Rails.root + '/tmp/test' - end - - supported_scms = [:subversion, :cvs, :bazaar, :mercurial, :git, :darcs, :filesystem] - - desc "Creates a test subversion repository" - task :subversion => :create_dir do - repo_path = "tmp/test/subversion_repository" - system "svnadmin create #{repo_path}" - system "gunzip < test/fixtures/repositories/subversion_repository.dump.gz | svnadmin load #{repo_path}" - end - - (supported_scms - [:subversion]).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" - end - end - - desc "Creates all test repositories" - task :all => supported_scms - end - end -end +### From http://svn.geekdaily.org/public/rails/plugins/generally_useful/tasks/coverage_via_rcov.rake + +namespace :test do + desc 'Measures test coverage' + task :coverage do + rm_f "coverage" + rm_f "coverage.data" + rcov = "rcov --rails --aggregate coverage.data --text-summary -Ilib --html" + files = Dir.glob("test/**/*_test.rb").join(" ") + system("#{rcov} #{files}") + system("open coverage/index.html") if PLATFORM['darwin'] + end + + desc 'Run unit and functional scm tests' + task :scm do + errors = %w(test:scm:units test:scm:functionals).collect do |task| + begin + Rake::Task[task].invoke + nil + rescue => e + task + end + end.compact + abort "Errors running #{errors.to_sentence(:locale => :en)}!" if errors.any? + end + + namespace :scm do + namespace :setup do + desc "Creates directory for test repositories" + task :create_dir do + FileUtils.mkdir_p Rails.root + '/tmp/test' + end + + supported_scms = [:subversion, :cvs, :bazaar, :mercurial, :git, :darcs, :filesystem] + + desc "Creates a test subversion repository" + task :subversion => :create_dir do + repo_path = "tmp/test/subversion_repository" + system "svnadmin create #{repo_path}" + system "gunzip < test/fixtures/repositories/subversion_repository.dump.gz | svnadmin load #{repo_path}" + end + + desc "Creates a test mercurial repository" + task :mercurial => :create_dir do + repo_path = "tmp/test/mercurial_repository" + bundle_path = "test/fixtures/repositories/mercurial_repository.hg" + system "hg init #{repo_path}" + system "hg -R #{repo_path} pull #{bundle_path}" + end + + (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 "tar -xvz -C tmp/test -f test/fixtures/repositories/#{scm}_repository.tar.gz" + end + end + + desc "Creates all test repositories" + task :all => supported_scms + end + + desc "Updates installed test repositories" + task :update do + require 'fileutils' + Dir.glob("tmp/test/*_repository").each do |dir| + next unless File.basename(dir) =~ %r{^(.+)_repository$} && File.directory?(dir) + scm = $1 + next unless fixture = Dir.glob("test/fixtures/repositories/#{scm}_repository.*").first + next if File.stat(dir).ctime > File.stat(fixture).mtime + + FileUtils.rm_rf dir + Rake::Task["test:scm:setup:#{scm}"].execute + end + end + + Rake::TestTask.new(:units => "db:test:prepare") do |t| + t.libs << "test" + t.verbose = true + t.test_files = FileList['test/unit/repository*_test.rb'] + FileList['test/unit/lib/redmine/scm/**/*_test.rb'] + end + Rake::Task['test:scm:units'].comment = "Run the scm unit tests" + + Rake::TestTask.new(:functionals => "db:test:prepare") do |t| + t.libs << "test" + t.verbose = true + t.test_files = FileList['test/functional/repositories*_test.rb'] + end + Rake::Task['test:scm:functionals'].comment = "Run the scm functional tests" + end +end diff -r f7c525dc7585 -r 0b6c82dead28 lib/tasks/ci.rake --- a/lib/tasks/ci.rake Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/tasks/ci.rake Mon Jul 25 14:23:37 2011 +0100 @@ -16,6 +16,7 @@ Rake::Task["db:create"].invoke Rake::Task["db:migrate"].invoke Rake::Task["db:schema:dump"].invoke + Rake::Task["test:scm:update"].invoke end desc "Build Redmine" diff -r f7c525dc7585 -r 0b6c82dead28 lib/tasks/ciphering.rake --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/tasks/ciphering.rake Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 lib/tasks/email.rake --- a/lib/tasks/email.rake Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/tasks/email.rake Mon Jul 25 14:23:37 2011 +0100 @@ -1,16 +1,16 @@ # Redmine - project management software -# Copyright (C) 2006-2008 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 # 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. @@ -29,7 +29,7 @@ create: create a user account no_permission_check=1 disable permission checking when receiving the email - + Issue attributes control options: project=PROJECT identifier of the target project status=STATUS name of the target status @@ -58,10 +58,10 @@ options[:allow_override] = ENV['allow_override'] if ENV['allow_override'] options[:unknown_user] = ENV['unknown_user'] if ENV['unknown_user'] options[:no_permission_check] = ENV['no_permission_check'] if ENV['no_permission_check'] - + MailHandler.receive(STDIN.read, options) end - + desc <<-END_DESC Read emails from an IMAP server. @@ -73,7 +73,7 @@ create: create a user account no_permission_check=1 disable permission checking when receiving the email - + Available IMAP options: host=HOST IMAP server host (default: 127.0.0.1) port=PORT IMAP server port (default: 143) @@ -81,7 +81,7 @@ username=USERNAME IMAP account password=PASSWORD IMAP password folder=FOLDER IMAP folder to read (default: INBOX) - + Issue attributes control options: project=PROJECT identifier of the target project status=STATUS name of the target status @@ -91,22 +91,22 @@ allow_override=ATTRS allow email content to override attributes specified by previous options ATTRS is a comma separated list of attributes - + Processed emails control options: move_on_success=MAILBOX move emails that were successfully received to MAILBOX instead of deleting them move_on_failure=MAILBOX move emails that were ignored to MAILBOX - + Examples: # No project specified. Emails MUST contain the 'Project' keyword: - + rake redmine:email:receive_iamp RAILS_ENV="production" \\ host=imap.foo.bar username=redmine@example.net password=xxx # Fixed project and default tracker specified, but emails can override # both tracker and priority attributes: - + rake redmine:email:receive_iamp RAILS_ENV="production" \\ host=imap.foo.bar username=redmine@example.net password=xxx ssl=1 \\ project=foo \\ @@ -123,7 +123,7 @@ :folder => ENV['folder'], :move_on_success => ENV['move_on_success'], :move_on_failure => ENV['move_on_failure']} - + options = { :issue => {} } %w(project status tracker category priority).each { |a| options[:issue][a.to_sym] = ENV[a] if ENV[a] } options[:allow_override] = ENV['allow_override'] if ENV['allow_override'] @@ -132,7 +132,7 @@ Redmine::IMAP.check(imap_options, options) end - + desc <<-END_DESC Read emails from an POP3 server. @@ -148,7 +148,7 @@ See redmine:email:receive_imap for more options and examples. END_DESC - + task :receive_pop3 => :environment do pop_options = {:host => ENV['host'], :port => ENV['port'], @@ -156,24 +156,24 @@ :username => ENV['username'], :password => ENV['password'], :delete_unprocessed => ENV['delete_unprocessed']} - + options = { :issue => {} } %w(project status tracker category priority).each { |a| options[:issue][a.to_sym] = ENV[a] if ENV[a] } options[:allow_override] = ENV['allow_override'] if ENV['allow_override'] options[:unknown_user] = ENV['unknown_user'] if ENV['unknown_user'] options[:no_permission_check] = ENV['no_permission_check'] if ENV['no_permission_check'] - + Redmine::POP3.check(pop_options, options) end - + desc "Send a test email to the user with the provided login name" task :test, :login, :needs => :environment do |task, args| include Redmine::I18n - abort l(:notice_email_error, "Please include the user login to test with. Example: login=examle-login") if args[:login].blank? + abort l(:notice_email_error, "Please include the user login to test with. Example: rake redmine:email:test[login]") if args[:login].blank? user = User.find_by_login(args[:login]) - abort l(:notice_email_error, "User #{args[:login]} not found") unless user.logged? - + abort l(:notice_email_error, "User #{args[:login]} not found") unless user && user.logged? + ActionMailer::Base.raise_delivery_errors = true begin Mailer.deliver_test(User.current) diff -r f7c525dc7585 -r 0b6c82dead28 lib/tasks/extract_fixtures.rake --- a/lib/tasks/extract_fixtures.rake Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/tasks/extract_fixtures.rake Mon Jul 25 14:23:37 2011 +0100 @@ -10,15 +10,13 @@ File.open("#{RAILS_ROOT}/#{table_name}.yml", 'w' ) do |file| data = ActiveRecord::Base.connection.select_all(sql % table_name) file.write data.inject({}) { |hash, record| - - # cast extracted values - ActiveRecord::Base.connection.columns(table_name).each { |col| - record[col.name] = col.type_cast(record[col.name]) if record[col.name] - } - - hash["#{table_name}_#{i.succ!}"] = record - hash + # cast extracted values + ActiveRecord::Base.connection.columns(table_name).each { |col| + record[col.name] = col.type_cast(record[col.name]) if record[col.name] + } + hash["#{table_name}_#{i.succ!}"] = record + hash }.to_yaml end end -end \ No newline at end of file +end diff -r f7c525dc7585 -r 0b6c82dead28 lib/tasks/locales.rake --- a/lib/tasks/locales.rake Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/tasks/locales.rake Mon Jul 25 14:23:37 2011 +0100 @@ -1,22 +1,29 @@ +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 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| puts "Updating file #{file}" file_strings = YAML.load(File.read(file)) file_strings = file_strings[file_strings.keys.first] - + missing_keys = en_strings.keys - file_strings.keys next if missing_keys.empty? - + puts "==> Missing #{missing_keys.size} keys (#{missing_keys.join(', ')})" lang = File.open(file, 'a') - + missing_keys.each do |key| {key => en_strings[key]}.to_yaml.each_line do |line| next if line =~ /^---/ || line.empty? @@ -24,11 +31,31 @@ lang << " #{line}" end end - + 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). @@ -44,7 +71,7 @@ deletes = ENV['key'] ? Regexp.union(ENV['key'].split(',')) : nil # Ignore multiline keys (begin with | or >) and keys with children (nothing meaningful after :) delete_regex = /\A #{deletes}: +[^\|>\s#].*\z/ - + files.each do |path| # Skip certain locales (puts "Skipping #{path}"; next) if File.basename(path, ".yml") =~ skips @@ -53,7 +80,7 @@ File.open(path, 'w') {|file| orig_content.each_line {|line| file.puts line unless line.chomp =~ delete_regex}} end end - + desc <<-END_DESC Adds a new top-level translation string to all locale file (only works for childless keys, probably doesn\'t work on windows, doesn't check for duplicates). diff -r f7c525dc7585 -r 0b6c82dead28 lib/tasks/migrate_from_mantis.rake --- a/lib/tasks/migrate_from_mantis.rake Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/tasks/migrate_from_mantis.rake Mon Jul 25 14:23:37 2011 +0100 @@ -88,13 +88,11 @@ def firstname @firstname = realname.blank? ? username : realname.split.first[0..29] - @firstname.gsub!(/[^\w\s\'\-]/i, '') @firstname end def lastname @lastname = realname.blank? ? '-' : realname.split[1..-1].join(' ')[0..29] - @lastname.gsub!(/[^\w\s\'\-]/i, '') @lastname = '-' if @lastname.blank? @lastname end @@ -224,7 +222,7 @@ end def name - read_attribute(:name)[0..29].gsub(/[^\w\s\'\-]/, '-') + read_attribute(:name)[0..29] end end @@ -289,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 diff -r f7c525dc7585 -r 0b6c82dead28 lib/tasks/migrate_from_trac.rake --- a/lib/tasks/migrate_from_trac.rake Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/tasks/migrate_from_trac.rake Mon Jul 25 14:23:37 2011 +0100 @@ -167,7 +167,7 @@ has_many :attachments, :class_name => "TracAttachment", :finder_sql => "SELECT DISTINCT attachment.* FROM #{TracMigrate::TracAttachment.table_name}" + " WHERE #{TracMigrate::TracAttachment.table_name}.type = 'ticket'" + - ' AND #{TracMigrate::TracAttachment.table_name}.id = \'#{id}\'' + ' AND #{TracMigrate::TracAttachment.table_name}.id = \'#{TracMigrate::TracAttachment.connection.quote_string(id.to_s)}\'' has_many :customs, :class_name => "TracTicketCustom", :foreign_key => :ticket def ticket_type @@ -207,7 +207,7 @@ has_many :attachments, :class_name => "TracAttachment", :finder_sql => "SELECT DISTINCT attachment.* FROM #{TracMigrate::TracAttachment.table_name}" + " WHERE #{TracMigrate::TracAttachment.table_name}.type = 'wiki'" + - ' AND #{TracMigrate::TracAttachment.table_name}.id = \'#{id}\'' + ' AND #{TracMigrate::TracAttachment.table_name}.id = \'#{TracMigrate::TracAttachment.connection.quote_string(id.to_s)}\'' def self.columns # Hides readonly Trac field to prevent clash with AR readonly? method (Rails 2.0) @@ -246,8 +246,8 @@ ln = ($2 || '-').strip u = User.new :mail => mail.gsub(/[^-@a-z0-9\.]/i, '-'), - :firstname => fn[0, limit_for(User, 'firstname')].gsub(/[^\w\s\'\-]/i, '-'), - :lastname => ln[0, limit_for(User, 'lastname')].gsub(/[^\w\s\'\-]/i, '-') + :firstname => fn[0, limit_for(User, 'firstname')], + :lastname => ln[0, limit_for(User, 'lastname')] u.login = username[0,limit_for(User, 'login')].gsub(/[^a-z0-9_\-@\.]/i, '-') u.password = 'trac' diff -r f7c525dc7585 -r 0b6c82dead28 lib/tasks/testing.rake --- a/lib/tasks/testing.rake Mon Mar 28 18:17:06 2011 +0100 +++ b/lib/tasks/testing.rake Mon Jul 25 14:23:37 2011 +0100 @@ -1,41 +1,91 @@ -### From http://svn.geekdaily.org/public/rails/plugins/generally_useful/tasks/coverage_via_rcov.rake - -namespace :test do - desc 'Measures test coverage' - task :coverage do - rm_f "coverage" - rm_f "coverage.data" - rcov = "rcov --rails --aggregate coverage.data --text-summary -Ilib --html" - files = Dir.glob("test/**/*_test.rb").join(" ") - system("#{rcov} #{files}") - system("open coverage/index.html") if PLATFORM['darwin'] - end - - namespace :scm do - namespace :setup do - desc "Creates directory for test repositories" - task :create_dir do - FileUtils.mkdir_p Rails.root + '/tmp/test' - end - - supported_scms = [:subversion, :cvs, :bazaar, :mercurial, :git, :darcs, :filesystem] - - desc "Creates a test subversion repository" - task :subversion => :create_dir do - repo_path = "tmp/test/subversion_repository" - system "svnadmin create #{repo_path}" - system "gunzip < test/fixtures/repositories/subversion_repository.dump.gz | svnadmin load #{repo_path}" - end - - (supported_scms - [:subversion]).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" - end - end - - desc "Creates all test repositories" - task :all => supported_scms - end - end -end +### From http://svn.geekdaily.org/public/rails/plugins/generally_useful/tasks/coverage_via_rcov.rake + +namespace :test do + desc 'Measures test coverage' + task :coverage do + rm_f "coverage" + rm_f "coverage.data" + rcov = "rcov --rails --aggregate coverage.data --text-summary -Ilib --html" + files = Dir.glob("test/**/*_test.rb").join(" ") + system("#{rcov} #{files}") + system("open coverage/index.html") if PLATFORM['darwin'] + end + + desc 'Run unit and functional scm tests' + task :scm do + errors = %w(test:scm:units test:scm:functionals).collect do |task| + begin + Rake::Task[task].invoke + nil + rescue => e + task + end + end.compact + abort "Errors running #{errors.to_sentence(:locale => :en)}!" if errors.any? + end + + namespace :scm do + namespace :setup do + desc "Creates directory for test repositories" + task :create_dir do + FileUtils.mkdir_p Rails.root + '/tmp/test' + end + + supported_scms = [:subversion, :cvs, :bazaar, :mercurial, :git, :darcs, :filesystem] + + desc "Creates a test subversion repository" + task :subversion => :create_dir do + repo_path = "tmp/test/subversion_repository" + system "svnadmin create #{repo_path}" + system "gunzip < test/fixtures/repositories/subversion_repository.dump.gz | svnadmin load #{repo_path}" + end + + desc "Creates a test mercurial repository" + task :mercurial => :create_dir do + repo_path = "tmp/test/mercurial_repository" + bundle_path = "test/fixtures/repositories/mercurial_repository.hg" + system "hg init #{repo_path}" + system "hg -R #{repo_path} pull #{bundle_path}" + end + + (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 "tar -xvz -C tmp/test -f test/fixtures/repositories/#{scm}_repository.tar.gz" + end + end + + desc "Creates all test repositories" + task :all => supported_scms + end + + desc "Updates installed test repositories" + task :update do + require 'fileutils' + Dir.glob("tmp/test/*_repository").each do |dir| + next unless File.basename(dir) =~ %r{^(.+)_repository$} && File.directory?(dir) + scm = $1 + next unless fixture = Dir.glob("test/fixtures/repositories/#{scm}_repository.*").first + next if File.stat(dir).ctime > File.stat(fixture).mtime + + FileUtils.rm_rf dir + Rake::Task["test:scm:setup:#{scm}"].execute + end + end + + Rake::TestTask.new(:units => "db:test:prepare") do |t| + t.libs << "test" + t.verbose = true + t.test_files = FileList['test/unit/repository*_test.rb'] + FileList['test/unit/lib/redmine/scm/**/*_test.rb'] + end + Rake::Task['test:scm:units'].comment = "Run the scm unit tests" + + Rake::TestTask.new(:functionals => "db:test:prepare") do |t| + t.libs << "test" + t.verbose = true + t.test_files = FileList['test/functional/repositories*_test.rb'] + end + Rake::Task['test:scm:functionals'].comment = "Run the scm functional tests" + end +end diff -r f7c525dc7585 -r 0b6c82dead28 log/.svn/all-wcprops --- a/log/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 28 -/svn/!svn/ver/1283/trunk/log -END -delete.me -K 25 -svn:wc:ra_dav:version-url -V 36 -/svn/!svn/ver/67/trunk/log/delete.me -END diff -r f7c525dc7585 -r 0b6c82dead28 log/.svn/entries --- a/log/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/log/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/log +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/log http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.067787Z +2011-07-14T09:24:10.000000Z ae0415159f2c4dba3fc1a559d4c0f9f5 2006-10-15T09:00:05.847811Z 31 diff -r f7c525dc7585 -r 0b6c82dead28 log/delete.me --- a/log/delete.me Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -default directory for uploaded files \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 public/.htaccess --- a/public/.htaccess Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -# General Apache options - - AddHandler fastcgi-script .fcgi - - - AddHandler fcgid-script .fcgi - - - AddHandler cgi-script .cgi - -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 - - RewriteRule ^(.*)$ dispatch.fcgi [QSA,L] - - - RewriteRule ^(.*)$ dispatch.fcgi [QSA,L] - - - RewriteRule ^(.*)$ dispatch.cgi [QSA,L] - - -# 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 "

    Application error

    Rails application failed to start properly" \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 public/.svn/all-wcprops --- a/public/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/public/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,47 +1,17 @@ K 25 svn:wc:ra_dav:version-url -V 31 -/svn/!svn/ver/4377/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 +V 45 +/svn/!svn/ver/6157/branches/1.2-stable/public END 500.html K 25 svn:wc:ra_dav:version-url -V 39 -/svn/!svn/ver/419/trunk/public/500.html +V 54 +/svn/!svn/ver/5878/branches/1.2-stable/public/500.html END 404.html K 25 svn:wc:ra_dav:version-url -V 39 -/svn/!svn/ver/419/trunk/public/404.html +V 54 +/svn/!svn/ver/5878/branches/1.2-stable/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 -.htaccess -K 25 -svn:wc:ra_dav:version-url -V 40 -/svn/!svn/ver/934/trunk/public/.htaccess -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 diff -r f7c525dc7585 -r 0b6c82dead28 public/.svn/entries --- a/public/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/public/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/public +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/public http://redmine.rubyforge.org/svn -2010-11-06T18:52:07.556711Z -4377 +2011-07-02T17:25:51.517205Z +6157 jplang has-props @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.075747Z +2011-07-14T09:24:10.000000Z aeefa1552a4af651eadd16f4e0bb1323 2008-11-11T13:54:10.112610Z 2017 @@ -72,11 +72,11 @@ -2010-09-23T14:37:45.071747Z -b78e2e9e0cd94c786bb9404516e062c4 -2007-04-04T18:20:45.423396Z -419 -jplang +2011-07-14T09:24:22.000000Z +18ae067e7e513237ff7f6162b48a42c4 +2011-04-27T00:21:35.080410Z +5552 +tmaruyama has-props @@ -98,7 +98,7 @@ -576 +674 help dir @@ -112,11 +112,11 @@ -2010-09-23T14:37:45.071747Z -5acfd3818d5f470c26a1af577d06195e -2007-04-04T18:20:45.423396Z -419 -jplang +2011-07-14T09:24:22.000000Z +f0fc42f7395f7301cdddfb37c50b9173 +2011-04-27T00:21:14.313029Z +5551 +tmaruyama has-props @@ -138,7 +138,7 @@ -484 +485 dispatch.cgi.example file @@ -146,7 +146,7 @@ -2010-09-23T14:37:45.071747Z +2011-07-14T09:24:10.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-07-14T09:24:10.000000Z 5a5128856eb14ac7b3f94099cb504775 2008-11-11T13:54:10.112610Z 2017 @@ -251,7 +217,7 @@ -2010-07-23T14:49:47.756104Z +2011-07-14T09:24:10.000000Z 6d85758acb4f4baa4d242ba451c91026 2010-07-16T03:45:50.104236Z 3845 @@ -279,3 +245,37 @@ 7886 +htaccess.fcgi.example +file + + + + +2011-07-14T09:24:10.000000Z +67c99c6ef23adb15d9efed92be959b6e +2011-01-30T06:31:28.038726Z +4775 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +1632 + diff -r f7c525dc7585 -r 0b6c82dead28 public/.svn/prop-base/.htaccess.svn-base --- a/public/.svn/prop-base/.htaccess.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 9 -eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 public/.svn/prop-base/htaccess.fcgi.example.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/public/.svn/prop-base/htaccess.fcgi.example.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,5 @@ +K 9 +eol-style +V 6 +native +END diff -r f7c525dc7585 -r 0b6c82dead28 public/.svn/text-base/.htaccess.svn-base --- a/public/.svn/text-base/.htaccess.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -# General Apache options - - AddHandler fastcgi-script .fcgi - - - AddHandler fcgid-script .fcgi - - - AddHandler cgi-script .cgi - -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 - - RewriteRule ^(.*)$ dispatch.fcgi [QSA,L] - - - RewriteRule ^(.*)$ dispatch.fcgi [QSA,L] - - - RewriteRule ^(.*)$ dispatch.cgi [QSA,L] - - -# 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 "

    Application error

    Rails application failed to start properly" \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 public/.svn/text-base/404.html.svn-base --- a/public/.svn/text-base/404.html.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/public/.svn/text-base/404.html.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,7 +1,7 @@ -redMine 404 error +Redmine 404 error + 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>)/) { $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> + + + + +<%CONTENT%> + + + PAGE + + end + + end + +end +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/css.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/css.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/numerization.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/numerization.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 + "#{line}" # 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 + "#{line}" # 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 = "#{indent}#{line_number_text} " + 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/) { "\n" } + + line_numbers_table_tpl = TABLE.apply('LINE_NUMBERS', line_numbers) + gsub!("
    \n", '
    ') + gsub!("\n", "\n") + 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 = '' * opened_tags.size + + "
  • #{open}#{line}#{close}
  • \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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/output.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/output.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 'Code' + # 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 + + 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>)/) { $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> + + + + +<%CONTENT%> + + + PAGE + + end + + end + +end +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/encoders/json.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/json.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/encoders/lines_of_code.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/lines_of_code.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/encoders/null.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/null.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/encoders/page.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/page.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/encoders/span.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/span.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/encoders/statistic.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/statistic.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/encoders/term.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/term.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/encoders/text.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/text.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/encoders/token_class_filter.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/token_class_filter.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/encoders/xml.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/xml.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/encoders/yaml.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/yaml.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/for_redcloth.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/for_redcloth.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 = { + '&' => '&', + '"' => '"', + '>' => '>', + '<' => '<', + } + 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 + "#{opts[:text]}
    " + end + end + def bc_open(opts) # :nodoc: + opts[:block] = true + @in_bc = opts + opts[:lang] ? '' : "" + end + def bc_close(opts) # :nodoc: + opts = @in_bc + @in_bc = nil + opts[:lang] ? '' : "\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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/helpers/.svn/entries --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/helpers/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,164 @@ +10 + +dir +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/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-07-14T09:24:10.000000Z +a8ef4aea22392cc4012ee679fc1d15ba +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +7926 + +file_type.rb +file + + + + +2011-07-14T09:24:10.000000Z +107e3d46dc60830e87b1a4ce4d467ce8 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +6494 + +gzip_simple.rb +file + + + + +2011-07-14T09:24:10.000000Z +ffacc98651f60a6fe698427bbc3c3c86 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +2701 + +word_list.rb +file + + + + +2011-07-14T09:24:10.000000Z +86d05af27cbe342789f28ed543956aa5 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +3229 + diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/helpers/.svn/text-base/file_type.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,255 @@ +#!/usr/bin/env ruby +module CodeRay + +# = FileType +# +# A simple filetype recognizer. +# +# Copyright (c) 2006 by murphy (Kornelius Kalnbach) +# +# 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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/helpers/.svn/text-base/gzip_simple.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/helpers/.svn/text-base/plugin.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 '/' +# +# 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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/helpers/.svn/text-base/word_list.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,138 @@ +module CodeRay + +# = WordList +# +# A Hash subclass designed for mapping word lists to token types. +# +# Copyright (c) 2006 by murphy (Kornelius Kalnbach) +# +# 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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/helpers/file_type.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/helpers/file_type.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,255 @@ +#!/usr/bin/env ruby +module CodeRay + +# = FileType +# +# A simple filetype recognizer. +# +# Copyright (c) 2006 by murphy (Kornelius Kalnbach) +# +# 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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/helpers/gzip_simple.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/helpers/gzip_simple.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/helpers/plugin.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/helpers/plugin.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 '/' +# +# 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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/helpers/word_list.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/helpers/word_list.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,138 @@ +module CodeRay + +# = WordList +# +# A Hash subclass designed for mapping word lists to token types. +# +# Copyright (c) 2006 by murphy (Kornelius Kalnbach) +# +# 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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanner.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanner.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/entries --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,816 @@ +10 + +dir +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/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-07-14T09:24:10.000000Z +a10b4406847a27622a61c041420dab5a +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +6723 + +java +dir + +ruby +dir + +java.rb +file + + + + +2011-07-14T09:24:10.000000Z +35c0803e396fa14a42c6b8645ca7d557 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +5041 + +python.rb +file + + + + +2011-07-14T09:24:10.000000Z +939e009d9b197cb6437646be82c02982 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +9190 + +ruby.rb +file + + + + +2011-07-14T09:24:10.000000Z +cb032992b032fd9cbc93500496d0b038 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +15309 + +cpp.rb +file + + + + +2011-07-14T09:24:10.000000Z +afc4a4b0842e5efdafe98f6c5a10810e +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +6286 + +c.rb +file + + + + +2011-07-14T09:24:10.000000Z +299db2bdce8368d0bc6d90f5839c87ee +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +5408 + +groovy.rb +file + + + + +2011-07-14T09:24:10.000000Z +7fc1acca7ff04fa00160349b3a1b543e +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +8521 + +debug.rb +file + + + + +2011-07-14T09:24:10.000000Z +94bdd6c948cb9c3d21ef94a5cec19e05 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +1281 + +rhtml.rb +file + + + + +2011-07-14T09:24:10.000000Z +ff2e0cad09ef6ba12b2da44e90a25367 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +1629 + +php.rb +file + + + + +2011-07-14T09:24:10.000000Z +2de3bd0694a6b52343618c14654c5366 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +23747 + +css.rb +file + + + + +2011-07-14T09:24:10.000000Z +d3c931a5468c723bd8458b4a73d44943 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +5493 + +sql.rb +file + + + + +2011-07-14T09:24:10.000000Z +917467cab834f202a455ec0e8be68508 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +4726 + +xml.rb +file + + + + +2011-07-14T09:24:10.000000Z +798309ac45aa9d4ccc159242f3a6f150 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +211 + +yaml.rb +file + + + + +2011-07-14T09:24:10.000000Z +f62eab25adbef42e92cad3f5463f91ac +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +4261 + +html.rb +file + + + + +2011-07-14T09:24:10.000000Z +1f93d8c4375c7e7b740c42210e0c6edb +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +4248 + +scheme.rb +file + + + + +2011-07-14T09:24:10.000000Z +f6c296bbb33704ec2a03725b01e06719 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +4939 + +java_script.rb +file + + + + +2011-07-14T09:24:10.000000Z +31360b9ad9e408df15eb2abf84d17c8a +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +6733 + +delphi.rb +file + + + + +2011-07-14T09:24:10.000000Z +182116a4525447d4faed874dfb790277 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +4504 + +nitro_xhtml.rb +file + + + + +2011-07-14T09:24:10.000000Z +f7d82e60f68fe6c9d46b63e63f6ec9f6 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +2858 + +diff.rb +file + + + + +2011-07-14T09:24:10.000000Z +c5932e739b44b0e92f093dfb70cf9de4 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +3204 + +plaintext.rb +file + + + + +2011-07-14T09:24:10.000000Z +ae16e40b3db78a5d8c793165085f5db9 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +316 + +json.rb +file + + + + +2011-07-14T09:24:10.000000Z +c34c4d83c7c8cb15bc7209bd36da654e +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +2793 + +_map.rb +file + + + + +2011-07-14T09:24:10.000000Z +b3eadcc78242cf25ba0ab3205d6a2b61 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +413 + diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/_map.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/c.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/cpp.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/css.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/debug.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/delphi.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/diff.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/groovy.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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(/ \.\.] | \+\+ | + && | \|\| | \*\*=? | ==?~ | <=?>? | [-+*%^~&|>=!]=? | <<>>?=? /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/html.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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(//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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/java.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/java_script-0.9.6.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/java_script.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/json.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/nitro_xhtml.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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> )? + | + <% + (?> + [^%]* + (?> %(?!>) [^%]* )* + ) + (?: %> )? + /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 = '' ? '?>' : '' + 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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/php.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 = / + ]*?language\s*=\s*"php"[^>]*?> | + ]*?language\s*=\s*'php'[^>]*?> | + <\?php\d? | + <\?(?!xml) + /xi + + PHP_END = %r! + | + \?> + !xi + + HTML_INDICATOR = / ]/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 #{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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/plaintext.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/python.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/rhtml.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/ruby.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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(/< 1 + state = this_block.first + tokens << [:close, state.type] + end + + tokens + end + + end + +end +end + +# vim:fdm=marker diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/scheme.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/sql.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/xml.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/yaml.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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(/< :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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/c.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/c.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/cpp.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/cpp.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/css.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/css.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/debug.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/debug.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/delphi.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/delphi.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/diff.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/diff.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/groovy.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/groovy.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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(/ \.\.] | \+\+ | + && | \|\| | \*\*=? | ==?~ | <=?>? | [-+*%^~&|>=!]=? | <<>>?=? /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/html.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/html.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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(//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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/java.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/java/.svn/entries --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,62 @@ +10 + +dir +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/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-07-14T09:24:10.000000Z +2522414597cbbef27fad175c20c8a556 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +41768 + diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/java/.svn/text-base/builtin_types.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/java/builtin_types.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java/builtin_types.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/java_script-0.9.6.rb --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/java_script.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java_script.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/json.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/json.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/nitro_xhtml.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/nitro_xhtml.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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> )? + | + <% + (?> + [^%]* + (?> %(?!>) [^%]* )* + ) + (?: %> )? + /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 = '' ? '?>' : '' + 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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/php.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/php.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 = / + ]*?language\s*=\s*"php"[^>]*?> | + ]*?language\s*=\s*'php'[^>]*?> | + <\?php\d? | + <\?(?!xml) + /xi + + PHP_END = %r! + | + \?> + !xi + + HTML_INDICATOR = / ]/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 #{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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/plaintext.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/plaintext.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/python.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/python.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/rhtml.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/rhtml.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/ruby.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/ruby.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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(/< 1 + state = this_block.first + tokens << [:close, state.type] + end + + tokens + end + + end + +end +end + +# vim:fdm=marker diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/ruby/.svn/entries --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/ruby/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,62 @@ +10 + +dir +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/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-07-14T09:24:10.000000Z +e9ee13edf8cacf235b977434e09649dc +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +7416 + diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/ruby/.svn/text-base/patterns.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/ruby/patterns.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/ruby/patterns.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/scheme.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/scheme.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/sql.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/sql.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/xml.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/xml.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/scanners/yaml.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/yaml.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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(/< '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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/lib/coderay/tokens.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/lib/coderay/tokens.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/.svn/entries --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/test/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,31 @@ +10 + +dir +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/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 + diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/functional/.svn/entries --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/test/functional/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,436 @@ +10 + +dir +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/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-07-14T09:24:10.000000Z +060e0137b69ee9015c13d2a7b52f7ba5 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +6844 + +vhdl.rb +file + + + + +2011-07-14T09:24:10.000000Z +68592e4216555f25218f67641cd04879 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +3508 + +vhdl.rbc +file + + + + +2011-07-14T09:24:10.000000Z +756a012d3c51e759ecf3aba421b79d26 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +7459 + +basic.rb +file + + + + +2011-07-14T09:24:10.000000Z +4c2c76c7fec083da0817c917495fe273 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +3081 + +basic.rbc +file + + + + +2011-07-14T09:24:10.000000Z +2dc7e681d05b65ad084db2cb31db57a4 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +7680 + +load_plugin_scanner.rb +file + + + + +2011-07-14T09:24:10.000000Z +9bb16867dc01035932f0ce2491457d4a +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +231 + +word_list.rb +file + + + + +2011-07-14T09:24:10.000000Z +a1077af2bb080972689e1c7c1b00f5cd +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +2167 + +load_plugin_scanner.rbc +file + + + + +2011-07-14T09:24:10.000000Z +a7da576f27c98ef97a1845982ed43fd8 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +1145 + +suite.rb +file + + + + +2011-07-14T09:24:10.000000Z +c5ad97b377df804994bb80e0d903a954 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +265 + +word_list.rbc +file + + + + +2011-07-14T09:24:10.000000Z +bb7279f9b4099e57f551ae9992e03128 +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +5584 + +for_redcloth.rb +file + + + + +2011-07-14T09:24:10.000000Z +dc96a8219c522571f990cfe3702a428f +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +3001 + +suite.rbc +file + + + + +2011-07-14T09:24:10.000000Z +534ae63cbcff177038141b589f7fd0fa +2011-01-22T13:18:01.557255Z +4739 +jplang + + + + + + + + + + + + + + + + + + + + + +1035 + diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/functional/.svn/text-base/basic.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 "' + + 'Hello, World!"' + 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 + + + + + + <%= controller.controller_name.titleize %>: <%= controller.action_name %> + <%= stylesheet_link_tag 'scaffold' %> + + + +

    <%= flash[:notice] %>

    + +
    + <%= yield %> +
    + + + + 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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/functional/.svn/text-base/basic.rbc.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 " +s +73 +Hello, World!" +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 + + + + + + <%= controller.controller_name.titleize %>: <%= controller.action_name %> + <%= stylesheet_link_tag 'scaffold' %> + + + +

    <%= flash[:notice] %>

    + +
    + <%= yield %> +
    + + + + +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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/functional/.svn/text-base/for_redcloth.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 "

    puts "Hello, World!"

    ", + RedCloth.new('@[ruby]puts "Hello, World!"@').to_html + assert_equal <<-BLOCKCODE.chomp, +
    +
    puts "Hello, World!"
    +
    + BLOCKCODE + RedCloth.new('bc[ruby]. puts "Hello, World!"').to_html + end + + def test_for_redcloth_no_lang + require 'coderay/for_redcloth' + assert_equal "

    puts \"Hello, World!\"

    ", + RedCloth.new('@puts "Hello, World!"@').to_html + assert_equal <<-BLOCKCODE.chomp, +
    puts \"Hello, World!\"
    + BLOCKCODE + RedCloth.new('bc. puts "Hello, World!"').to_html + end + + def test_for_redcloth_style + require 'coderay/for_redcloth' + assert_equal <<-BLOCKCODE.chomp, +
    puts \"Hello, World!\"
    + BLOCKCODE + RedCloth.new('bc{color: red}. puts "Hello, World!"').to_html + end + + def test_for_redcloth_escapes + require 'coderay/for_redcloth' + assert_equal '

    >

    ', + RedCloth.new('@[ruby]>@').to_html + assert_equal <<-BLOCKCODE.chomp, +
    +
    &
    +
    + BLOCKCODE + RedCloth.new('bc[ruby]. &').to_html + end + + def test_for_redcloth_escapes2 + require 'coderay/for_redcloth' + assert_equal "

    #include <test.h>

    ", + RedCloth.new('@[c]#include @').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 '

    [project]_dff.skjd

    ', + RedCloth.new('@[project]_dff.skjd@').to_html + # false positive, but expected behavior / known issue + assert_equal "

    _dff.skjd

    ", + RedCloth.new('@[ruby]_dff.skjd@').to_html + assert_equal <<-BLOCKCODE.chomp, +
    [project]_dff.skjd
    + BLOCKCODE + RedCloth.new('bc. [project]_dff.skjd').to_html + end + +end if defined? RedCloth \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/functional/.svn/text-base/for_redcloth.rbc.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 +

    puts "Hello, World!"

    +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 +
    +
    puts "Hello, World!"
    +
    + +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 +

    puts "Hello, World!"

    +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 +
    puts "Hello, World!"
    + +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 +
    puts "Hello, World!"
    + +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 +

    >

    +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 +
    +
    &
    +
    + +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 +

    #include <test.h>

    +x +8 +RedCloth +n +x +3 +new +x +8 +allocate +s +22 +@[c]#include @ +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 +

    [project]_dff.skjd

    +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 +

    _dff.skjd

    +n +s +17 +@[ruby]_dff.skjd@ +s +43 +
    [project]_dff.skjd
    + +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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/functional/.svn/text-base/load_plugin_scanner.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/functional/.svn/text-base/load_plugin_scanner.rbc.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/functional/.svn/text-base/suite.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/functional/.svn/text-base/suite.rbc.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/functional/.svn/text-base/vhdl.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/functional/.svn/text-base/vhdl.rbc.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/functional/.svn/text-base/word_list.rb.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/functional/.svn/text-base/word_list.rbc.svn-base --- /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 Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/functional/basic.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/test/functional/basic.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 "' + + 'Hello, World!"' + 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 + + + + + + <%= controller.controller_name.titleize %>: <%= controller.action_name %> + <%= stylesheet_link_tag 'scaffold' %> + + + +

    <%= flash[:notice] %>

    + +
    + <%= yield %> +
    + + + + 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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/functional/basic.rbc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/test/functional/basic.rbc Mon Jul 25 14:23:37 2011 +0100 @@ -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 " +s +73 +Hello, World!" +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 + + + + + + <%= controller.controller_name.titleize %>: <%= controller.action_name %> + <%= stylesheet_link_tag 'scaffold' %> + + + +

    <%= flash[:notice] %>

    + +
    + <%= yield %> +
    + + + + +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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/functional/for_redcloth.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/test/functional/for_redcloth.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 "

    puts "Hello, World!"

    ", + RedCloth.new('@[ruby]puts "Hello, World!"@').to_html + assert_equal <<-BLOCKCODE.chomp, +
    +
    puts "Hello, World!"
    +
    + BLOCKCODE + RedCloth.new('bc[ruby]. puts "Hello, World!"').to_html + end + + def test_for_redcloth_no_lang + require 'coderay/for_redcloth' + assert_equal "

    puts \"Hello, World!\"

    ", + RedCloth.new('@puts "Hello, World!"@').to_html + assert_equal <<-BLOCKCODE.chomp, +
    puts \"Hello, World!\"
    + BLOCKCODE + RedCloth.new('bc. puts "Hello, World!"').to_html + end + + def test_for_redcloth_style + require 'coderay/for_redcloth' + assert_equal <<-BLOCKCODE.chomp, +
    puts \"Hello, World!\"
    + BLOCKCODE + RedCloth.new('bc{color: red}. puts "Hello, World!"').to_html + end + + def test_for_redcloth_escapes + require 'coderay/for_redcloth' + assert_equal '

    >

    ', + RedCloth.new('@[ruby]>@').to_html + assert_equal <<-BLOCKCODE.chomp, +
    +
    &
    +
    + BLOCKCODE + RedCloth.new('bc[ruby]. &').to_html + end + + def test_for_redcloth_escapes2 + require 'coderay/for_redcloth' + assert_equal "

    #include <test.h>

    ", + RedCloth.new('@[c]#include @').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 '

    [project]_dff.skjd

    ', + RedCloth.new('@[project]_dff.skjd@').to_html + # false positive, but expected behavior / known issue + assert_equal "

    _dff.skjd

    ", + RedCloth.new('@[ruby]_dff.skjd@').to_html + assert_equal <<-BLOCKCODE.chomp, +
    [project]_dff.skjd
    + BLOCKCODE + RedCloth.new('bc. [project]_dff.skjd').to_html + end + +end if defined? RedCloth \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/functional/for_redcloth.rbc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/test/functional/for_redcloth.rbc Mon Jul 25 14:23:37 2011 +0100 @@ -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 +

    puts "Hello, World!"

    +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 +
    +
    puts "Hello, World!"
    +
    + +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 +

    puts "Hello, World!"

    +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 +
    puts "Hello, World!"
    + +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 +
    puts "Hello, World!"
    + +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 +

    >

    +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 +
    +
    &
    +
    + +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 +

    #include <test.h>

    +x +8 +RedCloth +n +x +3 +new +x +8 +allocate +s +22 +@[c]#include @ +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 +

    [project]_dff.skjd

    +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 +

    _dff.skjd

    +n +s +17 +@[ruby]_dff.skjd@ +s +43 +
    [project]_dff.skjd
    + +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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/functional/load_plugin_scanner.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/test/functional/load_plugin_scanner.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/functional/load_plugin_scanner.rbc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/test/functional/load_plugin_scanner.rbc Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/functional/suite.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/test/functional/suite.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/functional/suite.rbc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/test/functional/suite.rbc Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/functional/vhdl.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/test/functional/vhdl.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/functional/vhdl.rbc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/test/functional/vhdl.rbc Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/functional/word_list.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/test/functional/word_list.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/coderay-0.9.7/test/functional/word_list.rbc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/gems/coderay-0.9.7/test/functional/word_list.rbc Mon Jul 25 14:23:37 2011 +0100 @@ -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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/rubytree-0.5.2/.svn/all-wcprops --- a/vendor/gems/rubytree-0.5.2/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/3090/trunk/vendor/gems/rubytree-0.5.2 -END -History.txt -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/3090/trunk/vendor/gems/rubytree-0.5.2/History.txt -END -Rakefile -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/3090/trunk/vendor/gems/rubytree-0.5.2/Rakefile -END -setup.rb -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/3090/trunk/vendor/gems/rubytree-0.5.2/setup.rb -END -Manifest.txt -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/3090/trunk/vendor/gems/rubytree-0.5.2/Manifest.txt -END -TODO -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/3090/trunk/vendor/gems/rubytree-0.5.2/TODO -END -ChangeLog -K 25 -svn:wc:ra_dav:version-url -V 61 -/svn/!svn/ver/3090/trunk/vendor/gems/rubytree-0.5.2/ChangeLog -END -COPYING -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/3090/trunk/vendor/gems/rubytree-0.5.2/COPYING -END -README -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/3090/trunk/vendor/gems/rubytree-0.5.2/README -END -.specification -K 25 -svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/3090/trunk/vendor/gems/rubytree-0.5.2/.specification -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/rubytree-0.5.2/.svn/entries --- a/vendor/gems/rubytree-0.5.2/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/gems/rubytree-0.5.2/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/gems/rubytree-0.5.2 +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/gems/rubytree-0.5.2 http://redmine.rubyforge.org/svn @@ -35,7 +35,7 @@ -2010-09-23T14:37:45.523822Z +2011-07-14T09:24:10.000000Z 48b46ff6764d5b76e1ad138669923aff 2009-11-25T05:36:44.792571Z 3090 @@ -69,7 +69,7 @@ -2010-09-23T14:37:45.523822Z +2011-07-14T09:24:10.000000Z 954df52967073c3833d9c565bb4b1ea8 2009-11-25T05:36:44.792571Z 3090 @@ -103,7 +103,7 @@ -2010-09-23T14:37:45.527765Z +2011-07-14T09:24:10.000000Z f3e96d4b9eeb3d0c4d841c7c7ea6259c 2009-11-25T05:36:44.792571Z 3090 @@ -137,7 +137,7 @@ -2010-09-23T14:37:45.523822Z +2011-07-14T09:24:10.000000Z 7a9a6ee34490c5d9c4148c7cf8f85034 2009-11-25T05:36:44.792571Z 3090 @@ -171,7 +171,7 @@ -2010-09-23T14:37:45.523822Z +2011-07-14T09:24:10.000000Z 82301a43d2504d992ba1cfd7839b2d7e 2009-11-25T05:36:44.792571Z 3090 @@ -208,7 +208,7 @@ -2010-09-23T14:37:45.523822Z +2011-07-14T09:24:10.000000Z b15b8164d281daa7c7028cdda9635950 2009-11-25T05:36:44.792571Z 3090 @@ -242,7 +242,7 @@ -2010-09-23T14:37:45.523822Z +2011-07-14T09:24:10.000000Z 25d0fdd6b9633f784544a5c000dc1351 2009-11-25T05:36:44.792571Z 3090 @@ -276,7 +276,7 @@ -2010-09-23T14:37:45.523822Z +2011-07-14T09:24:10.000000Z 13d490389c788748b3931b9e09b2b4d4 2009-11-25T05:36:44.792571Z 3090 @@ -310,7 +310,7 @@ -2010-09-23T14:37:45.519811Z +2011-07-14T09:24:10.000000Z 5906fb8bdb4197fe19171f795952ed9d 2009-11-25T05:36:44.792571Z 3090 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/rubytree-0.5.2/lib/.svn/all-wcprops --- a/vendor/gems/rubytree-0.5.2/lib/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/3090/trunk/vendor/gems/rubytree-0.5.2/lib -END -tree.rb -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/3090/trunk/vendor/gems/rubytree-0.5.2/lib/tree.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/rubytree-0.5.2/lib/.svn/entries --- a/vendor/gems/rubytree-0.5.2/lib/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/gems/rubytree-0.5.2/lib/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/gems/rubytree-0.5.2/lib +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/gems/rubytree-0.5.2/lib http://redmine.rubyforge.org/svn @@ -35,7 +35,7 @@ -2010-09-23T14:37:45.527765Z +2011-07-14T09:24:10.000000Z 46e46766767dc3a96b3019d385a5af83 2009-11-25T05:36:44.792571Z 3090 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/rubytree-0.5.2/lib/tree/.svn/all-wcprops --- a/vendor/gems/rubytree-0.5.2/lib/tree/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/3090/trunk/vendor/gems/rubytree-0.5.2/lib/tree -END -binarytree.rb -K 25 -svn:wc:ra_dav:version-url -V 74 -/svn/!svn/ver/3090/trunk/vendor/gems/rubytree-0.5.2/lib/tree/binarytree.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/rubytree-0.5.2/lib/tree/.svn/entries --- a/vendor/gems/rubytree-0.5.2/lib/tree/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/gems/rubytree-0.5.2/lib/tree/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/gems/rubytree-0.5.2/lib/tree +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/gems/rubytree-0.5.2/lib/tree http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.527765Z +2011-07-14T09:24:10.000000Z 54320f0ffbb41fa9d99ab2d617636ea1 2009-11-25T05:36:44.792571Z 3090 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/rubytree-0.5.2/test/.svn/all-wcprops --- a/vendor/gems/rubytree-0.5.2/test/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/3090/trunk/vendor/gems/rubytree-0.5.2/test -END -test_tree.rb -K 25 -svn:wc:ra_dav:version-url -V 69 -/svn/!svn/ver/3090/trunk/vendor/gems/rubytree-0.5.2/test/test_tree.rb -END -test_binarytree.rb -K 25 -svn:wc:ra_dav:version-url -V 75 -/svn/!svn/ver/3090/trunk/vendor/gems/rubytree-0.5.2/test/test_binarytree.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/gems/rubytree-0.5.2/test/.svn/entries --- a/vendor/gems/rubytree-0.5.2/test/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/gems/rubytree-0.5.2/test/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/gems/rubytree-0.5.2/test +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/gems/rubytree-0.5.2/test http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.531765Z +2011-07-14T09:24:10.000000Z bd5257614b958bab00916feffc4fa9ae 2009-11-25T05:36:44.792571Z 3090 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.531765Z +2011-07-14T09:24:10.000000Z b9b4a1d43e859491e80fb1e2c7499d20 2009-11-25T05:36:44.792571Z 3090 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/.svn/all-wcprops --- a/vendor/plugins/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,5 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 39 -/svn/!svn/ver/4406/trunk/vendor/plugins +V 53 +/svn/!svn/ver/6156/branches/1.2-stable/vendor/plugins END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/.svn/entries --- a/vendor/plugins/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins http://redmine.rubyforge.org/svn -2010-11-14T16:24:21.989522Z -4406 -jplang +2011-07-02T15:44:02.109574Z +6156 +tmaruyama @@ -41,9 +41,6 @@ engines dir -coderay-0.9.2 -dir - classic_pagination dir diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_activity_provider/.svn/all-wcprops --- a/vendor/plugins/acts_as_activity_provider/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_activity_provider/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,11 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/2114/trunk/vendor/plugins/acts_as_activity_provider +V 79 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/acts_as_activity_provider END -init.rb -K 25 -svn:wc:ra_dav:version-url -V 73 -/svn/!svn/ver/1701/trunk/vendor/plugins/acts_as_activity_provider/init.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_activity_provider/.svn/entries --- a/vendor/plugins/acts_as_activity_provider/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_activity_provider/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_activity_provider +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_activity_provider http://redmine.rubyforge.org/svn -2008-12-08T18:20:26.452857Z -2114 +2011-04-05T12:52:20.839202Z +5325 jplang @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.531765Z +2011-07-14T09:24:10.000000Z 779d73c171dc111df084a0798cca73e2 2008-07-27T17:54:09.197937Z 1701 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_activity_provider/lib/.svn/all-wcprops --- a/vendor/plugins/acts_as_activity_provider/lib/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_activity_provider/lib/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,11 +1,11 @@ K 25 svn:wc:ra_dav:version-url -V 69 -/svn/!svn/ver/2114/trunk/vendor/plugins/acts_as_activity_provider/lib +V 83 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/acts_as_activity_provider/lib END acts_as_activity_provider.rb K 25 svn:wc:ra_dav:version-url -V 98 -/svn/!svn/ver/2114/trunk/vendor/plugins/acts_as_activity_provider/lib/acts_as_activity_provider.rb +V 112 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/acts_as_activity_provider/lib/acts_as_activity_provider.rb END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_activity_provider/lib/.svn/entries --- a/vendor/plugins/acts_as_activity_provider/lib/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_activity_provider/lib/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_activity_provider/lib +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_activity_provider/lib http://redmine.rubyforge.org/svn -2008-12-08T18:20:26.452857Z -2114 +2011-04-05T12:52:20.839202Z +5325 jplang @@ -32,10 +32,10 @@ -2010-09-23T14:37:45.535765Z -21fbeb28c4ce556d2534306b96be9497 -2008-12-08T18:20:26.452857Z -2114 +2011-07-14T09:24:22.000000Z +59f4bcfa68e4f7d5f4d881d01a9ba8be +2011-04-05T12:52:20.839202Z +5325 jplang has-props @@ -58,5 +58,5 @@ -3534 +3971 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_activity_provider/lib/.svn/text-base/acts_as_activity_provider.rb.svn-base --- a/vendor/plugins/acts_as_activity_provider/lib/.svn/text-base/acts_as_activity_provider.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_activity_provider/lib/.svn/text-base/acts_as_activity_provider.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -36,7 +36,6 @@ # We store these options in activity_provider_options hash event_type = options.delete(:type) || self.name.underscore.pluralize - options[:permission] = "view_#{self.name.underscore.pluralize}".to_sym unless options.has_key?(:permission) options[:timestamp] ||= "#{table_name}.created_on" options[:find_options] ||= {} options[:author_key] = "#{table_name}.#{options[:author_key]}" if options[:author_key].is_a?(Symbol) @@ -60,20 +59,31 @@ if from && to cond.add(["#{provider_options[:timestamp]} BETWEEN ? AND ?", from, to]) end + if options[:author] return [] if provider_options[:author_key].nil? cond.add(["#{provider_options[:author_key]} = ?", options[:author].id]) end - cond.add(Project.allowed_to_condition(user, provider_options[:permission], options)) if provider_options[:permission] - scope_options[:conditions] = cond.conditions + if options[:limit] # id and creation time should be in same order in most cases scope_options[:order] = "#{table_name}.id DESC" scope_options[:limit] = options[:limit] end + scope = self + if provider_options.has_key?(:permission) + cond.add(Project.allowed_to_condition(user, provider_options[:permission] || :view_project, options)) + elsif respond_to?(:visible) + scope = scope.visible(user, options) + else + ActiveSupport::Deprecation.warn "acts_as_activity_provider with implicit :permission option is deprecated. Add a visible scope to the #{self.name} model or use explicit :permission option." + cond.add(Project.allowed_to_condition(user, "view_#{self.name.underscore.pluralize}".to_sym, options)) + end + scope_options[:conditions] = cond.conditions + with_scope(:find => scope_options) do - find(:all, provider_options[:find_options].dup) + scope.find(:all, provider_options[:find_options].dup) end end end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_activity_provider/lib/acts_as_activity_provider.rb --- a/vendor/plugins/acts_as_activity_provider/lib/acts_as_activity_provider.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_activity_provider/lib/acts_as_activity_provider.rb Mon Jul 25 14:23:37 2011 +0100 @@ -36,7 +36,6 @@ # We store these options in activity_provider_options hash event_type = options.delete(:type) || self.name.underscore.pluralize - options[:permission] = "view_#{self.name.underscore.pluralize}".to_sym unless options.has_key?(:permission) options[:timestamp] ||= "#{table_name}.created_on" options[:find_options] ||= {} options[:author_key] = "#{table_name}.#{options[:author_key]}" if options[:author_key].is_a?(Symbol) @@ -60,20 +59,31 @@ if from && to cond.add(["#{provider_options[:timestamp]} BETWEEN ? AND ?", from, to]) end + if options[:author] return [] if provider_options[:author_key].nil? cond.add(["#{provider_options[:author_key]} = ?", options[:author].id]) end - cond.add(Project.allowed_to_condition(user, provider_options[:permission], options)) if provider_options[:permission] - scope_options[:conditions] = cond.conditions + if options[:limit] # id and creation time should be in same order in most cases scope_options[:order] = "#{table_name}.id DESC" scope_options[:limit] = options[:limit] end + scope = self + if provider_options.has_key?(:permission) + cond.add(Project.allowed_to_condition(user, provider_options[:permission] || :view_project, options)) + elsif respond_to?(:visible) + scope = scope.visible(user, options) + else + ActiveSupport::Deprecation.warn "acts_as_activity_provider with implicit :permission option is deprecated. Add a visible scope to the #{self.name} model or use explicit :permission option." + cond.add(Project.allowed_to_condition(user, "view_#{self.name.underscore.pluralize}".to_sym, options)) + end + scope_options[:conditions] = cond.conditions + with_scope(:find => scope_options) do - find(:all, provider_options[:find_options].dup) + scope.find(:all, provider_options[:find_options].dup) end end end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_attachable/.svn/all-wcprops --- a/vendor/plugins/acts_as_attachable/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_attachable/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,11 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/3528/trunk/vendor/plugins/acts_as_attachable +V 72 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/acts_as_attachable END -init.rb -K 25 -svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/2116/trunk/vendor/plugins/acts_as_attachable/init.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_attachable/.svn/entries --- a/vendor/plugins/acts_as_attachable/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_attachable/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_attachable +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_attachable http://redmine.rubyforge.org/svn -2010-03-03T17:05:00.967826Z -3528 -edavis10 +2011-04-15T13:23:13.506236Z +5466 +jplang @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.535765Z +2011-07-14T09:24:10.000000Z b215588c95e69b4bb8f91ad91606bfbe 2008-12-09T16:54:46.963649Z 2116 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_attachable/lib/.svn/all-wcprops --- a/vendor/plugins/acts_as_attachable/lib/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/3528/trunk/vendor/plugins/acts_as_attachable/lib -END -acts_as_attachable.rb -K 25 -svn:wc:ra_dav:version-url -V 84 -/svn/!svn/ver/3528/trunk/vendor/plugins/acts_as_attachable/lib/acts_as_attachable.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_attachable/lib/.svn/entries --- a/vendor/plugins/acts_as_attachable/lib/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_attachable/lib/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_attachable/lib +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_attachable/lib http://redmine.rubyforge.org/svn -2010-03-03T17:05:00.967826Z -3528 -edavis10 +2011-04-15T13:23:13.506236Z +5466 +jplang @@ -32,11 +32,11 @@ -2010-09-23T14:37:45.535765Z -982227c44f1fe848c8aeed862ea027f3 -2010-03-03T17:05:00.967826Z -3528 -edavis10 +2011-07-14T09:24:22.000000Z +0c00ea7475f5fb3e2232c35f4747e2d2 +2011-04-15T13:23:13.506236Z +5466 +jplang has-props @@ -58,5 +58,5 @@ -2387 +2515 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_attachable/lib/.svn/text-base/acts_as_attachable.rb.svn-base --- a/vendor/plugins/acts_as_attachable/lib/.svn/text-base/acts_as_attachable.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_attachable/lib/.svn/text-base/acts_as_attachable.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,5 +1,5 @@ # Redmine - project management software -# Copyright (C) 2006-2008 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 @@ -44,11 +44,13 @@ end def attachments_visible?(user=User.current) - user.allowed_to?(self.class.attachable_options[:view_permission], self.project) + (respond_to?(:visible?) ? visible?(user) : true) && + user.allowed_to?(self.class.attachable_options[:view_permission], self.project) end def attachments_deletable?(user=User.current) - user.allowed_to?(self.class.attachable_options[:delete_permission], self.project) + (respond_to?(:visible?) ? visible?(user) : true) && + user.allowed_to?(self.class.attachable_options[:delete_permission], self.project) end def initialize_unsaved_attachments diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_attachable/lib/acts_as_attachable.rb --- a/vendor/plugins/acts_as_attachable/lib/acts_as_attachable.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_attachable/lib/acts_as_attachable.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,5 +1,5 @@ # Redmine - project management software -# Copyright (C) 2006-2008 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 @@ -44,11 +44,13 @@ end def attachments_visible?(user=User.current) - user.allowed_to?(self.class.attachable_options[:view_permission], self.project) + (respond_to?(:visible?) ? visible?(user) : true) && + user.allowed_to?(self.class.attachable_options[:view_permission], self.project) end def attachments_deletable?(user=User.current) - user.allowed_to?(self.class.attachable_options[:delete_permission], self.project) + (respond_to?(:visible?) ? visible?(user) : true) && + user.allowed_to?(self.class.attachable_options[:delete_permission], self.project) end def initialize_unsaved_attachments diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_customizable/.svn/all-wcprops --- a/vendor/plugins/acts_as_customizable/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_customizable/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,11 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/4382/trunk/vendor/plugins/acts_as_customizable +V 74 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/acts_as_customizable END -init.rb -K 25 -svn:wc:ra_dav:version-url -V 68 -/svn/!svn/ver/1592/trunk/vendor/plugins/acts_as_customizable/init.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_customizable/.svn/entries --- a/vendor/plugins/acts_as_customizable/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_customizable/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_customizable +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_customizable http://redmine.rubyforge.org/svn -2010-11-07T14:15:01.891476Z -4382 +2011-04-01T13:44:58.700463Z +5272 jplang @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.539808Z +2011-07-14T09:24:10.000000Z 0d1f178b7636d6712b38304954530928 2008-06-27T20:13:56.888432Z 1592 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_customizable/lib/.svn/all-wcprops --- a/vendor/plugins/acts_as_customizable/lib/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_customizable/lib/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,11 +1,11 @@ K 25 svn:wc:ra_dav:version-url V 64 -/svn/!svn/ver/4382/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/4382/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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_customizable/lib/.svn/entries --- a/vendor/plugins/acts_as_customizable/lib/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_customizable/lib/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_customizable/lib +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_customizable/lib http://redmine.rubyforge.org/svn -2010-11-07T14:15:01.891476Z -4382 +2011-04-01T13:44:58.700463Z +5272 jplang @@ -32,10 +32,10 @@ -2010-11-19T13:04:50.920916Z -1b80419ad25063ffc8725be3174c8fb8 -2010-11-07T14:15:01.891476Z -4382 +2011-07-14T09:24:22.000000Z +d72670b67576182b51bf4d8b4096cac8 +2011-04-01T13:44:58.700463Z +5272 jplang has-props @@ -58,5 +58,5 @@ -3825 +4490 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_customizable/lib/.svn/text-base/acts_as_customizable.rb.svn-base --- a/vendor/plugins/acts_as_customizable/lib/.svn/text-base/acts_as_customizable.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_customizable/lib/.svn/text-base/acts_as_customizable.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -50,16 +50,32 @@ :order => 'position') end + # Sets the values of the object's custom fields + # values is an array like [{'id' => 1, 'value' => 'foo'}, {'id' => 2, 'value' => 'bar'}] + def custom_fields=(values) + values_to_hash = values.inject({}) do |hash, v| + v = v.stringify_keys + if v['id'] && v.has_key?('value') + hash[v['id']] = v['value'] + end + hash + end + self.custom_field_values = values_to_hash + end + + # Sets the values of the object's custom fields + # values is a hash like {'1' => 'foo', 2 => 'bar'} def custom_field_values=(values) @custom_field_values_changed = true values = values.stringify_keys 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 - @custom_field_values ||= available_custom_fields.collect { |x| custom_values.detect { |v| v.custom_field == x } || custom_values.build(:custom_field => x, :value => nil) } + @custom_field_values ||= available_custom_fields.collect { |x| custom_values.detect { |v| v.custom_field == x } || custom_values.build(:customized => self, :custom_field => x, :value => nil) } end def visible_custom_field_values diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_customizable/lib/acts_as_customizable.rb --- a/vendor/plugins/acts_as_customizable/lib/acts_as_customizable.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_customizable/lib/acts_as_customizable.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -50,16 +50,32 @@ :order => 'position') end + # Sets the values of the object's custom fields + # values is an array like [{'id' => 1, 'value' => 'foo'}, {'id' => 2, 'value' => 'bar'}] + def custom_fields=(values) + values_to_hash = values.inject({}) do |hash, v| + v = v.stringify_keys + if v['id'] && v.has_key?('value') + hash[v['id']] = v['value'] + end + hash + end + self.custom_field_values = values_to_hash + end + + # Sets the values of the object's custom fields + # values is a hash like {'1' => 'foo', 2 => 'bar'} def custom_field_values=(values) @custom_field_values_changed = true values = values.stringify_keys 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 - @custom_field_values ||= available_custom_fields.collect { |x| custom_values.detect { |v| v.custom_field == x } || custom_values.build(:custom_field => x, :value => nil) } + @custom_field_values ||= available_custom_fields.collect { |x| custom_values.detect { |v| v.custom_field == x } || custom_values.build(:customized => self, :custom_field => x, :value => nil) } end def visible_custom_field_values diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_event/.svn/all-wcprops --- a/vendor/plugins/acts_as_event/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/3703/trunk/vendor/plugins/acts_as_event -END -init.rb -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/774/trunk/vendor/plugins/acts_as_event/init.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_event/.svn/entries --- a/vendor/plugins/acts_as_event/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_event/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_event +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_event http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.539808Z +2011-07-14T09:24:10.000000Z 60df7ab698ddd0c3701bb0efbb8233cf 2007-08-29T16:52:35.680643Z 674 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_event/lib/.svn/all-wcprops --- a/vendor/plugins/acts_as_event/lib/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/3703/trunk/vendor/plugins/acts_as_event/lib -END -acts_as_event.rb -K 25 -svn:wc:ra_dav:version-url -V 74 -/svn/!svn/ver/3703/trunk/vendor/plugins/acts_as_event/lib/acts_as_event.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_event/lib/.svn/entries --- a/vendor/plugins/acts_as_event/lib/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_event/lib/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_event/lib +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_event/lib http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.543762Z +2011-07-14T09:24:10.000000Z ca8e33777d59976db870f71defe5f66d 2010-04-30T10:45:21.145380Z 3703 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_list/.svn/all-wcprops --- a/vendor/plugins/acts_as_list/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/2526/trunk/vendor/plugins/acts_as_list -END -init.rb -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/975/trunk/vendor/plugins/acts_as_list/init.rb -END -README -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/975/trunk/vendor/plugins/acts_as_list/README -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_list/.svn/entries --- a/vendor/plugins/acts_as_list/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_list/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_list +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_list http://redmine.rubyforge.org/svn @@ -35,7 +35,7 @@ -2010-09-23T14:37:45.543762Z +2011-07-14T09:24:10.000000Z 0bdbdc825f80fda1a94852a82b68ffd4 2007-12-10T17:58:07.273873Z 975 @@ -72,7 +72,7 @@ -2010-09-23T14:37:45.543762Z +2011-07-14T09:24:10.000000Z 42212b5cb681c9888d56f9c0f36e1e02 2007-12-10T17:58:07.273873Z 975 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_list/lib/.svn/all-wcprops --- a/vendor/plugins/acts_as_list/lib/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/2526/trunk/vendor/plugins/acts_as_list/lib -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_list/lib/.svn/entries --- a/vendor/plugins/acts_as_list/lib/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_list/lib/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_list/lib +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_list/lib http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_list/lib/active_record/.svn/all-wcprops --- a/vendor/plugins/acts_as_list/lib/active_record/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 70 -/svn/!svn/ver/2526/trunk/vendor/plugins/acts_as_list/lib/active_record -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_list/lib/active_record/.svn/entries --- a/vendor/plugins/acts_as_list/lib/active_record/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_list/lib/active_record/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_list/lib/active_record +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_list/lib/active_record http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_list/lib/active_record/acts/.svn/all-wcprops --- a/vendor/plugins/acts_as_list/lib/active_record/acts/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 75 -/svn/!svn/ver/2526/trunk/vendor/plugins/acts_as_list/lib/active_record/acts -END -list.rb -K 25 -svn:wc:ra_dav:version-url -V 83 -/svn/!svn/ver/2526/trunk/vendor/plugins/acts_as_list/lib/active_record/acts/list.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_list/lib/active_record/acts/.svn/entries --- a/vendor/plugins/acts_as_list/lib/active_record/acts/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_list/lib/active_record/acts/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_list/lib/active_record/acts +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_list/lib/active_record/acts http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.547761Z +2011-07-14T09:24:10.000000Z a3ee41e8bed56868bc2e4ab2cb7df73a 2009-02-26T09:21:41.696815Z 2526 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_list/test/.svn/all-wcprops --- a/vendor/plugins/acts_as_list/test/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/975/trunk/vendor/plugins/acts_as_list/test -END -list_test.rb -K 25 -svn:wc:ra_dav:version-url -V 69 -/svn/!svn/ver/975/trunk/vendor/plugins/acts_as_list/test/list_test.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_list/test/.svn/entries --- a/vendor/plugins/acts_as_list/test/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_list/test/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_list/test +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_list/test http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.551763Z +2011-07-14T09:24:11.000000Z 3d41debf5c631e88295d337507c3b5b6 2007-12-10T17:58:07.273873Z 975 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_searchable/.svn/all-wcprops --- a/vendor/plugins/acts_as_searchable/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_searchable/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,11 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/3445/trunk/vendor/plugins/acts_as_searchable +V 72 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/acts_as_searchable END -init.rb -K 25 -svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/774/trunk/vendor/plugins/acts_as_searchable/init.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_searchable/.svn/entries --- a/vendor/plugins/acts_as_searchable/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_searchable/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_searchable +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_searchable http://redmine.rubyforge.org/svn -2010-02-17T20:20:51.097274Z -3445 +2011-04-05T12:55:19.162428Z +5327 jplang @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.551763Z +2011-07-14T09:24:11.000000Z 7512fe68c7dfbb57e956d22b9aa8f8ed 2007-09-27T17:28:22.154371Z 766 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_searchable/lib/.svn/all-wcprops --- a/vendor/plugins/acts_as_searchable/lib/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/3445/trunk/vendor/plugins/acts_as_searchable/lib -END -acts_as_searchable.rb -K 25 -svn:wc:ra_dav:version-url -V 84 -/svn/!svn/ver/3445/trunk/vendor/plugins/acts_as_searchable/lib/acts_as_searchable.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_searchable/lib/.svn/entries --- a/vendor/plugins/acts_as_searchable/lib/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_searchable/lib/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_searchable/lib +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_searchable/lib http://redmine.rubyforge.org/svn -2010-02-17T20:20:51.097274Z -3445 +2011-04-05T12:55:19.162428Z +5327 jplang @@ -32,10 +32,10 @@ -2010-09-23T14:37:45.551763Z -f282f30a34a9560d7ef3d5883aba5fe9 -2010-02-17T20:20:51.097274Z -3445 +2011-07-14T09:24:22.000000Z +4dd9ab6c2387d779d21e2fac9727e70f +2011-04-05T12:55:19.162428Z +5327 jplang has-props @@ -58,5 +58,5 @@ -5937 +6360 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_searchable/lib/.svn/text-base/acts_as_searchable.rb.svn-base --- a/vendor/plugins/acts_as_searchable/lib/.svn/text-base/acts_as_searchable.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_searchable/lib/.svn/text-base/acts_as_searchable.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -45,9 +45,6 @@ searchable_options[:date_column] ||= "#{table_name}.created_on" searchable_options[:order_column] ||= searchable_options[:date_column] - # Permission needed to search this model - searchable_options[:permission] = "view_#{self.name.underscore.pluralize}".to_sym unless searchable_options.has_key?(:permission) - # Should we search custom fields on this model ? searchable_options[:search_custom_fields] = !reflect_on_association(:custom_values).nil? @@ -65,6 +62,8 @@ # projects argument can be either nil (will search all projects), a project or an array of projects # Returns the results and the results count def search(tokens, projects=nil, options={}) + # TODO: make user an argument + user = User.current tokens = [] << tokens unless tokens.is_a?(Array) projects = [] << projects unless projects.nil? || projects.is_a?(Array) @@ -99,18 +98,27 @@ find_options[:conditions] = [sql, * (tokens.collect {|w| "%#{w.downcase}%"} * token_clauses.size).sort] + scope = self project_conditions = [] - project_conditions << (searchable_options[:permission].nil? ? Project.visible_by(User.current) : - Project.allowed_to_condition(User.current, searchable_options[:permission])) + if searchable_options.has_key?(:permission) + project_conditions << Project.allowed_to_condition(user, searchable_options[:permission] || :view_project) + elsif respond_to?(:visible) + scope = scope.visible(user) + else + ActiveSupport::Deprecation.warn "acts_as_searchable with implicit :permission option is deprecated. Add a visible scope to the #{self.name} model or use explicit :permission option." + project_conditions << Project.allowed_to_condition(user, "view_#{self.name.underscore.pluralize}".to_sym) + end + # TODO: use visible scope options instead project_conditions << "#{searchable_options[:project_key]} IN (#{projects.collect(&:id).join(',')})" unless projects.nil? + project_conditions = project_conditions.empty? ? nil : project_conditions.join(' AND ') results = [] results_count = 0 - with_scope(:find => {:conditions => project_conditions.join(' AND ')}) do + with_scope(:find => {:conditions => project_conditions}) do with_scope(:find => find_options) do - results_count = count(:all) - results = find(:all, limit_options) + results_count = scope.count(:all) + results = scope.find(:all, limit_options) end end [results, results_count] diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_searchable/lib/acts_as_searchable.rb --- a/vendor/plugins/acts_as_searchable/lib/acts_as_searchable.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_searchable/lib/acts_as_searchable.rb Mon Jul 25 14:23:37 2011 +0100 @@ -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 @@ -45,9 +45,6 @@ searchable_options[:date_column] ||= "#{table_name}.created_on" searchable_options[:order_column] ||= searchable_options[:date_column] - # Permission needed to search this model - searchable_options[:permission] = "view_#{self.name.underscore.pluralize}".to_sym unless searchable_options.has_key?(:permission) - # Should we search custom fields on this model ? searchable_options[:search_custom_fields] = !reflect_on_association(:custom_values).nil? @@ -65,6 +62,8 @@ # projects argument can be either nil (will search all projects), a project or an array of projects # Returns the results and the results count def search(tokens, projects=nil, options={}) + # TODO: make user an argument + user = User.current tokens = [] << tokens unless tokens.is_a?(Array) projects = [] << projects unless projects.nil? || projects.is_a?(Array) @@ -99,18 +98,27 @@ find_options[:conditions] = [sql, * (tokens.collect {|w| "%#{w.downcase}%"} * token_clauses.size).sort] + scope = self project_conditions = [] - project_conditions << (searchable_options[:permission].nil? ? Project.visible_by(User.current) : - Project.allowed_to_condition(User.current, searchable_options[:permission])) + if searchable_options.has_key?(:permission) + project_conditions << Project.allowed_to_condition(user, searchable_options[:permission] || :view_project) + elsif respond_to?(:visible) + scope = scope.visible(user) + else + ActiveSupport::Deprecation.warn "acts_as_searchable with implicit :permission option is deprecated. Add a visible scope to the #{self.name} model or use explicit :permission option." + project_conditions << Project.allowed_to_condition(user, "view_#{self.name.underscore.pluralize}".to_sym) + end + # TODO: use visible scope options instead project_conditions << "#{searchable_options[:project_key]} IN (#{projects.collect(&:id).join(',')})" unless projects.nil? + project_conditions = project_conditions.empty? ? nil : project_conditions.join(' AND ') results = [] results_count = 0 - with_scope(:find => {:conditions => project_conditions.join(' AND ')}) do + with_scope(:find => {:conditions => project_conditions}) do with_scope(:find => find_options) do - results_count = count(:all) - results = find(:all, limit_options) + results_count = scope.count(:all) + results = scope.find(:all, limit_options) end end [results, results_count] diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_tree/.svn/all-wcprops --- a/vendor/plugins/acts_as_tree/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/2676/trunk/vendor/plugins/acts_as_tree -END -Rakefile -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/975/trunk/vendor/plugins/acts_as_tree/Rakefile -END -init.rb -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/975/trunk/vendor/plugins/acts_as_tree/init.rb -END -README -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/975/trunk/vendor/plugins/acts_as_tree/README -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_tree/.svn/entries --- a/vendor/plugins/acts_as_tree/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_tree/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_tree http://redmine.rubyforge.org/svn @@ -35,7 +35,7 @@ -2010-09-23T14:37:45.555763Z +2011-07-14T09:24:11.000000Z 77667cb4c41516750075eefb98896a93 2007-12-10T17:58:07.273873Z 975 @@ -69,7 +69,7 @@ -2010-09-23T14:37:45.555763Z +2011-07-14T09:24:11.000000Z 581c104f87fe90cfe9a7d1d41d77c84f 2007-12-10T17:58:07.273873Z 975 @@ -106,7 +106,7 @@ -2010-09-23T14:37:45.555763Z +2011-07-14T09:24:11.000000Z 918c85e850eb84259c178529b9aafd62 2007-12-10T17:58:07.273873Z 975 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_tree/lib/.svn/all-wcprops --- a/vendor/plugins/acts_as_tree/lib/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/2676/trunk/vendor/plugins/acts_as_tree/lib -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_tree/lib/.svn/entries --- a/vendor/plugins/acts_as_tree/lib/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_tree/lib/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree/lib +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_tree/lib http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_tree/lib/active_record/.svn/all-wcprops --- a/vendor/plugins/acts_as_tree/lib/active_record/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 70 -/svn/!svn/ver/2676/trunk/vendor/plugins/acts_as_tree/lib/active_record -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_tree/lib/active_record/.svn/entries --- a/vendor/plugins/acts_as_tree/lib/active_record/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_tree/lib/active_record/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree/lib/active_record +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_tree/lib/active_record http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_tree/lib/active_record/acts/.svn/all-wcprops --- a/vendor/plugins/acts_as_tree/lib/active_record/acts/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 75 -/svn/!svn/ver/2676/trunk/vendor/plugins/acts_as_tree/lib/active_record/acts -END -tree.rb -K 25 -svn:wc:ra_dav:version-url -V 83 -/svn/!svn/ver/2676/trunk/vendor/plugins/acts_as_tree/lib/active_record/acts/tree.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_tree/lib/active_record/acts/.svn/entries --- a/vendor/plugins/acts_as_tree/lib/active_record/acts/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_tree/lib/active_record/acts/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree/lib/active_record/acts +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_tree/lib/active_record/acts http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.559786Z +2011-07-14T09:24:11.000000Z 544900d884182d6888334ce14323bef0 2009-04-21T12:19:56.547537Z 2676 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_tree/test/.svn/all-wcprops --- a/vendor/plugins/acts_as_tree/test/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/975/trunk/vendor/plugins/acts_as_tree/test -END -schema.rb -K 25 -svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/975/trunk/vendor/plugins/acts_as_tree/test/schema.rb -END -abstract_unit.rb -K 25 -svn:wc:ra_dav:version-url -V 73 -/svn/!svn/ver/975/trunk/vendor/plugins/acts_as_tree/test/abstract_unit.rb -END -database.yml -K 25 -svn:wc:ra_dav:version-url -V 69 -/svn/!svn/ver/975/trunk/vendor/plugins/acts_as_tree/test/database.yml -END -acts_as_tree_test.rb -K 25 -svn:wc:ra_dav:version-url -V 77 -/svn/!svn/ver/975/trunk/vendor/plugins/acts_as_tree/test/acts_as_tree_test.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_tree/test/.svn/entries --- a/vendor/plugins/acts_as_tree/test/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_tree/test/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree/test +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_tree/test http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.563764Z +2011-07-14T09:24:11.000000Z d41d8cd98f00b204e9800998ecf8427e 2007-12-10T17:58:07.273873Z 975 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.563764Z +2011-07-14T09:24:11.000000Z d41d8cd98f00b204e9800998ecf8427e 2007-12-10T17:58:07.273873Z 975 @@ -100,7 +100,7 @@ -2010-09-23T14:37:45.563764Z +2011-07-14T09:24:11.000000Z d41d8cd98f00b204e9800998ecf8427e 2007-12-10T17:58:07.273873Z 975 @@ -137,7 +137,7 @@ -2010-09-23T14:37:45.563764Z +2011-07-14T09:24:11.000000Z 7bd3d48984d0e563b9f5e20ca8fdff81 2007-12-10T17:58:07.273873Z 975 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_tree/test/fixtures/.svn/all-wcprops --- a/vendor/plugins/acts_as_tree/test/fixtures/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/975/trunk/vendor/plugins/acts_as_tree/test/fixtures -END -mixin.rb -K 25 -svn:wc:ra_dav:version-url -V 74 -/svn/!svn/ver/975/trunk/vendor/plugins/acts_as_tree/test/fixtures/mixin.rb -END -mixins.yml -K 25 -svn:wc:ra_dav:version-url -V 76 -/svn/!svn/ver/975/trunk/vendor/plugins/acts_as_tree/test/fixtures/mixins.yml -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_tree/test/fixtures/.svn/entries --- a/vendor/plugins/acts_as_tree/test/fixtures/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_tree/test/fixtures/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree/test/fixtures +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_tree/test/fixtures http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.563764Z +2011-07-14T09:24:11.000000Z d41d8cd98f00b204e9800998ecf8427e 2007-12-10T17:58:07.273873Z 975 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.563764Z +2011-07-14T09:24:11.000000Z d41d8cd98f00b204e9800998ecf8427e 2007-12-10T17:58:07.273873Z 975 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_versioned/.svn/all-wcprops --- a/vendor/plugins/acts_as_versioned/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/1623/trunk/vendor/plugins/acts_as_versioned -END -RUNNING_UNIT_TESTS -K 25 -svn:wc:ra_dav:version-url -V 75 -/svn/!svn/ver/323/trunk/vendor/plugins/acts_as_versioned/RUNNING_UNIT_TESTS -END -Rakefile -K 25 -svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/1623/trunk/vendor/plugins/acts_as_versioned/Rakefile -END -init.rb -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/323/trunk/vendor/plugins/acts_as_versioned/init.rb -END -CHANGELOG -K 25 -svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/323/trunk/vendor/plugins/acts_as_versioned/CHANGELOG -END -MIT-LICENSE -K 25 -svn:wc:ra_dav:version-url -V 68 -/svn/!svn/ver/323/trunk/vendor/plugins/acts_as_versioned/MIT-LICENSE -END -README -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/323/trunk/vendor/plugins/acts_as_versioned/README -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_versioned/.svn/entries --- a/vendor/plugins/acts_as_versioned/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_versioned/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_versioned +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_versioned http://redmine.rubyforge.org/svn @@ -35,7 +35,7 @@ -2010-09-23T14:37:45.567763Z +2011-07-14T09:24:11.000000Z 8aae554c93cc60ef98cb3da2dd7c1b4b 2007-03-04T13:40:21.895320Z 290 @@ -69,7 +69,7 @@ -2010-09-23T14:37:45.567763Z +2011-07-14T09:24:11.000000Z 1f57ce7fac2d625797b9ec6d6480cf5b 2008-07-04T17:58:14.743502Z 1623 @@ -103,7 +103,7 @@ -2010-09-23T14:37:45.567763Z +2011-07-14T09:24:11.000000Z 1d117218f55938f9c75f1f814a4915d1 2007-03-04T13:40:21.895320Z 290 @@ -140,7 +140,7 @@ -2010-09-23T14:37:45.567763Z +2011-07-14T09:24:11.000000Z 3aa6f483cf322e248d4a1281160f8845 2007-03-04T13:40:21.895320Z 290 @@ -174,7 +174,7 @@ -2010-09-23T14:37:45.567763Z +2011-07-14T09:24:11.000000Z e4ba7226e637685b5cca7a9cc5c05af2 2007-03-04T13:40:21.895320Z 290 @@ -208,7 +208,7 @@ -2010-09-23T14:37:45.567763Z +2011-07-14T09:24:11.000000Z 06ee73d1b4ad386b681f88b9326a0685 2007-03-04T13:40:21.895320Z 290 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_versioned/lib/.svn/all-wcprops --- a/vendor/plugins/acts_as_versioned/lib/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 61 -/svn/!svn/ver/1623/trunk/vendor/plugins/acts_as_versioned/lib -END -acts_as_versioned.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/1623/trunk/vendor/plugins/acts_as_versioned/lib/acts_as_versioned.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_versioned/lib/.svn/entries --- a/vendor/plugins/acts_as_versioned/lib/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_versioned/lib/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_versioned/lib +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_versioned/lib http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.571763Z +2011-07-14T09:24:11.000000Z 474fc02132fce15712540924bb7b22cf 2008-07-04T17:58:14.743502Z 1623 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_versioned/test/.svn/all-wcprops --- a/vendor/plugins/acts_as_versioned/test/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/1623/trunk/vendor/plugins/acts_as_versioned/test -END -versioned_test.rb -K 25 -svn:wc:ra_dav:version-url -V 80 -/svn/!svn/ver/1623/trunk/vendor/plugins/acts_as_versioned/test/versioned_test.rb -END -schema.rb -K 25 -svn:wc:ra_dav:version-url -V 71 -/svn/!svn/ver/323/trunk/vendor/plugins/acts_as_versioned/test/schema.rb -END -abstract_unit.rb -K 25 -svn:wc:ra_dav:version-url -V 79 -/svn/!svn/ver/1623/trunk/vendor/plugins/acts_as_versioned/test/abstract_unit.rb -END -database.yml -K 25 -svn:wc:ra_dav:version-url -V 74 -/svn/!svn/ver/323/trunk/vendor/plugins/acts_as_versioned/test/database.yml -END -migration_test.rb -K 25 -svn:wc:ra_dav:version-url -V 80 -/svn/!svn/ver/1623/trunk/vendor/plugins/acts_as_versioned/test/migration_test.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_versioned/test/.svn/entries --- a/vendor/plugins/acts_as_versioned/test/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_versioned/test/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_versioned/test +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_versioned/test http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.579760Z +2011-07-14T09:24:11.000000Z 8a2eaa42c29dc84e0c018e78c99987f1 2008-07-04T17:58:14.743502Z 1623 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.579760Z +2011-07-14T09:24:11.000000Z df4118ed0edd4b3a0bae0cbb3b7a8a6b 2007-03-04T13:40:21.895320Z 290 @@ -100,7 +100,7 @@ -2010-09-23T14:37:45.571763Z +2011-07-14T09:24:11.000000Z 99f5a4aa22b79a8f8c7521a0b1e9ec3e 2008-07-04T17:58:14.743502Z 1623 @@ -134,7 +134,7 @@ -2010-09-23T14:37:45.571763Z +2011-07-14T09:24:11.000000Z c5ac373bf98e48576df3a63ab4349883 2007-03-04T13:40:21.895320Z 290 @@ -171,7 +171,7 @@ -2010-09-23T14:37:45.579760Z +2011-07-14T09:24:11.000000Z eb28101ab94f672b3a99998fc03f0d38 2008-07-04T17:58:14.743502Z 1623 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_versioned/test/fixtures/.svn/all-wcprops --- a/vendor/plugins/acts_as_versioned/test/fixtures/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 71 -/svn/!svn/ver/1623/trunk/vendor/plugins/acts_as_versioned/test/fixtures -END -pages.yml -K 25 -svn:wc:ra_dav:version-url -V 80 -/svn/!svn/ver/323/trunk/vendor/plugins/acts_as_versioned/test/fixtures/pages.yml -END -locked_pages.yml -K 25 -svn:wc:ra_dav:version-url -V 87 -/svn/!svn/ver/323/trunk/vendor/plugins/acts_as_versioned/test/fixtures/locked_pages.yml -END -landmark_versions.yml -K 25 -svn:wc:ra_dav:version-url -V 92 -/svn/!svn/ver/323/trunk/vendor/plugins/acts_as_versioned/test/fixtures/landmark_versions.yml -END -locked_pages_revisions.yml -K 25 -svn:wc:ra_dav:version-url -V 97 -/svn/!svn/ver/323/trunk/vendor/plugins/acts_as_versioned/test/fixtures/locked_pages_revisions.yml -END -page_versions.yml -K 25 -svn:wc:ra_dav:version-url -V 88 -/svn/!svn/ver/323/trunk/vendor/plugins/acts_as_versioned/test/fixtures/page_versions.yml -END -authors.yml -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/323/trunk/vendor/plugins/acts_as_versioned/test/fixtures/authors.yml -END -widget.rb -K 25 -svn:wc:ra_dav:version-url -V 81 -/svn/!svn/ver/1623/trunk/vendor/plugins/acts_as_versioned/test/fixtures/widget.rb -END -landmark.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/323/trunk/vendor/plugins/acts_as_versioned/test/fixtures/landmark.rb -END -landmarks.yml -K 25 -svn:wc:ra_dav:version-url -V 84 -/svn/!svn/ver/323/trunk/vendor/plugins/acts_as_versioned/test/fixtures/landmarks.yml -END -page.rb -K 25 -svn:wc:ra_dav:version-url -V 78 -/svn/!svn/ver/323/trunk/vendor/plugins/acts_as_versioned/test/fixtures/page.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_versioned/test/fixtures/.svn/entries --- a/vendor/plugins/acts_as_versioned/test/fixtures/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_versioned/test/fixtures/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_versioned/test/fixtures +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_versioned/test/fixtures http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.579760Z +2011-07-14T09:24:11.000000Z 6052582a74186e97a71e6d50ff1c3558 2007-03-04T13:40:21.895320Z 290 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.575760Z +2011-07-14T09:24:11.000000Z 35aca448cc30c958ad2f3a8130903701 2007-03-04T13:40:21.895320Z 290 @@ -100,7 +100,7 @@ -2010-09-23T14:37:45.575760Z +2011-07-14T09:24:11.000000Z df240cb0129f29834aea167ea97df5c9 2007-03-04T13:40:21.895320Z 290 @@ -134,7 +134,7 @@ -2010-09-23T14:37:45.575760Z +2011-07-14T09:24:11.000000Z 3e63e88f04d92531412a5e328670313d 2007-03-04T13:40:21.895320Z 290 @@ -168,7 +168,7 @@ -2010-09-23T14:37:45.579760Z +2011-07-14T09:24:11.000000Z 9e0c65a239dc63caf3ba5b61e5acd86b 2007-03-04T13:40:21.895320Z 290 @@ -202,7 +202,7 @@ -2010-09-23T14:37:45.575760Z +2011-07-14T09:24:11.000000Z c9631a233cff08e617f783f2c5d4ebcb 2007-03-04T13:40:21.895320Z 290 @@ -236,7 +236,7 @@ -2010-09-23T14:37:45.579760Z +2011-07-14T09:24:11.000000Z 6cbb9a0d4b22160edce9cdd270943fcd 2008-07-04T17:58:14.743502Z 1623 @@ -270,7 +270,7 @@ -2010-09-23T14:37:45.575760Z +2011-07-14T09:24:11.000000Z 7845068722476900746d101729c30187 2007-03-04T13:40:21.895320Z 290 @@ -307,7 +307,7 @@ -2010-09-23T14:37:45.575760Z +2011-07-14T09:24:11.000000Z ebfb47357586fa12e4524a65ba0a714a 2007-03-04T13:40:21.895320Z 290 @@ -341,7 +341,7 @@ -2010-09-23T14:37:45.579760Z +2011-07-14T09:24:11.000000Z a93535c95869678b16df898b8de4259f 2007-03-04T13:40:21.895320Z 290 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_versioned/test/fixtures/migrations/.svn/all-wcprops --- a/vendor/plugins/acts_as_versioned/test/fixtures/migrations/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 81 -/svn/!svn/ver/323/trunk/vendor/plugins/acts_as_versioned/test/fixtures/migrations -END -1_add_versioned_tables.rb -K 25 -svn:wc:ra_dav:version-url -V 107 -/svn/!svn/ver/323/trunk/vendor/plugins/acts_as_versioned/test/fixtures/migrations/1_add_versioned_tables.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_versioned/test/fixtures/migrations/.svn/entries --- a/vendor/plugins/acts_as_versioned/test/fixtures/migrations/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_versioned/test/fixtures/migrations/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_versioned/test/fixtures/migrations +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_versioned/test/fixtures/migrations http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.579760Z +2011-07-14T09:24:11.000000Z 8fca6192aeeba1c8456bd6ac6199839f 2007-03-04T13:40:21.895320Z 290 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_watchable/.svn/all-wcprops --- a/vendor/plugins/acts_as_watchable/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_watchable/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,11 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/3803/trunk/vendor/plugins/acts_as_watchable +V 71 +/svn/!svn/ver/5945/branches/1.2-stable/vendor/plugins/acts_as_watchable END -init.rb -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/774/trunk/vendor/plugins/acts_as_watchable/init.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_watchable/.svn/entries --- a/vendor/plugins/acts_as_watchable/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_watchable/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_watchable +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_watchable http://redmine.rubyforge.org/svn -2010-06-20T18:41:30.111362Z -3803 -edavis10 +2011-05-29T07:18:05.033755Z +5945 +jplang @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.583759Z +2011-07-14T09:24:11.000000Z 7051267daa625f991f2b604afde255ff 2007-04-21T12:08:31.130506Z 453 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_watchable/lib/.svn/all-wcprops --- a/vendor/plugins/acts_as_watchable/lib/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 61 -/svn/!svn/ver/3803/trunk/vendor/plugins/acts_as_watchable/lib -END -acts_as_watchable.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/3803/trunk/vendor/plugins/acts_as_watchable/lib/acts_as_watchable.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_watchable/lib/.svn/entries --- a/vendor/plugins/acts_as_watchable/lib/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_watchable/lib/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_watchable/lib +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/acts_as_watchable/lib http://redmine.rubyforge.org/svn -2010-06-20T18:41:30.111362Z -3803 -edavis10 +2011-05-29T07:18:05.033755Z +5945 +jplang @@ -32,11 +32,11 @@ -2010-09-23T14:37:45.583759Z -30f73616865f02dadce09f9511269b70 -2010-06-20T18:41:30.111362Z -3803 -edavis10 +2011-07-14T09:24:22.000000Z +3b3a89183c72eb8f1ef981156b502ca9 +2011-05-29T07:18:05.033755Z +5945 +jplang has-props @@ -58,5 +58,5 @@ -2265 +2489 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_watchable/lib/.svn/text-base/acts_as_watchable.rb.svn-base --- a/vendor/plugins/acts_as_watchable/lib/.svn/text-base/acts_as_watchable.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_watchable/lib/.svn/text-base/acts_as_watchable.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -13,7 +13,7 @@ class_eval do has_many :watchers, :as => :watchable, :dependent => :delete_all - has_many :watcher_users, :through => :watchers, :source => :user + has_many :watcher_users, :through => :watchers, :source => :user, :validate => false named_scope :watched_by, lambda { |user_id| { :include => :watchers, @@ -31,7 +31,11 @@ # Returns an array of users that are proposed as watchers def addable_watcher_users - self.project.users.sort - self.watcher_users + users = self.project.users.sort - self.watcher_users + if respond_to?(:visible?) + users.reject! {|user| !visible?(user)} + end + users end # Adds user as a watcher @@ -58,7 +62,8 @@ # Returns an array of watchers' email addresses def watcher_recipients notified = watcher_users.active - + notified.reject! {|user| user.mail_notification == 'none'} + if respond_to?(:visible?) notified.reject! {|user| !visible?(user)} end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/acts_as_watchable/lib/acts_as_watchable.rb --- a/vendor/plugins/acts_as_watchable/lib/acts_as_watchable.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/acts_as_watchable/lib/acts_as_watchable.rb Mon Jul 25 14:23:37 2011 +0100 @@ -13,7 +13,7 @@ class_eval do has_many :watchers, :as => :watchable, :dependent => :delete_all - has_many :watcher_users, :through => :watchers, :source => :user + has_many :watcher_users, :through => :watchers, :source => :user, :validate => false named_scope :watched_by, lambda { |user_id| { :include => :watchers, @@ -31,7 +31,11 @@ # Returns an array of users that are proposed as watchers def addable_watcher_users - self.project.users.sort - self.watcher_users + users = self.project.users.sort - self.watcher_users + if respond_to?(:visible?) + users.reject! {|user| !visible?(user)} + end + users end # Adds user as a watcher @@ -58,7 +62,8 @@ # Returns an array of watchers' email addresses def watcher_recipients notified = watcher_users.active - + notified.reject! {|user| user.mail_notification == 'none'} + if respond_to?(:visible?) notified.reject! {|user| !visible?(user)} end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/awesome_nested_set/.svn/all-wcprops --- a/vendor/plugins/awesome_nested_set/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/awesome_nested_set/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,35 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/4406/trunk/vendor/plugins/awesome_nested_set +V 72 +/svn/!svn/ver/5878/branches/1.2-stable/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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/awesome_nested_set/.svn/entries --- a/vendor/plugins/awesome_nested_set/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/awesome_nested_set/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/awesome_nested_set http://redmine.rubyforge.org/svn -2010-11-14T16:24:21.989522Z -4406 +2011-04-12T16:31:00.547886Z +5441 jplang @@ -35,7 +35,7 @@ -2010-09-23T14:37:45.587807Z +2011-07-14T09:24:11.000000Z c1f9a7c7c81a0c9150d260757c895ab3 2008-12-20T12:22:38.158335Z 2149 @@ -69,7 +69,7 @@ -2010-09-23T14:37:45.587807Z +2011-07-14T09:24:11.000000Z 75ea4a8e8109afdbce9214ac3e9aa40a 2008-12-20T12:22:38.158335Z 2149 @@ -103,7 +103,7 @@ -2010-09-23T14:37:45.587807Z +2011-07-14T09:24:11.000000Z 5d897290320b00753c366c59f40b213e 2008-12-20T12:22:38.158335Z 2149 @@ -137,7 +137,7 @@ -2010-09-23T14:37:45.587807Z +2011-07-14T09:24:11.000000Z af5f1806895c92bb03e8855a96d13a64 2008-12-20T12:22:38.158335Z 2149 @@ -174,7 +174,7 @@ -2010-09-23T14:37:45.587807Z +2011-07-14T09:24:11.000000Z ba826ae68593d063b726b4e66dcb1e8f 2008-12-20T12:22:38.158335Z 2149 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/awesome_nested_set/lib/.svn/all-wcprops --- a/vendor/plugins/awesome_nested_set/lib/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/awesome_nested_set/lib/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,11 +1,11 @@ K 25 svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/4406/trunk/vendor/plugins/awesome_nested_set/lib +V 76 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/awesome_nested_set/lib END awesome_nested_set.rb K 25 svn:wc:ra_dav:version-url -V 84 -/svn/!svn/ver/4406/trunk/vendor/plugins/awesome_nested_set/lib/awesome_nested_set.rb +V 98 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/awesome_nested_set/lib/awesome_nested_set.rb END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/awesome_nested_set/lib/.svn/entries --- a/vendor/plugins/awesome_nested_set/lib/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/awesome_nested_set/lib/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/lib +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/awesome_nested_set/lib http://redmine.rubyforge.org/svn -2010-11-14T16:24:21.989522Z -4406 +2011-04-12T16:31:00.547886Z +5441 jplang @@ -32,10 +32,10 @@ -2010-11-19T13:04:50.944921Z -e8fd989882fd3a10519da66c2a73e982 -2010-11-14T16:24:21.989522Z -4406 +2011-07-14T09:24:22.000000Z +1930a187dbd0635d534b5afb1a9957ba +2011-04-12T16:31:00.547886Z +5441 jplang has-props @@ -58,7 +58,7 @@ -21530 +21882 awesome_nested_set dir diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/awesome_nested_set/lib/.svn/text-base/awesome_nested_set.rb.svn-base --- a/vendor/plugins/awesome_nested_set/lib/.svn/text-base/awesome_nested_set.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/awesome_nested_set/lib/.svn/text-base/awesome_nested_set.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -425,7 +425,7 @@ # the base ActiveRecord class, using the :scope declared in the acts_as_nested_set # declaration. def nested_set_scope - options = {:order => quoted_left_column_name} + options = {:order => "#{self.class.table_name}.#{quoted_left_column_name}"} scopes = Array(acts_as_nested_set_options[:scope]) options[:conditions] = scopes.inject({}) do |conditions,attr| conditions.merge attr => self[attr] @@ -444,17 +444,20 @@ # 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? || leaf? || !self.class.exists?(id) delete_method = acts_as_nested_set_options[:dependent] == :destroy ? :destroy_all : :delete_all + # TODO: should destroy children (not descendants) when deleted_method is :destroy_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] @@ -464,6 +467,9 @@ ["#{quoted_right_column_name} >= ?", right] ) end + + # Reload is needed because children may have updated their parent (self) during deletion. + reload end # reload left, right, and parent diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/awesome_nested_set/lib/awesome_nested_set.rb --- a/vendor/plugins/awesome_nested_set/lib/awesome_nested_set.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/awesome_nested_set/lib/awesome_nested_set.rb Mon Jul 25 14:23:37 2011 +0100 @@ -425,7 +425,7 @@ # the base ActiveRecord class, using the :scope declared in the acts_as_nested_set # declaration. def nested_set_scope - options = {:order => quoted_left_column_name} + options = {:order => "#{self.class.table_name}.#{quoted_left_column_name}"} scopes = Array(acts_as_nested_set_options[:scope]) options[:conditions] = scopes.inject({}) do |conditions,attr| conditions.merge attr => self[attr] @@ -444,17 +444,20 @@ # 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? || leaf? || !self.class.exists?(id) delete_method = acts_as_nested_set_options[:dependent] == :destroy ? :destroy_all : :delete_all + # TODO: should destroy children (not descendants) when deleted_method is :destroy_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] @@ -464,6 +467,9 @@ ["#{quoted_right_column_name} >= ?", right] ) end + + # Reload is needed because children may have updated their parent (self) during deletion. + reload end # reload left, right, and parent diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/awesome_nested_set/lib/awesome_nested_set/.svn/all-wcprops --- a/vendor/plugins/awesome_nested_set/lib/awesome_nested_set/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 81 -/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/lib/awesome_nested_set -END -named_scope.rb -K 25 -svn:wc:ra_dav:version-url -V 96 -/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/lib/awesome_nested_set/named_scope.rb -END -helper.rb -K 25 -svn:wc:ra_dav:version-url -V 91 -/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/lib/awesome_nested_set/helper.rb -END -compatability.rb -K 25 -svn:wc:ra_dav:version-url -V 98 -/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/lib/awesome_nested_set/compatability.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/awesome_nested_set/lib/awesome_nested_set/.svn/entries --- a/vendor/plugins/awesome_nested_set/lib/awesome_nested_set/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/awesome_nested_set/lib/awesome_nested_set/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/lib/awesome_nested_set +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/awesome_nested_set/lib/awesome_nested_set http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.591804Z +2011-07-14T09:24:11.000000Z d15393e7ec4757df0e53641d9a8d76f4 2008-12-20T12:22:38.158335Z 2149 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.591804Z +2011-07-14T09:24:11.000000Z d4a9622144313fa6b56117a6c1f11e61 2008-12-20T12:22:38.158335Z 2149 @@ -100,7 +100,7 @@ -2010-09-23T14:37:45.591804Z +2011-07-14T09:24:11.000000Z cebe8bf25e6f479251be38c80a246574 2008-12-20T12:22:38.158335Z 2149 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/awesome_nested_set/rails/.svn/all-wcprops --- a/vendor/plugins/awesome_nested_set/rails/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/rails -END -init.rb -K 25 -svn:wc:ra_dav:version-url -V 72 -/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/rails/init.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/awesome_nested_set/rails/.svn/entries --- a/vendor/plugins/awesome_nested_set/rails/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/awesome_nested_set/rails/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/rails +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/awesome_nested_set/rails http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.595761Z +2011-07-14T09:24:11.000000Z d5995cbfa2abdc12b57c44d69dc0085b 2008-12-20T12:22:38.158335Z 2149 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/awesome_nested_set/test/.svn/all-wcprops --- a/vendor/plugins/awesome_nested_set/test/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/test -END -test_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 78 -/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/test/test_helper.rb -END -awesome_nested_set_test.rb -K 25 -svn:wc:ra_dav:version-url -V 90 -/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/test/awesome_nested_set_test.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/awesome_nested_set/test/.svn/entries --- a/vendor/plugins/awesome_nested_set/test/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/awesome_nested_set/test/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/test +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/awesome_nested_set/test http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.603759Z +2011-07-14T09:24:11.000000Z 41b65aff686211d45ba085c1b0791218 2008-12-20T12:22:38.158335Z 2149 @@ -75,7 +75,7 @@ -2010-09-23T14:37:45.599759Z +2011-07-14T09:24:11.000000Z d177339aefb3c4a8f280efff48c974b6 2008-12-20T12:22:38.158335Z 2149 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/awesome_nested_set/test/awesome_nested_set/.svn/all-wcprops --- a/vendor/plugins/awesome_nested_set/test/awesome_nested_set/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/test/awesome_nested_set -END -helper_test.rb -K 25 -svn:wc:ra_dav:version-url -V 97 -/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/test/awesome_nested_set/helper_test.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/awesome_nested_set/test/awesome_nested_set/.svn/entries --- a/vendor/plugins/awesome_nested_set/test/awesome_nested_set/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/awesome_nested_set/test/awesome_nested_set/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/test/awesome_nested_set +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/awesome_nested_set/test/awesome_nested_set http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.595761Z +2011-07-14T09:24:11.000000Z 03a414e3247544a5a2334aed005764f3 2008-12-20T12:22:38.158335Z 2149 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/awesome_nested_set/test/db/.svn/all-wcprops --- a/vendor/plugins/awesome_nested_set/test/db/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/test/db -END -schema.rb -K 25 -svn:wc:ra_dav:version-url -V 76 -/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/test/db/schema.rb -END -database.yml -K 25 -svn:wc:ra_dav:version-url -V 79 -/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/test/db/database.yml -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/awesome_nested_set/test/db/.svn/entries --- a/vendor/plugins/awesome_nested_set/test/db/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/awesome_nested_set/test/db/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/test/db +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/awesome_nested_set/test/db http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.599759Z +2011-07-14T09:24:11.000000Z ae23aecda935bb66e29aa4f02ea9de0a 2008-12-20T12:22:38.158335Z 2149 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.599759Z +2011-07-14T09:24:11.000000Z 359889e11314c2969bdf7e37475bdc62 2008-12-20T12:22:38.158335Z 2149 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/awesome_nested_set/test/fixtures/.svn/all-wcprops --- a/vendor/plugins/awesome_nested_set/test/fixtures/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 72 -/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/test/fixtures -END -category.rb -K 25 -svn:wc:ra_dav:version-url -V 84 -/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/test/fixtures/category.rb -END -categories.yml -K 25 -svn:wc:ra_dav:version-url -V 87 -/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/test/fixtures/categories.yml -END -departments.yml -K 25 -svn:wc:ra_dav:version-url -V 88 -/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/test/fixtures/departments.yml -END -notes.yml -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/test/fixtures/notes.yml -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/awesome_nested_set/test/fixtures/.svn/entries --- a/vendor/plugins/awesome_nested_set/test/fixtures/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/awesome_nested_set/test/fixtures/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/test/fixtures +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/awesome_nested_set/test/fixtures http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.603759Z +2011-07-14T09:24:11.000000Z 460e90d6f219f339e8e4c64aaae0063c 2008-12-20T12:22:38.158335Z 2149 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.599759Z +2011-07-14T09:24:11.000000Z 4b6a06e11c21a3aadd09e60dee443110 2008-12-20T12:22:38.158335Z 2149 @@ -100,7 +100,7 @@ -2010-09-23T14:37:45.603759Z +2011-07-14T09:24:11.000000Z e4eb5dbc7f2a2aa2fee79dba9210e769 2008-12-20T12:22:38.158335Z 2149 @@ -134,7 +134,7 @@ -2010-09-23T14:37:45.603759Z +2011-07-14T09:24:11.000000Z e8b507fd94ed89b9997c3f9f137290cf 2008-12-20T12:22:38.158335Z 2149 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/classic_pagination/.svn/all-wcprops --- a/vendor/plugins/classic_pagination/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/2134/trunk/vendor/plugins/classic_pagination -END -Rakefile -K 25 -svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/975/trunk/vendor/plugins/classic_pagination/Rakefile -END -init.rb -K 25 -svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/975/trunk/vendor/plugins/classic_pagination/init.rb -END -CHANGELOG -K 25 -svn:wc:ra_dav:version-url -V 67 -/svn/!svn/ver/975/trunk/vendor/plugins/classic_pagination/CHANGELOG -END -install.rb -K 25 -svn:wc:ra_dav:version-url -V 68 -/svn/!svn/ver/975/trunk/vendor/plugins/classic_pagination/install.rb -END -README -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/975/trunk/vendor/plugins/classic_pagination/README -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/classic_pagination/.svn/entries --- a/vendor/plugins/classic_pagination/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/classic_pagination/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/classic_pagination +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/classic_pagination http://redmine.rubyforge.org/svn @@ -35,7 +35,7 @@ -2010-09-23T14:37:45.607804Z +2011-07-14T09:24:11.000000Z b14424b71d2f606a775061237c8226f1 2007-12-10T17:58:07.273873Z 975 @@ -69,7 +69,7 @@ -2010-09-23T14:37:45.607804Z +2011-07-14T09:24:11.000000Z 181539722e198d92992a94f40310f4fc 2007-12-10T17:58:07.273873Z 975 @@ -106,7 +106,7 @@ -2010-09-23T14:37:45.607804Z +2011-07-14T09:24:11.000000Z 3ef206f381b42341342908fcc0001210 2007-12-09T21:53:46.068689Z 966 @@ -140,7 +140,7 @@ -2010-09-23T14:37:45.607804Z +2011-07-14T09:24:11.000000Z 1c88d6bc27aa809cd6ef26543c18b1e6 2007-12-10T17:58:07.273873Z 975 @@ -174,7 +174,7 @@ -2010-09-23T14:37:45.607804Z +2011-07-14T09:24:11.000000Z f1df690ff1ea0da74f8fe161f50722ad 2007-12-10T17:58:07.273873Z 975 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/classic_pagination/lib/.svn/all-wcprops --- a/vendor/plugins/classic_pagination/lib/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/2134/trunk/vendor/plugins/classic_pagination/lib -END -pagination_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/975/trunk/vendor/plugins/classic_pagination/lib/pagination_helper.rb -END -pagination.rb -K 25 -svn:wc:ra_dav:version-url -V 76 -/svn/!svn/ver/2134/trunk/vendor/plugins/classic_pagination/lib/pagination.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/classic_pagination/lib/.svn/entries --- a/vendor/plugins/classic_pagination/lib/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/classic_pagination/lib/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/classic_pagination/lib +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/classic_pagination/lib http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.607804Z +2011-07-14T09:24:11.000000Z 535b7515c14fb3964e97be32c2d36415 2007-12-10T17:58:07.273873Z 975 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.607804Z +2011-07-14T09:24:11.000000Z d770c57066726c423cc9de4ca5b552cd 2008-12-14T15:36:59.418123Z 2134 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/classic_pagination/test/.svn/all-wcprops --- a/vendor/plugins/classic_pagination/test/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/975/trunk/vendor/plugins/classic_pagination/test -END -helper.rb -K 25 -svn:wc:ra_dav:version-url -V 72 -/svn/!svn/ver/975/trunk/vendor/plugins/classic_pagination/test/helper.rb -END -pagination_helper_test.rb -K 25 -svn:wc:ra_dav:version-url -V 88 -/svn/!svn/ver/975/trunk/vendor/plugins/classic_pagination/test/pagination_helper_test.rb -END -pagination_test.rb -K 25 -svn:wc:ra_dav:version-url -V 81 -/svn/!svn/ver/975/trunk/vendor/plugins/classic_pagination/test/pagination_test.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/classic_pagination/test/.svn/entries --- a/vendor/plugins/classic_pagination/test/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/classic_pagination/test/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/classic_pagination/test +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/classic_pagination/test http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.623761Z +2011-07-14T09:24:11.000000Z 50c7fabeb3d6728ce24eada59d5b2b67 2007-12-10T17:58:07.273873Z 975 @@ -69,7 +69,7 @@ -2010-09-23T14:37:45.623761Z +2011-07-14T09:24:11.000000Z 0a02d28a37b53a8e19af7935db5be1a8 2007-12-10T17:58:07.273873Z 975 @@ -103,7 +103,7 @@ -2010-09-23T14:37:45.623761Z +2011-07-14T09:24:11.000000Z 597b7501984a5ecd10242163d06c33e7 2007-12-10T17:58:07.273873Z 975 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/classic_pagination/test/fixtures/.svn/all-wcprops --- a/vendor/plugins/classic_pagination/test/fixtures/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,77 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 71 -/svn/!svn/ver/975/trunk/vendor/plugins/classic_pagination/test/fixtures -END -topic.rb -K 25 -svn:wc:ra_dav:version-url -V 80 -/svn/!svn/ver/975/trunk/vendor/plugins/classic_pagination/test/fixtures/topic.rb -END -developers_projects.yml -K 25 -svn:wc:ra_dav:version-url -V 95 -/svn/!svn/ver/975/trunk/vendor/plugins/classic_pagination/test/fixtures/developers_projects.yml -END -topics.yml -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/975/trunk/vendor/plugins/classic_pagination/test/fixtures/topics.yml -END -replies.yml -K 25 -svn:wc:ra_dav:version-url -V 83 -/svn/!svn/ver/975/trunk/vendor/plugins/classic_pagination/test/fixtures/replies.yml -END -developer.rb -K 25 -svn:wc:ra_dav:version-url -V 84 -/svn/!svn/ver/975/trunk/vendor/plugins/classic_pagination/test/fixtures/developer.rb -END -company.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/975/trunk/vendor/plugins/classic_pagination/test/fixtures/company.rb -END -developers.yml -K 25 -svn:wc:ra_dav:version-url -V 86 -/svn/!svn/ver/975/trunk/vendor/plugins/classic_pagination/test/fixtures/developers.yml -END -project.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/975/trunk/vendor/plugins/classic_pagination/test/fixtures/project.rb -END -projects.yml -K 25 -svn:wc:ra_dav:version-url -V 84 -/svn/!svn/ver/975/trunk/vendor/plugins/classic_pagination/test/fixtures/projects.yml -END -reply.rb -K 25 -svn:wc:ra_dav:version-url -V 80 -/svn/!svn/ver/975/trunk/vendor/plugins/classic_pagination/test/fixtures/reply.rb -END -companies.yml -K 25 -svn:wc:ra_dav:version-url -V 85 -/svn/!svn/ver/975/trunk/vendor/plugins/classic_pagination/test/fixtures/companies.yml -END -schema.sql -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/975/trunk/vendor/plugins/classic_pagination/test/fixtures/schema.sql -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/classic_pagination/test/fixtures/.svn/entries --- a/vendor/plugins/classic_pagination/test/fixtures/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/classic_pagination/test/fixtures/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/classic_pagination/test/fixtures +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/classic_pagination/test/fixtures http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.619761Z +2011-07-14T09:24:11.000000Z 4e923be7fd534a67635192bcfcbed5cf 2007-12-10T17:58:07.273873Z 975 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.619761Z +2011-07-14T09:24:11.000000Z 021192cd31a5c3a39cbe7bd14144425a 2007-12-10T17:58:07.273873Z 975 @@ -100,7 +100,7 @@ -2010-09-23T14:37:45.619761Z +2011-07-14T09:24:11.000000Z 5953f128689c82c1d5c9ab2709a682e4 2007-12-10T17:58:07.273873Z 975 @@ -134,7 +134,7 @@ -2010-09-23T14:37:45.619761Z +2011-07-14T09:24:11.000000Z cc2715c9793cffccefbac86e97dd5a08 2007-12-10T17:58:07.273873Z 975 @@ -168,7 +168,7 @@ -2010-09-23T14:37:45.619761Z +2011-07-14T09:24:11.000000Z 92e8d8a3cd6b419bdabbafc91be07b13 2007-12-10T17:58:07.273873Z 975 @@ -202,7 +202,7 @@ -2010-09-23T14:37:45.619761Z +2011-07-14T09:24:11.000000Z 182661632986d51f75c49d74b19df40c 2007-12-10T17:58:07.273873Z 975 @@ -236,7 +236,7 @@ -2010-09-23T14:37:45.619761Z +2011-07-14T09:24:11.000000Z f1bf372057211d4a6d86499e561d903c 2007-12-10T17:58:07.273873Z 975 @@ -270,7 +270,7 @@ -2010-09-23T14:37:45.619761Z +2011-07-14T09:24:11.000000Z 98f978d0e16223524ee8dc769136a3c4 2007-12-10T17:58:07.273873Z 975 @@ -304,7 +304,7 @@ -2010-09-23T14:37:45.619761Z +2011-07-14T09:24:11.000000Z 3605b2a8f1cf10cbc34343bd7c49330d 2007-12-10T17:58:07.273873Z 975 @@ -338,7 +338,7 @@ -2010-09-23T14:37:45.619761Z +2011-07-14T09:24:11.000000Z dccebb95780c20b896fe26306d904e9d 2007-12-10T17:58:07.273873Z 975 @@ -372,7 +372,7 @@ -2010-09-23T14:37:45.619761Z +2011-07-14T09:24:11.000000Z 318c27008dc35148da64e32ff9bf53c7 2007-12-10T17:58:07.273873Z 975 @@ -406,7 +406,7 @@ -2010-09-23T14:37:45.619761Z +2011-07-14T09:24:11.000000Z 78b664b5dbb72751888e7f6bf4cd12f8 2007-12-09T21:53:46.068689Z 966 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/.svn/all-wcprops --- a/vendor/plugins/coderay-0.9.2/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2 -END -LICENSE -K 25 -svn:wc:ra_dav:version-url -V 61 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/LICENSE -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/.svn/entries --- a/vendor/plugins/coderay-0.9.2/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ -10 - -dir -4411 -http://redmine.rubyforge.org/svn/trunk/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-09-23T14:37:45.623761Z -071d975e884a936b40eab0b865ea4da1 -2010-03-16T20:29:12.319937Z -3592 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -26534 - -lib -dir - diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/.svn/prop-base/LICENSE.svn-base --- a/vendor/plugins/coderay-0.9.2/.svn/prop-base/LICENSE.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/.svn/text-base/LICENSE.svn-base --- a/vendor/plugins/coderay-0.9.2/.svn/text-base/LICENSE.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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. - - - Copyright (C) - - 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. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/LICENSE --- a/vendor/plugins/coderay-0.9.2/LICENSE Mon Mar 28 18:17:06 2011 +0100 +++ /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. - - - Copyright (C) - - 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. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/.svn/all-wcprops --- a/vendor/plugins/coderay-0.9.2/lib/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib -END -coderay.rb -K 25 -svn:wc:ra_dav:version-url -V 68 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay.rb -END -README -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/README -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/.svn/entries --- a/vendor/plugins/coderay-0.9.2/lib/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -10 - -dir -4411 -http://redmine.rubyforge.org/svn/trunk/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-09-23T14:37:45.627760Z -c736c3ed620d59c1c6799d6fa340b0af -2010-03-16T20:29:12.319937Z -3592 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -10050 - -README -file - - - - -2010-09-23T14:37:45.627760Z -0d50df22acd760dc1905c7ef55e509e6 -2010-03-16T20:29:12.319937Z -3592 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -4998 - diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/.svn/prop-base/README.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/.svn/prop-base/README.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/.svn/prop-base/coderay.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/.svn/prop-base/coderay.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/.svn/text-base/README.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/.svn/text-base/README.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 . - - -== 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 :) diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/.svn/text-base/coderay.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/.svn/text-base/coderay.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 "Hello, world!" -# -# -# === 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 :python or :html. -# * 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, :ruby 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 :html or :statistic. -# -# 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
    ' } - gsub!(/\n/) { "\n" } - 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 = '' * opened_tags.size - - "
  • #{open}#{line}#{close}
  • \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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/output.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/output.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 'Code' - # 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 - - 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>)/) { $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> - - - - -<%CONTENT%> - - - PAGE - - end - - end - -end -end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/json.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/json.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/lines_of_code.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/lines_of_code.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/null.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/null.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/page.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/page.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/span.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/span.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/statistic.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/statistic.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/term.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/term.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/text.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/text.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/token_class_filter.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/token_class_filter.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/xml.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/xml.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/yaml.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/yaml.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/for_redcloth.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/for_redcloth.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 = { - '&' => '&', - '"' => '"', - '>' => '>', - '<' => '<', - } - 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 - "#{opts[:text]}" - end - end - def bc_open(opts) # :nodoc: - opts[:block] = true - @in_bc = opts - opts[:lang] ? '' : "" - end - def bc_close(opts) # :nodoc: - opts = @in_bc - @in_bc = nil - opts[:lang] ? '' : "\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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/all-wcprops --- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 73 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/helpers -END -plugin.rb -K 25 -svn:wc:ra_dav:version-url -V 83 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/plugin.rb -END -file_type.rb -K 25 -svn:wc:ra_dav:version-url -V 86 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/file_type.rb -END -gzip_simple.rb -K 25 -svn:wc:ra_dav:version-url -V 88 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/gzip_simple.rb -END -word_list.rb -K 25 -svn:wc:ra_dav:version-url -V 86 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/word_list.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/entries --- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,164 +0,0 @@ -10 - -dir -4411 -http://redmine.rubyforge.org/svn/trunk/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-09-23T14:37:45.655760Z -a8ef4aea22392cc4012ee679fc1d15ba -2010-03-16T20:29:12.319937Z -3592 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -7926 - -file_type.rb -file - - - - -2010-09-23T14:37:45.655760Z -107e3d46dc60830e87b1a4ce4d467ce8 -2010-03-16T20:29:12.319937Z -3592 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -6494 - -gzip_simple.rb -file - - - - -2010-09-23T14:37:45.655760Z -ffacc98651f60a6fe698427bbc3c3c86 -2010-03-16T20:29:12.319937Z -3592 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -2701 - -word_list.rb -file - - - - -2010-09-23T14:37:45.655760Z -86d05af27cbe342789f28ed543956aa5 -2010-03-16T20:29:12.319937Z -3592 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -3229 - diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/prop-base/file_type.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/prop-base/file_type.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/prop-base/gzip_simple.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/prop-base/gzip_simple.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/prop-base/plugin.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/prop-base/plugin.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/prop-base/word_list.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/prop-base/word_list.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/text-base/file_type.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/text-base/file_type.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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) -# -# 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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/text-base/gzip_simple.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/text-base/gzip_simple.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/text-base/plugin.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/text-base/plugin.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 '/' -# -# 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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/text-base/word_list.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/text-base/word_list.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,138 +0,0 @@ -module CodeRay - -# = WordList -# -# A Hash subclass designed for mapping word lists to token types. -# -# Copyright (c) 2006 by murphy (Kornelius Kalnbach) -# -# 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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/helpers/file_type.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/file_type.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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) -# -# 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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/helpers/gzip_simple.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/gzip_simple.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/helpers/plugin.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/plugin.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 '/' -# -# 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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/helpers/word_list.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/word_list.rb Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,138 +0,0 @@ -module CodeRay - -# = WordList -# -# A Hash subclass designed for mapping word lists to token types. -# -# Copyright (c) 2006 by murphy (Kornelius Kalnbach) -# -# 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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanner.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanner.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/all-wcprops --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,137 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 74 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners -END -java.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java.rb -END -python.rb -K 25 -svn:wc:ra_dav:version-url -V 84 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/python.rb -END -ruby.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby.rb -END -cpp.rb -K 25 -svn:wc:ra_dav:version-url -V 81 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/cpp.rb -END -c.rb -K 25 -svn:wc:ra_dav:version-url -V 79 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/c.rb -END -groovy.rb -K 25 -svn:wc:ra_dav:version-url -V 84 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/groovy.rb -END -debug.rb -K 25 -svn:wc:ra_dav:version-url -V 83 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/debug.rb -END -rhtml.rb -K 25 -svn:wc:ra_dav:version-url -V 83 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/rhtml.rb -END -php.rb -K 25 -svn:wc:ra_dav:version-url -V 81 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/php.rb -END -css.rb -K 25 -svn:wc:ra_dav:version-url -V 81 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/css.rb -END -sql.rb -K 25 -svn:wc:ra_dav:version-url -V 81 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/sql.rb -END -xml.rb -K 25 -svn:wc:ra_dav:version-url -V 81 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/xml.rb -END -yaml.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/yaml.rb -END -scheme.rb -K 25 -svn:wc:ra_dav:version-url -V 84 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/scheme.rb -END -html.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/html.rb -END -java_script.rb -K 25 -svn:wc:ra_dav:version-url -V 89 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java_script.rb -END -delphi.rb -K 25 -svn:wc:ra_dav:version-url -V 84 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/delphi.rb -END -nitro_xhtml.rb -K 25 -svn:wc:ra_dav:version-url -V 89 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/nitro_xhtml.rb -END -plaintext.rb -K 25 -svn:wc:ra_dav:version-url -V 87 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/plaintext.rb -END -diff.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/diff.rb -END -json.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/json.rb -END -_map.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/_map.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/entries --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,782 +0,0 @@ -10 - -dir -4411 -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 - diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/_map.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/_map.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/c.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/c.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/cpp.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/cpp.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/css.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/css.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/debug.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/debug.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/delphi.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/delphi.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/diff.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/diff.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/groovy.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/groovy.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/html.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/html.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/java.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/java.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/java_script.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/java_script.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/json.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/json.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/nitro_xhtml.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/nitro_xhtml.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/php.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/php.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/plaintext.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/plaintext.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/python.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/python.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/rhtml.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/rhtml.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/ruby.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/ruby.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/scheme.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/scheme.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/sql.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/sql.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/xml.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/xml.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/yaml.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/yaml.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/_map.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/_map.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/c.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/c.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/cpp.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/cpp.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/css.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/css.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/debug.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/debug.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/delphi.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/delphi.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/diff.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/diff.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/groovy.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/groovy.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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(/ \.\.] | \+\+ | - && | \|\| | \*\*=? | ==?~ | <=?>? | [-+*%^~&|>=!]=? | <<>>?=? /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/html.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/html.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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(//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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/java.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/java.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/java_script.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/java_script.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/json.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/json.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/nitro_xhtml.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/nitro_xhtml.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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> )? - | - <% - (?> - [^%]* - (?> %(?!>) [^%]* )* - ) - (?: %> )? - /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 = '' ? '?>' : '' - 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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/php.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/php.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 = / - ]*?language\s*=\s*"php"[^>]*?> | - ]*?language\s*=\s*'php'[^>]*?> | - <\?php\d? | - <\?(?!xml) - /xi - - PHP_END = %r! - | - \?> - !xi - - HTML_INDICATOR = / ]/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 #{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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/plaintext.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/plaintext.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/python.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/python.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/rhtml.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/rhtml.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/ruby.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/ruby.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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(/< 1 - state = this_block.first - tokens << [:close, state.type] - end - - tokens - end - - end - -end -end - -# vim:fdm=marker diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/scheme.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/scheme.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/sql.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/sql.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/xml.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/xml.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/yaml.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/yaml.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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(/< :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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/c.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/c.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/cpp.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/cpp.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/css.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/css.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/debug.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/debug.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/delphi.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/delphi.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/diff.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/diff.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/groovy.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/groovy.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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(/ \.\.] | \+\+ | - && | \|\| | \*\*=? | ==?~ | <=?>? | [-+*%^~&|>=!]=? | <<>>?=? /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/html.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/html.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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(//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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/.svn/all-wcprops --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 79 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java -END -builtin_types.rb -K 25 -svn:wc:ra_dav:version-url -V 96 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/builtin_types.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/.svn/entries --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,62 +0,0 @@ -10 - -dir -4411 -http://redmine.rubyforge.org/svn/trunk/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-09-23T14:37:45.675761Z -2522414597cbbef27fad175c20c8a556 -2010-03-16T20:29:12.319937Z -3592 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -41768 - diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/.svn/prop-base/builtin_types.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/.svn/prop-base/builtin_types.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/.svn/text-base/builtin_types.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/.svn/text-base/builtin_types.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/builtin_types.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/builtin_types.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java_script.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java_script.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/json.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/json.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/nitro_xhtml.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/nitro_xhtml.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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> )? - | - <% - (?> - [^%]* - (?> %(?!>) [^%]* )* - ) - (?: %> )? - /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 = '' ? '?>' : '' - 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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/php.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/php.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 = / - ]*?language\s*=\s*"php"[^>]*?> | - ]*?language\s*=\s*'php'[^>]*?> | - <\?php\d? | - <\?(?!xml) - /xi - - PHP_END = %r! - | - \?> - !xi - - HTML_INDICATOR = / ]/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 #{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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/plaintext.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/plaintext.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/python.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/python.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/rhtml.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/rhtml.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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(/< 1 - state = this_block.first - tokens << [:close, state.type] - end - - tokens - end - - end - -end -end - -# vim:fdm=marker diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby/.svn/all-wcprops --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 79 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby -END -patterns.rb -K 25 -svn:wc:ra_dav:version-url -V 91 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby/patterns.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby/.svn/entries --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,62 +0,0 @@ -10 - -dir -4411 -http://redmine.rubyforge.org/svn/trunk/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-09-23T14:37:45.679790Z -ae0aca82c4390ffcc5757c97c71bc8f3 -2010-03-16T20:29:12.319937Z -3592 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -6903 - diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby/.svn/prop-base/patterns.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby/.svn/prop-base/patterns.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby/.svn/text-base/patterns.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby/.svn/text-base/patterns.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby/patterns.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby/patterns.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/scheme.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/scheme.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/sql.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/sql.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/xml.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/xml.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/scanners/yaml.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/yaml.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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(/< '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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/tokens.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/tokens.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/.svn/all-wcprops --- a/vendor/plugins/engines/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,53 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 47 -/svn/!svn/ver/4406/trunk/vendor/plugins/engines +V 61 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/engines END -Rakefile -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/Rakefile -END -.gitignore -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/1654/trunk/vendor/plugins/engines/.gitignore -END -boot.rb -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/2904/trunk/vendor/plugins/engines/boot.rb -END -init.rb -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/init.rb -END -CHANGELOG -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/2493/trunk/vendor/plugins/engines/CHANGELOG -END -MIT-LICENSE -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/1654/trunk/vendor/plugins/engines/MIT-LICENSE -END -about.yml -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/about.yml -END -README -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/1654/trunk/vendor/plugins/engines/README -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/.svn/entries --- a/vendor/plugins/engines/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,14 +1,14 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines http://redmine.rubyforge.org/svn -2010-11-14T16:24:21.989522Z -4406 +2011-03-24T18:46:12.279245Z +5216 jplang @@ -35,7 +35,7 @@ -2010-09-23T14:37:45.687760Z +2011-07-14T09:24:11.000000Z b8328004b1bb94c84d90c0839cd7d41d 2009-09-13T17:14:35.707881Z 2887 @@ -63,16 +63,13 @@ 8492 -tasks -dir - .gitignore file -2010-09-23T14:37:45.683786Z +2011-07-14T09:24:11.000000Z a523ea1465a566ae38fba96a99506ff3 2008-07-12T10:17:14.809831Z 1654 @@ -106,7 +103,7 @@ -2010-09-23T14:37:45.691758Z +2011-07-14T09:24:11.000000Z f653a768811758cee11e21d4de00b381 2009-10-07T16:43:50.656336Z 2904 @@ -140,7 +137,7 @@ -2010-09-23T14:37:45.695759Z +2011-07-14T09:24:11.000000Z e4f81ba26f0b10a838b3336ba263aaa5 2009-09-13T17:14:35.707881Z 2887 @@ -177,7 +174,7 @@ -2010-09-23T14:37:45.687760Z +2011-07-14T09:24:11.000000Z 41bb5eeb2864cd46438eefb1cb048c4d 2009-02-21T11:04:50.579477Z 2493 @@ -214,7 +211,7 @@ -2010-09-23T14:37:45.687760Z +2011-07-14T09:24:11.000000Z 6e112fd6d07885bef3fd5bd537fc1409 2008-07-12T10:17:14.809831Z 1654 @@ -248,7 +245,7 @@ -2010-09-23T14:37:45.691758Z +2011-07-14T09:24:11.000000Z 18cc761cb69b7735ecf0cdb0d9b6d640 2009-09-13T17:14:35.707881Z 2887 @@ -282,7 +279,7 @@ -2010-09-23T14:37:45.687760Z +2011-07-14T09:24:11.000000Z 7e25f2cbded59c24735a20510040bb74 2008-07-12T10:17:14.809831Z 1654 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/generators/.svn/all-wcprops --- a/vendor/plugins/engines/generators/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/4406/trunk/vendor/plugins/engines/generators -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/generators/.svn/entries --- a/vendor/plugins/engines/generators/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/generators/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/generators +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/generators http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/generators/plugin_migration/.svn/all-wcprops --- a/vendor/plugins/engines/generators/plugin_migration/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 75 -/svn/!svn/ver/4406/trunk/vendor/plugins/engines/generators/plugin_migration -END -plugin_migration_generator.rb -K 25 -svn:wc:ra_dav:version-url -V 105 -/svn/!svn/ver/4406/trunk/vendor/plugins/engines/generators/plugin_migration/plugin_migration_generator.rb -END -USAGE -K 25 -svn:wc:ra_dav:version-url -V 81 -/svn/!svn/ver/1654/trunk/vendor/plugins/engines/generators/plugin_migration/USAGE -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/generators/plugin_migration/.svn/entries --- a/vendor/plugins/engines/generators/plugin_migration/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/generators/plugin_migration/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/generators/plugin_migration +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/generators/plugin_migration http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-11-19T13:04:50.916901Z +2011-07-14T09:24:11.000000Z 3f4805cb1e4a8b8a3ed180f22d81c285 2010-11-14T16:24:21.989522Z 4406 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.691758Z +2011-07-14T09:24:11.000000Z d796f61555b36ef9941ea049c94df06b 2008-07-12T10:17:14.809831Z 1654 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/generators/plugin_migration/templates/.svn/all-wcprops --- a/vendor/plugins/engines/generators/plugin_migration/templates/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 85 -/svn/!svn/ver/1654/trunk/vendor/plugins/engines/generators/plugin_migration/templates -END -plugin_migration.erb -K 25 -svn:wc:ra_dav:version-url -V 106 -/svn/!svn/ver/1654/trunk/vendor/plugins/engines/generators/plugin_migration/templates/plugin_migration.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/generators/plugin_migration/templates/.svn/entries --- a/vendor/plugins/engines/generators/plugin_migration/templates/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/generators/plugin_migration/templates/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/generators/plugin_migration/templates +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/generators/plugin_migration/templates http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.695759Z +2011-07-14T09:24:11.000000Z 0b30f95c4244242093ded274caf9e4a8 2008-07-12T10:17:14.809831Z 1654 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/lib/.svn/all-wcprops --- a/vendor/plugins/engines/lib/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/lib/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,11 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/4094/trunk/vendor/plugins/engines/lib +V 65 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/engines/lib END -engines.rb -K 25 -svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/lib/engines.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/lib/.svn/entries --- a/vendor/plugins/engines/lib/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/lib/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/lib +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/lib http://redmine.rubyforge.org/svn -2010-09-17T04:06:40.671348Z -4094 -edavis10 +2011-03-24T18:46:12.279245Z +5216 +jplang @@ -26,6 +26,9 @@ e93f8b46-1217-0410-a6f0-8f06a7374b81 +tasks +dir + engines dir @@ -35,7 +38,7 @@ -2010-09-23T14:37:45.695759Z +2011-07-14T09:24:11.000000Z b9128ad79c06e8c2eb2474a7f9edf60d 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/lib/engines/.svn/all-wcprops --- a/vendor/plugins/engines/lib/engines/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/4094/trunk/vendor/plugins/engines/lib/engines -END -testing.rb -K 25 -svn:wc:ra_dav:version-url -V 70 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/lib/engines/testing.rb -END -plugin.rb -K 25 -svn:wc:ra_dav:version-url -V 69 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/lib/engines/plugin.rb -END -assets.rb -K 25 -svn:wc:ra_dav:version-url -V 69 -/svn/!svn/ver/2493/trunk/vendor/plugins/engines/lib/engines/assets.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/lib/engines/.svn/entries --- a/vendor/plugins/engines/lib/engines/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/lib/engines/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/lib/engines +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/lib/engines http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.707755Z +2011-07-14T09:24:11.000000Z f5e61f1312a19bdac20f06b7529eaa98 2009-09-13T17:14:35.707881Z 2887 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.699755Z +2011-07-14T09:24:11.000000Z d084e8ccb3edfb9f481f2626ee9e57e1 2009-09-13T17:14:35.707881Z 2887 @@ -100,7 +100,7 @@ -2010-09-23T14:37:45.699755Z +2011-07-14T09:24:11.000000Z a2cb2f3c517fbe62ab1277e44b0a05ed 2009-02-21T11:04:50.579477Z 2493 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/lib/engines/plugin/.svn/all-wcprops --- a/vendor/plugins/engines/lib/engines/plugin/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/lib/engines/plugin -END -locator.rb -K 25 -svn:wc:ra_dav:version-url -V 77 -/svn/!svn/ver/1654/trunk/vendor/plugins/engines/lib/engines/plugin/locator.rb -END -migrator.rb -K 25 -svn:wc:ra_dav:version-url -V 78 -/svn/!svn/ver/2493/trunk/vendor/plugins/engines/lib/engines/plugin/migrator.rb -END -loader.rb -K 25 -svn:wc:ra_dav:version-url -V 76 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/lib/engines/plugin/loader.rb -END -list.rb -K 25 -svn:wc:ra_dav:version-url -V 74 -/svn/!svn/ver/1654/trunk/vendor/plugins/engines/lib/engines/plugin/list.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/lib/engines/plugin/.svn/entries --- a/vendor/plugins/engines/lib/engines/plugin/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/lib/engines/plugin/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/lib/engines/plugin +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/lib/engines/plugin http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.703755Z +2011-07-14T09:24:11.000000Z 2adca63e7c7d7c38a91953458e893bb2 2008-07-12T10:17:14.809831Z 1654 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.703755Z +2011-07-14T09:24:11.000000Z 21ac938bcf4f86e62ec21e9803cfd76e 2009-02-21T11:04:50.579477Z 2493 @@ -100,7 +100,7 @@ -2010-09-23T14:37:45.703755Z +2011-07-14T09:24:11.000000Z 38eaf6e3b113f74daa0669c67261cc72 2009-09-13T17:14:35.707881Z 2887 @@ -134,7 +134,7 @@ -2010-09-23T14:37:45.703755Z +2011-07-14T09:24:11.000000Z d68941171066743dd63a174b5f270f66 2008-07-12T10:17:14.809831Z 1654 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/lib/engines/rails_extensions/.svn/all-wcprops --- a/vendor/plugins/engines/lib/engines/rails_extensions/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 76 -/svn/!svn/ver/4094/trunk/vendor/plugins/engines/lib/engines/rails_extensions -END -form_tag_helpers.rb -K 25 -svn:wc:ra_dav:version-url -V 96 -/svn/!svn/ver/2493/trunk/vendor/plugins/engines/lib/engines/rails_extensions/form_tag_helpers.rb -END -asset_helpers.rb -K 25 -svn:wc:ra_dav:version-url -V 93 -/svn/!svn/ver/4094/trunk/vendor/plugins/engines/lib/engines/rails_extensions/asset_helpers.rb -END -dependencies.rb -K 25 -svn:wc:ra_dav:version-url -V 92 -/svn/!svn/ver/2493/trunk/vendor/plugins/engines/lib/engines/rails_extensions/dependencies.rb -END -rails.rb -K 25 -svn:wc:ra_dav:version-url -V 85 -/svn/!svn/ver/1654/trunk/vendor/plugins/engines/lib/engines/rails_extensions/rails.rb -END -migrations.rb -K 25 -svn:wc:ra_dav:version-url -V 90 -/svn/!svn/ver/2493/trunk/vendor/plugins/engines/lib/engines/rails_extensions/migrations.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/lib/engines/rails_extensions/.svn/entries --- a/vendor/plugins/engines/lib/engines/rails_extensions/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/lib/engines/rails_extensions/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/lib/engines/rails_extensions +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/lib/engines/rails_extensions http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.707755Z +2011-07-14T09:24:11.000000Z 3e26c9fe2cd009cb5e81f6ccea3f012c 2009-02-21T11:04:50.579477Z 2493 @@ -66,7 +66,7 @@ -2010-09-24T12:48:29.635919Z +2011-07-14T09:24:11.000000Z c5a5e8b469c1e3fefcc5bedca9f4ac82 2010-09-17T04:06:40.671348Z 4094 @@ -100,7 +100,7 @@ -2010-09-23T14:37:45.707755Z +2011-07-14T09:24:11.000000Z 6e29697f02c187c9033624422365044a 2009-02-21T11:04:50.579477Z 2493 @@ -134,7 +134,7 @@ -2010-09-23T14:37:45.707755Z +2011-07-14T09:24:11.000000Z f26da6a18ffcc7b846838f038a0abea4 2008-07-12T10:17:14.809831Z 1654 @@ -168,7 +168,7 @@ -2010-09-23T14:37:45.707755Z +2011-07-14T09:24:11.000000Z 8f8e408b9f1a72af1cc5232ddb888266 2009-02-21T11:04:50.579477Z 2493 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/lib/tasks/engines.rake --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/engines/lib/tasks/engines.rake Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,281 @@ +# This code lets us redefine existing Rake tasks, which is extremely +# handy for modifying existing Rails rake tasks. +# Credit for the original snippet of code goes to Jeremy Kemper +# http://pastie.caboo.se/9620 +unless Rake::TaskManager.methods.include?('redefine_task') + module Rake + module TaskManager + def redefine_task(task_class, args, &block) + task_name, arg_names, deps = resolve_args([args]) + task_name = task_class.scope_name(@scope, task_name) + deps = [deps] unless deps.respond_to?(:to_ary) + deps = deps.collect {|d| d.to_s } + task = @tasks[task_name.to_s] = task_class.new(task_name, self) + task.application = self + task.add_description(@last_description) + @last_description = nil + task.enhance(deps, &block) + task + end + + end + class Task + class << self + def redefine_task(args, &block) + Rake.application.redefine_task(self, [args], &block) + end + end + end + end +end + +namespace :db do + namespace :migrate do + desc 'Migrate database and plugins to current status.' + task :all => [ 'db:migrate', 'db:migrate:plugins' ] + + desc 'Migrate plugins to current status.' + task :plugins => :environment do + Engines.plugins.each do |plugin| + next unless plugin.respond_to?(:migration_directory) + next unless File.exists? plugin.migration_directory + puts "Migrating plugin #{plugin.name} ..." + plugin.migrate + end + end + + desc 'For engines coming from Rails version < 2.0 or for those previously updated to work with Sven Fuch\'s fork of engines, you need to upgrade the schema info table' + task :upgrade_plugin_migrations => :environment do + svens_fork_table_name = 'plugin_schema_migrations' + + # Check if app was previously using Sven's fork + if ActiveRecord::Base.connection.table_exists?(svens_fork_table_name) + old_sm_table = svens_fork_table_name + else + old_sm_table = ActiveRecord::Migrator.proper_table_name(Engines.schema_info_table) + end + + unless ActiveRecord::Base.connection.table_exists?(old_sm_table) + abort "Cannot find old migration table - assuming nothing needs to be done" + end + + # There are two forms of the engines schema info - pre-fix_plugin_migrations and post + # We need to figure this out before we continue. + + results = ActiveRecord::Base.connection.select_rows( + "SELECT version, plugin_name FROM #{old_sm_table}" + ).uniq + + def insert_new_version(plugin_name, version) + version_string = "#{version}-#{plugin_name}" + new_sm_table = ActiveRecord::Migrator.schema_migrations_table_name + + # Check if the row already exists for some reason - maybe run this task more than once. + return if ActiveRecord::Base.connection.select_rows("SELECT * FROM #{new_sm_table} WHERE version = #{version_string.dump.gsub("\"", "'")}").size > 0 + + puts "Inserting new version #{version} for plugin #{plugin_name}.." + ActiveRecord::Base.connection.insert("INSERT INTO #{new_sm_table} (version) VALUES (#{version_string.dump.gsub("\"", "'")})") + end + + # We need to figure out if they already used "fix_plugin_migrations" + versions = {} + results.each do |r| + versions[r[1]] ||= [] + versions[r[1]] << r[0].to_i + end + + if versions.values.find{ |v| v.size > 1 } == nil + puts "Fixing migration info" + # We only have one listed migration per plugin - this is pre-fix_plugin_migrations, + # so we build all versions required. In this case, all migrations should + versions.each do |plugin_name, version| + version = version[0] # There is only one version + + # We have to make an assumption that numeric migrations won't get this long.. + # I'm not sure if there is a better assumption, it should work in all + # current cases.. (touch wood..) + if version.to_s.size < "YYYYMMDDHHMMSS".size + # Insert version records for each migration + (1..version).each do |v| + insert_new_version(plugin_name, v) + end + else + # If the plugin is new-format "YYYYMMDDHHMMSS", we just copy it across... + # The case in which this occurs is very rare.. + insert_new_version(plugin_name, version) + end + end + else + puts "Moving migration info" + # We have multiple migrations listed per plugin - thus we can assume they have + # already applied fix_plugin_migrations - we just copy it across verbatim + versions.each do |plugin_name, version| + version.each { |v| insert_new_version(plugin_name, v) } + end + end + + puts "Migration info successfully migrated - removing old schema info table" + ActiveRecord::Base.connection.drop_table(old_sm_table) + end + + desc 'Migrate a specified plugin.' + task(:plugin => :environment) do + name = ENV['NAME'] + if plugin = Engines.plugins[name] + version = ENV['VERSION'] + puts "Migrating #{plugin.name} to " + (version ? "version #{version}" : 'latest version') + " ..." + plugin.migrate(version ? version.to_i : nil) + else + puts "Plugin #{name} does not exist." + end + end + end +end + + +namespace :db do + namespace :fixtures do + namespace :plugins do + + desc "Load plugin fixtures into the current environment's database." + task :load => :environment do + require 'active_record/fixtures' + ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym) + Dir.glob(File.join(RAILS_ROOT, 'vendor', 'plugins', ENV['PLUGIN'] || '**', + 'test', 'fixtures', '*.yml')).each do |fixture_file| + Fixtures.create_fixtures(File.dirname(fixture_file), File.basename(fixture_file, '.*')) + end + end + + end + end +end + +# this is just a modification of the original task in railties/lib/tasks/documentation.rake, +# because the default task doesn't support subdirectories like /app or +# /component. These tasks now include every file under a plugin's load paths (see +# Plugin#load_paths). +namespace :doc do + + plugins = FileList['vendor/plugins/**'].collect { |plugin| File.basename(plugin) } + + namespace :plugins do + + # Define doc tasks for each plugin + plugins.each do |plugin| + desc "Create plugin documentation for '#{plugin}'" + Rake::Task.redefine_task(plugin => :environment) do + plugin_base = RAILS_ROOT + "/vendor/plugins/#{plugin}" + options = [] + files = Rake::FileList.new + options << "-o doc/plugins/#{plugin}" + options << "--title '#{plugin.titlecase} Plugin Documentation'" + options << '--line-numbers' << '--inline-source' + options << '-T html' + + # Include every file in the plugin's load_paths (see Plugin#load_paths) + if Engines.plugins[plugin] + files.include("#{plugin_base}/{#{Engines.plugins[plugin].load_paths.join(",")}}/**/*.rb") + end + if File.exists?("#{plugin_base}/README") + files.include("#{plugin_base}/README") + options << "--main '#{plugin_base}/README'" + end + files.include("#{plugin_base}/CHANGELOG") if File.exists?("#{plugin_base}/CHANGELOG") + + if files.empty? + puts "No source files found in #{plugin_base}. No documentation will be generated." + else + options << files.to_s + sh %(rdoc #{options * ' '}) + end + end + end + end +end + + + +namespace :test do + task :warn_about_multiple_plugin_testing_with_engines do + puts %{-~============== A Moste Polite Warninge ===========================~- + +You may experience issues testing multiple plugins at once when using +the code-mixing features that the engines plugin provides. If you do +experience any problems, please test plugins individually, i.e. + + $ rake test:plugins PLUGIN=my_plugin + +or use the per-type plugin test tasks: + + $ rake test:plugins:units + $ rake test:plugins:functionals + $ rake test:plugins:integration + $ rake test:plugins:all + +Report any issues on http://dev.rails-engines.org. Thanks! + +-~===============( ... as you were ... )============================~-} + end + + namespace :engines do + + def engine_plugins + Dir["vendor/plugins/*"].select { |f| File.directory?(File.join(f, "app")) }.map { |f| File.basename(f) }.join(",") + end + + desc "Run tests from within engines plugins (plugins with an 'app' directory)" + task :all => [:units, :functionals, :integration] + + desc "Run unit tests from within engines plugins (plugins with an 'app' directory)" + Rake::TestTask.new(:units => "test:plugins:setup_plugin_fixtures") do |t| + t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/unit/**/*_test.rb" + t.verbose = true + end + + desc "Run functional tests from within engines plugins (plugins with an 'app' directory)" + Rake::TestTask.new(:functionals => "test:plugins:setup_plugin_fixtures") do |t| + t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/functional/**/*_test.rb" + t.verbose = true + end + + desc "Run integration tests from within engines plugins (plugins with an 'app' directory)" + Rake::TestTask.new(:integration => "test:plugins:setup_plugin_fixtures") do |t| + t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/integration/**/*_test.rb" + t.verbose = true + end + end + + namespace :plugins do + + desc "Run the plugin tests in vendor/plugins/**/test (or specify with PLUGIN=name)" + task :all => [:warn_about_multiple_plugin_testing_with_engines, + :units, :functionals, :integration] + + desc "Run all plugin unit tests" + Rake::TestTask.new(:units => :setup_plugin_fixtures) do |t| + t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/unit/**/*_test.rb" + t.verbose = true + end + + desc "Run all plugin functional tests" + Rake::TestTask.new(:functionals => :setup_plugin_fixtures) do |t| + t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/functional/**/*_test.rb" + t.verbose = true + end + + desc "Integration test engines" + Rake::TestTask.new(:integration => :setup_plugin_fixtures) do |t| + t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/integration/**/*_test.rb" + t.verbose = true + end + + desc "Mirrors plugin fixtures into a single location to help plugin tests" + task :setup_plugin_fixtures => :environment do + Engines::Testing.setup_plugin_fixtures + end + + # Patch the default plugin testing task to have setup_plugin_fixtures as a prerequisite + Rake::Task["test:plugins"].prerequisites << "test:plugins:setup_plugin_fixtures" + end +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/tasks/.svn/all-wcprops --- a/vendor/plugins/engines/tasks/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/3186/trunk/vendor/plugins/engines/tasks -END -engines.rake -K 25 -svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/3186/trunk/vendor/plugins/engines/tasks/engines.rake -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/tasks/.svn/entries --- a/vendor/plugins/engines/tasks/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/tasks/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,7 +1,7 @@ 10 dir -4411 +4993 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/tasks http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.707755Z +2011-03-03T11:05:12.000000Z 10b9e5aacd9d0673e694f6ababd6ee3b 2009-12-18T14:41:37.649419Z 3186 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/tasks/.svn/text-base/engines.rake.svn-base --- a/vendor/plugins/engines/tasks/.svn/text-base/engines.rake.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,281 +0,0 @@ -# This code lets us redefine existing Rake tasks, which is extremely -# handy for modifying existing Rails rake tasks. -# Credit for the original snippet of code goes to Jeremy Kemper -# http://pastie.caboo.se/9620 -unless Rake::TaskManager.methods.include?('redefine_task') - module Rake - module TaskManager - def redefine_task(task_class, args, &block) - task_name, arg_names, deps = resolve_args([args]) - task_name = task_class.scope_name(@scope, task_name) - deps = [deps] unless deps.respond_to?(:to_ary) - deps = deps.collect {|d| d.to_s } - task = @tasks[task_name.to_s] = task_class.new(task_name, self) - task.application = self - task.add_description(@last_description) - @last_description = nil - task.enhance(deps, &block) - task - end - - end - class Task - class << self - def redefine_task(args, &block) - Rake.application.redefine_task(self, [args], &block) - end - end - end - end -end - -namespace :db do - namespace :migrate do - desc 'Migrate database and plugins to current status.' - task :all => [ 'db:migrate', 'db:migrate:plugins' ] - - desc 'Migrate plugins to current status.' - task :plugins => :environment do - Engines.plugins.each do |plugin| - next unless plugin.respond_to?(:migration_directory) - next unless File.exists? plugin.migration_directory - puts "Migrating plugin #{plugin.name} ..." - plugin.migrate - end - end - - desc 'For engines coming from Rails version < 2.0 or for those previously updated to work with Sven Fuch\'s fork of engines, you need to upgrade the schema info table' - task :upgrade_plugin_migrations => :environment do - svens_fork_table_name = 'plugin_schema_migrations' - - # Check if app was previously using Sven's fork - if ActiveRecord::Base.connection.table_exists?(svens_fork_table_name) - old_sm_table = svens_fork_table_name - else - old_sm_table = ActiveRecord::Migrator.proper_table_name(Engines.schema_info_table) - end - - unless ActiveRecord::Base.connection.table_exists?(old_sm_table) - abort "Cannot find old migration table - assuming nothing needs to be done" - end - - # There are two forms of the engines schema info - pre-fix_plugin_migrations and post - # We need to figure this out before we continue. - - results = ActiveRecord::Base.connection.select_rows( - "SELECT version, plugin_name FROM #{old_sm_table}" - ).uniq - - def insert_new_version(plugin_name, version) - version_string = "#{version}-#{plugin_name}" - new_sm_table = ActiveRecord::Migrator.schema_migrations_table_name - - # Check if the row already exists for some reason - maybe run this task more than once. - return if ActiveRecord::Base.connection.select_rows("SELECT * FROM #{new_sm_table} WHERE version = #{version_string.dump.gsub("\"", "'")}").size > 0 - - puts "Inserting new version #{version} for plugin #{plugin_name}.." - ActiveRecord::Base.connection.insert("INSERT INTO #{new_sm_table} (version) VALUES (#{version_string.dump.gsub("\"", "'")})") - end - - # We need to figure out if they already used "fix_plugin_migrations" - versions = {} - results.each do |r| - versions[r[1]] ||= [] - versions[r[1]] << r[0].to_i - end - - if versions.values.find{ |v| v.size > 1 } == nil - puts "Fixing migration info" - # We only have one listed migration per plugin - this is pre-fix_plugin_migrations, - # so we build all versions required. In this case, all migrations should - versions.each do |plugin_name, version| - version = version[0] # There is only one version - - # We have to make an assumption that numeric migrations won't get this long.. - # I'm not sure if there is a better assumption, it should work in all - # current cases.. (touch wood..) - if version.to_s.size < "YYYYMMDDHHMMSS".size - # Insert version records for each migration - (1..version).each do |v| - insert_new_version(plugin_name, v) - end - else - # If the plugin is new-format "YYYYMMDDHHMMSS", we just copy it across... - # The case in which this occurs is very rare.. - insert_new_version(plugin_name, version) - end - end - else - puts "Moving migration info" - # We have multiple migrations listed per plugin - thus we can assume they have - # already applied fix_plugin_migrations - we just copy it across verbatim - versions.each do |plugin_name, version| - version.each { |v| insert_new_version(plugin_name, v) } - end - end - - puts "Migration info successfully migrated - removing old schema info table" - ActiveRecord::Base.connection.drop_table(old_sm_table) - end - - desc 'Migrate a specified plugin.' - task(:plugin => :environment) do - name = ENV['NAME'] - if plugin = Engines.plugins[name] - version = ENV['VERSION'] - puts "Migrating #{plugin.name} to " + (version ? "version #{version}" : 'latest version') + " ..." - plugin.migrate(version ? version.to_i : nil) - else - puts "Plugin #{name} does not exist." - end - end - end -end - - -namespace :db do - namespace :fixtures do - namespace :plugins do - - desc "Load plugin fixtures into the current environment's database." - task :load => :environment do - require 'active_record/fixtures' - ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym) - Dir.glob(File.join(RAILS_ROOT, 'vendor', 'plugins', ENV['PLUGIN'] || '**', - 'test', 'fixtures', '*.yml')).each do |fixture_file| - Fixtures.create_fixtures(File.dirname(fixture_file), File.basename(fixture_file, '.*')) - end - end - - end - end -end - -# this is just a modification of the original task in railties/lib/tasks/documentation.rake, -# because the default task doesn't support subdirectories like /app or -# /component. These tasks now include every file under a plugin's load paths (see -# Plugin#load_paths). -namespace :doc do - - plugins = FileList['vendor/plugins/**'].collect { |plugin| File.basename(plugin) } - - namespace :plugins do - - # Define doc tasks for each plugin - plugins.each do |plugin| - desc "Create plugin documentation for '#{plugin}'" - Rake::Task.redefine_task(plugin => :environment) do - plugin_base = RAILS_ROOT + "/vendor/plugins/#{plugin}" - options = [] - files = Rake::FileList.new - options << "-o doc/plugins/#{plugin}" - options << "--title '#{plugin.titlecase} Plugin Documentation'" - options << '--line-numbers' << '--inline-source' - options << '-T html' - - # Include every file in the plugin's load_paths (see Plugin#load_paths) - if Engines.plugins[plugin] - files.include("#{plugin_base}/{#{Engines.plugins[plugin].load_paths.join(",")}}/**/*.rb") - end - if File.exists?("#{plugin_base}/README") - files.include("#{plugin_base}/README") - options << "--main '#{plugin_base}/README'" - end - files.include("#{plugin_base}/CHANGELOG") if File.exists?("#{plugin_base}/CHANGELOG") - - if files.empty? - puts "No source files found in #{plugin_base}. No documentation will be generated." - else - options << files.to_s - sh %(rdoc #{options * ' '}) - end - end - end - end -end - - - -namespace :test do - task :warn_about_multiple_plugin_testing_with_engines do - puts %{-~============== A Moste Polite Warninge ===========================~- - -You may experience issues testing multiple plugins at once when using -the code-mixing features that the engines plugin provides. If you do -experience any problems, please test plugins individually, i.e. - - $ rake test:plugins PLUGIN=my_plugin - -or use the per-type plugin test tasks: - - $ rake test:plugins:units - $ rake test:plugins:functionals - $ rake test:plugins:integration - $ rake test:plugins:all - -Report any issues on http://dev.rails-engines.org. Thanks! - --~===============( ... as you were ... )============================~-} - end - - namespace :engines do - - def engine_plugins - Dir["vendor/plugins/*"].select { |f| File.directory?(File.join(f, "app")) }.map { |f| File.basename(f) }.join(",") - end - - desc "Run tests from within engines plugins (plugins with an 'app' directory)" - task :all => [:units, :functionals, :integration] - - desc "Run unit tests from within engines plugins (plugins with an 'app' directory)" - Rake::TestTask.new(:units => "test:plugins:setup_plugin_fixtures") do |t| - t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/unit/**/*_test.rb" - t.verbose = true - end - - desc "Run functional tests from within engines plugins (plugins with an 'app' directory)" - Rake::TestTask.new(:functionals => "test:plugins:setup_plugin_fixtures") do |t| - t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/functional/**/*_test.rb" - t.verbose = true - end - - desc "Run integration tests from within engines plugins (plugins with an 'app' directory)" - Rake::TestTask.new(:integration => "test:plugins:setup_plugin_fixtures") do |t| - t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/integration/**/*_test.rb" - t.verbose = true - end - end - - namespace :plugins do - - desc "Run the plugin tests in vendor/plugins/**/test (or specify with PLUGIN=name)" - task :all => [:warn_about_multiple_plugin_testing_with_engines, - :units, :functionals, :integration] - - desc "Run all plugin unit tests" - Rake::TestTask.new(:units => :setup_plugin_fixtures) do |t| - t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/unit/**/*_test.rb" - t.verbose = true - end - - desc "Run all plugin functional tests" - Rake::TestTask.new(:functionals => :setup_plugin_fixtures) do |t| - t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/functional/**/*_test.rb" - t.verbose = true - end - - desc "Integration test engines" - Rake::TestTask.new(:integration => :setup_plugin_fixtures) do |t| - t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/integration/**/*_test.rb" - t.verbose = true - end - - desc "Mirrors plugin fixtures into a single location to help plugin tests" - task :setup_plugin_fixtures => :environment do - Engines::Testing.setup_plugin_fixtures - end - - # Patch the default plugin testing task to have setup_plugin_fixtures as a prerequisite - Rake::Task["test:plugins"].prerequisites << "test:plugins:setup_plugin_fixtures" - end -end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/tasks/engines.rake --- a/vendor/plugins/engines/tasks/engines.rake Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,281 +0,0 @@ -# This code lets us redefine existing Rake tasks, which is extremely -# handy for modifying existing Rails rake tasks. -# Credit for the original snippet of code goes to Jeremy Kemper -# http://pastie.caboo.se/9620 -unless Rake::TaskManager.methods.include?('redefine_task') - module Rake - module TaskManager - def redefine_task(task_class, args, &block) - task_name, arg_names, deps = resolve_args([args]) - task_name = task_class.scope_name(@scope, task_name) - deps = [deps] unless deps.respond_to?(:to_ary) - deps = deps.collect {|d| d.to_s } - task = @tasks[task_name.to_s] = task_class.new(task_name, self) - task.application = self - task.add_description(@last_description) - @last_description = nil - task.enhance(deps, &block) - task - end - - end - class Task - class << self - def redefine_task(args, &block) - Rake.application.redefine_task(self, [args], &block) - end - end - end - end -end - -namespace :db do - namespace :migrate do - desc 'Migrate database and plugins to current status.' - task :all => [ 'db:migrate', 'db:migrate:plugins' ] - - desc 'Migrate plugins to current status.' - task :plugins => :environment do - Engines.plugins.each do |plugin| - next unless plugin.respond_to?(:migration_directory) - next unless File.exists? plugin.migration_directory - puts "Migrating plugin #{plugin.name} ..." - plugin.migrate - end - end - - desc 'For engines coming from Rails version < 2.0 or for those previously updated to work with Sven Fuch\'s fork of engines, you need to upgrade the schema info table' - task :upgrade_plugin_migrations => :environment do - svens_fork_table_name = 'plugin_schema_migrations' - - # Check if app was previously using Sven's fork - if ActiveRecord::Base.connection.table_exists?(svens_fork_table_name) - old_sm_table = svens_fork_table_name - else - old_sm_table = ActiveRecord::Migrator.proper_table_name(Engines.schema_info_table) - end - - unless ActiveRecord::Base.connection.table_exists?(old_sm_table) - abort "Cannot find old migration table - assuming nothing needs to be done" - end - - # There are two forms of the engines schema info - pre-fix_plugin_migrations and post - # We need to figure this out before we continue. - - results = ActiveRecord::Base.connection.select_rows( - "SELECT version, plugin_name FROM #{old_sm_table}" - ).uniq - - def insert_new_version(plugin_name, version) - version_string = "#{version}-#{plugin_name}" - new_sm_table = ActiveRecord::Migrator.schema_migrations_table_name - - # Check if the row already exists for some reason - maybe run this task more than once. - return if ActiveRecord::Base.connection.select_rows("SELECT * FROM #{new_sm_table} WHERE version = #{version_string.dump.gsub("\"", "'")}").size > 0 - - puts "Inserting new version #{version} for plugin #{plugin_name}.." - ActiveRecord::Base.connection.insert("INSERT INTO #{new_sm_table} (version) VALUES (#{version_string.dump.gsub("\"", "'")})") - end - - # We need to figure out if they already used "fix_plugin_migrations" - versions = {} - results.each do |r| - versions[r[1]] ||= [] - versions[r[1]] << r[0].to_i - end - - if versions.values.find{ |v| v.size > 1 } == nil - puts "Fixing migration info" - # We only have one listed migration per plugin - this is pre-fix_plugin_migrations, - # so we build all versions required. In this case, all migrations should - versions.each do |plugin_name, version| - version = version[0] # There is only one version - - # We have to make an assumption that numeric migrations won't get this long.. - # I'm not sure if there is a better assumption, it should work in all - # current cases.. (touch wood..) - if version.to_s.size < "YYYYMMDDHHMMSS".size - # Insert version records for each migration - (1..version).each do |v| - insert_new_version(plugin_name, v) - end - else - # If the plugin is new-format "YYYYMMDDHHMMSS", we just copy it across... - # The case in which this occurs is very rare.. - insert_new_version(plugin_name, version) - end - end - else - puts "Moving migration info" - # We have multiple migrations listed per plugin - thus we can assume they have - # already applied fix_plugin_migrations - we just copy it across verbatim - versions.each do |plugin_name, version| - version.each { |v| insert_new_version(plugin_name, v) } - end - end - - puts "Migration info successfully migrated - removing old schema info table" - ActiveRecord::Base.connection.drop_table(old_sm_table) - end - - desc 'Migrate a specified plugin.' - task(:plugin => :environment) do - name = ENV['NAME'] - if plugin = Engines.plugins[name] - version = ENV['VERSION'] - puts "Migrating #{plugin.name} to " + (version ? "version #{version}" : 'latest version') + " ..." - plugin.migrate(version ? version.to_i : nil) - else - puts "Plugin #{name} does not exist." - end - end - end -end - - -namespace :db do - namespace :fixtures do - namespace :plugins do - - desc "Load plugin fixtures into the current environment's database." - task :load => :environment do - require 'active_record/fixtures' - ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym) - Dir.glob(File.join(RAILS_ROOT, 'vendor', 'plugins', ENV['PLUGIN'] || '**', - 'test', 'fixtures', '*.yml')).each do |fixture_file| - Fixtures.create_fixtures(File.dirname(fixture_file), File.basename(fixture_file, '.*')) - end - end - - end - end -end - -# this is just a modification of the original task in railties/lib/tasks/documentation.rake, -# because the default task doesn't support subdirectories like /app or -# /component. These tasks now include every file under a plugin's load paths (see -# Plugin#load_paths). -namespace :doc do - - plugins = FileList['vendor/plugins/**'].collect { |plugin| File.basename(plugin) } - - namespace :plugins do - - # Define doc tasks for each plugin - plugins.each do |plugin| - desc "Create plugin documentation for '#{plugin}'" - Rake::Task.redefine_task(plugin => :environment) do - plugin_base = RAILS_ROOT + "/vendor/plugins/#{plugin}" - options = [] - files = Rake::FileList.new - options << "-o doc/plugins/#{plugin}" - options << "--title '#{plugin.titlecase} Plugin Documentation'" - options << '--line-numbers' << '--inline-source' - options << '-T html' - - # Include every file in the plugin's load_paths (see Plugin#load_paths) - if Engines.plugins[plugin] - files.include("#{plugin_base}/{#{Engines.plugins[plugin].load_paths.join(",")}}/**/*.rb") - end - if File.exists?("#{plugin_base}/README") - files.include("#{plugin_base}/README") - options << "--main '#{plugin_base}/README'" - end - files.include("#{plugin_base}/CHANGELOG") if File.exists?("#{plugin_base}/CHANGELOG") - - if files.empty? - puts "No source files found in #{plugin_base}. No documentation will be generated." - else - options << files.to_s - sh %(rdoc #{options * ' '}) - end - end - end - end -end - - - -namespace :test do - task :warn_about_multiple_plugin_testing_with_engines do - puts %{-~============== A Moste Polite Warninge ===========================~- - -You may experience issues testing multiple plugins at once when using -the code-mixing features that the engines plugin provides. If you do -experience any problems, please test plugins individually, i.e. - - $ rake test:plugins PLUGIN=my_plugin - -or use the per-type plugin test tasks: - - $ rake test:plugins:units - $ rake test:plugins:functionals - $ rake test:plugins:integration - $ rake test:plugins:all - -Report any issues on http://dev.rails-engines.org. Thanks! - --~===============( ... as you were ... )============================~-} - end - - namespace :engines do - - def engine_plugins - Dir["vendor/plugins/*"].select { |f| File.directory?(File.join(f, "app")) }.map { |f| File.basename(f) }.join(",") - end - - desc "Run tests from within engines plugins (plugins with an 'app' directory)" - task :all => [:units, :functionals, :integration] - - desc "Run unit tests from within engines plugins (plugins with an 'app' directory)" - Rake::TestTask.new(:units => "test:plugins:setup_plugin_fixtures") do |t| - t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/unit/**/*_test.rb" - t.verbose = true - end - - desc "Run functional tests from within engines plugins (plugins with an 'app' directory)" - Rake::TestTask.new(:functionals => "test:plugins:setup_plugin_fixtures") do |t| - t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/functional/**/*_test.rb" - t.verbose = true - end - - desc "Run integration tests from within engines plugins (plugins with an 'app' directory)" - Rake::TestTask.new(:integration => "test:plugins:setup_plugin_fixtures") do |t| - t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/integration/**/*_test.rb" - t.verbose = true - end - end - - namespace :plugins do - - desc "Run the plugin tests in vendor/plugins/**/test (or specify with PLUGIN=name)" - task :all => [:warn_about_multiple_plugin_testing_with_engines, - :units, :functionals, :integration] - - desc "Run all plugin unit tests" - Rake::TestTask.new(:units => :setup_plugin_fixtures) do |t| - t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/unit/**/*_test.rb" - t.verbose = true - end - - desc "Run all plugin functional tests" - Rake::TestTask.new(:functionals => :setup_plugin_fixtures) do |t| - t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/functional/**/*_test.rb" - t.verbose = true - end - - desc "Integration test engines" - Rake::TestTask.new(:integration => :setup_plugin_fixtures) do |t| - t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/integration/**/*_test.rb" - t.verbose = true - end - - desc "Mirrors plugin fixtures into a single location to help plugin tests" - task :setup_plugin_fixtures => :environment do - Engines::Testing.setup_plugin_fixtures - end - - # Patch the default plugin testing task to have setup_plugin_fixtures as a prerequisite - Rake::Task["test:plugins"].prerequisites << "test:plugins:setup_plugin_fixtures" - end -end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/.svn/all-wcprops --- a/vendor/plugins/engines/test/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/.svn/entries --- a/vendor/plugins/engines/test/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/app/.svn/all-wcprops --- a/vendor/plugins/engines/test/app/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/app/.svn/entries --- a/vendor/plugins/engines/test/app/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/app/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/app/controllers/.svn/all-wcprops --- a/vendor/plugins/engines/test/app/controllers/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 68 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/controllers -END -app_and_plugin_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 97 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/controllers/app_and_plugin_controller.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/app/controllers/.svn/entries --- a/vendor/plugins/engines/test/app/controllers/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/app/controllers/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/controllers +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/controllers http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.711814Z +2011-07-14T09:24:11.000000Z 8e2adc646126f3962ca1eaf16d663fa7 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/app/controllers/namespace/.svn/all-wcprops --- a/vendor/plugins/engines/test/app/controllers/namespace/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 78 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/controllers/namespace -END -app_and_plugin_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 107 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/controllers/namespace/app_and_plugin_controller.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/app/controllers/namespace/.svn/entries --- a/vendor/plugins/engines/test/app/controllers/namespace/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/app/controllers/namespace/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/controllers/namespace +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/controllers/namespace http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.711814Z +2011-07-14T09:24:11.000000Z ed9f029690f9d77b31e0d68cff2f8ff3 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/app/helpers/.svn/all-wcprops --- a/vendor/plugins/engines/test/app/helpers/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/helpers -END -mail_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 79 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/helpers/mail_helper.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/app/helpers/.svn/entries --- a/vendor/plugins/engines/test/app/helpers/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/app/helpers/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/helpers +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/helpers http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.715757Z +2011-07-14T09:24:11.000000Z b3286b0384ccf10d15423a78b8a70c3a 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/app/models/.svn/all-wcprops --- a/vendor/plugins/engines/test/app/models/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/models -END -app_and_plugin_model.rb -K 25 -svn:wc:ra_dav:version-url -V 87 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/models/app_and_plugin_model.rb -END -notify_mail.rb -K 25 -svn:wc:ra_dav:version-url -V 78 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/models/notify_mail.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/app/models/.svn/entries --- a/vendor/plugins/engines/test/app/models/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/app/models/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/models +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/models http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.715757Z +2011-07-14T09:24:11.000000Z 53fd050b6dc2f5da77439ffab6e1dd6e 2009-09-13T17:14:35.707881Z 2887 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.715757Z +2011-07-14T09:24:11.000000Z ffba288117364d8379bd2b6788e2fd2f 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/app/things/.svn/all-wcprops --- a/vendor/plugins/engines/test/app/things/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/things -END -thing.rb -K 25 -svn:wc:ra_dav:version-url -V 72 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/things/thing.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/app/things/.svn/entries --- a/vendor/plugins/engines/test/app/things/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/app/things/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/things +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/things http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.715757Z +2011-07-14T09:24:11.000000Z aaa0b6b1363b304ca66c8def3c543b13 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/app/views/.svn/all-wcprops --- a/vendor/plugins/engines/test/app/views/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/views -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/app/views/.svn/entries --- a/vendor/plugins/engines/test/app/views/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/app/views/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/views http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/app/views/app_and_plugin/.svn/all-wcprops --- a/vendor/plugins/engines/test/app/views/app_and_plugin/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 77 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/views/app_and_plugin -END -a_view.html.erb -K 25 -svn:wc:ra_dav:version-url -V 93 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/views/app_and_plugin/a_view.html.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/app/views/app_and_plugin/.svn/entries --- a/vendor/plugins/engines/test/app/views/app_and_plugin/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/app/views/app_and_plugin/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/app_and_plugin +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/views/app_and_plugin http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.719755Z +2011-07-14T09:24:11.000000Z e6dca36d9e91414f1a520ffddb5202d7 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/app/views/namespace/.svn/all-wcprops --- a/vendor/plugins/engines/test/app/views/namespace/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 72 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/views/namespace -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/app/views/namespace/.svn/entries --- a/vendor/plugins/engines/test/app/views/namespace/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/app/views/namespace/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/namespace +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/views/namespace http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/app/views/namespace/app_and_plugin/.svn/all-wcprops --- a/vendor/plugins/engines/test/app/views/namespace/app_and_plugin/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 87 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/views/namespace/app_and_plugin -END -a_view.html.erb -K 25 -svn:wc:ra_dav:version-url -V 103 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/views/namespace/app_and_plugin/a_view.html.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/app/views/namespace/app_and_plugin/.svn/entries --- a/vendor/plugins/engines/test/app/views/namespace/app_and_plugin/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/app/views/namespace/app_and_plugin/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/namespace/app_and_plugin +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/views/namespace/app_and_plugin http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.719755Z +2011-07-14T09:24:11.000000Z e6dca36d9e91414f1a520ffddb5202d7 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/app/views/notify_mail/.svn/all-wcprops --- a/vendor/plugins/engines/test/app/views/notify_mail/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 74 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/views/notify_mail -END -multipart_html.html.erb -K 25 -svn:wc:ra_dav:version-url -V 98 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/views/notify_mail/multipart_html.html.erb -END -signup.text.plain.erb -K 25 -svn:wc:ra_dav:version-url -V 96 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/views/notify_mail/signup.text.plain.erb -END -implicit_multipart.text.plain.erb -K 25 -svn:wc:ra_dav:version-url -V 108 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/views/notify_mail/implicit_multipart.text.plain.erb -END -implicit_multipart.text.html.erb -K 25 -svn:wc:ra_dav:version-url -V 107 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/views/notify_mail/implicit_multipart.text.html.erb -END -multipart_plain.html.erb -K 25 -svn:wc:ra_dav:version-url -V 99 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/views/notify_mail/multipart_plain.html.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/app/views/notify_mail/.svn/entries --- a/vendor/plugins/engines/test/app/views/notify_mail/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/app/views/notify_mail/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/notify_mail +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/views/notify_mail http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.723813Z +2011-07-14T09:24:11.000000Z 8e367f8a525da2fddf6b32d5f874c6ba 2009-09-13T17:14:35.707881Z 2887 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.723813Z +2011-07-14T09:24:11.000000Z 50ed7a6afc64b4a326aa8b681a31b9a3 2009-09-13T17:14:35.707881Z 2887 @@ -100,7 +100,7 @@ -2010-09-23T14:37:45.723813Z +2011-07-14T09:24:11.000000Z cb0d28ce47ca265d02f252970ac69194 2009-09-13T17:14:35.707881Z 2887 @@ -134,7 +134,7 @@ -2010-09-23T14:37:45.723813Z +2011-07-14T09:24:11.000000Z 5a4f738dec733e5f4ad703495c5eb54a 2009-09-13T17:14:35.707881Z 2887 @@ -168,7 +168,7 @@ -2010-09-23T14:37:45.723813Z +2011-07-14T09:24:11.000000Z 3b779e7b00bfe0f9b876bfebd7905a4e 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/app/views/plugin_mail/.svn/all-wcprops --- a/vendor/plugins/engines/test/app/views/plugin_mail/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 74 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/views/plugin_mail -END -mail_from_plugin_with_application_template.text.plain.erb -K 25 -svn:wc:ra_dav:version-url -V 132 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/views/plugin_mail/mail_from_plugin_with_application_template.text.plain.erb -END -multipart_from_plugin_with_application_template_plain.html.erb -K 25 -svn:wc:ra_dav:version-url -V 137 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/app/views/plugin_mail/multipart_from_plugin_with_application_template_plain.html.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/app/views/plugin_mail/.svn/entries --- a/vendor/plugins/engines/test/app/views/plugin_mail/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/app/views/plugin_mail/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/plugin_mail +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/views/plugin_mail http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.727757Z +2011-07-14T09:24:11.000000Z d0e724c594c43b6db39389834f3c26e2 2009-09-13T17:14:35.707881Z 2887 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.727757Z +2011-07-14T09:24:11.000000Z 317dc13d851c827568f61def9b031803 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/functional/.svn/all-wcprops --- a/vendor/plugins/engines/test/functional/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/functional -END -controller_loading_test.rb -K 25 -svn:wc:ra_dav:version-url -V 90 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/functional/controller_loading_test.rb -END -routes_test.rb -K 25 -svn:wc:ra_dav:version-url -V 78 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/functional/routes_test.rb -END -view_loading_test.rb -K 25 -svn:wc:ra_dav:version-url -V 84 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/functional/view_loading_test.rb -END -locale_loading_test.rb -K 25 -svn:wc:ra_dav:version-url -V 86 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/functional/locale_loading_test.rb -END -view_helpers_test.rb -K 25 -svn:wc:ra_dav:version-url -V 84 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/functional/view_helpers_test.rb -END -exception_notification_compatibility_test.rb -K 25 -svn:wc:ra_dav:version-url -V 108 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/functional/exception_notification_compatibility_test.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/functional/.svn/entries --- a/vendor/plugins/engines/test/functional/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/functional/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/functional +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/functional http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.727757Z +2011-07-14T09:24:11.000000Z 53bf916868db17fcb64853aab45ce80b 2009-09-13T17:14:35.707881Z 2887 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.727757Z +2011-07-14T09:24:11.000000Z 03f318c931cb7d40733445e72a504c95 2009-09-13T17:14:35.707881Z 2887 @@ -100,7 +100,7 @@ -2010-09-23T14:37:45.731757Z +2011-07-14T09:24:11.000000Z 43b6ff22af92cc8988a51d1b50c4c587 2009-09-13T17:14:35.707881Z 2887 @@ -134,7 +134,7 @@ -2010-09-23T14:37:45.727757Z +2011-07-14T09:24:11.000000Z 0ca8b6e7e4b7655c3633b11d4ff61cc6 2009-09-13T17:14:35.707881Z 2887 @@ -168,7 +168,7 @@ -2010-09-23T14:37:45.731757Z +2011-07-14T09:24:11.000000Z afcc79d3fa1c4f1615b271f65d982d8b 2009-09-13T17:14:35.707881Z 2887 @@ -202,7 +202,7 @@ -2010-09-23T14:37:45.727757Z +2011-07-14T09:24:11.000000Z 6bd25b9259dbf37b6d31e69f83a32fe0 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/lib/.svn/all-wcprops --- a/vendor/plugins/engines/test/lib/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/lib -END -render_information.rb -K 25 -svn:wc:ra_dav:version-url -V 78 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/lib/render_information.rb -END -app_and_plugin_lib_model.rb -K 25 -svn:wc:ra_dav:version-url -V 84 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/lib/app_and_plugin_lib_model.rb -END -engines_test_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 79 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/lib/engines_test_helper.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/lib/.svn/entries --- a/vendor/plugins/engines/test/lib/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/lib/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/lib +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/lib http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.731757Z +2011-07-14T09:24:11.000000Z 1fde453d5263852d1ba9fc3dd90254fc 2009-09-13T17:14:35.707881Z 2887 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.731757Z +2011-07-14T09:24:11.000000Z b00ea9b677cec76cd2fc19b1f66db3e2 2009-09-13T17:14:35.707881Z 2887 @@ -100,7 +100,7 @@ -2010-09-23T14:37:45.731757Z +2011-07-14T09:24:11.000000Z 52fd5b17adc2fec1950be496b5ff3a3d 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/.svn/entries --- a/vendor/plugins/engines/test/plugins/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/alpha_plugin/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 73 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/.svn/entries --- a/vendor/plugins/engines/test/plugins/alpha_plugin/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 77 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/.svn/entries --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 89 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers -END -app_and_plugin_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 118 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/app_and_plugin_controller.rb -END -alpha_plugin_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 116 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/alpha_plugin_controller.rb -END -shared_plugin_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 117 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/shared_plugin_controller.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/.svn/entries --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.735800Z +2011-07-14T09:24:11.000000Z b70de56fa165815bbab14f584b6fbdb4 2009-09-13T17:14:35.707881Z 2887 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.735800Z +2011-07-14T09:24:11.000000Z 9e56eb4864bc1877cc8a6e69ca873157 2009-09-13T17:14:35.707881Z 2887 @@ -100,7 +100,7 @@ -2010-09-23T14:37:45.739799Z +2011-07-14T09:24:11.000000Z f9f42ac7db3bb715ff4f055162013aba 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 99 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace -END -app_and_plugin_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 128 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/app_and_plugin_controller.rb -END -alpha_plugin_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 126 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/alpha_plugin_controller.rb -END -shared_plugin_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 127 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/shared_plugin_controller.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/.svn/entries --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.739799Z +2011-07-14T09:24:11.000000Z a24a7b9dd5706d2daef2456b1b1cac4c 2009-09-13T17:14:35.707881Z 2887 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.739799Z +2011-07-14T09:24:11.000000Z b1c4a105ad8bfa7add28c583dbd9ef8a 2009-09-13T17:14:35.707881Z 2887 @@ -100,7 +100,7 @@ -2010-09-23T14:37:45.739799Z +2011-07-14T09:24:11.000000Z 43152818b40142db88dffe0192e66582 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/models/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 84 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/models -END -app_and_plugin_model.rb -K 25 -svn:wc:ra_dav:version-url -V 108 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/app_and_plugin_model.rb -END -alpha_plugin_model.rb -K 25 -svn:wc:ra_dav:version-url -V 106 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/alpha_plugin_model.rb -END -shared_plugin_model.rb -K 25 -svn:wc:ra_dav:version-url -V 107 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/shared_plugin_model.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/models/.svn/entries --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/models +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/models http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.739799Z +2011-07-14T09:24:11.000000Z a661e69f87fead66873ac8cc162da128 2009-09-13T17:14:35.707881Z 2887 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.739799Z +2011-07-14T09:24:11.000000Z 01ab2dea5fd3e341bd082f2fc507f760 2009-09-13T17:14:35.707881Z 2887 @@ -100,7 +100,7 @@ -2010-09-23T14:37:45.739799Z +2011-07-14T09:24:11.000000Z ae48cf4ce7068428c1525dba877a880c 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/views/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 83 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/views/.svn/entries --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 96 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin -END -a_view.html.erb -K 25 -svn:wc:ra_dav:version-url -V 112 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin/a_view.html.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin/.svn/entries --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.743801Z +2011-07-14T09:24:11.000000Z eeb9900e088c367d06668e201e4be39e 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 98 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin -END -a_view.html.erb -K 25 -svn:wc:ra_dav:version-url -V 114 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin/a_view.html.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin/.svn/entries --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.743801Z +2011-07-14T09:24:11.000000Z 68deee946f4e81fafcae37d51f2e6bd5 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 91 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts -END -plugin_layout.erb -K 25 -svn:wc:ra_dav:version-url -V 109 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts/plugin_layout.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts/.svn/entries --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.747800Z +2011-07-14T09:24:11.000000Z 3791a6748098d1382b11556ec47b6366 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 93 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/.svn/entries --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 106 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin -END -a_view.html.erb -K 25 -svn:wc:ra_dav:version-url -V 122 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin/a_view.html.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin/.svn/entries --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.747800Z +2011-07-14T09:24:11.000000Z eeb9900e088c367d06668e201e4be39e 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 108 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin -END -a_view.html.erb -K 25 -svn:wc:ra_dav:version-url -V 124 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin/a_view.html.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin/.svn/entries --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.747800Z +2011-07-14T09:24:11.000000Z eeb9900e088c367d06668e201e4be39e 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 107 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin -END -a_view.html.erb -K 25 -svn:wc:ra_dav:version-url -V 123 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin/a_view.html.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin/.svn/entries --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.751796Z +2011-07-14T09:24:11.000000Z 3bef9fe54ed08fd7ce454a189b2b3195 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 97 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin -END -a_view.html.erb -K 25 -svn:wc:ra_dav:version-url -V 113 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin/a_view.html.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin/.svn/entries --- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.751796Z +2011-07-14T09:24:11.000000Z 3bef9fe54ed08fd7ce454a189b2b3195 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/lib/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/alpha_plugin/lib/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 77 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/lib -END -app_and_plugin_lib_model.rb -K 25 -svn:wc:ra_dav:version-url -V 105 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/lib/app_and_plugin_lib_model.rb -END -alpha_plugin_lib_model.rb -K 25 -svn:wc:ra_dav:version-url -V 103 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/lib/alpha_plugin_lib_model.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/lib/.svn/entries --- a/vendor/plugins/engines/test/plugins/alpha_plugin/lib/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/lib/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/lib +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/lib http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.751796Z +2011-07-14T09:24:11.000000Z 4799f34099980de6af0dc719c7f04845 2009-09-13T17:14:35.707881Z 2887 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.751796Z +2011-07-14T09:24:11.000000Z e892323cf7ac415a30ca41b49ab96d1d 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/locales/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/alpha_plugin/locales/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 81 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/locales -END -en.yml -K 25 -svn:wc:ra_dav:version-url -V 88 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/locales/en.yml -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/alpha_plugin/locales/.svn/entries --- a/vendor/plugins/engines/test/plugins/alpha_plugin/locales/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/locales/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/locales +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/alpha_plugin/locales http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.755800Z +2011-07-14T09:24:11.000000Z 8fb4d64b7ed263c84a6aa2974eb71f25 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/beta_plugin/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/beta_plugin/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 72 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/beta_plugin -END -init.rb -K 25 -svn:wc:ra_dav:version-url -V 80 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/beta_plugin/init.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/beta_plugin/.svn/entries --- a/vendor/plugins/engines/test/plugins/beta_plugin/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/beta_plugin/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/beta_plugin http://redmine.rubyforge.org/svn @@ -38,7 +38,7 @@ -2010-09-23T14:37:45.763755Z +2011-07-14T09:24:11.000000Z cee45809cc705092eca4e13d3aa204f1 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/beta_plugin/app/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/beta_plugin/app/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 76 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/beta_plugin/app/.svn/entries --- a/vendor/plugins/engines/test/plugins/beta_plugin/app/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/beta_plugin/app http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 88 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers -END -app_and_plugin_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 117 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/app_and_plugin_controller.rb -END -shared_plugin_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 116 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/shared_plugin_controller.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/.svn/entries --- a/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.759798Z +2011-07-14T09:24:11.000000Z 6c633d0dcb606e532dd906bd2567bf57 2009-09-13T17:14:35.707881Z 2887 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.759798Z +2011-07-14T09:24:11.000000Z df7f8bb84aa9fcbe07534d5aa59e11b8 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 98 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace -END -shared_plugin_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 126 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace/shared_plugin_controller.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace/.svn/entries --- a/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.759798Z +2011-07-14T09:24:11.000000Z a8bcbb79381d6db75a9ea6e2704828a9 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/beta_plugin/app/models/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/beta_plugin/app/models/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 83 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/models -END -shared_plugin_model.rb -K 25 -svn:wc:ra_dav:version-url -V 106 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/models/shared_plugin_model.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/beta_plugin/app/models/.svn/entries --- a/vendor/plugins/engines/test/plugins/beta_plugin/app/models/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/models/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/models +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/beta_plugin/app/models http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.759798Z +2011-07-14T09:24:11.000000Z c9a469b003eca7ac6627c41deeda1b4c 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/beta_plugin/app/views/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/beta_plugin/app/views/.svn/entries --- a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/views/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/beta_plugin/app/views http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 92 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/.svn/entries --- a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 106 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin -END -a_view.html.erb -K 25 -svn:wc:ra_dav:version-url -V 122 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin/a_view.html.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin/.svn/entries --- a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.763755Z +2011-07-14T09:24:11.000000Z 78db1a7e1a9f6216dfa3671e5d42c81b 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 96 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin -END -a_view.html.erb -K 25 -svn:wc:ra_dav:version-url -V 112 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin/a_view.html.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin/.svn/entries --- a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.763755Z +2011-07-14T09:24:11.000000Z 78db1a7e1a9f6216dfa3671e5d42c81b 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/beta_plugin/locales/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/beta_plugin/locales/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 80 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/beta_plugin/locales -END -en.yml -K 25 -svn:wc:ra_dav:version-url -V 87 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/beta_plugin/locales/en.yml -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/beta_plugin/locales/.svn/entries --- a/vendor/plugins/engines/test/plugins/beta_plugin/locales/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/beta_plugin/locales/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/locales +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/beta_plugin/locales http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.767754Z +2011-07-14T09:24:11.000000Z 277816fa171800daec137e70993e39f6 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/not_a_plugin/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/not_a_plugin/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 73 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/not_a_plugin -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/not_a_plugin/.svn/entries --- a/vendor/plugins/engines/test/plugins/not_a_plugin/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/not_a_plugin/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/not_a_plugin +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/not_a_plugin http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/not_a_plugin/public/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/not_a_plugin/public/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 80 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/not_a_plugin/public -END -should_not_be_copied.txt -K 25 -svn:wc:ra_dav:version-url -V 105 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/not_a_plugin/public/should_not_be_copied.txt -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/not_a_plugin/public/.svn/entries --- a/vendor/plugins/engines/test/plugins/not_a_plugin/public/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/not_a_plugin/public/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/not_a_plugin/public +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/not_a_plugin/public http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.767754Z +2011-07-14T09:24:11.000000Z d41d8cd98f00b204e9800998ecf8427e 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_assets/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 72 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_assets -END -init.rb -K 25 -svn:wc:ra_dav:version-url -V 80 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_assets/init.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_assets/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets http://redmine.rubyforge.org/svn @@ -35,7 +35,7 @@ -2010-09-23T14:37:45.775754Z +2011-07-14T09:24:11.000000Z d41d8cd98f00b204e9800998ecf8427e 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets/app/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_assets/app/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 76 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_assets/app -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets/app/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_assets/app/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets/app/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/app +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets/app http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets/app/controllers/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_assets/app/controllers/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 88 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_assets/app/controllers -END -assets_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 109 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_assets/app/controllers/assets_controller.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets/app/controllers/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_assets/app/controllers/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets/app/controllers/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/app/controllers +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets/app/controllers http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.771797Z +2011-07-14T09:24:11.000000Z ba97b09a04ada07aa57234ea8649c128 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets/app/views/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_assets/app/views/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_assets/app/views -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets/app/views/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_assets/app/views/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets/app/views/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/app/views +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets/app/views http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets/app/views/assets/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_assets/app/views/assets/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 89 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_assets/app/views/assets -END -index.html.erb -K 25 -svn:wc:ra_dav:version-url -V 104 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_assets/app/views/assets/index.html.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets/app/views/assets/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_assets/app/views/assets/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets/app/views/assets/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/app/views/assets +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets/app/views/assets http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.771797Z +2011-07-14T09:24:11.000000Z 5c22cfc5b27a3b2b869075baacf530a6 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets/app/views/layouts/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 90 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts -END -assets.html.erb -K 25 -svn:wc:ra_dav:version-url -V 106 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts/assets.html.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets/app/views/layouts/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.775754Z +2011-07-14T09:24:11.000000Z 8a99331150683df5edbd645cb851de37 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets/public/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_assets/public/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 79 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_assets/public -END -file.txt -K 25 -svn:wc:ra_dav:version-url -V 88 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_assets/public/file.txt -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets/public/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_assets/public/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets/public/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/public +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets/public http://redmine.rubyforge.org/svn @@ -35,7 +35,7 @@ -2010-09-23T14:37:45.775754Z +2011-07-14T09:24:11.000000Z d41d8cd98f00b204e9800998ecf8427e 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets/public/subfolder/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_assets/public/subfolder/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 89 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_assets/public/subfolder -END -file_in_subfolder.txt -K 25 -svn:wc:ra_dav:version-url -V 111 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_assets/public/subfolder/file_in_subfolder.txt -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets/public/subfolder/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_assets/public/subfolder/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets/public/subfolder/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/public/subfolder +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets/public/subfolder http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.775754Z +2011-07-14T09:24:11.000000Z d41d8cd98f00b204e9800998ecf8427e 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 94 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory -END -init.rb -K 25 -svn:wc:ra_dav:version-url -V 102 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/init.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory http://redmine.rubyforge.org/svn @@ -35,7 +35,7 @@ -2010-09-23T14:37:45.779781Z +2011-07-14T09:24:11.000000Z d41d8cd98f00b204e9800998ecf8427e 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 101 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets -END -file.txt -K 25 -svn:wc:ra_dav:version-url -V 110 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/file.txt -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets http://redmine.rubyforge.org/svn @@ -35,7 +35,7 @@ -2010-09-23T14:37:45.779781Z +2011-07-14T09:24:11.000000Z d41d8cd98f00b204e9800998ecf8427e 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 111 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder -END -file_in_subfolder.txt -K 25 -svn:wc:ra_dav:version-url -V 133 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder/file_in_subfolder.txt -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.779781Z +2011-07-14T09:24:11.000000Z d41d8cd98f00b204e9800998ecf8427e 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 93 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory -END -init.rb -K 25 -svn:wc:ra_dav:version-url -V 101 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/init.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory http://redmine.rubyforge.org/svn @@ -35,7 +35,7 @@ -2010-09-23T14:37:45.783782Z +2011-07-14T09:24:11.000000Z d41d8cd98f00b204e9800998ecf8427e 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 100 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets -END -file.txt -K 25 -svn:wc:ra_dav:version-url -V 109 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets/file.txt -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.783782Z +2011-07-14T09:24:11.000000Z d41d8cd98f00b204e9800998ecf8427e 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_code_mixing/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_code_mixing/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 77 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_code_mixing -END -init.rb -K 25 -svn:wc:ra_dav:version-url -V 85 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_code_mixing/init.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_code_mixing/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_code_mixing/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_code_mixing/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_code_mixing +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_code_mixing http://redmine.rubyforge.org/svn @@ -35,7 +35,7 @@ -2010-09-23T14:37:45.783782Z +2011-07-14T09:24:11.000000Z cee45809cc705092eca4e13d3aa204f1 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_code_mixing/app/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_code_mixing/app/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 81 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_code_mixing/app -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_code_mixing/app/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_code_mixing/app/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_code_mixing/app/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_code_mixing/app +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_code_mixing/app http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_code_mixing/app/things/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_code_mixing/app/things/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 88 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_code_mixing/app/things -END -thing.rb -K 25 -svn:wc:ra_dav:version-url -V 97 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_code_mixing/app/things/thing.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_code_mixing/app/things/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_code_mixing/app/things/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_code_mixing/app/things/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_code_mixing/app/things +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_code_mixing/app/things http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.783782Z +2011-07-14T09:24:11.000000Z 3b8cfcd53b03ccc6db1aac5b542abaa4 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_load_path/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_load_path/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 75 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_load_path -END -init.rb -K 25 -svn:wc:ra_dav:version-url -V 83 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_load_path/init.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_load_path/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_load_path/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_load_path/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_load_path +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_load_path http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.787823Z +2011-07-14T09:24:11.000000Z d41d8cd98f00b204e9800998ecf8427e 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_migration/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_migration/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 75 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_migration -END -init.rb -K 25 -svn:wc:ra_dav:version-url -V 83 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_migration/init.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_migration/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_migration/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_migration/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_migration +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_migration http://redmine.rubyforge.org/svn @@ -35,7 +35,7 @@ -2010-09-23T14:37:45.791825Z +2011-07-14T09:24:11.000000Z d41d8cd98f00b204e9800998ecf8427e 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_migration/db/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_migration/db/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 78 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_migration/db -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_migration/db/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_migration/db/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_migration/db/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_migration/db +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_migration/db http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_migration/db/migrate/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_migration/db/migrate/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 86 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_migration/db/migrate -END -001_create_tests.rb -K 25 -svn:wc:ra_dav:version-url -V 106 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_migration/db/migrate/001_create_tests.rb -END -002_create_others.rb -K 25 -svn:wc:ra_dav:version-url -V 107 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_migration/db/migrate/002_create_others.rb -END -003_create_extras.rb -K 25 -svn:wc:ra_dav:version-url -V 107 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_migration/db/migrate/003_create_extras.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_migration/db/migrate/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_migration/db/migrate/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_migration/db/migrate/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_migration/db/migrate +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_migration/db/migrate http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.791825Z +2011-07-14T09:24:11.000000Z ba950e9dc666a42d09029148ae7e3234 2009-09-13T17:14:35.707881Z 2887 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.791825Z +2011-07-14T09:24:11.000000Z de937ac5b434955daacc33306a5a1a2d 2009-09-13T17:14:35.707881Z 2887 @@ -100,7 +100,7 @@ -2010-09-23T14:37:45.791825Z +2011-07-14T09:24:11.000000Z b9241da5bb8308bcea2f4cd5cbd32ff1 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_plugin_mailing/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 80 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing -END -init.rb -K 25 -svn:wc:ra_dav:version-url -V 88 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/init.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_plugin_mailing/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_plugin_mailing http://redmine.rubyforge.org/svn @@ -35,7 +35,7 @@ -2010-09-23T14:37:45.799837Z +2011-07-14T09:24:11.000000Z d41d8cd98f00b204e9800998ecf8427e 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_plugin_mailing/app/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 84 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_plugin_mailing/app/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_plugin_mailing/app http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 91 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models -END -plugin_mail.rb -K 25 -svn:wc:ra_dav:version-url -V 106 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models/plugin_mail.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.791825Z +2011-07-14T09:24:11.000000Z 6bfa7a84bb26ae29617568896fec30ae 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 90 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 102 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail -END -multipart_from_plugin_plain.html.erb -K 25 -svn:wc:ra_dav:version-url -V 139 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_plain.html.erb -END -multipart_from_plugin_html.html.erb -K 25 -svn:wc:ra_dav:version-url -V 138 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_html.html.erb -END -multipart_from_plugin_with_application_template_plain.html.erb -K 25 -svn:wc:ra_dav:version-url -V 165 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_with_application_template_plain.html.erb -END -multipart_from_plugin_with_application_template_html.html.erb -K 25 -svn:wc:ra_dav:version-url -V 164 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_with_application_template_html.html.erb -END -mail_from_plugin.erb -K 25 -svn:wc:ra_dav:version-url -V 123 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/mail_from_plugin.erb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.795823Z +2011-07-14T09:24:11.000000Z cf207341167ec099c0e0ffbe3935a4d4 2009-09-13T17:14:35.707881Z 2887 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.795823Z +2011-07-14T09:24:11.000000Z c54772416c0a8c4f3d46880180299dd5 2009-09-13T17:14:35.707881Z 2887 @@ -100,7 +100,7 @@ -2010-09-23T14:37:45.799837Z +2011-07-14T09:24:11.000000Z 6f32fb0cf1bfbf4dcc8636f350a126e8 2009-09-13T17:14:35.707881Z 2887 @@ -134,7 +134,7 @@ -2010-09-23T14:37:45.795823Z +2011-07-14T09:24:11.000000Z 6f32fb0cf1bfbf4dcc8636f350a126e8 2009-09-13T17:14:35.707881Z 2887 @@ -168,7 +168,7 @@ -2010-09-23T14:37:45.795823Z +2011-07-14T09:24:11.000000Z ededb32a08ab9582df24ce1572dc2a20 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_routing/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_routing/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 73 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_routing -END -init.rb -K 25 -svn:wc:ra_dav:version-url -V 81 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_routing/init.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_routing/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_routing/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_routing/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_routing +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_routing http://redmine.rubyforge.org/svn @@ -38,7 +38,7 @@ -2010-09-23T14:37:45.803782Z +2011-07-14T09:24:11.000000Z d41d8cd98f00b204e9800998ecf8427e 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_routing/app/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_routing/app/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 77 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_routing/app -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_routing/app/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_routing/app/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_routing/app/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_routing/app +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_routing/app http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_routing/app/controllers/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_routing/app/controllers/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 89 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_routing/app/controllers -END -test_routing_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 116 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_routing/app/controllers/test_routing_controller.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_routing/app/controllers/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_routing/app/controllers/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_routing/app/controllers/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_routing/app/controllers +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_routing/app/controllers http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.803782Z +2011-07-14T09:24:11.000000Z e5a27666b16bdff58054a3440cf14516 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 99 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace -END -test_routing_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 126 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace/test_routing_controller.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.803782Z +2011-07-14T09:24:11.000000Z 515669edfb53126155e911a1ae5149ec 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_routing/config/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_routing/config/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 80 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_routing/config -END -routes.rb -K 25 -svn:wc:ra_dav:version-url -V 90 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_routing/config/routes.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_routing/config/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_routing/config/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_routing/config/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_routing/config +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_routing/config http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.803782Z +2011-07-14T09:24:11.000000Z 47135f279d2e64a431d8604df1402ffb 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_testing/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_testing/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 73 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_testing -END -init.rb -K 25 -svn:wc:ra_dav:version-url -V 81 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_testing/init.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_testing/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_testing/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_testing/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_testing +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_testing http://redmine.rubyforge.org/svn @@ -38,7 +38,7 @@ -2010-09-23T14:37:45.807778Z +2011-07-14T09:24:11.000000Z d41d8cd98f00b204e9800998ecf8427e 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_testing/app/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_testing/app/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 77 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_testing/app -END -README.txt -K 25 -svn:wc:ra_dav:version-url -V 88 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_testing/app/README.txt -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_testing/app/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_testing/app/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_testing/app/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_testing/app +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_testing/app http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.807778Z +2011-07-14T09:24:11.000000Z 9cbac832f86ac5e8cfbbc4c69811910e 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_testing/test/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_testing/test/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 78 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_testing/test -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_testing/test/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_testing/test/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_testing/test/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_testing/test +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_testing/test http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_testing/test/fixtures/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_testing/test/fixtures/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 87 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_testing/test/fixtures -END -testing_fixtures.yml -K 25 -svn:wc:ra_dav:version-url -V 108 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_testing/test/fixtures/testing_fixtures.yml -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_testing/test/fixtures/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_testing/test/fixtures/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_testing/test/fixtures/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_testing/test/fixtures +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_testing/test/fixtures http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.807778Z +2011-07-14T09:24:11.000000Z d41d8cd98f00b204e9800998ecf8427e 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_testing/test/unit/.svn/all-wcprops --- a/vendor/plugins/engines/test/plugins/test_testing/test/unit/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 83 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_testing/test/unit -END -override_test.rb -K 25 -svn:wc:ra_dav:version-url -V 100 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/plugins/test_testing/test/unit/override_test.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/plugins/test_testing/test/unit/.svn/entries --- a/vendor/plugins/engines/test/plugins/test_testing/test/unit/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/plugins/test_testing/test/unit/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_testing/test/unit +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/plugins/test_testing/test/unit http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.807778Z +2011-07-14T09:24:11.000000Z 35e9fbc2fb32c9114a5d6cf531f41e8d 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/unit/.svn/all-wcprops --- a/vendor/plugins/engines/test/unit/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/unit -END -plugins_test.rb -K 25 -svn:wc:ra_dav:version-url -V 73 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/unit/plugins_test.rb -END -assets_test.rb -K 25 -svn:wc:ra_dav:version-url -V 72 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/unit/assets_test.rb -END -arbitrary_code_mixing_test.rb -K 25 -svn:wc:ra_dav:version-url -V 87 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/unit/arbitrary_code_mixing_test.rb -END -backwards_compat_test.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/unit/backwards_compat_test.rb -END -action_mailer_test.rb -K 25 -svn:wc:ra_dav:version-url -V 79 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/unit/action_mailer_test.rb -END -model_and_lib_test.rb -K 25 -svn:wc:ra_dav:version-url -V 79 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/unit/model_and_lib_test.rb -END -migration_test.rb -K 25 -svn:wc:ra_dav:version-url -V 75 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/unit/migration_test.rb -END -load_path_test.rb -K 25 -svn:wc:ra_dav:version-url -V 75 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/unit/load_path_test.rb -END -testing_test.rb -K 25 -svn:wc:ra_dav:version-url -V 73 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/unit/testing_test.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/unit/.svn/entries --- a/vendor/plugins/engines/test/unit/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/unit/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/unit +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/unit http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.815811Z +2011-07-14T09:24:11.000000Z 6724203a17cf765303c1f1cad440ec45 2009-09-13T17:14:35.707881Z 2887 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.811809Z +2011-07-14T09:24:11.000000Z 45a0f490d23fbb62bab17f142ba7e3a6 2009-09-13T17:14:35.707881Z 2887 @@ -100,7 +100,7 @@ -2010-09-23T14:37:45.811809Z +2011-07-14T09:24:11.000000Z 061b4ca6bf8ee79b149289ced48c0389 2009-09-13T17:14:35.707881Z 2887 @@ -134,7 +134,7 @@ -2010-09-23T14:37:45.811809Z +2011-07-14T09:24:11.000000Z caf5ed93e20f9675e13260049b591bcb 2009-09-13T17:14:35.707881Z 2887 @@ -168,7 +168,7 @@ -2010-09-23T14:37:45.811809Z +2011-07-14T09:24:11.000000Z d48da3c38e3e757d1649f48a25913284 2009-09-13T17:14:35.707881Z 2887 @@ -202,7 +202,7 @@ -2010-09-23T14:37:45.815811Z +2011-07-14T09:24:11.000000Z ba3376b21f9304e1bc6dd06e88fb031f 2009-09-13T17:14:35.707881Z 2887 @@ -236,7 +236,7 @@ -2010-09-23T14:37:45.815811Z +2011-07-14T09:24:11.000000Z 7930dc88c66a78e10283af28694f9d75 2009-09-13T17:14:35.707881Z 2887 @@ -273,7 +273,7 @@ -2010-09-23T14:37:45.811809Z +2011-07-14T09:24:11.000000Z da88ee34b7ad92288156f6dc33bc8945 2009-09-13T17:14:35.707881Z 2887 @@ -307,7 +307,7 @@ -2010-09-23T14:37:45.815811Z +2011-07-14T09:24:11.000000Z 749dec42d5f8db283afd40fa09a7a323 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/unit/test_testing/.svn/all-wcprops --- a/vendor/plugins/engines/test/unit/test_testing/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 70 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/unit/test_testing -END -override_test.rb -K 25 -svn:wc:ra_dav:version-url -V 87 -/svn/!svn/ver/2887/trunk/vendor/plugins/engines/test/unit/test_testing/override_test.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/engines/test/unit/test_testing/.svn/entries --- a/vendor/plugins/engines/test/unit/test_testing/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/engines/test/unit/test_testing/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/unit/test_testing +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/unit/test_testing http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.815811Z +2011-07-14T09:24:11.000000Z 55340a07100e4eea865c224b450561d8 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/gravatar/.svn/all-wcprops --- a/vendor/plugins/gravatar/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 48 -/svn/!svn/ver/4406/trunk/vendor/plugins/gravatar -END -Rakefile -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/4072/trunk/vendor/plugins/gravatar/Rakefile -END -README.rdoc -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/2832/trunk/vendor/plugins/gravatar/README.rdoc -END -.gitignore -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/2832/trunk/vendor/plugins/gravatar/.gitignore -END -init.rb -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/1962/trunk/vendor/plugins/gravatar/init.rb -END -MIT-LICENSE -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/1962/trunk/vendor/plugins/gravatar/MIT-LICENSE -END -about.yml -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/2832/trunk/vendor/plugins/gravatar/about.yml -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/gravatar/.svn/entries --- a/vendor/plugins/gravatar/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/gravatar/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/gravatar +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/gravatar http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-24T12:48:29.643852Z +2011-07-14T09:24:11.000000Z dcfa5a7b3c1cc768b2c0e3ad1ab802d0 2010-09-10T03:09:02.311267Z 4072 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.819779Z +2011-07-14T09:24:11.000000Z 3b03a1f4670e486bfc0a99ea42fcc661 2009-08-02T04:19:44.367555Z 2832 @@ -100,7 +100,7 @@ -2010-09-23T14:37:45.815811Z +2011-07-14T09:24:11.000000Z cd9b6943fc8fe58cdccef0b0215bf6bb 2009-08-02T04:19:44.367555Z 2832 @@ -134,7 +134,7 @@ -2010-09-23T14:37:45.819779Z +2011-07-14T09:24:11.000000Z 7560c41dd1c4891e83f52d2855a6a4e9 2008-10-30T02:58:04.259131Z 1962 @@ -171,7 +171,7 @@ -2010-09-23T14:37:45.819779Z +2011-07-14T09:24:11.000000Z b718f27e16d77b36a24720b5b902328f 2008-10-30T02:58:04.259131Z 1962 @@ -208,7 +208,7 @@ -2010-09-23T14:37:45.819779Z +2011-07-14T09:24:11.000000Z e052390cb0624d4b81b7809e65db85f6 2009-08-02T04:19:44.367555Z 2832 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/gravatar/lib/.svn/all-wcprops --- a/vendor/plugins/gravatar/lib/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/4406/trunk/vendor/plugins/gravatar/lib -END -gravatar.rb -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/4406/trunk/vendor/plugins/gravatar/lib/gravatar.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/gravatar/lib/.svn/entries --- a/vendor/plugins/gravatar/lib/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/gravatar/lib/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/gravatar/lib +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/gravatar/lib http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-11-19T13:04:50.928934Z +2011-07-14T09:24:11.000000Z a25a3e98e0d582955ee8fd520f424273 2010-11-14T16:24:21.989522Z 4406 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/gravatar/spec/.svn/all-wcprops --- a/vendor/plugins/gravatar/spec/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/4072/trunk/vendor/plugins/gravatar/spec -END -gravatar_spec.rb -K 25 -svn:wc:ra_dav:version-url -V 70 -/svn/!svn/ver/4072/trunk/vendor/plugins/gravatar/spec/gravatar_spec.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/gravatar/spec/.svn/entries --- a/vendor/plugins/gravatar/spec/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/gravatar/spec/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/gravatar/spec +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/gravatar/spec http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-24T12:48:29.643852Z +2011-07-14T09:24:11.000000Z 26b23e5e988b11435e121bf53624d934 2010-09-10T03:09:02.311267Z 4072 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/open_id_authentication/.svn/all-wcprops --- a/vendor/plugins/open_id_authentication/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/open_id_authentication/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,29 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/3933/trunk/vendor/plugins/open_id_authentication +V 76 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/open_id_authentication END -Rakefile -K 25 -svn:wc:ra_dav:version-url -V 71 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/Rakefile -END -init.rb -K 25 -svn:wc:ra_dav:version-url -V 70 -/svn/!svn/ver/2458/trunk/vendor/plugins/open_id_authentication/init.rb -END -CHANGELOG -K 25 -svn:wc:ra_dav:version-url -V 72 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/CHANGELOG -END -README -K 25 -svn:wc:ra_dav:version-url -V 69 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/README -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/open_id_authentication/.svn/entries --- a/vendor/plugins/open_id_authentication/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/open_id_authentication/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/open_id_authentication http://redmine.rubyforge.org/svn -2010-08-10T21:12:32.103531Z -3933 -jbbarth +2011-03-24T18:46:12.279245Z +5216 +jplang @@ -35,7 +35,7 @@ -2010-09-23T14:37:45.823780Z +2011-07-14T09:24:11.000000Z b66b372df8374607d104228f41a06671 2009-02-11T19:06:45.087605Z 2438 @@ -63,16 +63,13 @@ 584 -tasks -dir - init.rb file -2010-09-23T14:37:45.831824Z +2011-07-14T09:24:11.000000Z 22579abfc9dc6a4cf475150e407e9a17 2009-02-12T21:25:50.680468Z 2458 @@ -109,7 +106,7 @@ -2010-09-23T14:37:45.823780Z +2011-07-14T09:24:11.000000Z d23f4c2e6c00805d7172c76ad52ebe6f 2009-02-11T19:06:45.087605Z 2438 @@ -146,7 +143,7 @@ -2010-09-23T14:37:45.823780Z +2011-07-14T09:24:11.000000Z 45eb3e296a3591fca629d0c8eab71e4c 2009-02-11T19:06:45.087605Z 2438 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/open_id_authentication/generators/.svn/all-wcprops --- a/vendor/plugins/open_id_authentication/generators/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 73 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/generators -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/open_id_authentication/generators/.svn/entries --- a/vendor/plugins/open_id_authentication/generators/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/open_id_authentication/generators/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/generators +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/open_id_authentication/generators http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/.svn/all-wcprops --- a/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 103 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables -END -open_id_authentication_tables_generator.rb -K 25 -svn:wc:ra_dav:version-url -V 146 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/open_id_authentication_tables_generator.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/.svn/entries --- a/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables http://redmine.rubyforge.org/svn @@ -35,7 +35,7 @@ -2010-09-23T14:37:45.827780Z +2011-07-14T09:24:11.000000Z ee799e52b83b842fa2a879431195e9eb 2009-02-11T19:06:45.087605Z 2438 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates/.svn/all-wcprops --- a/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 113 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates -END -migration.rb -K 25 -svn:wc:ra_dav:version-url -V 126 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates/migration.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates/.svn/entries --- a/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.827780Z +2011-07-14T09:24:11.000000Z 352b0b17c079fdf355c028a9b990b3b7 2009-02-11T19:06:45.087605Z 2438 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/.svn/all-wcprops --- a/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 111 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables -END -upgrade_open_id_authentication_tables_generator.rb -K 25 -svn:wc:ra_dav:version-url -V 162 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/upgrade_open_id_authentication_tables_generator.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/.svn/entries --- a/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.831824Z +2011-07-14T09:24:11.000000Z f401bfd8b5d2dd3008d16bf79de8c1e4 2009-02-11T19:06:45.087605Z 2438 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates/.svn/all-wcprops --- a/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 121 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates -END -migration.rb -K 25 -svn:wc:ra_dav:version-url -V 134 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates/migration.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates/.svn/entries --- a/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.831824Z +2011-07-14T09:24:11.000000Z 512b6bc6321e15e12a9eb5ef10317b73 2009-02-11T19:06:45.087605Z 2438 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/open_id_authentication/lib/.svn/all-wcprops --- a/vendor/plugins/open_id_authentication/lib/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/open_id_authentication/lib/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,11 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/3933/trunk/vendor/plugins/open_id_authentication/lib +V 80 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/open_id_authentication/lib END -open_id_authentication.rb -K 25 -svn:wc:ra_dav:version-url -V 92 -/svn/!svn/ver/3933/trunk/vendor/plugins/open_id_authentication/lib/open_id_authentication.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/open_id_authentication/lib/.svn/entries --- a/vendor/plugins/open_id_authentication/lib/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/open_id_authentication/lib/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/lib +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/open_id_authentication/lib http://redmine.rubyforge.org/svn -2010-08-10T21:12:32.103531Z -3933 -jbbarth +2011-03-24T18:46:12.279245Z +5216 +jplang @@ -26,6 +26,9 @@ e93f8b46-1217-0410-a6f0-8f06a7374b81 +tasks +dir + open_id_authentication dir @@ -35,7 +38,7 @@ -2010-09-23T14:37:45.831824Z +2011-07-14T09:24:11.000000Z c72f1bd48e8c2dfe4e84ba232fc40030 2010-08-10T21:12:32.103531Z 3933 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/open_id_authentication/lib/open_id_authentication/.svn/all-wcprops --- a/vendor/plugins/open_id_authentication/lib/open_id_authentication/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 89 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/lib/open_id_authentication -END -mem_cache_store.rb -K 25 -svn:wc:ra_dav:version-url -V 108 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/lib/open_id_authentication/mem_cache_store.rb -END -db_store.rb -K 25 -svn:wc:ra_dav:version-url -V 101 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/lib/open_id_authentication/db_store.rb -END -nonce.rb -K 25 -svn:wc:ra_dav:version-url -V 98 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/lib/open_id_authentication/nonce.rb -END -timeout_fixes.rb -K 25 -svn:wc:ra_dav:version-url -V 106 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/lib/open_id_authentication/timeout_fixes.rb -END -request.rb -K 25 -svn:wc:ra_dav:version-url -V 100 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/lib/open_id_authentication/request.rb -END -association.rb -K 25 -svn:wc:ra_dav:version-url -V 104 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/lib/open_id_authentication/association.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/open_id_authentication/lib/open_id_authentication/.svn/entries --- a/vendor/plugins/open_id_authentication/lib/open_id_authentication/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/open_id_authentication/lib/open_id_authentication/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/lib/open_id_authentication +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/open_id_authentication/lib/open_id_authentication http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.835838Z +2011-07-14T09:24:11.000000Z 1effe2a3ab6ff2cf3a4ffc288222b114 2009-02-11T19:06:45.087605Z 2438 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.835838Z +2011-07-14T09:24:11.000000Z 9ed2aea6a3f0e76f21a84bf5bdb1bebe 2009-02-11T19:06:45.087605Z 2438 @@ -100,7 +100,7 @@ -2010-09-23T14:37:45.835838Z +2011-07-14T09:24:11.000000Z 4aa743638f54375c2f1f25e62fa50bf3 2009-02-11T19:06:45.087605Z 2438 @@ -134,7 +134,7 @@ -2010-09-23T14:37:45.835838Z +2011-07-14T09:24:11.000000Z d05c8725996156d4cc153a2fc0891db8 2009-02-11T19:06:45.087605Z 2438 @@ -168,7 +168,7 @@ -2010-09-23T14:37:45.835838Z +2011-07-14T09:24:11.000000Z 6a6fdfddabbc9ae4b8c11f69bc653107 2009-02-11T19:06:45.087605Z 2438 @@ -202,7 +202,7 @@ -2010-09-23T14:37:45.835838Z +2011-07-14T09:24:11.000000Z 42863e1d17d5af05e0e896d336def59c 2009-02-11T19:06:45.087605Z 2438 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/open_id_authentication/lib/tasks/open_id_authentication_tasks.rake --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/open_id_authentication/lib/tasks/open_id_authentication_tasks.rake Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,30 @@ +namespace :open_id_authentication do + namespace :db do + desc "Creates authentication tables for use with OpenIdAuthentication" + task :create => :environment do + generate_migration(["open_id_authentication_tables", "add_open_id_authentication_tables"]) + end + + desc "Upgrade authentication tables from ruby-openid 1.x.x to 2.x.x" + task :upgrade => :environment do + generate_migration(["upgrade_open_id_authentication_tables", "upgrade_open_id_authentication_tables"]) + end + + def generate_migration(args) + require 'rails_generator' + require 'rails_generator/scripts/generate' + + if ActiveRecord::Base.connection.supports_migrations? + Rails::Generator::Scripts::Generate.new.run(args) + else + raise "Task unavailable to this database (no migration support)" + end + end + + desc "Clear the authentication tables" + task :clear => :environment do + OpenIdAuthentication::DbStore.cleanup_nonces + OpenIdAuthentication::DbStore.cleanup_associations + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/open_id_authentication/tasks/.svn/all-wcprops --- a/vendor/plugins/open_id_authentication/tasks/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 68 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/tasks -END -open_id_authentication_tasks.rake -K 25 -svn:wc:ra_dav:version-url -V 102 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/tasks/open_id_authentication_tasks.rake -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/open_id_authentication/tasks/.svn/entries --- a/vendor/plugins/open_id_authentication/tasks/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/open_id_authentication/tasks/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,7 +1,7 @@ 10 dir -4411 +4993 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/tasks http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.835838Z +2011-03-03T11:05:12.000000Z 54b595ee92e0adb364a9086340b2af51 2009-02-11T19:06:45.087605Z 2438 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/open_id_authentication/tasks/.svn/text-base/open_id_authentication_tasks.rake.svn-base --- a/vendor/plugins/open_id_authentication/tasks/.svn/text-base/open_id_authentication_tasks.rake.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -namespace :open_id_authentication do - namespace :db do - desc "Creates authentication tables for use with OpenIdAuthentication" - task :create => :environment do - generate_migration(["open_id_authentication_tables", "add_open_id_authentication_tables"]) - end - - desc "Upgrade authentication tables from ruby-openid 1.x.x to 2.x.x" - task :upgrade => :environment do - generate_migration(["upgrade_open_id_authentication_tables", "upgrade_open_id_authentication_tables"]) - end - - def generate_migration(args) - require 'rails_generator' - require 'rails_generator/scripts/generate' - - if ActiveRecord::Base.connection.supports_migrations? - Rails::Generator::Scripts::Generate.new.run(args) - else - raise "Task unavailable to this database (no migration support)" - end - end - - desc "Clear the authentication tables" - task :clear => :environment do - OpenIdAuthentication::DbStore.cleanup_nonces - OpenIdAuthentication::DbStore.cleanup_associations - end - end -end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/open_id_authentication/tasks/open_id_authentication_tasks.rake --- a/vendor/plugins/open_id_authentication/tasks/open_id_authentication_tasks.rake Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -namespace :open_id_authentication do - namespace :db do - desc "Creates authentication tables for use with OpenIdAuthentication" - task :create => :environment do - generate_migration(["open_id_authentication_tables", "add_open_id_authentication_tables"]) - end - - desc "Upgrade authentication tables from ruby-openid 1.x.x to 2.x.x" - task :upgrade => :environment do - generate_migration(["upgrade_open_id_authentication_tables", "upgrade_open_id_authentication_tables"]) - end - - def generate_migration(args) - require 'rails_generator' - require 'rails_generator/scripts/generate' - - if ActiveRecord::Base.connection.supports_migrations? - Rails::Generator::Scripts::Generate.new.run(args) - else - raise "Task unavailable to this database (no migration support)" - end - end - - desc "Clear the authentication tables" - task :clear => :environment do - OpenIdAuthentication::DbStore.cleanup_nonces - OpenIdAuthentication::DbStore.cleanup_associations - end - end -end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/open_id_authentication/test/.svn/all-wcprops --- a/vendor/plugins/open_id_authentication/test/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 67 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/test -END -test_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/test/test_helper.rb -END -normalize_test.rb -K 25 -svn:wc:ra_dav:version-url -V 85 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/test/normalize_test.rb -END -status_test.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/test/status_test.rb -END -open_id_authentication_test.rb -K 25 -svn:wc:ra_dav:version-url -V 98 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/test/open_id_authentication_test.rb -END -mem_cache_store_test.rb -K 25 -svn:wc:ra_dav:version-url -V 91 -/svn/!svn/ver/2438/trunk/vendor/plugins/open_id_authentication/test/mem_cache_store_test.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/open_id_authentication/test/.svn/entries --- a/vendor/plugins/open_id_authentication/test/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/open_id_authentication/test/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/test +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/open_id_authentication/test http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.839834Z +2011-07-14T09:24:11.000000Z 9448478c6f6c999b3dfae03f9661a7a9 2009-02-11T19:06:45.087605Z 2438 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.839834Z +2011-07-14T09:24:11.000000Z 218b9c429fce5d50a6de37d10d4c626a 2009-02-11T19:06:45.087605Z 2438 @@ -100,7 +100,7 @@ -2010-09-23T14:37:45.839834Z +2011-07-14T09:24:11.000000Z 3ffcd8ee621212d3a963257c35cf565c 2009-02-11T19:06:45.087605Z 2438 @@ -134,7 +134,7 @@ -2010-09-23T14:37:45.839834Z +2011-07-14T09:24:11.000000Z 26175162cebaa3962614100cac9726fc 2009-02-11T19:06:45.087605Z 2438 @@ -168,7 +168,7 @@ -2010-09-23T14:37:45.839834Z +2011-07-14T09:24:11.000000Z c3e483ae649f9324f093075331c26ed1 2009-02-11T19:06:45.087605Z 2438 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/prepend_engine_views/.svn/all-wcprops --- a/vendor/plugins/prepend_engine_views/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/2887/trunk/vendor/plugins/prepend_engine_views -END -init.rb -K 25 -svn:wc:ra_dav:version-url -V 68 -/svn/!svn/ver/2887/trunk/vendor/plugins/prepend_engine_views/init.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/prepend_engine_views/.svn/entries --- a/vendor/plugins/prepend_engine_views/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/prepend_engine_views/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/prepend_engine_views +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/prepend_engine_views http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.843778Z +2011-07-14T09:24:11.000000Z 720c397a2f5ed49f4436f5d9cbe0b5ec 2009-09-13T17:14:35.707881Z 2887 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/redmine_checkout/app/views/redmine_checkout_hooks/_view_repositories_show_contextual.rhtml --- a/vendor/plugins/redmine_checkout/app/views/redmine_checkout_hooks/_view_repositories_show_contextual.rhtml Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/redmine_checkout/app/views/redmine_checkout_hooks/_view_repositories_show_contextual.rhtml Mon Jul 25 14:23:37 2011 +0100 @@ -17,8 +17,19 @@
    <%= image_tag 'paste.png', :plugin => 'redmine_checkout' %>
    . - # - # 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
    . - # - # 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 :scanner_options 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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/README --- a/vendor/plugins/coderay-0.9.2/lib/README Mon Mar 28 18:17:06 2011 +0100 +++ /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 . - - -== 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 :) diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 "Hello, world!" -# -# -# === 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 :python or :html. -# * 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, :ruby 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 :html or :statistic. -# -# 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
    . - # - # 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
    . - # - # 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 :scanner_options 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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/.svn/all-wcprops --- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay -END -token_classes.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/token_classes.rb -END -encoder.rb -K 25 -svn:wc:ra_dav:version-url -V 76 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoder.rb -END -style.rb -K 25 -svn:wc:ra_dav:version-url -V 74 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/style.rb -END -tokens.rb -K 25 -svn:wc:ra_dav:version-url -V 75 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/tokens.rb -END -duo.rb -K 25 -svn:wc:ra_dav:version-url -V 72 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/duo.rb -END -scanner.rb -K 25 -svn:wc:ra_dav:version-url -V 76 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanner.rb -END -for_redcloth.rb -K 25 -svn:wc:ra_dav:version-url -V 81 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/for_redcloth.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/.svn/entries --- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,278 +0,0 @@ -10 - -dir -4411 -http://redmine.rubyforge.org/svn/trunk/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-09-23T14:37:45.683786Z -4f17211f3874899049db6111ef282a3b -2010-03-16T20:29:12.319937Z -3592 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -2287 - -encoder.rb -file - - - - -2010-09-23T14:37:45.631818Z -f0ead48eaa86c8b4d6a5587e9b5450ca -2010-03-16T20:29:12.319937Z -3592 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -6565 - -encoders -dir - -helpers -dir - -style.rb -file - - - - -2010-09-23T14:37:45.679790Z -409fa492a5470a8bed5ae969f270decf -2010-03-16T20:29:12.319937Z -3592 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -293 - -styles -dir - -tokens.rb -file - - - - -2010-09-23T14:37:45.683786Z -b7662592ff38046174f935548f579ce4 -2010-03-16T20:29:12.319937Z -3592 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -10153 - -duo.rb -file - - - - -2010-09-23T14:37:45.631818Z -b33e5b83e354c09655f46d37ae662f64 -2010-03-16T20:29:12.319937Z -3592 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -2549 - -scanner.rb -file - - - - -2010-09-23T14:37:45.655760Z -f75f38c93ee8de3e6df1c08773b62319 -2010-03-16T20:29:12.319937Z -3592 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -7803 - -scanners -dir - -for_redcloth.rb -file - - - - -2010-09-23T14:37:45.651759Z -d216c2f1c7a84a23ce3feff0b1358d60 -2010-03-16T20:29:12.319937Z -3592 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -3001 - diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/duo.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/duo.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/encoder.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/encoder.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/for_redcloth.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/for_redcloth.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/scanner.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/scanner.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/style.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/style.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/token_classes.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/token_classes.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/tokens.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/tokens.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/duo.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/duo.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 - diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/encoder.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/encoder.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/for_redcloth.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/for_redcloth.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 = { - '&' => '&', - '"' => '"', - '>' => '>', - '<' => '<', - } - 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 - "#{opts[:text]}" - end - end - def bc_open(opts) # :nodoc: - opts[:block] = true - @in_bc = opts - opts[:lang] ? '' : "" - end - def bc_close(opts) # :nodoc: - opts = @in_bc - @in_bc = nil - opts[:lang] ? '' : "\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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/scanner.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/scanner.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/style.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/style.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/token_classes.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/token_classes.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/tokens.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/tokens.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/duo.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/duo.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 - diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoder.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoder.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/all-wcprops --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,113 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 74 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders -END -div.rb -K 25 -svn:wc:ra_dav:version-url -V 81 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/div.rb -END -text.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/text.rb -END -filter.rb -K 25 -svn:wc:ra_dav:version-url -V 84 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/filter.rb -END -debug.rb -K 25 -svn:wc:ra_dav:version-url -V 83 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/debug.rb -END -lines_of_code.rb -K 25 -svn:wc:ra_dav:version-url -V 91 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/lines_of_code.rb -END -count.rb -K 25 -svn:wc:ra_dav:version-url -V 83 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/count.rb -END -xml.rb -K 25 -svn:wc:ra_dav:version-url -V 81 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/xml.rb -END -span.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/span.rb -END -yaml.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/yaml.rb -END -html.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html.rb -END -term.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/term.rb -END -statistic.rb -K 25 -svn:wc:ra_dav:version-url -V 87 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/statistic.rb -END -comment_filter.rb -K 25 -svn:wc:ra_dav:version-url -V 92 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/comment_filter.rb -END -json.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/json.rb -END -token_class_filter.rb -K 25 -svn:wc:ra_dav:version-url -V 96 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/token_class_filter.rb -END -null.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/null.rb -END -page.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/page.rb -END -_map.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/_map.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/entries --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,643 +0,0 @@ -10 - -dir -4411 -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 - diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/_map.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/_map.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/comment_filter.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/comment_filter.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/count.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/count.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/debug.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/debug.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/div.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/div.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/filter.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/filter.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/html.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/html.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/json.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/json.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/lines_of_code.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/lines_of_code.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/null.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/null.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/page.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/page.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/span.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/span.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/statistic.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/statistic.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/term.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/term.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/text.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/text.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/token_class_filter.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/token_class_filter.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/xml.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/xml.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/yaml.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/yaml.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/_map.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/_map.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/comment_filter.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/comment_filter.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/count.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/count.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/debug.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/debug.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/div.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/div.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/filter.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/filter.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/html.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/html.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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) - # #-> Some /code/ - # puts CodeRay.scan('Some /code/', :ruby).span #-> the same - # - # puts CodeRay.scan('Some code', :ruby).html( - # :wrap => nil, - # :line_numbers => :inline, - # :css => :style - # ) - # #-> 1 Some 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: - '&' => '&', - '"' => '"', - '>' => '>', - '<' => '<', - } - - # 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] = '' % [title] - else - h[k.dup] = '' % [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 - '' % [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 << '' * @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 << '' - else - @out << text - end - - - # token groups, eg. strings - when :open - @opened[0] = type - @out << (@css_style[@opened] || '') - @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 << '' - @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('' - 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 << '
    ' - @opened.pop - end - - else - raise 'unknown token kind: %p' % [text] - - end - end - - end - -end -end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/json.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/json.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/lines_of_code.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/lines_of_code.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/null.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/null.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/page.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/page.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/span.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/span.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/statistic.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/statistic.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/term.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/term.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/text.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/text.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/token_class_filter.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/token_class_filter.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/xml.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/xml.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/yaml.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/yaml.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/_map.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/_map.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/comment_filter.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/comment_filter.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/count.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/count.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/debug.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/debug.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/div.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/div.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/filter.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/filter.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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) - # #-> Some /code/ - # puts CodeRay.scan('Some /code/', :ruby).span #-> the same - # - # puts CodeRay.scan('Some code', :ruby).html( - # :wrap => nil, - # :line_numbers => :inline, - # :css => :style - # ) - # #-> 1 Some 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: - '&' => '&', - '"' => '"', - '>' => '>', - '<' => '<', - } - - # 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] = '' % [title] - else - h[k.dup] = '' % [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 - '' % [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 << '' * @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 << '' - else - @out << text - end - - - # token groups, eg. strings - when :open - @opened[0] = type - @out << (@css_style[@opened] || '') - @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 << '' - @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('' - 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 << '
    ' - @opened.pop - end - - else - raise 'unknown token kind: %p' % [text] - - end - end - - end - -end -end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/all-wcprops --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 79 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html -END -output.rb -K 25 -svn:wc:ra_dav:version-url -V 89 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/output.rb -END -numerization.rb -K 25 -svn:wc:ra_dav:version-url -V 95 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/numerization.rb -END -css.rb -K 25 -svn:wc:ra_dav:version-url -V 86 -/svn/!svn/ver/3592/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/css.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/entries --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,130 +0,0 @@ -10 - -dir -4411 -http://redmine.rubyforge.org/svn/trunk/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-09-23T14:37:45.647759Z -8d0cea50dc9e6743bd10a8e0c6f1db17 -2010-03-16T20:29:12.319937Z -3592 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -5271 - -numerization.rb -file - - - - -2010-09-23T14:37:45.647759Z -6f9a2f0d033d9af4d4804ecd8751a3f7 -2010-03-16T20:29:12.319937Z -3592 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -4226 - -css.rb -file - - - - -2010-09-23T14:37:45.647759Z -aa931c09ed5f16abfed3b7c99f0f684d -2010-03-16T20:29:12.319937Z -3592 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -1626 - diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/prop-base/css.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/prop-base/css.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/prop-base/numerization.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/prop-base/numerization.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/prop-base/output.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/prop-base/output.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/text-base/css.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/text-base/css.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/text-base/numerization.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/text-base/numerization.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 - "#{line}" # 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 - "#{line}" # 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 = "#{indent}#{line_number_text} " - 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/) { "\n" } - - line_numbers_table_tpl = TABLE.apply('LINE_NUMBERS', line_numbers) - gsub!(/<\/div>\n/) { '
    ' } - gsub!(/\n/) { "\n" } - 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 = '' * opened_tags.size - - "
  • #{open}#{line}#{close}
  • \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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/text-base/output.rb.svn-base --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/text-base/output.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /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 'Code' - # 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 - - 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>)/) { $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> - - - - -<%CONTENT%> - - - PAGE - - end - - end - -end -end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/css.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/css.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/numerization.rb --- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/numerization.rb Mon Mar 28 18:17:06 2011 +0100 +++ /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 - "#{line}" # 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 - "#{line}" # 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 = "#{indent}#{line_number_text} " - 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/) { "\n" } - - line_numbers_table_tpl = TABLE.apply('LINE_NUMBERS', line_numbers) - gsub!(/<\/div>\n/) { '
    <% end -%> - <% if default_protocol %>

    <%=l :label_access_type, :type => l(default_protocol.access_label(User.current)) %>

    <% end %> - + +

    + <% if User.current.logged? %> + <% if repository.is_external? %> + <%=l :label_access_type_all, :type => l(:label_access_read_only) %> + <% else %> + <% if default_protocol %><%=l :label_access_type, :type => l(default_protocol.access_label(User.current)) %><% end %> + <% end %> + <% else %> +   + <% end %> +

    + <% javascript_tag do %> var checkout_access = $H({<%= protocols.inject([]){|r,p| r << "'checkout_protocol_#{p.protocol.to_s.underscore}': '#{l(p.access_label(User.current))}'"}.join(', ') %>}); var checkout_commands = $H({<%= protocols.inject([]){|r,p| r << "'checkout_protocol_#{p.protocol.to_s.underscore}': '#{escape_javascript(p.full_command(checkout_path))}'"}.join(', ') %>}); @@ -27,8 +38,9 @@ <% end%> <% if repository.is_external? %> -
    -

    <%= l(:text_repository_external, :location => repository.external_url) %>

    +
    +
    +

    <%= l(:text_repository_external, :location => repository.external_url) %>

    <% end %>
    diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/redmine_checkout/assets/stylesheets/checkout.css --- a/vendor/plugins/redmine_checkout/assets/stylesheets/checkout.css Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/redmine_checkout/assets/stylesheets/checkout.css Mon Jul 25 14:23:37 2011 +0100 @@ -20,6 +20,10 @@ border-bottom: 1px solid #ccc; } +.topline { + border-top: 1px solid #ccc; +} + #checkout_box { margin: 10px 0; } @@ -159,4 +163,4 @@ #clipboard_button img { padding-top: 2px; -} \ No newline at end of file +} diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/redmine_checkout/config/locales/en-GB.yml --- a/vendor/plugins/redmine_checkout/config/locales/en-GB.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/redmine_checkout/config/locales/en-GB.yml Mon Jul 25 14:23:37 2011 +0100 @@ -16,9 +16,9 @@ label_protocol_plural: "Protocols" button_add_protocol: "Add Protocol" - label_access_type: 'This URL has {{type}} access.' - label_access_read_only: 'Read-Only' - label_access_read_write: "Read+Write" + label_access_type: 'You have {{type}} access to this URL.' + label_access_read_only: 'Read Only' + label_access_read_write: "Read and Write" label_access_permission: "Depending on user's permissions" label_append_path: "Append path" @@ -37,3 +37,5 @@ Leave the Checkout URL field empty to use the defined repository URL. help_moved_settings: "The settings page has been moved to {{link}}." label_settings_location: "Administration -> Settings -> Checkout" + + text_repository_external: "The primary repository for this project is hosted at {{location}} .
    This repository is a read-only copy which is updated automatically." diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/redmine_checkout/config/locales/en.yml --- a/vendor/plugins/redmine_checkout/config/locales/en.yml Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/redmine_checkout/config/locales/en.yml Mon Jul 25 14:23:37 2011 +0100 @@ -16,9 +16,10 @@ label_protocol_plural: "Protocols" button_add_protocol: "Add Protocol" - label_access_type: 'This URL has {{type}} access.' - label_access_read_only: 'Read-Only' - label_access_read_write: "Read+Write" + label_access_type: 'You have {{type}} access to this URL.' + label_access_type_all: 'All access to this URL is {{type}}.' + label_access_read_only: 'Read Only' + label_access_read_write: "Read and Write" label_access_permission: "Depending on user's permissions" label_append_path: "Append path" @@ -37,3 +38,6 @@ Leave the Checkout URL field empty to use the defined repository URL. help_moved_settings: "The settings page has been moved to {{link}}." label_settings_location: "Administration -> Settings -> Checkout" + + text_repository_external: "The primary repository for this project is hosted at {{location}} .
    This repository is a read-only copy which is updated automatically every hour." + diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/.svn/all-wcprops --- a/vendor/plugins/rfpdf/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/rfpdf/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,29 +1,47 @@ K 25 svn:wc:ra_dav:version-url -V 45 -/svn/!svn/ver/3389/trunk/vendor/plugins/rfpdf +V 59 +/svn/!svn/ver/6156/branches/1.2-stable/vendor/plugins/rfpdf +END +utf8test.txt +K 25 +svn:wc:ra_dav:version-url +V 72 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/utf8test.txt END init.rb K 25 svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/1623/trunk/vendor/plugins/rfpdf/init.rb +V 67 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/init.rb +END +test_unicode.rfpdf +K 25 +svn:wc:ra_dav:version-url +V 78 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/test_unicode.rfpdf END CHANGELOG K 25 svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/67/trunk/vendor/plugins/rfpdf/CHANGELOG +V 69 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/CHANGELOG END MIT-LICENSE K 25 svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/67/trunk/vendor/plugins/rfpdf/MIT-LICENSE +V 71 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/MIT-LICENSE END README K 25 svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/67/trunk/vendor/plugins/rfpdf/README +V 66 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/README END +logo_example.png +K 25 +svn:wc:ra_dav:version-url +V 76 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/logo_example.png +END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/.svn/entries --- a/vendor/plugins/rfpdf/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/rfpdf/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/rfpdf +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/rfpdf http://redmine.rubyforge.org/svn -2010-02-07T12:30:44.486359Z -3389 -jplang +2011-07-02T15:44:02.109574Z +6156 +tmaruyama @@ -29,17 +29,51 @@ test dir +utf8test.txt +file + + + + +2011-07-14T09:28:12.000000Z +f9fe2827506cd6b421d6c146e0a5242b +2011-03-30T03:23:54.585875Z +5247 +tmaruyama +has-props + + + + + + + + + + + + + + + + + + + + +4542 + init.rb file -2010-09-23T14:37:45.843778Z -1da9fbada6119233134b3aab6c7d0edf -2008-07-04T17:58:14.743502Z -1623 -jplang +2011-07-14T09:28:12.000000Z +6bb137515bea7692cadd9bba1576d488 +2011-03-30T05:46:58.358840Z +5257 +tmaruyama @@ -61,7 +95,41 @@ -247 +270 + +test_unicode.rfpdf +file + + + + +2011-07-14T09:28:12.000000Z +4532560d82aed21773043033722c24ec +2011-03-30T03:23:54.585875Z +5247 +tmaruyama + + + + + + + + + + + + + + + + + + + + + +4812 lib dir @@ -72,11 +140,11 @@ -2010-09-23T14:37:45.843778Z -275a3dc6407eaf7c40f1d8f4e6b08803 -2006-11-21T18:34:04.275680Z -49 -jplang +2011-07-14T09:28:12.000000Z +6778639658f16109525036ebe955c3df +2011-03-30T03:23:54.585875Z +5247 +tmaruyama @@ -98,7 +166,7 @@ -608 +715 MIT-LICENSE file @@ -106,7 +174,7 @@ -2010-09-23T14:37:45.843778Z +2011-07-14T09:28:12.000000Z 40cf182dab06e3de067375de5bbab322 2006-11-21T18:34:04.275680Z 49 @@ -140,11 +208,11 @@ -2010-09-23T14:37:45.843778Z -d58199e83ebcaa5d234764407c238bb2 -2006-11-21T18:34:04.275680Z -49 -jplang +2011-07-14T09:28:12.000000Z +14180635c63b79d7db3c7e6ae4e2df45 +2011-03-30T03:23:54.585875Z +5247 +tmaruyama @@ -166,5 +234,39 @@ -2454 +838 +logo_example.png +file + + + + +2011-07-14T09:28:12.000000Z +5f263c19d9009be6148a784dc31028c0 +2011-03-30T03:23:54.585875Z +5247 +tmaruyama +has-props + + + + + + + + + + + + + + + + + + + + +19411 + diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/.svn/text-base/CHANGELOG.svn-base --- a/vendor/plugins/rfpdf/.svn/text-base/CHANGELOG.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/rfpdf/.svn/text-base/CHANGELOG.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -11,3 +11,4 @@ * Added :filename option in this hash If you're using the same settings for @options_for_rfpdf often, you might want to put your assignment in a before_filter (perhaps overriding :filename, etc in your actions). +1.15 2009-11-20 Rails 2.* support - Thanks to Prawnto plugin for showing the way to the new TemplateHandler \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/.svn/text-base/README.svn-base --- a/vendor/plugins/rfpdf/.svn/text-base/README.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/rfpdf/.svn/text-base/README.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,99 +1,45 @@ +FWIW - I am migrating my apps to Prawn and Prawnto + = RFPDF Template Plugin A template plugin allowing the inclusion of ERB-enabled RFPDF template files. -== Example .rb method Usage +== +== +== TCPDF Version (The New or UTF8 Version) +== +== -In the controller, something like: +If you are using HTML, it is recommended you install: - def mypdf - pdf = FPDF.new() +gem install -r htmlentities - # - # Chinese - # - pdf.extend(PDF_Chinese) - pdf.AddPage - pdf.AddBig5Font - pdf.SetFont('Big5','',18) - pdf.Write(5, '²{®É®ð·Å 18 C Àã«× 83 %') - icBig5 = Iconv.new('Big5', 'UTF-8') - pdf.Write(15, icBig5.iconv("宋体 should be working")) - send_data pdf.Output, :filename => "something.pdf", :type => "application/pdf" - end +TCPDF Documentation located at: -== Example .rfdf Usage +http://phpdocs.moodle.org/com-tecnick-tcpdf/TCPDF.html -In the controller, something like: - - def mypdf - @options_for_rfpdf ||= {} - @options_for_rfpdf[:file_name] = "nice_looking.pdf" - end - -In the layout (make sure this is the only item in the layout): -<%= @content_for_layout %> - -In the view (mypdf.rfpdf): +Example of simple use in .rhtml: <% - pdf = FPDF.new() - # - # Chinese - # - pdf.extend(PDF_Chinese) - pdf.AddPage - pdf.AddBig5Font - pdf.SetFont('Big5','',18) - pdf.Write(5, '²{®É®ð·Å 18 C Àã«× 83 %') - icBig5 = Iconv.new('Big5', 'UTF-8') - pdf.Write(15, icBig5.iconv("宋体 should be working")) + @pdf = TCPDF.new() + @pdf.SetMargins(15, 27, 15); + @pdf.AddPage(); + text_options = {:font => "freeserif"} + @pdf.draw_text(15, 10, "text", {:font_size => 12, :font => "freeserif"}) +%><%=@pdf.Output()%> - # - # Japanese - # - pdf.extend(PDF_Japanese) - pdf.AddSJISFont(); - pdf.AddPage(); - pdf.SetFont('SJIS','',18); - pdf.Write(5,'9ÉñåéÇÃåˆäJÉeÉXÉgÇåoǃPHP 3.0ÇÕ1998îN6åéÇ…åˆéÆÇ…ÉäÉäÅ[ÉXÇ≥ÇÍNjǵÇΩÅB'); - icSJIS = Iconv.new('SJIS', 'UTF-8') - pdf.Write(15, icSJIS.iconv("これはテキストである should be working")) +See the following files for sample of useage: - # - # Korean - # - pdf.extend(PDF_Korean) - pdf.AddUHCFont(); - pdf.AddPage(); - pdf.SetFont('UHC','',18); - pdf.Write(5,'PHP 3.0Àº 1998³â 6¿ù¿¡ °ø½ÄÀûÀ¸·Î ¸±¸®ÁîµÇ¾ú´Ù. °ø°³ÀûÀÎ Å×½ºÆ® ÀÌÈľà 9°³¿ù¸¸À̾ú´Ù.'); - icUHC = Iconv.new('UHC', 'UTF-8') - pdf.Write(15, icUHC.iconv("이것은 원본 이다")) +test_unicode.rfpdf +utf8test.txt +logo_example.png - # - # English - # - pdf.AddPage(); - pdf.SetFont('Arial', '', 10) - pdf.Write(5, "should be working") -%> -<%= pdf.Output() %> - - -== Configuring +FPDF users can migrate to TCPDF by changing the following from: -You can configure Rfpdf by using an @options_for_rfpdf hash in your controllers. + pdf = FPDF.new -Here are a few options: +to: -:filename (default: action_name.pdf) - Filename of PDF to generate + pdf = TCPDF.new -Note: If you're using the same settings for @options_for_rfpdf often, you might want to -put your assignment in a before_filter (perhaps overriding :filename, etc in your actions). - -== Problems - -Layouts and partials are currently not supported; just need -to wrap the PDF generation differently. +ENJOY! \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/.svn/text-base/init.rb.svn-base --- a/vendor/plugins/rfpdf/.svn/text-base/init.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/rfpdf/.svn/text-base/init.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,9 +1,11 @@ +begin + require('htmlentities') +rescue LoadError + # This gem is not required - just nice to have. +end +require('cgi') require 'rfpdf' -begin - ActionView::Template::register_template_handler 'rfpdf', RFPDF::View -rescue NameError - # Rails < 2.1 - RFPDF::View.backward_compatibility_mode = true - ActionView::Base::register_template_handler 'rfpdf', RFPDF::View -end +# Mime::Type.register "application/pdf", :pdf +ActionView::Template::register_template_handler 'rfpdf', RFPDF::TemplateHandlers::Base + diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/CHANGELOG --- a/vendor/plugins/rfpdf/CHANGELOG Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/rfpdf/CHANGELOG Mon Jul 25 14:23:37 2011 +0100 @@ -11,3 +11,4 @@ * Added :filename option in this hash If you're using the same settings for @options_for_rfpdf often, you might want to put your assignment in a before_filter (perhaps overriding :filename, etc in your actions). +1.15 2009-11-20 Rails 2.* support - Thanks to Prawnto plugin for showing the way to the new TemplateHandler \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/README --- a/vendor/plugins/rfpdf/README Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/rfpdf/README Mon Jul 25 14:23:37 2011 +0100 @@ -1,99 +1,45 @@ +FWIW - I am migrating my apps to Prawn and Prawnto + = RFPDF Template Plugin A template plugin allowing the inclusion of ERB-enabled RFPDF template files. -== Example .rb method Usage +== +== +== TCPDF Version (The New or UTF8 Version) +== +== -In the controller, something like: +If you are using HTML, it is recommended you install: - def mypdf - pdf = FPDF.new() +gem install -r htmlentities - # - # Chinese - # - pdf.extend(PDF_Chinese) - pdf.AddPage - pdf.AddBig5Font - pdf.SetFont('Big5','',18) - pdf.Write(5, '²{®É®ð·Å 18 C Àã«× 83 %') - icBig5 = Iconv.new('Big5', 'UTF-8') - pdf.Write(15, icBig5.iconv("宋体 should be working")) - send_data pdf.Output, :filename => "something.pdf", :type => "application/pdf" - end +TCPDF Documentation located at: -== Example .rfdf Usage +http://phpdocs.moodle.org/com-tecnick-tcpdf/TCPDF.html -In the controller, something like: - - def mypdf - @options_for_rfpdf ||= {} - @options_for_rfpdf[:file_name] = "nice_looking.pdf" - end - -In the layout (make sure this is the only item in the layout): -<%= @content_for_layout %> - -In the view (mypdf.rfpdf): +Example of simple use in .rhtml: <% - pdf = FPDF.new() - # - # Chinese - # - pdf.extend(PDF_Chinese) - pdf.AddPage - pdf.AddBig5Font - pdf.SetFont('Big5','',18) - pdf.Write(5, '²{®É®ð·Å 18 C Àã«× 83 %') - icBig5 = Iconv.new('Big5', 'UTF-8') - pdf.Write(15, icBig5.iconv("宋体 should be working")) + @pdf = TCPDF.new() + @pdf.SetMargins(15, 27, 15); + @pdf.AddPage(); + text_options = {:font => "freeserif"} + @pdf.draw_text(15, 10, "text", {:font_size => 12, :font => "freeserif"}) +%><%=@pdf.Output()%> - # - # Japanese - # - pdf.extend(PDF_Japanese) - pdf.AddSJISFont(); - pdf.AddPage(); - pdf.SetFont('SJIS','',18); - pdf.Write(5,'9ÉñåéÇÃåˆäJÉeÉXÉgÇåoǃPHP 3.0ÇÕ1998îN6åéÇ…åˆéÆÇ…ÉäÉäÅ[ÉXÇ≥ÇÍNjǵÇΩÅB'); - icSJIS = Iconv.new('SJIS', 'UTF-8') - pdf.Write(15, icSJIS.iconv("これはテキストである should be working")) +See the following files for sample of useage: - # - # Korean - # - pdf.extend(PDF_Korean) - pdf.AddUHCFont(); - pdf.AddPage(); - pdf.SetFont('UHC','',18); - pdf.Write(5,'PHP 3.0Àº 1998³â 6¿ù¿¡ °ø½ÄÀûÀ¸·Î ¸±¸®ÁîµÇ¾ú´Ù. °ø°³ÀûÀÎ Å×½ºÆ® ÀÌÈľà 9°³¿ù¸¸À̾ú´Ù.'); - icUHC = Iconv.new('UHC', 'UTF-8') - pdf.Write(15, icUHC.iconv("이것은 원본 이다")) +test_unicode.rfpdf +utf8test.txt +logo_example.png - # - # English - # - pdf.AddPage(); - pdf.SetFont('Arial', '', 10) - pdf.Write(5, "should be working") -%> -<%= pdf.Output() %> - - -== Configuring +FPDF users can migrate to TCPDF by changing the following from: -You can configure Rfpdf by using an @options_for_rfpdf hash in your controllers. + pdf = FPDF.new -Here are a few options: +to: -:filename (default: action_name.pdf) - Filename of PDF to generate + pdf = TCPDF.new -Note: If you're using the same settings for @options_for_rfpdf often, you might want to -put your assignment in a before_filter (perhaps overriding :filename, etc in your actions). - -== Problems - -Layouts and partials are currently not supported; just need -to wrap the PDF generation differently. +ENJOY! \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/init.rb --- a/vendor/plugins/rfpdf/init.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/rfpdf/init.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,9 +1,11 @@ +begin + require('htmlentities') +rescue LoadError + # This gem is not required - just nice to have. +end +require('cgi') require 'rfpdf' -begin - ActionView::Template::register_template_handler 'rfpdf', RFPDF::View -rescue NameError - # Rails < 2.1 - RFPDF::View.backward_compatibility_mode = true - ActionView::Base::register_template_handler 'rfpdf', RFPDF::View -end +# Mime::Type.register "application/pdf", :pdf +ActionView::Template::register_template_handler 'rfpdf', RFPDF::TemplateHandlers::Base + diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/.svn/all-wcprops --- a/vendor/plugins/rfpdf/lib/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/rfpdf/lib/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,11 +1,17 @@ K 25 svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/3389/trunk/vendor/plugins/rfpdf/lib +V 63 +/svn/!svn/ver/6156/branches/1.2-stable/vendor/plugins/rfpdf/lib +END +tcpdf.rb +K 25 +svn:wc:ra_dav:version-url +V 72 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/lib/tcpdf.rb END rfpdf.rb K 25 svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/67/trunk/vendor/plugins/rfpdf/lib/rfpdf.rb +V 72 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/lib/rfpdf.rb END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/.svn/entries --- a/vendor/plugins/rfpdf/lib/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/rfpdf/lib/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/rfpdf/lib +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/rfpdf/lib http://redmine.rubyforge.org/svn -2010-02-07T12:30:44.486359Z -3389 -jplang +2011-07-02T15:44:02.109574Z +6156 +tmaruyama @@ -26,20 +26,60 @@ e93f8b46-1217-0410-a6f0-8f06a7374b81 +barcode +dir + +fpdf +dir + rfpdf dir +tcpdf.rb +file + + + + +2011-07-14T09:28:11.000000Z +1982fe0c734af19e656f19d88b8e2870 +2011-05-09T07:35:02.800600Z +5717 +tmaruyama +has-props + + + + + + + + + + + + + + + + + + + + +111093 + rfpdf.rb file -2010-09-23T14:37:45.847779Z -9667df0ee17c3893ec4025f214d990ee -2006-11-21T18:34:04.275680Z -49 -jplang +2011-07-14T09:28:11.000000Z +8d496f73e24615f94ce6b264e9d13f19 +2011-03-30T03:23:54.585875Z +5247 +tmaruyama @@ -61,5 +101,14 @@ -1329 +1454 +config +dir + +core +dir + +fonts +dir + diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/.svn/text-base/rfpdf.rb.svn-base --- a/vendor/plugins/rfpdf/lib/.svn/text-base/rfpdf.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/rfpdf/lib/.svn/text-base/rfpdf.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -20,12 +20,21 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -$LOAD_PATH.unshift(File.dirname(__FILE__)) +require 'action_controller' +require 'action_view' -require 'rfpdf/errors' -require 'rfpdf/view' -require 'rfpdf/fpdf' -require 'rfpdf/rfpdf' -require 'rfpdf/chinese' -require 'rfpdf/japanese' -require 'rfpdf/korean' +require 'rfpdf/action_controller' +require 'rfpdf/action_view' + +require 'rfpdf/template_handler/compile_support' + +require 'rfpdf/template_handlers/base' + + +class ActionController::Base + include RFPDF::ActionController +end + +class ActionView::Base + include RFPDF::ActionView +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/barcode/barcode.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/barcode/barcode.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,448 @@ + +#============================================================+ +# File name : barcode.rb +# Begin : 2002-07-31 +# Last Update : 2005-01-02 +# Author : Karim Mribti [barcode@mribti.com] +# Version : 1.1 [0.0.8a (original code)] +# License : GNU LGPL (Lesser General Public License) 2.1 +# http://www.gnu.org/copyleft/lesser.txt +# Source Code : http://www.mribti.com/barcode/ +# +# Description : Generic Barcode Render Class for PHP using +# the GD graphics library. +# +# NOTE: +# This version contains changes by Nicola Asuni: +# - porting to Ruby +# - code style and formatting +# - automatic php documentation in PhpDocumentor Style +# (www.phpdoc.org) +# - minor bug fixing +# - $mCharSet and $mChars variables were added here +#============================================================+ + +# +# Barcode Render Class for PHP using the GD graphics library. +# @author Karim Mribti, Nicola Asuni +# @name BarcodeObject +# @package com.tecnick.tcpdf +# @@version 0.0.8a 2001-04-01 (original code) +# @since 2001-03-25 +# @license http://www.gnu.org/copyleft/lesser.html LGPL +# + +# Styles +# Global + +# +# option: generate barcode border +# +define("BCS_BORDER", 1); + +# +# option: use transparent background +# +define("BCS_TRANSPARENT", 2); + +# +# option: center barcode +# +define("BCS_ALIGN_CENTER", 4); + +# +# option: align left +# +define("BCS_ALIGN_LEFT", 8); + +# +# option: align right +# +define("BCS_ALIGN_RIGHT", 16); + +# +# option: generate JPEG image +# +define("BCS_IMAGE_JPEG", 32); + +# +# option: generate PNG image +# +define("BCS_IMAGE_PNG", 64); + +# +# option: draw text +# +define("BCS_DRAW_TEXT", 128); + +# +# option: stretch text +# +define("BCS_STRETCH_TEXT", 256); + +# +# option: reverse color +# +define("BCS_REVERSE_COLOR", 512); + +# +# option: draw check +# (only for I25 code) +# +define("BCS_I25_DRAW_CHECK", 2048); + +# +# set default background color +# +define("BCD_DEFAULT_BACKGROUND_COLOR", 0xFFFFFF); + +# +# set default foreground color +# +define("BCD_DEFAULT_FOREGROUND_COLOR", 0x000000); + +# +# set default style options +# +define("BCD_DEFAULT_STYLE", BCS_BORDER | BCS_ALIGN_CENTER | BCS_IMAGE_PNG); + +# +# set default width +# +define("BCD_DEFAULT_WIDTH", 460); + +# +# set default height +# +define("BCD_DEFAULT_HEIGHT", 120); + +# +# set default font +# +define("BCD_DEFAULT_FONT", 5); + +# +# st default horizontal resolution +# +define("BCD_DEFAULT_XRES", 2); + +# Margins + +# +# set default margin +# +define("BCD_DEFAULT_MAR_Y1", 0); + +# +# set default margin +# +define("BCD_DEFAULT_MAR_Y2", 0); + +# +# set default text offset +# +define("BCD_DEFAULT_TEXT_OFFSET", 2); + +# For the I25 Only + +# +# narrow bar option +# (only for I25 code) +# +define("BCD_I25_NARROW_BAR", 1); + +# +# wide bar option +# (only for I25 code) +# +define("BCD_I25_WIDE_BAR", 2); + +# For the C39 Only + +# +# narrow bar option +# (only for c39 code) +# +define("BCD_C39_NARROW_BAR", 1); + +# +# wide bar option +# (only for c39 code) +# +define("BCD_C39_WIDE_BAR", 2); + +# For Code 128 + +# +# set type 1 bar +# (only for c128 code) +# +define("BCD_C128_BAR_1", 1); + +# +# set type 2 bar +# (only for c128 code) +# +define("BCD_C128_BAR_2", 2); + +# +# set type 3 bar +# (only for c128 code) +# +define("BCD_C128_BAR_3", 3); + +# +# set type 4 bar +# (only for c128 code) +# +define("BCD_C128_BAR_4", 4); + +# +# Barcode Render Class for PHP using the GD graphics library. +# @author Karim Mribti, Nicola Asuni +# @name BarcodeObject +# @package com.tecnick.tcpdf +# @@version 0.0.8a 2001-04-01 (original code) +# @since 2001-03-25 +# @license http://www.gnu.org/copyleft/lesser.html LGPL +# +class BarcodeObject { + # + # @var Image width in pixels. + # @access protected + # + protected $mWidth; + + # + # @var Image height in pixels. + # @access protected + # + protected $mHeight; + + # + # @var Numeric code for Barcode style. + # @access protected + # + protected $mStyle; + + # + # @var Background color. + # @access protected + # + protected $mBgcolor; + + # + # @var Brush color. + # @access protected + # + protected $mBrush; + + # + # @var Image object. + # @access protected + # + protected $mImg; + + # + # @var Numeric code for character font. + # @access protected + # + protected $mFont; + + # + # @var Error message. + # @access protected + # + protected $mError; + + # + # @var Character Set. + # @access protected + # + protected $mCharSet; + + # + # @var Allowed symbols. + # @access protected + # + protected $mChars; + + # + # Class Constructor. + # @param int $Width Image width in pixels. + # @param int $Height Image height in pixels. + # @param int $Style Barcode style. + # + def __construct($Width=BCD_DEFAULT_WIDTH, $Height=BCD_DEFAULT_HEIGHT, $Style=BCD_DEFAULT_STYLE) + @mWidth = $Width; + @mHeight = $Height; + @mStyle = $Style; + @mFont = BCD_DEFAULT_FONT; + @mImg = ImageCreate(@mWidth, @mHeight); + $dbColor = @mStyle & BCS_REVERSE_COLOR ? BCD_DEFAULT_FOREGROUND_COLOR : BCD_DEFAULT_BACKGROUND_COLOR; + $dfColor = @mStyle & BCS_REVERSE_COLOR ? BCD_DEFAULT_BACKGROUND_COLOR : BCD_DEFAULT_FOREGROUND_COLOR; + @mBgcolor = ImageColorAllocate(@mImg, ($dbColor & 0xFF0000) >> 16, + ($dbColor & 0x00FF00) >> 8, $dbColor & 0x0000FF); + @mBrush = ImageColorAllocate(@mImg, ($dfColor & 0xFF0000) >> 16, + ($dfColor & 0x00FF00) >> 8, $dfColor & 0x0000FF); + if (!(@mStyle & BCS_TRANSPARENT)) + ImageFill(@mImg, @mWidth, @mHeight, @mBgcolor); + end + end + + # + # Class Destructor. + # Destroy image object. + # + def __destructor() + @DestroyObject(); + end + + # + # Returns the image object. + # @return object image. + # @author Nicola Asuni + # @since 1.5.2 + # + def getImage() + return @mImg; + end + + # + # Abstract method used to draw the barcode image. + # @param int $xres Horizontal resolution. + # + def DrawObject($xres) { + # there is not implementation neded, is simply the asbsract function.# + return false; + end + + # + # Draws the barcode border. + # @access protected + # + protected function DrawBorder() + ImageRectangle(@mImg, 0, 0, @mWidth-1, @mHeight-1, @mBrush); + end + + # + # Draws the alphanumeric code. + # @param int $Font Font type. + # @param int $xPos Horiziontal position. + # @param int $yPos Vertical position. + # @param int $Char Alphanumeric code to write. + # @access protected + # + protected function DrawChar($Font, $xPos, $yPos, $Char) + ImageString(@mImg,$Font,$xPos,$yPos,$Char,@mBrush); + end + + # + # Draws a character string. + # @param int $Font Font type. + # @param int $xPos Horiziontal position. + # @param int $yPos Vertical position. + # @param int $Char string to write. + # @access protected + # + protected function DrawText($Font, $xPos, $yPos, $Char) + ImageString(@mImg,$Font,$xPos,$yPos,$Char,@mBrush); + end + + # + # Draws a single barcode bar. + # @param int $xPos Horiziontal position. + # @param int $yPos Vertical position. + # @param int $xSize Horizontal size. + # @param int $xSize Vertical size. + # @return bool trur in case of success, false otherwise. + # @access protected + # + protected function DrawSingleBar($xPos, $yPos, $xSize, $ySize) + if ($xPos>=0 && $xPos<=@mWidth && ($xPos+$xSize)<=@mWidth && + $yPos>=0 && $yPos<=@mHeight && ($yPos+$ySize)<=@mHeight) + for ($i=0;$i<$xSize;$i++) + ImageLine(@mImg, $xPos+$i, $yPos, $xPos+$i, $yPos+$ySize, @mBrush); + end + return true; + end + return false; + end + + # + # Returns the current error message. + # @return string error message. + # + def GetError() + return @mError; + end + + # + # Returns the font height. + # @param int $font font type. + # @return int font height. + # + def GetFontHeight($font) + return ImageFontHeight($font); + end + + # + # Returns the font width. + # @param int $font font type. + # @return int font width. + # + def GetFontWidth($font) + return ImageFontWidth($font); + end + + # + # Set font type. + # @param int $font font type. + # + def SetFont($font) + @mFont = $font; + end + + # + # Returns barcode style. + # @return int barcode style. + # + def GetStyle() + return @mStyle; + end + + # + # Set barcode style. + # @param int $Style barcode style. + # + def SetStyle ($Style) + @mStyle = $Style; + end + + # + # Flush the barcode image. + # + def FlushObject() + if ((@mStyle & BCS_BORDER)) + @DrawBorder(); + end + if (@mStyle & BCS_IMAGE_PNG) + Header("Content-Type: image/png"); + ImagePng(@mImg); + elsif (@mStyle & BCS_IMAGE_JPEG) + Header("Content-Type: image/jpeg"); + ImageJpeg(@mImg); + end + end + + # + # Destroy the barcode image. + # + def DestroyObject() + ImageDestroy(@mImg); + end +} + +#============================================================+ +# END OF FILE +#============================================================+ diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/barcode/c128aobject.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/barcode/c128aobject.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,393 @@ + +#============================================================+ +# File name : c128aobject.rb +# Begin : 2002-07-31 +# Last Update : 2004-12-29 +# Author : Karim Mribti [barcode@mribti.com] +# Version : 0.0.8a 2001-04-01 (original code) +# License : GNU LGPL (Lesser General Public License) 2.1 +# http://www.gnu.org/copyleft/lesser.txt +# Source Code : http://www.mribti.com/barcode/ +# +# Description : Code 128-A Barcode Render Class for PHP using +# the GD graphics library. +# Code 128-A is a continuous, multilevel and +# include all upper case alphanumeric characters +# and ASCII control characters. +# +# NOTE: +# This version contains changes by Nicola Asuni: +# - porting to Ruby +# - code style and formatting +# - automatic php documentation in PhpDocumentor Style +# (www.phpdoc.org) +# - minor bug fixing +#============================================================+ + +# +# Code 128-A Barcode Render Class for PHP using the GD graphics library.
    +# Code 128-A is a continuous, multilevel and include all upper case alphanumeric characters and ASCII control characters. +# @author Karim Mribti, Nicola Asuni +# @name BarcodeObject +# @package com.tecnick.tcpdf +# @@version 0.0.8a 2001-04-01 (original code) +# @since 2001-03-25 +# @license http://www.gnu.org/copyleft/lesser.html LGPL +# + +# +# Code 128-A Barcode Render Class for PHP using the GD graphics library.
    +# Code 128-A is a continuous, multilevel and include all upper case alphanumeric characters and ASCII control characters. +# @author Karim Mribti, Nicola Asuni +# @name BarcodeObject +# @package com.tecnick.tcpdf +# @@version 0.0.8a 2001-04-01 (original code) +# @since 2001-03-25 +# @license http://www.gnu.org/copyleft/lesser.html LGPL +# +class C128AObject extends BarcodeObject { + + # + # Class Constructor. + # @param int $Width Image width in pixels. + # @param int $Height Image height in pixels. + # @param int $Style Barcode style. + # @param int $Value value to print on barcode. + # + def __construct($Width, $Height, $Style, $Value) + parent::__construct($Width, $Height, $Style); + @mValue = $Value; + @mChars = " !\"#$%&'()*+�-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"; + @mCharSet = array ( + "212222", # 00# + "222122", # 01# + "222221", # 02# + "121223", # 03# + "121322", # 04# + "131222", # 05# + "122213", # 06# + "122312", # 07# + "132212", # 08# + "221213", # 09# + "221312", # 10# + "231212", # 11# + "112232", # 12# + "122132", # 13# + "122231", # 14# + "113222", # 15# + "123122", # 16# + "123221", # 17# + "223211", # 18# + "221132", # 19# + "221231", # 20# + "213212", # 21# + "223112", # 22# + "312131", # 23# + "311222", # 24# + "321122", # 25# + "321221", # 26# + "312212", # 27# + "322112", # 28# + "322211", # 29# + "212123", # 30# + "212321", # 31# + "232121", # 32# + "111323", # 33# + "131123", # 34# + "131321", # 35# + "112313", # 36# + "132113", # 37# + "132311", # 38# + "211313", # 39# + "231113", # 40# + "231311", # 41# + "112133", # 42# + "112331", # 43# + "132131", # 44# + "113123", # 45# + "113321", # 46# + "133121", # 47# + "313121", # 48# + "211331", # 49# + "231131", # 50# + "213113", # 51# + "213311", # 52# + "213131", # 53# + "311123", # 54# + "311321", # 55# + "331121", # 56# + "312113", # 57# + "312311", # 58# + "332111", # 59# + "314111", # 60# + "221411", # 61# + "431111", # 62# + "111224", # 63# + "111422", # 64# + "121124", # 65# + "121421", # 66# + "141122", # 67# + "141221", # 68# + "112214", # 69# + "112412", # 70# + "122114", # 71# + "122411", # 72# + "142112", # 73# + "142211", # 74# + "241211", # 75# + "221114", # 76# + "413111", # 77# + "241112", # 78# + "134111", # 79# + "111242", # 80# + "121142", # 81# + "121241", # 82# + "114212", # 83# + "124112", # 84# + "124211", # 85# + "411212", # 86# + "421112", # 87# + "421211", # 88# + "212141", # 89# + "214121", # 90# + "412121", # 91# + "111143", # 92# + "111341", # 93# + "131141", # 94# + "114113", # 95# + "114311", # 96# + "411113", # 97# + "411311", # 98# + "113141", # 99# + "114131", # 100# + "311141", # 101# + "411131" # 102# + ); + end + + # + # Returns the character index. + # @param char $char character. + # @return int character index or -1 in case of error. + # @access private + # + def GetCharIndex($char) + for ($i=0;$i<64;$i++) + if (@mChars[$i] == $char) + return $i; + end + end + return -1; + end + + # + # Returns the bar size. + # @param int $xres Horizontal resolution. + # @param char $char Character. + # @return int barcode size. + # @access private + # + def GetBarSize($xres, $char) + switch ($char) + case '1' + $cVal = BCD_C128_BAR_1; + + case '2' + $cVal = BCD_C128_BAR_2; + + case '3' + $cVal = BCD_C128_BAR_3; + + case '4' + $cVal = BCD_C128_BAR_4; + + default + $cVal = 0; + end + end + return $cVal# $xres; + end + + # + # Returns barcode size. + # @param int $xres Horizontal resolution. + # @return barcode size. + # @access private + # + def GetSize($xres) + $len = @mValue.length; + + if ($len == 0) { + @mError = "Null value"; + return false; + end + $ret = 0; + for ($i=0;$i<$len;$i++) + if (($id = GetCharIndex(@mValue[$i])) == -1) + @mError = "C128A not include the char '".@mValue[$i]."'"; + return false; + else + $cset = @mCharSet[$id]; + $ret += GetBarSize($xres, $cset[0]); + $ret += GetBarSize($xres, $cset[1]); + $ret += GetBarSize($xres, $cset[2]); + $ret += GetBarSize($xres, $cset[3]); + $ret += GetBarSize($xres, $cset[4]); + $ret += GetBarSize($xres, $cset[5]); + end + end + + # length of Check character# + $cset = GetCheckCharValue(); + $CheckSize = 0; + for ($i=0;$i<6;$i++) + $CheckSize += GetBarSize($cset[$i], $xres); + end + $StartSize = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres; + $StopSize = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + 2*BCD_C128_BAR_3*$xres; + return $StartSize + $ret + $CheckSize + $StopSize; + end + + # + # Returns the check-char value. + # @return string. + # @access private + # + def GetCheckCharValue() + $len = @mValue.length; + $sum = 103; # 'A' type; + for ($i=0;$i<$len;$i++) + $sum += GetCharIndex(@mValue[$i])# ($i+1); + end + $check = $sum % 103; + return @mCharSet[$check]; + end + + # + # Draws the start code. + # @param int $DrawPos Drawing position. + # @param int $yPos Vertical position. + # @param int $ySize Vertical size. + # @param int $xres Horizontal resolution. + # @return int drawing position. + # @access private + # + def DrawStart($DrawPos, $yPos, $ySize, $xres) + # Start code is '211412'# + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize); + $DrawPos += GetBarSize('2', $xres); + $DrawPos += GetBarSize('1', $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize); + $DrawPos += GetBarSize('1', $xres); + $DrawPos += GetBarSize('4', $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize); + $DrawPos += GetBarSize('1', $xres); + $DrawPos += GetBarSize('2', $xres); + return $DrawPos; + end + + # + # Draws the stop code. + # @param int $DrawPos Drawing position. + # @param int $yPos Vertical position. + # @param int $ySize Vertical size. + # @param int $xres Horizontal resolution. + # @return int drawing position. + # @access private + # + def DrawStop($DrawPos, $yPos, $ySize, $xres) + # Stop code is '2331112'# + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize); + $DrawPos += GetBarSize('2', $xres); + $DrawPos += GetBarSize('3', $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('3', $xres) , $ySize); + $DrawPos += GetBarSize('3', $xres); + $DrawPos += GetBarSize('1', $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize); + $DrawPos += GetBarSize('1', $xres); + $DrawPos += GetBarSize('1', $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize); + $DrawPos += GetBarSize('2', $xres); + return $DrawPos; + end + + # + # Draws the check-char code. + # @param int $DrawPos Drawing position. + # @param int $yPos Vertical position. + # @param int $ySize Vertical size. + # @param int $xres Horizontal resolution. + # @return int drawing position. + # @access private + # + def DrawCheckChar($DrawPos, $yPos, $ySize, $xres) + $cset = GetCheckCharValue(); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[0], $xres) , $ySize); + $DrawPos += GetBarSize($cset[0], $xres); + $DrawPos += GetBarSize($cset[1], $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[2], $xres) , $ySize); + $DrawPos += GetBarSize($cset[2], $xres); + $DrawPos += GetBarSize($cset[3], $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[4], $xres) , $ySize); + $DrawPos += GetBarSize($cset[4], $xres); + $DrawPos += GetBarSize($cset[5], $xres); + return $DrawPos; + end + + # + # Draws the barcode object. + # @param int $xres Horizontal resolution. + # @return bool true in case of success. + # + def DrawObject($xres) + $len = @mValue.length; + if (($size = GetSize($xres))==0) + return false; + end + + if (@mStyle & BCS_ALIGN_CENTER) $sPos = (integer)((@mWidth - $size ) / 2); + elsif (@mStyle & BCS_ALIGN_RIGHT) $sPos = @mWidth - $size; + else $sPos = 0; + + # Total height of bar code -Bars only-# + if (@mStyle & BCS_DRAW_TEXT) $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2 - GetFontHeight(@mFont); + else $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2; + + # Draw text# + if (@mStyle & BCS_DRAW_TEXT) + if (@mStyle & BCS_STRETCH_TEXT) + for ($i=0;$i<$len;$i++) + @DrawChar(@mFont, $sPos+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres)+($size/$len)*$i, + $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue[$i]); + else# Center# + $text_width = GetFontWidth(@mFont)# @mValue.length; + @DrawText(@mFont, $sPos+(($size-$text_width)/2)+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres), + $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue); + end + end + + $cPos = 0; + $DrawPos = @DrawStart($sPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres); + do { + $c = GetCharIndex(@mValue[$cPos]); + $cset = @mCharSet[$c]; + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[0], $xres) , $ysize); + $DrawPos += GetBarSize($cset[0], $xres); + $DrawPos += GetBarSize($cset[1], $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[2], $xres) , $ysize); + $DrawPos += GetBarSize($cset[2], $xres); + $DrawPos += GetBarSize($cset[3], $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[4], $xres) , $ysize); + $DrawPos += GetBarSize($cset[4], $xres); + $DrawPos += GetBarSize($cset[5], $xres); + $cPos += 1; + end while ($cPos<$len); + $DrawPos = @DrawCheckChar($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres); + $DrawPos = @DrawStop($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres); + return true; + end +} + +#============================================================+ +# END OF FILE +#============================================================+ diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/barcode/c128bobject.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/barcode/c128bobject.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,393 @@ + +#============================================================+ +# File name : c128bobject.rb +# Begin : 2002-07-31 +# Last Update : 2004-12-29 +# Author : Karim Mribti [barcode@mribti.com] +# Version : 0.0.8a 2001-04-01 (original code) +# License : GNU LGPL (Lesser General Public License) 2.1 +# http://www.gnu.org/copyleft/lesser.txt +# Source Code : http://www.mribti.com/barcode/ +# +# Description : Code 128-B Barcode Render Class for PHP using +# the GD graphics library. +# Code 128-B is a continuous, multilevel and full +# ASCII code. +# +# NOTE: +# This version contains changes by Nicola Asuni: +# - porting to Ruby +# - code style and formatting +# - automatic php documentation in PhpDocumentor Style +# (www.phpdoc.org) +# - minor bug fixing +#============================================================+ + +# +# Code 128-B Barcode Render Class for PHP using the GD graphics library.
    +# Code 128-B is a continuous, multilevel and full ASCII code. +# @author Karim Mribti, Nicola Asuni +# @name BarcodeObject +# @package com.tecnick.tcpdf +# @@version 0.0.8a 2001-04-01 (original code) +# @since 2001-03-25 +# @license http://www.gnu.org/copyleft/lesser.html LGPL +# + +# +# Code 128-B Barcode Render Class for PHP using the GD graphics library.
    +# Code 128-B is a continuous, multilevel and full ASCII code. +# @author Karim Mribti, Nicola Asuni +# @name BarcodeObject +# @package com.tecnick.tcpdf +# @@version 0.0.8a 2001-04-01 (original code) +# @since 2001-03-25 +# @license http://www.gnu.org/copyleft/lesser.html LGPL +# +class C128BObject extends BarcodeObject { + + # + # Class Constructor. + # @param int $Width Image width in pixels. + # @param int $Height Image height in pixels. + # @param int $Style Barcode style. + # @param int $Value value to print on barcode. + # + def __construct($Width, $Height, $Style, $Value) + parent::__construct($Width, $Height, $Style); + @mValue = $Value; + @mChars = " !\"#$%&'()*+�-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{ }~"; + @mCharSet = array ( + "212222", # 00# + "222122", # 01# + "222221", # 02# + "121223", # 03# + "121322", # 04# + "131222", # 05# + "122213", # 06# + "122312", # 07# + "132212", # 08# + "221213", # 09# + "221312", # 10# + "231212", # 11# + "112232", # 12# + "122132", # 13# + "122231", # 14# + "113222", # 15# + "123122", # 16# + "123221", # 17# + "223211", # 18# + "221132", # 19# + "221231", # 20# + "213212", # 21# + "223112", # 22# + "312131", # 23# + "311222", # 24# + "321122", # 25# + "321221", # 26# + "312212", # 27# + "322112", # 28# + "322211", # 29# + "212123", # 30# + "212321", # 31# + "232121", # 32# + "111323", # 33# + "131123", # 34# + "131321", # 35# + "112313", # 36# + "132113", # 37# + "132311", # 38# + "211313", # 39# + "231113", # 40# + "231311", # 41# + "112133", # 42# + "112331", # 43# + "132131", # 44# + "113123", # 45# + "113321", # 46# + "133121", # 47# + "313121", # 48# + "211331", # 49# + "231131", # 50# + "213113", # 51# + "213311", # 52# + "213131", # 53# + "311123", # 54# + "311321", # 55# + "331121", # 56# + "312113", # 57# + "312311", # 58# + "332111", # 59# + "314111", # 60# + "221411", # 61# + "431111", # 62# + "111224", # 63# + "111422", # 64# + "121124", # 65# + "121421", # 66# + "141122", # 67# + "141221", # 68# + "112214", # 69# + "112412", # 70# + "122114", # 71# + "122411", # 72# + "142112", # 73# + "142211", # 74# + "241211", # 75# + "221114", # 76# + "413111", # 77# + "241112", # 78# + "134111", # 79# + "111242", # 80# + "121142", # 81# + "121241", # 82# + "114212", # 83# + "124112", # 84# + "124211", # 85# + "411212", # 86# + "421112", # 87# + "421211", # 88# + "212141", # 89# + "214121", # 90# + "412121", # 91# + "111143", # 92# + "111341", # 93# + "131141", # 94# + "114113", # 95# + "114311", # 96# + "411113", # 97# + "411311", # 98# + "113141", # 99# + "114131", # 100# + "311141", # 101# + "411131" # 102# + ); + end + + # + # Returns the character index. + # @param char $char character. + # @return int character index or -1 in case of error. + # @access private + # + def GetCharIndex($char) + for ($i=0;$i<95;$i++) + if (@mChars[$i] == $char) + return $i; + end + end + return -1; + end + + # + # Returns the bar size. + # @param int $xres Horizontal resolution. + # @param char $char Character. + # @return int barcode size. + # @access private + # + def GetBarSize($xres, $char) + switch ($char) + case '1' + $cVal = BCD_C128_BAR_1; + + case '2' + $cVal = BCD_C128_BAR_2; + + case '3' + $cVal = BCD_C128_BAR_3; + + case '4' + $cVal = BCD_C128_BAR_4; + + default + $cVal = 0; + end + end + return $cVal# $xres; + end + + # + # Returns barcode size. + # @param int $xres Horizontal resolution. + # @return barcode size. + # @access private + # + def GetSize($xres) + $len = @mValue.length; + + if ($len == 0) { + @mError = "Null value"; + return false; + end + $ret = 0; + for ($i=0;$i<$len;$i++) + if (($id = GetCharIndex(@mValue[$i])) == -1) + @mError = "C128B not include the char '".@mValue[$i]."'"; + return false; + else + $cset = @mCharSet[$id]; + $ret += GetBarSize($xres, $cset[0]); + $ret += GetBarSize($xres, $cset[1]); + $ret += GetBarSize($xres, $cset[2]); + $ret += GetBarSize($xres, $cset[3]); + $ret += GetBarSize($xres, $cset[4]); + $ret += GetBarSize($xres, $cset[5]); + end + end + # length of Check character# + $cset = GetCheckCharValue(); + $CheckSize = 0; + for ($i=0;$i<6;$i++) + $CheckSize += GetBarSize($cset[$i], $xres); + end + + $StartSize = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres; + $StopSize = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + 2*BCD_C128_BAR_3*$xres; + + return $StartSize + $ret + $CheckSize + $StopSize; + end + + # + # Returns the check-char value. + # @return string. + # @access private + # + def GetCheckCharValue() + $len = @mValue.length; + $sum = 104; # 'B' type; + for ($i=0;$i<$len;$i++) + $sum += GetCharIndex(@mValue[$i])# ($i+1); + end + $check = $sum % 103; + return @mCharSet[$check]; + end + + # + # Draws the start code. + # @param int $DrawPos Drawing position. + # @param int $yPos Vertical position. + # @param int $ySize Vertical size. + # @param int $xres Horizontal resolution. + # @return int drawing position. + # @access private + # + def DrawStart($DrawPos, $yPos, $ySize, $xres) + # Start code is '211214'# + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres), $ySize); + $DrawPos += GetBarSize('2', $xres); + $DrawPos += GetBarSize('1', $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres), $ySize); + $DrawPos += GetBarSize('1', $xres); + $DrawPos += GetBarSize('2', $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres), $ySize); + $DrawPos += GetBarSize('1', $xres); + $DrawPos += GetBarSize('4', $xres); + return $DrawPos; + end + + # + # Draws the stop code. + # @param int $DrawPos Drawing position. + # @param int $yPos Vertical position. + # @param int $ySize Vertical size. + # @param int $xres Horizontal resolution. + # @return int drawing position. + # @access private + # + def DrawStop($DrawPos, $yPos, $ySize, $xres) + # Stop code is '2331112'# + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize); + $DrawPos += GetBarSize('2', $xres); + $DrawPos += GetBarSize('3', $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('3', $xres) , $ySize); + $DrawPos += GetBarSize('3', $xres); + $DrawPos += GetBarSize('1', $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize); + $DrawPos += GetBarSize('1', $xres); + $DrawPos += GetBarSize('1', $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize); + $DrawPos += GetBarSize('2', $xres); + return $DrawPos; + end + + # + # Draws the check-char code. + # @param int $DrawPos Drawing position. + # @param int $yPos Vertical position. + # @param int $ySize Vertical size. + # @param int $xres Horizontal resolution. + # @return int drawing position. + # @access private + # + def DrawCheckChar($DrawPos, $yPos, $ySize, $xres) + $cset = GetCheckCharValue(); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[0], $xres) , $ySize); + $DrawPos += GetBarSize($cset[0], $xres); + $DrawPos += GetBarSize($cset[1], $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[2], $xres) , $ySize); + $DrawPos += GetBarSize($cset[2], $xres); + $DrawPos += GetBarSize($cset[3], $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[4], $xres) , $ySize); + $DrawPos += GetBarSize($cset[4], $xres); + $DrawPos += GetBarSize($cset[5], $xres); + return $DrawPos; + end + + # + # Draws the barcode object. + # @param int $xres Horizontal resolution. + # @return bool true in case of success. + # + def DrawObject($xres) + $len = @mValue.length; + if (($size = GetSize($xres))==0) + return false; + end + + if (@mStyle & BCS_ALIGN_CENTER) $sPos = (integer)((@mWidth - $size ) / 2); + elsif (@mStyle & BCS_ALIGN_RIGHT) $sPos = @mWidth - $size; + else $sPos = 0; + + # Total height of bar code -Bars only-# + if (@mStyle & BCS_DRAW_TEXT) $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2 - GetFontHeight(@mFont); + else $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2; + + # Draw text# + if (@mStyle & BCS_DRAW_TEXT) + if (@mStyle & BCS_STRETCH_TEXT) + for ($i=0;$i<$len;$i++) + @DrawChar(@mFont, $sPos+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres)+($size/$len)*$i, + $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue[$i]); + else# Center# + $text_width = GetFontWidth(@mFont)# @mValue.length; + @DrawText(@mFont, $sPos+(($size-$text_width)/2)+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres), + $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue); + end + end + + $cPos = 0; + $DrawPos = @DrawStart($sPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres); + do { + $c = GetCharIndex(@mValue[$cPos]); + $cset = @mCharSet[$c]; + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[0], $xres) , $ysize); + $DrawPos += GetBarSize($cset[0], $xres); + $DrawPos += GetBarSize($cset[1], $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[2], $xres) , $ysize); + $DrawPos += GetBarSize($cset[2], $xres); + $DrawPos += GetBarSize($cset[3], $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[4], $xres) , $ysize); + $DrawPos += GetBarSize($cset[4], $xres); + $DrawPos += GetBarSize($cset[5], $xres); + $cPos += 1; + end while ($cPos<$len); + $DrawPos = @DrawCheckChar($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres); + $DrawPos = @DrawStop($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres); + return true; + end +} + +#============================================================+ +# END OF FILE +#============================================================+ diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/barcode/c128cobject.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/barcode/c128cobject.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,414 @@ + +#============================================================+ +# File name : c128cobject.rb +# Begin : 2002-07-31 +# Last Update : 2004-12-29 +# Author : Karim Mribti [barcode@mribti.com] +# : Sam Michaels [swampgas@swampgas.org] +# : Nicola Asuni [info@tecnick.com] +# Version : 0.0.8a 2001-04-01 (original code) +# License : GNU LGPL (Lesser General Public License) 2.1 +# http://www.gnu.org/copyleft/lesser.txt +# Source Code : http://www.mribti.com/barcode/ +# +# Description : Code 128-C Barcode Render Class for PHP using +# the GD graphics library. +# Code 128-C is numeric only and provides the +# most efficiency. +# +# NOTE: +# This version contains changes by Nicola Asuni: +# - porting to Ruby +# - code style and formatting +# - automatic php documentation in PhpDocumentor Style +# (www.phpdoc.org) +# - minor bug fixing +#============================================================+ + +# +# Code 128-C Barcode Render Class for PHP using the GD graphics library.
    +# Code 128-C is numeric only and provides the most efficiency. +# @author Karim Mribti, Nicola Asuni +# @name BarcodeObject +# @package com.tecnick.tcpdf +# @@version 0.0.8a 2001-04-01 (original code) +# @since 2001-03-25 +# @license http://www.gnu.org/copyleft/lesser.html LGPL +# + +# +# Code 128-C Barcode Render Class for PHP using the GD graphics library.
    +# Code 128-C is numeric only and provides the most efficiency. +# @author Karim Mribti, Nicola Asuni +# @name BarcodeObject +# @package com.tecnick.tcpdf +# @@version 0.0.8a 2001-04-01 (original code) +# @since 2001-03-25 +# @license http://www.gnu.org/copyleft/lesser.html LGPL +# +class C128CObject extends BarcodeObject { + + # + # Class Constructor. + # @param int $Width Image width in pixels. + # @param int $Height Image height in pixels. + # @param int $Style Barcode style. + # @param int $Value value to print on barcode. + # + def __construct($Width, $Height, $Style, $Value) + parent::__construct($Width, $Height, $Style); + @mValue = $Value; + @mChars = array ( + "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", + "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", + "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", + "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", + "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", + "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", + "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", + "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", + "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", + "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", + ); + @mCharSet = array ( + "212222", # 00# + "222122", # 01# + "222221", # 02# + "121223", # 03# + "121322", # 04# + "131222", # 05# + "122213", # 06# + "122312", # 07# + "132212", # 08# + "221213", # 09# + "221312", # 10# + "231212", # 11# + "112232", # 12# + "122132", # 13# + "122231", # 14# + "113222", # 15# + "123122", # 16# + "123221", # 17# + "223211", # 18# + "221132", # 19# + "221231", # 20# + "213212", # 21# + "223112", # 22# + "312131", # 23# + "311222", # 24# + "321122", # 25# + "321221", # 26# + "312212", # 27# + "322112", # 28# + "322211", # 29# + "212123", # 30# + "212321", # 31# + "232121", # 32# + "111323", # 33# + "131123", # 34# + "131321", # 35# + "112313", # 36# + "132113", # 37# + "132311", # 38# + "211313", # 39# + "231113", # 40# + "231311", # 41# + "112133", # 42# + "112331", # 43# + "132131", # 44# + "113123", # 45# + "113321", # 46# + "133121", # 47# + "313121", # 48# + "211331", # 49# + "231131", # 50# + "213113", # 51# + "213311", # 52# + "213131", # 53# + "311123", # 54# + "311321", # 55# + "331121", # 56# + "312113", # 57# + "312311", # 58# + "332111", # 59# + "314111", # 60# + "221411", # 61# + "431111", # 62# + "111224", # 63# + "111422", # 64# + "121124", # 65# + "121421", # 66# + "141122", # 67# + "141221", # 68# + "112214", # 69# + "112412", # 70# + "122114", # 71# + "122411", # 72# + "142112", # 73# + "142211", # 74# + "241211", # 75# + "221114", # 76# + "413111", # 77# + "241112", # 78# + "134111", # 79# + "111242", # 80# + "121142", # 81# + "121241", # 82# + "114212", # 83# + "124112", # 84# + "124211", # 85# + "411212", # 86# + "421112", # 87# + "421211", # 88# + "212141", # 89# + "214121", # 90# + "412121", # 91# + "111143", # 92# + "111341", # 93# + "131141", # 94# + "114113", # 95# + "114311", # 96# + "411113", # 97# + "411311", # 98# + "113141", # 99# + ); + end + + # + # Returns the character index. + # @param char $char character. + # @return int character index or -1 in case of error. + # @access private + # + def GetCharIndex($char) + for ($i=0;$i<100;$i++) + if (@mChars[$i] == $char) + return $i; + end + end + return -1; + end + + # + # Returns the bar size. + # @param int $xres Horizontal resolution. + # @param char $char Character. + # @return int barcode size. + # @access private + # + def GetBarSize($xres, $char) + switch ($char) + case '1' + $cVal = BCD_C128_BAR_1; + + case '2' + $cVal = BCD_C128_BAR_2; + + case '3' + $cVal = BCD_C128_BAR_3; + + case '4' + $cVal = BCD_C128_BAR_4; + + default + $cVal = 0; + end + end + return $cVal# $xres; + end + + # + # Returns barcode size. + # @param int $xres Horizontal resolution. + # @return barcode size. + # @access private + # + def GetSize($xres) + $len = @mValue.length; + + if ($len == 0) { + @mError = "Null value"; + return false; + end + $ret = 0; + + for ($i=0;$i<$len;$i++) + if ((@mValue[$i][0] < 48) || (@mValue[$i][0] > 57)) + @mError = "Code-128C is numeric only"; + return false; + end + end + + if (($len%2) != 0) + @mError = "The length of barcode value must be even. You must pad the number with zeros."; + return false; + end + + for ($i=0;$i<$len;$i+=2) + $id = GetCharIndex(@mValue[$i].@mValue[$i+1]); + $cset = @mCharSet[$id]; + $ret += GetBarSize($xres, $cset[0]); + $ret += GetBarSize($xres, $cset[1]); + $ret += GetBarSize($xres, $cset[2]); + $ret += GetBarSize($xres, $cset[3]); + $ret += GetBarSize($xres, $cset[4]); + $ret += GetBarSize($xres, $cset[5]); + end + # length of Check character# + $cset = GetCheckCharValue(); + $CheckSize = 0; + for ($i=0;$i<6;$i++) + $CheckSize += GetBarSize($cset[$i], $xres); + end + + $StartSize = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres; + $StopSize = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + 2*BCD_C128_BAR_3*$xres; + return $StartSize + $ret + $CheckSize + $StopSize; + end + + # + # Returns the check-char value. + # @return string. + # @access private + # + def GetCheckCharValue() + $len = @mValue.length; + $sum = 105; # 'C' type; + $m = 0; + for ($i=0;$i<$len;$i+=2) + $m += 1; + $sum += GetCharIndex(@mValue[$i].@mValue[$i+1])# $m; + end + $check = $sum % 103; + return @mCharSet[$check]; + end + + # + # Draws the start code. + # @param int $DrawPos Drawing position. + # @param int $yPos Vertical position. + # @param int $ySize Vertical size. + # @param int $xres Horizontal resolution. + # @return int drawing position. + # @access private + # + def DrawStart($DrawPos, $yPos, $ySize, $xres) + # Start code is '211232'# + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize); + $DrawPos += GetBarSize('2', $xres); + $DrawPos += GetBarSize('1', $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize); + $DrawPos += GetBarSize('1', $xres); + $DrawPos += GetBarSize('2', $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('3', $xres) , $ySize); + $DrawPos += GetBarSize('3', $xres); + $DrawPos += GetBarSize('2', $xres); + return $DrawPos; + end + + # + # Draws the stop code. + # @param int $DrawPos Drawing position. + # @param int $yPos Vertical position. + # @param int $ySize Vertical size. + # @param int $xres Horizontal resolution. + # @return int drawing position. + # @access private + # + def DrawStop($DrawPos, $yPos, $ySize, $xres) + # Stop code is '2331112'# + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize); + $DrawPos += GetBarSize('2', $xres); + $DrawPos += GetBarSize('3', $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('3', $xres) , $ySize); + $DrawPos += GetBarSize('3', $xres); + $DrawPos += GetBarSize('1', $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize); + $DrawPos += GetBarSize('1', $xres); + $DrawPos += GetBarSize('1', $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize); + $DrawPos += GetBarSize('2', $xres); + return $DrawPos; + end + + # + # Draws the check-char code. + # @param int $DrawPos Drawing position. + # @param int $yPos Vertical position. + # @param int $ySize Vertical size. + # @param int $xres Horizontal resolution. + # @return int drawing position. + # @access private + # + def DrawCheckChar($DrawPos, $yPos, $ySize, $xres) + $cset = GetCheckCharValue(); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[0], $xres) , $ySize); + $DrawPos += GetBarSize($cset[0], $xres); + $DrawPos += GetBarSize($cset[1], $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[2], $xres) , $ySize); + $DrawPos += GetBarSize($cset[2], $xres); + $DrawPos += GetBarSize($cset[3], $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[4], $xres) , $ySize); + $DrawPos += GetBarSize($cset[4], $xres); + $DrawPos += GetBarSize($cset[5], $xres); + return $DrawPos; + end + + # + # Draws the barcode object. + # @param int $xres Horizontal resolution. + # @return bool true in case of success. + # + def DrawObject($xres) + $len = @mValue.length; + if (($size = GetSize($xres))==0) + return false; + end + + if (@mStyle & BCS_ALIGN_CENTER) $sPos = (integer)((@mWidth - $size ) / 2); + elsif (@mStyle & BCS_ALIGN_RIGHT) $sPos = @mWidth - $size; + else $sPos = 0; + + # Total height of bar code -Bars only-# + if (@mStyle & BCS_DRAW_TEXT) $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2 - GetFontHeight(@mFont); + else $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2; + + # Draw text# + if (@mStyle & BCS_DRAW_TEXT) + if (@mStyle & BCS_STRETCH_TEXT) + for ($i=0;$i<$len;$i++) + @DrawChar(@mFont, $sPos+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres)+($size/$len)*$i, + $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue[$i]); + else# Center# + $text_width = GetFontWidth(@mFont) * @mValue.length; + @DrawText(@mFont, $sPos+(($size-$text_width)/2)+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres), + $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue); + end + end + + $cPos = 0; + $DrawPos = @DrawStart($sPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres); + do { + $c = GetCharIndex(@mValue[$cPos].@mValue[$cPos+1]); + $cset = @mCharSet[$c]; + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[0], $xres) , $ysize); + $DrawPos += GetBarSize($cset[0], $xres); + $DrawPos += GetBarSize($cset[1], $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[2], $xres) , $ysize); + $DrawPos += GetBarSize($cset[2], $xres); + $DrawPos += GetBarSize($cset[3], $xres); + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[4], $xres) , $ysize); + $DrawPos += GetBarSize($cset[4], $xres); + $DrawPos += GetBarSize($cset[5], $xres); + $cPos += 2; + end while ($cPos<$len); + $DrawPos = @DrawCheckChar($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres); + $DrawPos = @DrawStop($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres); + return true; + end +} + +#============================================================+ +# END OF FILE +#============================================================+ + diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/barcode/c39object.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/barcode/c39object.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,281 @@ + +#============================================================+ +# File name : c39object.rb +# Begin : 2002-07-31 +# Last Update : 2004-12-29 +# Author : Karim Mribti [barcode@mribti.com] +# : Nicola Asuni [info@tecnick.com] +# Version : 0.0.8a 2001-04-01 (original code) +# License : GNU LGPL (Lesser General Public License) 2.1 +# http://www.gnu.org/copyleft/lesser.txt +# Source Code : http://www.mribti.com/barcode/ +# +# Description : Code 39 Barcode Render Class for PHP using +# the GD graphics library. +# Code 39 is an alphanumeric bar code that can +# encode decimal number, case alphabet and some +# special symbols. +# +# NOTE: +# This version contains changes by Nicola Asuni: +# - porting to Ruby +# - code style and formatting +# - automatic php documentation in PhpDocumentor Style +# (www.phpdoc.org) +# - minor bug fixing +#============================================================+ + +# +# Code 39 Barcode Render Class.
    +# Code 39 is an alphanumeric bar code that can encode decimal number, case alphabet and some special symbols. +# @author Karim Mribti, Nicola Asuni +# @name BarcodeObject +# @package com.tecnick.tcpdf +# @@version 0.0.8a 2001-04-01 (original code) +# @since 2001-03-25 +# @license http://www.gnu.org/copyleft/lesser.html LGPL +# + +# +# Code 39 Barcode Render Class.
    +# Code 39 is an alphanumeric bar code that can encode decimal number, case alphabet and some special symbols. +# @author Karim Mribti, Nicola Asuni +# @name BarcodeObject +# @package com.tecnick.tcpdf +# @@version 0.0.8a 2001-04-01 (original code) +# @since 2001-03-25 +# @license http://www.gnu.org/copyleft/lesser.html LGPL +# +class C39Object extends BarcodeObject { + + # + # Class Constructor. + # @param int $Width Image width in pixels. + # @param int $Height Image height in pixels. + # @param int $Style Barcode style. + # @param int $Value value to print on barcode. + # + def __construct($Width, $Height, $Style, $Value) + parent::__construct($Width, $Height, $Style); + @mValue = $Value; + @mChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-.#$/+%"; + @mCharSet = array ( + # 0 # "000110100", + # 1 # "100100001", + # 2 # "001100001", + # 3 # "101100000", + # 4 # "000110001", + # 5 # "100110000", + # 6 # "001110000", + # 7 # "000100101", + # 8 # "100100100", + # 9 # "001100100", + # A # "100001001", + # B # "001001001", + # C # "101001000", + # D # "000011001", + # E # "100011000", + # F # "001011000", + # G # "000001101", + # H # "100001100", + # I # "001001100", + # J # "000011100", + # K # "100000011", + # L # "001000011", + # M # "101000010", + # N # "000010011", + # O # "100010010", + # P # "001010010", + # Q # "000000111", + # R # "100000110", + # S # "001000110", + # T # "000010110", + # U # "110000001", + # V # "011000001", + # W # "111000000", + # X # "010010001", + # Y # "110010000", + # Z # "011010000", + # - # "010000101", + # . # "110000100", + # SP# "011000100", + /*# # "010010100", + # $ # "010101000", + # / # "010100010", + # + # "010001010", + # % # "000101010" + ); + end + + # + # Returns the character index. + # @param char $char character. + # @return int character index or -1 in case of error. + # @access private + # + def GetCharIndex($char) + for ($i=0;$i<44;$i++) + if (@mChars[$i] == $char) + return $i; + end + end + return -1; + end + + # + # Returns barcode size. + # @param int $xres Horizontal resolution. + # @return barcode size. + # @access private + # + def GetSize($xres) + $len = @mValue.length; + + if ($len == 0) { + @mError = "Null value"; + return false; + end + + for ($i=0;$i<$len;$i++) + if (GetCharIndex(@mValue[$i]) == -1 || @mValue[$i] == '*') + # The asterisk is only used as a start and stop code# + @mError = "C39 not include the char '".@mValue[$i]."'"; + return false; + end + end + + # Start, Stop is 010010100 == '*' # + $StartSize = BCD_C39_NARROW_BAR# $xres# 6 + BCD_C39_WIDE_BAR# $xres# 3; + $StopSize = BCD_C39_NARROW_BAR# $xres# 6 + BCD_C39_WIDE_BAR# $xres# 3; + $CharSize = BCD_C39_NARROW_BAR# $xres# 6 + BCD_C39_WIDE_BAR# $xres# 3; # Same for all chars# + + return $CharSize# $len + $StartSize + $StopSize + # Space between chars# BCD_C39_NARROW_BAR# $xres# ($len-1); + end + + # + # Draws the start code. + # @param int $DrawPos Drawing position. + # @param int $yPos Vertical position. + # @param int $ySize Vertical size. + # @param int $xres Horizontal resolution. + # @return int drawing position. + # @access private + # + def DrawStart($DrawPos, $yPos, $ySize, $xres) + # Start code is '*'# + $narrow = BCD_C39_NARROW_BAR# $xres; + $wide = BCD_C39_WIDE_BAR# $xres; + @DrawSingleBar($DrawPos, $yPos, $narrow , $ySize); + $DrawPos += $narrow; + $DrawPos += $wide; + @DrawSingleBar($DrawPos, $yPos, $narrow , $ySize); + $DrawPos += $narrow; + $DrawPos += $narrow; + @DrawSingleBar($DrawPos, $yPos, $wide , $ySize); + $DrawPos += $wide; + $DrawPos += $narrow; + @DrawSingleBar($DrawPos, $yPos, $wide , $ySize); + $DrawPos += $wide; + $DrawPos += $narrow; + @DrawSingleBar($DrawPos, $yPos, $narrow, $ySize); + $DrawPos += $narrow; + $DrawPos += $narrow; # Space between chars# + return $DrawPos; + end + + # + # Draws the stop code. + # @param int $DrawPos Drawing position. + # @param int $yPos Vertical position. + # @param int $ySize Vertical size. + # @param int $xres Horizontal resolution. + # @return int drawing position. + # @access private + # + def DrawStop($DrawPos, $yPos, $ySize, $xres) + # Stop code is '*'# + $narrow = BCD_C39_NARROW_BAR# $xres; + $wide = BCD_C39_WIDE_BAR# $xres; + @DrawSingleBar($DrawPos, $yPos, $narrow , $ySize); + $DrawPos += $narrow; + $DrawPos += $wide; + @DrawSingleBar($DrawPos, $yPos, $narrow , $ySize); + $DrawPos += $narrow; + $DrawPos += $narrow; + @DrawSingleBar($DrawPos, $yPos, $wide , $ySize); + $DrawPos += $wide; + $DrawPos += $narrow; + @DrawSingleBar($DrawPos, $yPos, $wide , $ySize); + $DrawPos += $wide; + $DrawPos += $narrow; + @DrawSingleBar($DrawPos, $yPos, $narrow, $ySize); + $DrawPos += $narrow; + return $DrawPos; + end + + # + # Draws the barcode object. + # @param int $xres Horizontal resolution. + # @return bool true in case of success. + # + def DrawObject($xres) + $len = @mValue.length; + + $narrow = BCD_C39_NARROW_BAR# $xres; + $wide = BCD_C39_WIDE_BAR# $xres; + + if (($size = GetSize($xres))==0) + return false; + end + + $cPos = 0; + if (@mStyle & BCS_ALIGN_CENTER) $sPos = (integer)((@mWidth - $size ) / 2); + elsif (@mStyle & BCS_ALIGN_RIGHT) $sPos = @mWidth - $size; + else $sPos = 0; + + # Total height of bar code -Bars only-# + if (@mStyle & BCS_DRAW_TEXT) $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2 - GetFontHeight(@mFont); + else $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2; + + # Draw text# + if (@mStyle & BCS_DRAW_TEXT) + if (@mStyle & BCS_STRETCH_TEXT) + for ($i=0;$i<$len;$i++) + @DrawChar(@mFont, $sPos+($narrow*6+$wide*3)+($size/$len)*$i, + $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue[$i]); + else# Center# + $text_width = GetFontWidth(@mFont)# @mValue.length; + @DrawText(@mFont, $sPos+(($size-$text_width)/2)+($narrow*6+$wide*3), + $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue); + end + end + + $DrawPos = @DrawStart($sPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres); + do { + $c = GetCharIndex(@mValue[$cPos]); + $cset = @mCharSet[$c]; + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, ($cset[0] == '0') ? $narrow : $wide , $ysize); + $DrawPos += ($cset[0] == '0') ? $narrow : $wide; + $DrawPos += ($cset[1] == '0') ? $narrow : $wide; + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, ($cset[2] == '0') ? $narrow : $wide , $ysize); + $DrawPos += ($cset[2] == '0') ? $narrow : $wide; + $DrawPos += ($cset[3] == '0') ? $narrow : $wide; + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, ($cset[4] == '0') ? $narrow : $wide , $ysize); + $DrawPos += ($cset[4] == '0') ? $narrow : $wide; + $DrawPos += ($cset[5] == '0') ? $narrow : $wide; + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, ($cset[6] == '0') ? $narrow : $wide , $ysize); + $DrawPos += ($cset[6] == '0') ? $narrow : $wide; + $DrawPos += ($cset[7] == '0') ? $narrow : $wide; + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, ($cset[8] == '0') ? $narrow : $wide , $ysize); + $DrawPos += ($cset[8] == '0') ? $narrow : $wide; + $DrawPos += $narrow; # Space between chars# + $cPos += 1; + end while ($cPos<$len); + $DrawPos = @DrawStop($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres); + return true; + end +} + +#============================================================+ +# END OF FILE +#============================================================+ diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/barcode/i25object.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/barcode/i25object.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,216 @@ + +#============================================================+ +# File name : i25aobject.rb +# Begin : 2002-07-31 +# Last Update : 2004-12-29 +# Author : Karim Mribti [barcode@mribti.com] +# : Nicola Asuni [info@tecnick.com] +# Version : 0.0.8a 2001-04-01 (original code) +# License : GNU LGPL (Lesser General Public License) 2.1 +# http://www.gnu.org/copyleft/lesser.txt +# Source Code : http://www.mribti.com/barcode/ +# +# Description : I25 Barcode Render Class for PHP using +# the GD graphics library. +# Interleaved 2 of 5 is a numeric only bar code +# with a optional check number. +# +# NOTE: +# This version contains changes by Nicola Asuni: +# - porting to Ruby +# - code style and formatting +# - automatic php documentation in PhpDocumentor Style +# (www.phpdoc.org) +# - minor bug fixing +#============================================================+ + +# +# I25 Barcode Render Class for PHP using the GD graphics library. 57)) + @mError = "I25 is numeric only"; + return false; + end + end + + if (($len%2) != 0) + @mError = "The length of barcode value must be even"; + return false; + end + $StartSize = BCD_I25_NARROW_BAR# 4 # $xres; + $StopSize = BCD_I25_WIDE_BAR# $xres + 2# BCD_I25_NARROW_BAR# $xres; + $cPos = 0; + $sPos = 0; + do { + $c1 = @mValue[$cPos]; + $c2 = @mValue[$cPos+1]; + $cset1 = @mCharSet[$c1]; + $cset2 = @mCharSet[$c2]; + + for ($i=0;$i<5;$i++) + $type1 = ($cset1[$i]==0) ? (BCD_I25_NARROW_BAR # $xres) : (BCD_I25_WIDE_BAR# $xres); + $type2 = ($cset2[$i]==0) ? (BCD_I25_NARROW_BAR # $xres) : (BCD_I25_WIDE_BAR# $xres); + $sPos += ($type1 + $type2); + end + $cPos+=2; + end while ($cPos<$len); + + return $sPos + $StartSize + $StopSize; + end + + # + # Draws the start code. + # @param int $DrawPos Drawing position. + # @param int $yPos Vertical position. + # @param int $ySize Vertical size. + # @param int $xres Horizontal resolution. + # @return int drawing position. + # @access private + # + def DrawStart($DrawPos, $yPos, $ySize, $xres) + # Start code is "0000"# + @DrawSingleBar($DrawPos, $yPos, BCD_I25_NARROW_BAR # $xres , $ySize); + $DrawPos += BCD_I25_NARROW_BAR # $xres; + $DrawPos += BCD_I25_NARROW_BAR # $xres; + @DrawSingleBar($DrawPos, $yPos, BCD_I25_NARROW_BAR # $xres , $ySize); + $DrawPos += BCD_I25_NARROW_BAR # $xres; + $DrawPos += BCD_I25_NARROW_BAR # $xres; + return $DrawPos; + end + + # + # Draws the stop code. + # @param int $DrawPos Drawing position. + # @param int $yPos Vertical position. + # @param int $ySize Vertical size. + # @param int $xres Horizontal resolution. + # @return int drawing position. + # @access private + # + def DrawStop($DrawPos, $yPos, $ySize, $xres) + # Stop code is "100"# + @DrawSingleBar($DrawPos, $yPos, BCD_I25_WIDE_BAR# $xres , $ySize); + $DrawPos += BCD_I25_WIDE_BAR # $xres; + $DrawPos += BCD_I25_NARROW_BAR # $xres; + @DrawSingleBar($DrawPos, $yPos, BCD_I25_NARROW_BAR # $xres , $ySize); + $DrawPos += BCD_I25_NARROW_BAR # $xres; + return $DrawPos; + end + + # + # Draws the barcode object. + # @param int $xres Horizontal resolution. + # @return bool true in case of success. + # + def DrawObject($xres) + $len = @mValue.length; + + if (($size = GetSize($xres))==0) + return false; + end + + $cPos = 0; + + if (@mStyle & BCS_DRAW_TEXT) $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2 - GetFontHeight(@mFont); + else $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2; + + if (@mStyle & BCS_ALIGN_CENTER) $sPos = (integer)((@mWidth - $size ) / 2); + elsif (@mStyle & BCS_ALIGN_RIGHT) $sPos = @mWidth - $size; + else $sPos = 0; + + if (@mStyle & BCS_DRAW_TEXT) + if (@mStyle & BCS_STRETCH_TEXT) + # Stretch# + for ($i=0;$i<$len;$i++) + @DrawChar(@mFont, $sPos+BCD_I25_NARROW_BAR*4*$xres+($size/$len)*$i, + $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET , @mValue[$i]); + end + endelse# Center# + $text_width = GetFontWidth(@mFont) * @mValue.length; + @DrawText(@mFont, $sPos+(($size-$text_width)/2)+(BCD_I25_NARROW_BAR*4*$xres), + $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue); + end + end + + $sPos = @DrawStart($sPos, BCD_DEFAULT_MAR_Y1, $ysize, $xres); + do { + $c1 = @mValue[$cPos]; + $c2 = @mValue[$cPos+1]; + $cset1 = @mCharSet[$c1]; + $cset2 = @mCharSet[$c2]; + + for ($i=0;$i<5;$i++) + $type1 = ($cset1[$i]==0) ? (BCD_I25_NARROW_BAR# $xres) : (BCD_I25_WIDE_BAR# $xres); + $type2 = ($cset2[$i]==0) ? (BCD_I25_NARROW_BAR# $xres) : (BCD_I25_WIDE_BAR# $xres); + @DrawSingleBar($sPos, BCD_DEFAULT_MAR_Y1, $type1 , $ysize); + $sPos += ($type1 + $type2); + end + $cPos+=2; + end while ($cPos<$len); + $sPos = @DrawStop($sPos, BCD_DEFAULT_MAR_Y1, $ysize, $xres); + return true; + end +} + +#============================================================+ +# END OF FILE +#============================================================+ diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/barcode/image.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/barcode/image.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,87 @@ + +#============================================================+ +# File name : image.rb +# Begin : 2002-07-31 +# Last Update : 2005-01-08 +# Author : Karim Mribti [barcode@mribti.com] +# : Nicola Asuni [info@tecnick.com] +# Version : 0.0.8a 2001-04-01 (original code) +# License : GNU LGPL (Lesser General Public License) 2.1 +# http://www.gnu.org/copyleft/lesser.txt +# Source Code : http://www.mribti.com/barcode/ +# +# Description : Barcode Image Rendering. +# +# NOTE: +# This version contains changes by Nicola Asuni: +# - porting to Ruby +# - code style and formatting +# - automatic php documentation in PhpDocumentor Style +# (www.phpdoc.org) +# - minor bug fixing +#============================================================+ + +# +# Barcode Image Rendering. +# @author Karim Mribti, Nicola Asuni +# @name BarcodeObject +# @package com.tecnick.tcpdf +# @@version 0.0.8a 2001-04-01 (original code) +# @since 2001-03-25 +# @license http://www.gnu.org/copyleft/lesser.html LGPL +# + +# +# +# + +require("../../shared/barcode/barcode.rb"); +require("../../shared/barcode/i25object.rb"); +require("../../shared/barcode/c39object.rb"); +require("../../shared/barcode/c128aobject.rb"); +require("../../shared/barcode/c128bobject.rb"); +require("../../shared/barcode/c128cobject.rb"); + +if (!$_REQUEST['style'].nil?) $_REQUEST['style'] = BCD_DEFAULT_STYLE; +if (!$_REQUEST['width'].nil?) $_REQUEST['width'] = BCD_DEFAULT_WIDTH; +if (!$_REQUEST['height'].nil?) $_REQUEST['height'] = BCD_DEFAULT_HEIGHT; +if (!$_REQUEST['xres'].nil?) $_REQUEST['xres'] = BCD_DEFAULT_XRES; +if (!$_REQUEST['font'].nil?) $_REQUEST['font'] = BCD_DEFAULT_FONT; +if (!$_REQUEST['type'].nil?) $_REQUEST['type'] = "C39"; +if (!$_REQUEST['code'].nil?) $_REQUEST['code'] = ""; + +switch ($_REQUEST['type'].upcase) + case "I25" + $obj = new I25Object($_REQUEST['width'], $_REQUEST['height'], $_REQUEST['style'], $_REQUEST['code']); + break; + end + case "C128A" + $obj = new C128AObject($_REQUEST['width'], $_REQUEST['height'], $_REQUEST['style'], $_REQUEST['code']); + break; + end + case "C128B" + $obj = new C128BObject($_REQUEST['width'], $_REQUEST['height'], $_REQUEST['style'], $_REQUEST['code']); + break; + end + case "C128C" + $obj = new C128CObject($_REQUEST['width'], $_REQUEST['height'], $_REQUEST['style'], $_REQUEST['code']); + break; + end + case "C39": + default + $obj = new C39Object($_REQUEST['width'], $_REQUEST['height'], $_REQUEST['style'], $_REQUEST['code']); + break; + end +} + +if ($obj) + $obj->SetFont($_REQUEST['font']); + $obj->DrawObject($_REQUEST['xres']); + $obj->FlushObject(); + $obj->DestroyObject(); + unset($obj); # clean# +} + +#============================================================+ +# END OF FILE +#============================================================+ diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/barcode/lesser.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/barcode/lesser.txt Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 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. + + + Copyright (C) + + 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/config/lang/eng.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/config/lang/eng.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,48 @@ +#============================================================+ +# File name : eng.rb +# Begin : 2004-03-03 +# Last Update : 2005-03-19 +# +# Description : Language module for TCPDF +# (contains translated texts) +# +# +# Author: Nicola Asuni +# +# (c) Copyright: +# Tecnick.com S.r.l. +# Via Ugo Foscolo n.19 +# 09045 Quartu Sant'Elena (CA) +# ITALY +# www.tecnick.com +# info@tecnick.com +#============================================================+ + +# +# TCPDF language file (contains translated texts). +# @package com.tecnick.tcpdf +# @abstract TCPDF language file. +# @author Nicola Asuni +# @copyright 2004 Tecnick.com S.r.l (www.tecnick.com) Via Ugo Foscolo n.19 - 09045 Quartu Sant'Elena (CA) - ITALY - www.tecnick.com - info@tecnick.com +# @link http://tcpdf.sourceforge.net +# @license http://www.gnu.org/copyleft/lesser.html LGPL +# @since 2004-03-03 +# + +# ENGLISH + +@l = [] + +# PAGE META DESCRIPTORS -------------------------------------- + +@l['a_meta_charset'] = "UTF-8"; +@l['a_meta_dir'] = "ltr"; +@l['a_meta_language'] = "en"; + +# TRANSLATIONS -------------------------------------- +@l['w_page'] = "page"; + +#============================================================+ +# END OF FILE +#============================================================+ + diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/core/image_science.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/core/image_science.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,64 @@ +# The MIT License +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +# This implements native php methods used by tcpdf, which have had to be +# reimplemented within Ruby. + +module RFPDF + + # http://uk2.php.net/getimagesize + def getimagesize(filename) + out = Hash.new + out[2] = ImageScience.image_type(filename) + + image = ImageScience.with_image(filename) do |img| + out[0] = image.width + out[1] = image.height + + # These are actually meant to return integer values But I couldn't seem to find anything saying what those values are. + # So for now they return strings. The only place that uses this at the moment is the parsejpeg method, so I've changed that too. + case out[2] + when "GIF" + out['mime'] = "image/gif" + when "JPEG" + out['mime'] = "image/jpeg" + when "PNG" + out['mime'] = "image/png" + when "WBMP" + out['mime'] = "image/vnd.wap.wbmp" + when "XPM" + out['mime'] = "image/x-xpixmap" + end + out[3] = "height=\"#{image.height}\" width=\"#{image.width}\"" + + if image.colorspace == "CMYK" || image.colorspace == "RGBA" + out['channels'] = 4 + elsif image.colorspace == "RGB" + out['channels'] = 3 + end + + out['bits'] = image.depth + out['bits'] /= out['channels'] if out['channels'] + end + + out + end + +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/core/rfpdf.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/core/rfpdf.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,298 @@ +module Core::RFPDF + COLOR_PALETTE = { + :black => [0x00, 0x00, 0x00], + :white => [0xff, 0xff, 0xff], + }.freeze + + # Draw a circle at (mid_x, mid_y) with radius. + # + # Options are: + # * :border - Draw a border, 0 = no, 1 = yes? Default value is 1. + # * :border_color - Default value is COLOR_PALETTE[:black]. + # * :border_width - Default value is 0.5. + # * :fill - Fill the box, 0 = no, 1 = yes? Default value is 1. + # * :fill_color - Default value is nothing or COLOR_PALETTE[:white]. + # * :fill_colorspace - Default value is :rgb or ''. + # + # Example: + # + # draw_circle(x, y, radius, :border_color => ReportHelper::COLOR_PALETTE[:dark_blue], :border_width => 1) + # + def draw_circle(mid_x, mid_y, radius, options = {}) + options[:border] ||= 1 + options[:border_color] ||= Core::RFPDF::COLOR_PALETTE[:black] + options[:border_width] ||= 0.5 + options[:fill] ||= 1 + options[:fill_color] ||= Core::RFPDF::COLOR_PALETTE[:white] + options[:fill_colorspace] ||= :rgb + SetLineWidth(options[:border_width]) + set_draw_color_a(options[:border_color]) + set_fill_color_a(options[:fill_color], options[:colorspace]) + fd = "" + fd = "D" if options[:border] == 1 + fd += "F" if options[:fill] == 1 + Circle(mid_x, mid_y, radius, fd) + end + + # Draw a line from (x1, y1) to (x2, y2). + # + # Options are: + # * :line_color - Default value is COLOR_PALETTE[:black]. + # * :line_width - Default value is 0.5. + # + # Example: + # + # draw_line(x1, y1, x1, y1+h, :line_color => ReportHelper::COLOR_PALETTE[:dark_blue], :line_width => 1) + # + def draw_line(x1, y1, x2, y2, options = {}) + options[:line_color] ||= Core::RFPDF::COLOR_PALETTE[:black] + options[:line_width] ||= 0.5 + set_draw_color_a(options[:line_color]) + SetLineWidth(options[:line_width]) + Line(x1, y1, x2, y2) + end + + # Draw a string of text at (x, y). + # + # Options are: + # * :font_color - Default value is COLOR_PALETTE[:black]. + # * :font_size - Default value is 10. + # * :font_style - Default value is nothing or ''. + # * :colorspace - Default value is :rgb or ''. + # + # Example: + # + # draw_text(x, y, header_left, :font_size => 10) + # + def draw_text(x, y, text, options = {}) + options[:font_color] ||= Core::RFPDF::COLOR_PALETTE[:black] + options[:font] ||= default_font + options[:font_size] ||= 10 + options[:font_style] ||= '' + set_text_color_a(options[:font_color], options[:colorspace]) + SetFont(options[:font], options[:font_style], options[:font_size]) + SetXY(x, y) + Write(options[:font_size] + 4, text) + end + + # Draw a block of text at (x, y) bounded by left_margin and right_margin_from_right_edge. Both + # margins are measured from their corresponding edge. + # + # Options are: + # * :font_color - Default value is COLOR_PALETTE[:black]. + # * :font_size - Default value is 10. + # * :font_style - Default value is nothing or ''. + # * :colorspace - Default value is :rgb or ''. + # + # Example: + # + # draw_text_block(left_margin, 85, "question", left_margin, 280, + # :font_color => ReportHelper::COLOR_PALETTE[:dark_blue], + # :font_size => 12, + # :font_style => 'I') + # + def draw_text_block(x, y, text, left_margin, right_margin_from_right_edge, options = {}) + options[:font] ||= default_font + options[:font_color] ||= Core::RFPDF::COLOR_PALETTE[:black] + options[:font_size] ||= 10 + options[:font_style] ||= '' + set_text_color_a(options[:font_color], options[:colorspace]) + SetFont(options[:font], options[:font_style], options[:font_size]) + SetXY(x, y) + SetLeftMargin(left_margin) + SetRightMargin(right_margin_from_right_edge) + Write(options[:font_size] + 4, text) + SetMargins(0,0,0) + end + + # Draw a box at (x, y), w wide and h high. + # + # Options are: + # * :border - Draw a border, 0 = no, 1 = yes? Default value is 1. + # * :border_color - Default value is COLOR_PALETTE[:black]. + # * :border_width - Default value is 0.5. + # * :fill - Fill the box, 0 = no, 1 = yes? Default value is 1. + # * :fill_color - Default value is nothing or COLOR_PALETTE[:white]. + # * :fill_colorspace - Default value is :rgb or ''. + # + # Example: + # + # draw_box(x, y - 1, 38, 22) + # + def draw_box(x, y, w, h, options = {}) + options[:border] ||= 1 + options[:border_color] ||= Core::RFPDF::COLOR_PALETTE[:black] + options[:border_width] ||= 0.5 + options[:fill] ||= 1 + options[:fill_color] ||= Core::RFPDF::COLOR_PALETTE[:white] + options[:fill_colorspace] ||= :rgb + SetLineWidth(options[:border_width]) + set_draw_color_a(options[:border_color]) + set_fill_color_a(options[:fill_color], options[:fill_colorspace]) + fd = "" + fd = "D" if options[:border] == 1 + fd += "F" if options[:fill] == 1 + Rect(x, y, w, h, fd) + end + + # Draw a string of text at (x, y) in a box w wide and h high. + # + # Options are: + # * :align - Vertical alignment 'C' = center, 'L' = left, 'R' = right. Default value is 'C'. + # * :border - Draw a border, 0 = no, 1 = yes? Default value is 0. + # * :border_color - Default value is COLOR_PALETTE[:black]. + # * :border_width - Default value is 0.5. + # * :fill - Fill the box, 0 = no, 1 = yes? Default value is 1. + # * :fill_color - Default value is nothing or COLOR_PALETTE[:white]. + # * :font_color - Default value is COLOR_PALETTE[:black]. + # * :font_size - Default value is nothing or 8. + # * :font_style - 'B' = bold, 'I' = italic, 'U' = underline. Default value is nothing ''. + # * :padding - Default value is nothing or 2. + # * :x_padding - Default value is nothing. + # * :valign - 'M' = middle, 'T' = top, 'B' = bottom. Default value is nothing or 'M'. + # * :colorspace - Default value is :rgb or ''. + # + # Example: + # + # draw_text_box(x, y - 1, 38, 22, + # "your_score_title", + # :fill => 0, + # :font_color => ReportHelper::COLOR_PALETTE[:blue], + # :font_line_spacing => 0, + # :font_style => "B", + # :valign => "M") + # + def draw_text_box(x, y, w, h, text, options = {}) + options[:align] ||= 'C' + options[:border] ||= 0 + options[:border_color] ||= Core::RFPDF::COLOR_PALETTE[:black] + options[:border_width] ||= 0.5 + options[:fill] ||= 1 + options[:fill_color] ||= Core::RFPDF::COLOR_PALETTE[:white] + options[:font] ||= default_font + options[:font_color] ||= Core::RFPDF::COLOR_PALETTE[:black] + options[:font_size] ||= 8 + options[:font_line_spacing] ||= options[:font_size] * 0.3 + options[:font_style] ||= '' + options[:padding] ||= 2 + options[:x_padding] ||= 0 + options[:valign] ||= "M" + if options[:fill] == 1 or options[:border] == 1 + draw_box(x, y, w, h, options) + end + SetMargins(0,0,0) + set_text_color_a(options[:font_color], options[:colorspace]) + font_size = options[:font_size] + SetFont(options[:font], options[:font_style], font_size) + font_size += options[:font_line_spacing] + case options[:valign] + when "B", "bottom" + y -= options[:padding] + when "T", "top" + y += options[:padding] + end + case options[:align] + when "L", "left" + x += options[:x_padding] + w -= options[:x_padding] + w -= options[:x_padding] + when "R", "right" + x += options[:x_padding] + w -= options[:x_padding] + w -= options[:x_padding] + end + SetXY(x, y) + if GetStringWidth(text) < w or not text["\n"].nil? and (options[:valign] == "T" || options[:valign] == "top") + text = text + "\n" + end + if GetStringWidth(text) > w or not text["\n"].nil? or (options[:valign] == "B" || options[:valign] == "bottom") + font_size += options[:font_size] * 0.1 + # TODO 2006-07-21 Level=1 - this is assuming a 2 line text + SetXY(x, y + ((h - (font_size * 2)) / 2)) if (options[:valign] == "M" || options[:valign] == "middle") + MultiCell(w, font_size, text, 0, options[:align]) + else + Cell(w, h, text, 0, 0, options[:align]) + end + end + + # Draw a string of text at (x, y) as a title. + # + # Options are: + # * :font_color - Default value is COLOR_PALETTE[:black]. + # * :font_size - Default value is 18. + # * :font_style - Default value is nothing or ''. + # * :colorspace - Default value is :rgb or ''. + # + # Example: + # + # draw_title(left_margin, 60, + # "title:", + # :font_color => ReportHelper::COLOR_PALETTE[:dark_blue]) + # + def draw_title(x, y, title, options = {}) + options[:font_color] ||= Core::RFPDF::COLOR_PALETTE[:black] + options[:font] ||= default_font + options[:font_size] ||= 18 + options[:font_style] ||= '' + set_text_color_a(options[:font_color], options[:colorspace]) + SetFont(options[:font], options[:font_style], options[:font_size]) + SetXY(x, y) + Write(options[:font_size] + 2, title) + end + + # Set the draw color. Default value is COLOR_PALETTE[:black]. + # + # Example: + # + # set_draw_color_a(ReportHelper::COLOR_PALETTE[:dark_blue]) + # + def set_draw_color_a(color = Core::RFPDF::COLOR_PALETTE[:black]) + SetDrawColor(color[0], color[1], color[2]) + end + + # Set the fill color. Default value is COLOR_PALETTE[:white]. + # + # Example: + # + # set_fill_color_a(ReportHelper::COLOR_PALETTE[:dark_blue]) + # + def set_fill_color_a(color = Core::RFPDF::COLOR_PALETTE[:white], colorspace = :rgb) + if colorspace == :cmyk + SetCmykFillColor(color[0], color[1], color[2], color[3]) + else + SetFillColor(color[0], color[1], color[2]) + end + end + + # Set the text color. Default value is COLOR_PALETTE[:white]. + # + # Example: + # + # set_text_color_a(ReportHelper::COLOR_PALETTE[:dark_blue]) + # + def set_text_color_a(color = Core::RFPDF::COLOR_PALETTE[:black], colorspace = :rgb) + if colorspace == :cmyk + SetCmykTextColor(color[0], color[1], color[2], color[3]) + else + SetTextColor(color[0], color[1], color[2]) + end + end + + # Write a string containing html characters. Default value is COLOR_PALETTE[:white]. + # + # Options are: + # * :height - Line height. Default value is 20. + # + # Example: + # + # write_html_with_options(html, :height => 12) + # + #FIXME 2007-08-07 (EJM) Level=0 - This needs to call the TCPDF version. + def write_html_with_options(html, options = {}) + options[:fill] ||= 0 + options[:height] ||= 20 + options[:new_line_after] ||= false + write_html(html, options[:new_line_after], options[:fill], options[:height]) + return + end +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/core/rmagick.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/core/rmagick.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,64 @@ +# The MIT License +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +# This implements native php methods used by tcpdf, which have had to be +# reimplemented within Ruby. + +module RFPDF + + # http://uk2.php.net/getimagesize + def getimagesize(filename) + image = Magick::ImageList.new(filename) + + out = Hash.new + out[0] = image.columns + out[1] = image.rows + + # These are actually meant to return integer values But I couldn't seem to find anything saying what those values are. + # So for now they return strings. The only place that uses this at the moment is the parsejpeg method, so I've changed that too. + case image.mime_type + when "image/gif" + out[2] = "GIF" + when "image/jpeg" + out[2] = "JPEG" + when "image/png" + out[2] = "PNG" + when " image/vnd.wap.wbmp" + out[2] = "WBMP" + when "image/x-xpixmap" + out[2] = "XPM" + end + out[3] = "height=\"#{image.rows}\" width=\"#{image.columns}\"" + out['mime'] = image.mime_type + + # This needs work to cover more situations + # I can't see how to just list the number of channels with ImageMagick / rmagick + if image.colorspace.to_s == "CMYKColorspace" + out['channels'] = 4 + elsif image.colorspace.to_s == "RGBColorspace" + out['channels'] = 3 + end + + out['bits'] = image.channel_depth + + out + end + +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSans-Bold.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSans-Bold.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSans-Bold.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSans-Bold.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSans-BoldOblique.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSans-BoldOblique.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSans-BoldOblique.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSans-BoldOblique.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSans-ExtraLight.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSans-ExtraLight.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSans-ExtraLight.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/DejaVuSans-ExtraLight.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,112 @@ +TCPDFFontDescriptor.define('DejaVuSans-ExtraLight') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='DejaVuSans-ExtraLight'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>32,'FontBBox'=>'[-733 -339 1659 1114]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600} + font[:up]=-42; + font[:ut]=44; + font[:cw]={ + 0=>600, 32=>318, 33=>401, 34=>460, 35=>838, 36=>636, 37=>950, 38=>780, 39=>275, 40=>390, 41=>390, 42=>500, 43=>838, 44=>318, 45=>361, 46=>318, + 47=>337, 48=>636, 49=>636, 50=>636, 51=>636, 52=>636, 53=>636, 54=>636, 55=>636, 56=>636, 57=>636, 58=>337, 59=>337, 60=>838, 61=>838, 62=>838, + 63=>531, 64=>1000, 65=>684, 66=>655, 67=>698, 68=>770, 69=>632, 70=>575, 71=>775, 72=>752, 73=>295, 74=>295, 75=>656, 76=>557, 77=>863, 78=>748, + 79=>787, 80=>603, 81=>787, 82=>695, 83=>635, 84=>611, 85=>732, 86=>684, 87=>989, 88=>685, 89=>611, 90=>685, 91=>390, 92=>337, 93=>390, 94=>838, + 95=>500, 96=>500, 97=>613, 98=>635, 99=>550, 100=>635, 101=>615, 102=>352, 103=>600, 104=>634, 105=>278, 106=>278, 107=>579, 108=>278, 109=>974, 110=>634, + 111=>612, 112=>635, 113=>635, 114=>411, 115=>521, 116=>392, 117=>634, 118=>592, 119=>818, 120=>592, 121=>592, 122=>525, 123=>636, 124=>337, 125=>636, 126=>838, + 8364=>636, 1027=>557, 8218=>318, 402=>352, 8222=>518, 8230=>1000, 8224=>500, 8225=>500, 710=>500, 8240=>1342, 352=>635, 8249=>400, 338=>1070, 1036=>656, 381=>685, 1039=>752, + 8216=>318, 8217=>318, 8220=>518, 8221=>518, 8211=>500, 8212=>1000, 732=>500, 353=>521, 8250=>400, 339=>1023, 1116=>604, 382=>525, 376=>611, 160=>318, 161=>401, 162=>636, + 163=>636, 164=>636, 165=>636, 166=>337, 167=>500, 168=>500, 169=>1000, 170=>471, 171=>612, 172=>838, 173=>361, 174=>1000, 175=>500, 176=>500, 177=>838, 178=>401, + 179=>401, 180=>483, 181=>636, 182=>636, 183=>318, 184=>500, 185=>401, 186=>471, 187=>612, 188=>969, 189=>969, 190=>969, 191=>536, 192=>684, 193=>684, 194=>684, + 195=>684, 196=>684, 197=>684, 198=>974, 199=>698, 200=>632, 201=>632, 202=>632, 203=>632, 204=>295, 205=>295, 206=>295, 207=>295, 208=>775, 209=>748, 210=>787, + 211=>787, 212=>787, 213=>787, 214=>787, 215=>838, 216=>787, 217=>732, 218=>732, 219=>732, 220=>732, 221=>611, 222=>605, 223=>676, 224=>613, 225=>613, 226=>613, + 227=>613, 228=>613, 229=>613, 230=>982, 231=>550, 232=>615, 233=>615, 234=>615, 235=>615, 236=>278, 237=>278, 238=>278, 239=>278, 240=>612, 241=>634, 242=>612, + 243=>612, 244=>612, 245=>612, 246=>612, 247=>838, 248=>612, 249=>634, 250=>634, 251=>634, 252=>634, 253=>592, 254=>635, 255=>592, 256=>684, 257=>613, 258=>684, + 259=>613, 260=>684, 261=>613, 262=>698, 263=>550, 264=>698, 265=>550, 266=>698, 267=>550, 268=>698, 269=>550, 270=>770, 271=>635, 272=>775, 273=>635, 274=>632, + 275=>615, 276=>632, 277=>615, 278=>632, 279=>615, 280=>632, 281=>615, 282=>632, 283=>615, 284=>775, 285=>600, 286=>775, 287=>600, 288=>775, 289=>600, 290=>775, + 291=>600, 292=>752, 293=>634, 294=>916, 295=>695, 296=>295, 297=>278, 298=>295, 299=>278, 300=>295, 301=>278, 302=>295, 303=>278, 304=>295, 305=>278, 306=>590, + 307=>556, 308=>295, 309=>278, 310=>656, 311=>579, 312=>579, 313=>557, 314=>293, 315=>557, 316=>278, 317=>557, 318=>375, 319=>557, 320=>342, 321=>562, 322=>284, + 323=>748, 324=>634, 325=>748, 326=>634, 327=>748, 328=>634, 329=>813, 330=>757, 331=>634, 332=>787, 333=>612, 334=>787, 335=>612, 336=>787, 337=>612, 340=>695, + 341=>411, 342=>695, 343=>411, 344=>695, 345=>411, 346=>635, 347=>521, 348=>635, 349=>521, 350=>635, 351=>521, 354=>611, 355=>392, 356=>611, 357=>392, 358=>611, + 359=>392, 360=>732, 361=>634, 362=>732, 363=>634, 364=>732, 365=>634, 366=>732, 367=>634, 368=>732, 369=>634, 370=>732, 371=>634, 372=>989, 373=>818, 374=>611, + 375=>592, 377=>685, 378=>525, 379=>685, 380=>525, 383=>352, 384=>635, 385=>735, 386=>686, 387=>635, 390=>698, 391=>698, 392=>550, 393=>775, 394=>824, 395=>686, + 396=>635, 397=>612, 398=>632, 399=>787, 400=>585, 401=>575, 403=>775, 404=>685, 405=>965, 406=>354, 407=>295, 408=>690, 409=>526, 410=>278, 413=>748, 414=>634, + 415=>787, 416=>934, 417=>757, 420=>652, 421=>635, 423=>635, 424=>521, 425=>632, 427=>392, 428=>611, 429=>392, 430=>611, 431=>879, 432=>779, 433=>764, 434=>721, + 435=>696, 436=>805, 437=>685, 438=>525, 448=>295, 449=>492, 450=>459, 451=>295, 452=>1422, 453=>1299, 454=>1154, 455=>835, 456=>787, 457=>457, 458=>931, 459=>924, + 460=>797, 461=>684, 462=>613, 463=>295, 464=>278, 465=>787, 466=>612, 467=>732, 468=>634, 469=>732, 470=>634, 471=>732, 472=>634, 473=>732, 474=>634, 475=>732, + 476=>634, 477=>615, 478=>684, 479=>613, 480=>684, 481=>613, 482=>974, 483=>982, 486=>775, 487=>600, 488=>656, 489=>579, 490=>787, 491=>612, 492=>787, 493=>612, + 496=>278, 497=>1422, 498=>1299, 499=>1154, 500=>775, 501=>600, 504=>748, 505=>634, 506=>684, 507=>613, 508=>974, 509=>982, 510=>787, 511=>612, 512=>684, 513=>613, + 514=>684, 515=>613, 516=>632, 517=>615, 518=>632, 519=>615, 520=>295, 521=>278, 522=>295, 523=>278, 524=>787, 525=>612, 526=>787, 527=>612, 528=>695, 529=>411, + 530=>695, 531=>411, 532=>732, 533=>634, 534=>732, 535=>634, 536=>635, 537=>521, 538=>611, 539=>392, 542=>752, 543=>634, 550=>684, 551=>613, 552=>632, 553=>615, + 554=>787, 555=>612, 556=>787, 557=>612, 558=>787, 559=>612, 560=>787, 561=>612, 562=>611, 563=>592, 567=>278, 568=>1032, 569=>1032, 581=>684, 592=>614, 593=>635, + 594=>635, 595=>635, 596=>550, 598=>635, 599=>727, 600=>615, 601=>615, 603=>541, 604=>541, 607=>326, 608=>637, 609=>635, 611=>685, 613=>634, 616=>372, 617=>387, + 623=>974, 624=>974, 628=>634, 629=>612, 640=>602, 641=>602, 649=>634, 650=>618, 651=>598, 652=>592, 653=>818, 654=>592, 665=>580, 668=>661, 670=>667, 671=>583, + 675=>1014, 678=>824, 682=>641, 683=>654, 699=>318, 700=>318, 702=>307, 711=>500, 713=>500, 714=>483, 715=>500, 717=>500, 718=>500, 719=>483, 728=>500, 729=>500, + 730=>500, 731=>500, 733=>500, 755=>500, 759=>500, 768=>0, 769=>0, 770=>0, 771=>0, 772=>0, 773=>0, 774=>0, 775=>0, 776=>0, 777=>0, 778=>0, + 779=>0, 780=>0, 781=>0, 782=>0, 783=>0, 784=>0, 785=>0, 786=>0, 787=>0, 788=>0, 789=>0, 790=>0, 791=>0, 795=>0, 803=>0, 804=>0, + 805=>0, 806=>0, 807=>0, 808=>0, 812=>0, 813=>0, 814=>0, 815=>0, 816=>0, 817=>0, 818=>0, 819=>0, 820=>0, 821=>0, 822=>0, 823=>0, + 824=>0, 831=>0, 847=>0, 856=>0, 860=>0, 861=>0, 865=>0, 884=>278, 885=>278, 890=>361, 891=>549, 892=>550, 893=>549, 894=>337, 900=>483, 901=>500, + 902=>692, 903=>318, 904=>746, 905=>871, 906=>408, 908=>813, 910=>825, 911=>826, 912=>387, 913=>684, 914=>655, 915=>557, 916=>684, 917=>632, 918=>685, 919=>752, + 920=>787, 921=>295, 922=>656, 923=>684, 924=>863, 925=>748, 926=>632, 927=>787, 928=>752, 929=>603, 931=>632, 932=>611, 933=>611, 934=>787, 935=>685, 936=>787, + 937=>764, 938=>295, 939=>611, 940=>659, 941=>541, 942=>654, 943=>387, 944=>579, 945=>659, 946=>638, 947=>592, 948=>612, 949=>541, 950=>544, 951=>634, 952=>612, + 953=>387, 954=>604, 955=>592, 956=>636, 957=>559, 958=>558, 959=>612, 960=>602, 961=>635, 962=>587, 963=>634, 964=>602, 965=>579, 966=>660, 967=>592, 968=>660, + 969=>837, 970=>387, 971=>579, 972=>612, 973=>579, 974=>837, 988=>575, 1010=>550, 1011=>278, 1012=>787, 1013=>615, 1014=>615, 1015=>605, 1016=>635, 1017=>698, 1021=>698, + 1022=>698, 1023=>698, 1024=>632, 1025=>632, 1026=>786, 1028=>698, 1029=>635, 1030=>295, 1031=>295, 1032=>295, 1033=>1094, 1034=>1045, 1035=>786, 1037=>748, 1038=>609, 1040=>684, + 1041=>686, 1042=>655, 1043=>557, 1044=>776, 1045=>632, 1046=>863, 1047=>636, 1048=>748, 1049=>748, 1050=>656, 1051=>752, 1052=>863, 1053=>752, 1054=>787, 1055=>752, 1056=>603, + 1057=>698, 1058=>611, 1059=>609, 1060=>787, 1061=>685, 1062=>776, 1063=>686, 1064=>1003, 1065=>1025, 1066=>833, 1067=>882, 1068=>686, 1069=>698, 1070=>1031, 1071=>695, 1072=>613, + 1073=>612, 1074=>586, 1075=>491, 1076=>672, 1077=>615, 1078=>733, 1079=>541, 1080=>657, 1081=>657, 1082=>604, 1083=>639, 1084=>754, 1085=>661, 1086=>612, 1087=>660, 1088=>635, + 1089=>550, 1090=>529, 1091=>592, 1092=>917, 1093=>592, 1094=>681, 1095=>591, 1096=>873, 1097=>893, 1098=>703, 1099=>765, 1100=>589, 1101=>549, 1102=>813, 1103=>602, 1104=>615, + 1105=>615, 1106=>644, 1107=>491, 1108=>549, 1109=>521, 1110=>278, 1111=>278, 1112=>278, 1113=>898, 1114=>892, 1115=>637, 1117=>657, 1118=>592, 1119=>662, 1121=>837, 1124=>942, + 1125=>749, 1136=>787, 1137=>660, 1138=>787, 1168=>557, 1169=>491, 1176=>636, 1177=>541, 1188=>1014, 1189=>868, 1194=>698, 1195=>550, 1198=>611, 1199=>592, 1204=>934, 1205=>809, + 1210=>686, 1211=>634, 1216=>278, 1217=>863, 1218=>733, 1232=>684, 1233=>613, 1234=>684, 1235=>613, 1236=>974, 1237=>982, 1238=>632, 1239=>615, 1240=>787, 1241=>615, 1242=>787, + 1243=>615, 1244=>863, 1245=>733, 1246=>636, 1247=>541, 1250=>748, 1251=>657, 1252=>748, 1253=>657, 1254=>787, 1255=>612, 1256=>787, 1257=>612, 1258=>787, 1259=>612, 1260=>698, + 1261=>549, 1262=>609, 1263=>592, 1264=>609, 1265=>592, 1266=>609, 1267=>592, 1268=>686, 1269=>591, 1272=>882, 1273=>765, 1352=>732, 1357=>732, 1359=>635, 1363=>787, 1365=>787, + 1370=>318, 1373=>392, 1377=>974, 1387=>634, 1389=>1002, 1391=>634, 1392=>634, 1397=>278, 1400=>634, 1402=>974, 1405=>634, 1407=>1002, 1408=>634, 1409=>600, 1411=>1002, 1413=>612, + 1417=>337, 1652=>292, 7426=>982, 7428=>550, 7433=>278, 7435=>604, 7437=>754, 7438=>650, 7439=>612, 7440=>550, 7441=>684, 7442=>684, 7443=>684, 7444=>1023, 7446=>612, 7447=>612, + 7456=>592, 7457=>818, 7458=>525, 7462=>525, 7463=>592, 7464=>654, 7543=>635, 7680=>684, 7681=>613, 7682=>655, 7683=>635, 7684=>655, 7685=>635, 7686=>655, 7687=>635, 7688=>698, + 7689=>550, 7690=>770, 7691=>635, 7692=>770, 7693=>635, 7694=>770, 7695=>635, 7696=>770, 7697=>635, 7698=>770, 7699=>635, 7700=>632, 7701=>615, 7702=>632, 7703=>615, 7704=>632, + 7705=>615, 7706=>632, 7707=>615, 7708=>632, 7709=>615, 7710=>575, 7711=>352, 7712=>775, 7713=>600, 7714=>752, 7715=>634, 7716=>752, 7717=>634, 7718=>752, 7719=>634, 7720=>752, + 7721=>634, 7722=>752, 7723=>634, 7724=>295, 7725=>278, 7726=>295, 7727=>278, 7728=>656, 7729=>579, 7730=>656, 7731=>579, 7732=>656, 7733=>579, 7734=>557, 7735=>278, 7736=>557, + 7737=>278, 7738=>557, 7739=>278, 7740=>557, 7741=>278, 7742=>863, 7743=>974, 7744=>863, 7745=>974, 7746=>863, 7747=>974, 7748=>748, 7749=>634, 7750=>748, 7751=>634, 7752=>748, + 7753=>634, 7754=>748, 7755=>634, 7756=>787, 7757=>612, 7758=>787, 7759=>612, 7760=>787, 7761=>612, 7762=>787, 7763=>612, 7764=>603, 7765=>635, 7766=>603, 7767=>635, 7768=>695, + 7769=>411, 7770=>695, 7771=>411, 7772=>695, 7773=>411, 7774=>695, 7775=>411, 7776=>635, 7777=>521, 7778=>635, 7779=>521, 7780=>635, 7781=>521, 7782=>635, 7783=>521, 7784=>635, + 7785=>521, 7786=>611, 7787=>392, 7788=>611, 7789=>392, 7790=>611, 7791=>392, 7792=>611, 7793=>392, 7794=>732, 7795=>634, 7796=>732, 7797=>634, 7798=>732, 7799=>634, 7800=>732, + 7801=>634, 7802=>732, 7803=>634, 7804=>684, 7805=>592, 7806=>684, 7807=>592, 7808=>989, 7809=>818, 7810=>989, 7811=>818, 7812=>989, 7813=>818, 7814=>989, 7815=>818, 7816=>989, + 7817=>818, 7818=>685, 7819=>592, 7820=>685, 7821=>592, 7822=>611, 7823=>592, 7824=>685, 7825=>525, 7826=>685, 7827=>525, 7828=>685, 7829=>525, 7830=>634, 7831=>392, 7832=>818, + 7833=>592, 7834=>613, 7835=>352, 7840=>684, 7841=>613, 7842=>684, 7843=>613, 7844=>684, 7845=>613, 7846=>684, 7847=>613, 7848=>684, 7849=>613, 7850=>684, 7851=>613, 7852=>684, + 7853=>613, 7854=>684, 7855=>613, 7856=>684, 7857=>613, 7858=>684, 7859=>613, 7860=>684, 7861=>613, 7862=>684, 7863=>613, 7864=>632, 7865=>615, 7866=>632, 7867=>615, 7868=>632, + 7869=>615, 7870=>632, 7871=>615, 7872=>632, 7873=>615, 7874=>632, 7875=>615, 7876=>632, 7877=>615, 7878=>632, 7879=>615, 7880=>295, 7881=>278, 7882=>295, 7883=>278, 7884=>787, + 7885=>612, 7886=>787, 7887=>612, 7888=>787, 7889=>612, 7890=>787, 7891=>612, 7892=>787, 7893=>612, 7894=>787, 7895=>612, 7896=>787, 7897=>612, 7898=>934, 7899=>757, 7900=>934, + 7901=>757, 7902=>934, 7903=>757, 7904=>934, 7905=>757, 7906=>934, 7907=>757, 7908=>732, 7909=>634, 7910=>732, 7911=>634, 7912=>879, 7913=>779, 7914=>879, 7915=>779, 7916=>879, + 7917=>779, 7918=>879, 7919=>779, 7920=>879, 7921=>779, 7922=>611, 7923=>592, 7924=>611, 7925=>592, 7926=>611, 7927=>592, 7928=>611, 7929=>592, 7936=>659, 7937=>659, 7938=>659, + 7939=>659, 7940=>659, 7941=>659, 7942=>659, 7943=>659, 7944=>684, 7945=>684, 7946=>877, 7947=>877, 7948=>769, 7949=>801, 7950=>708, 7951=>743, 7952=>541, 7953=>541, 7954=>541, + 7955=>541, 7956=>541, 7957=>541, 7960=>711, 7961=>711, 7962=>966, 7963=>975, 7964=>898, 7965=>928, 7968=>634, 7969=>634, 7970=>634, 7971=>634, 7972=>634, 7973=>634, 7974=>634, + 7975=>634, 7976=>837, 7977=>835, 7978=>1086, 7979=>1089, 7980=>1027, 7981=>1051, 7982=>934, 7983=>947, 7984=>338, 7985=>338, 7986=>338, 7987=>338, 7988=>338, 7989=>338, 7990=>338, + 7991=>338, 7992=>380, 7993=>374, 7994=>635, 7995=>635, 7996=>570, 7997=>600, 7998=>489, 7999=>493, 8000=>612, 8001=>612, 8002=>612, 8003=>612, 8004=>612, 8005=>612, 8008=>804, + 8009=>848, 8010=>1095, 8011=>1100, 8012=>938, 8013=>970, 8016=>579, 8017=>579, 8018=>579, 8019=>579, 8020=>579, 8021=>579, 8022=>579, 8023=>579, 8025=>784, 8027=>998, 8029=>1012, + 8031=>897, 8032=>837, 8033=>837, 8034=>837, 8035=>837, 8036=>837, 8037=>837, 8038=>837, 8039=>837, 8040=>802, 8041=>843, 8042=>1089, 8043=>1095, 8044=>946, 8045=>972, 8046=>921, + 8047=>952, 8048=>659, 8049=>659, 8050=>541, 8051=>548, 8052=>634, 8053=>654, 8054=>338, 8055=>338, 8056=>612, 8057=>612, 8058=>579, 8059=>579, 8060=>837, 8061=>837, 8064=>659, + 8065=>659, 8066=>659, 8067=>659, 8068=>659, 8069=>659, 8070=>659, 8071=>659, 8072=>684, 8073=>684, 8074=>877, 8075=>877, 8076=>769, 8077=>801, 8078=>708, 8079=>743, 8080=>634, + 8081=>634, 8082=>634, 8083=>634, 8084=>634, 8085=>634, 8086=>634, 8087=>634, 8088=>837, 8089=>835, 8090=>1086, 8091=>1089, 8092=>1027, 8093=>1051, 8094=>934, 8095=>947, 8096=>837, + 8097=>837, 8098=>837, 8099=>837, 8100=>837, 8101=>837, 8102=>837, 8103=>837, 8104=>802, 8105=>843, 8106=>1089, 8107=>1095, 8108=>946, 8109=>972, 8110=>921, 8111=>952, 8112=>659, + 8113=>659, 8114=>659, 8115=>659, 8116=>659, 8118=>659, 8119=>659, 8120=>684, 8121=>684, 8122=>716, 8123=>692, 8124=>684, 8125=>500, 8126=>500, 8127=>500, 8128=>500, 8129=>500, + 8130=>634, 8131=>634, 8132=>654, 8134=>634, 8135=>634, 8136=>805, 8137=>746, 8138=>931, 8139=>871, 8140=>752, 8141=>500, 8142=>500, 8143=>500, 8144=>338, 8145=>338, 8146=>338, + 8147=>338, 8150=>338, 8151=>338, 8152=>295, 8153=>295, 8154=>475, 8155=>408, 8157=>500, 8158=>500, 8159=>500, 8160=>579, 8161=>579, 8162=>579, 8163=>579, 8164=>635, 8165=>635, + 8166=>579, 8167=>579, 8168=>611, 8169=>611, 8170=>845, 8171=>825, 8172=>685, 8173=>500, 8174=>500, 8175=>500, 8178=>837, 8179=>837, 8180=>837, 8182=>837, 8183=>837, 8184=>941, + 8185=>813, 8186=>922, 8187=>826, 8188=>764, 8189=>500, 8190=>500, 8192=>500, 8193=>1000, 8194=>500, 8195=>1000, 8196=>330, 8197=>250, 8198=>167, 8199=>636, 8200=>318, 8201=>200, + 8202=>100, 8203=>0, 8204=>0, 8205=>0, 8206=>0, 8207=>0, 8208=>361, 8209=>361, 8210=>636, 8213=>1000, 8214=>500, 8215=>500, 8219=>318, 8223=>518, 8228=>334, 8229=>667, + 8234=>0, 8235=>0, 8236=>0, 8237=>0, 8238=>0, 8239=>200, 8241=>1735, 8251=>838, 8252=>485, 8253=>531, 8254=>500, 8255=>804, 8256=>804, 8258=>1000, 8259=>500, 8260=>167, + 8261=>390, 8262=>390, 8263=>922, 8264=>733, 8265=>733, 8267=>636, 8268=>500, 8269=>500, 8270=>500, 8271=>337, 8272=>804, 8273=>500, 8274=>450, 8275=>838, 8276=>804, 8287=>222, + 8288=>0, 8289=>0, 8290=>0, 8291=>0, 8298=>0, 8299=>0, 8300=>0, 8301=>0, 8302=>0, 8303=>0, 8304=>401, 8305=>179, 8308=>401, 8320=>401, 8321=>401, 8322=>401, + 8323=>401, 8324=>401, 8363=>636, 8369=>635, 8451=>1123, 8457=>952, 8470=>1165, 8471=>1000, 8486=>764, 8487=>764, 8490=>656, 8491=>684, 8494=>854, 8498=>575, 8500=>462, 8523=>780, + 8531=>969, 8532=>969, 8543=>568, 8544=>295, 8545=>492, 8546=>689, 8547=>923, 8548=>684, 8549=>922, 8550=>1120, 8551=>1317, 8552=>917, 8553=>685, 8554=>933, 8555=>1131, 8556=>557, + 8557=>698, 8558=>770, 8559=>863, 8560=>278, 8561=>458, 8562=>637, 8563=>812, 8564=>592, 8565=>811, 8566=>991, 8567=>1170, 8568=>819, 8569=>592, 8570=>822, 8571=>1002, 8572=>278, + 8573=>550, 8574=>635, 8575=>974, 8576=>1285, 8579=>698, 8580=>549, 8592=>838, 8593=>838, 8594=>838, 8595=>838, 8596=>838, 8597=>838, 8598=>838, 8599=>838, 8600=>838, 8601=>838, + 8644=>838, 8645=>838, 8646=>838, 8647=>838, 8648=>838, 8649=>838, 8650=>838, 8704=>684, 8707=>632, 8710=>684, 8711=>684, 8722=>838, 8725=>167, 8726=>637, 8727=>626, 8728=>626, + 8756=>636, 8757=>636, 8758=>260, 8759=>636, 8764=>636, 9134=>521, 9167=>945, 10731=>494, 57344=>684, 57345=>684, 57346=>684, 57347=>684, 57348=>684, 57349=>684, 57351=>684, 57352=>684, + 57353=>684, 57354=>684, 57355=>684, 57356=>684, 57357=>684, 57358=>684, 57359=>684, 57360=>684, 57361=>684, 57362=>684, 57363=>684, 57364=>684, 64256=>689, 64257=>630, 64258=>630, 64259=>967, + 64260=>967, 64297=>838, 65024=>0, 65025=>0, 65026=>0, 65027=>0, 65028=>0, 65029=>0, 65030=>0, 65031=>0, 65032=>0, 65033=>0, 65034=>0, 65035=>0, 65036=>0, 65037=>0, + 65038=>0, 65039=>0, 65533=>1025} + font[:enc]=''; + font[:diff]=''; + font[:file]='DejaVuSans-ExtraLight.z'; + font[:ctg]='DejaVuSans-ExtraLight.ctg.z'; + font[:originalsize]=132684; +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSans-ExtraLight.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSans-ExtraLight.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSans-Oblique.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSans-Oblique.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSans-Oblique.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSans-Oblique.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSans.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSans.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSans.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSans.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSansCondensed-Bold.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSansCondensed-Bold.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSansCondensed-Bold.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSansCondensed-Bold.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSansCondensed-BoldOblique.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSansCondensed-BoldOblique.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSansCondensed-BoldOblique.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSansCondensed-BoldOblique.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSansCondensed-Oblique.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSansCondensed-Oblique.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSansCondensed-Oblique.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSansCondensed-Oblique.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSansCondensed.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSansCondensed.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSansCondensed.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/DejaVuSansCondensed.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,287 @@ +TCPDFFontDescriptor.define('DejaVuSansCondensed') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='DejaVuSansCondensed'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>32,'FontBBox'=>'[-918 -356 1513 font[:1068]]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>540}; + font[:up]=-42; + font[:ut]=44; + font[:cw]={ + 0=>540, 32=>286, 33=>360, 34=>414, 35=>754, 36=>572, 37=>855, 38=>702, 39=>247, 40=>351, 41=>351, 42=>450, 43=>754, 44=>286, 45=>325, 46=>286, + 47=>303, 48=>572, 49=>572, 50=>572, 51=>572, 52=>572, 53=>572, 54=>572, 55=>572, 56=>572, 57=>572, 58=>303, 59=>303, 60=>754, 61=>754, 62=>754, + 63=>478, 64=>900, 65=>615, 66=>617, 67=>628, 68=>693, 69=>568, 70=>518, 71=>697, 72=>677, 73=>265, 74=>265, 75=>590, 76=>501, 77=>776, 78=>673, + 79=>708, 80=>542, 81=>708, 82=>625, 83=>571, 84=>549, 85=>659, 86=>615, 87=>890, 88=>616, 89=>549, 90=>616, 91=>351, 92=>303, 93=>351, 94=>754, + 95=>450, 96=>450, 97=>551, 98=>571, 99=>495, 100=>571, 101=>554, 102=>316, 103=>571, 104=>570, 105=>250, 106=>250, 107=>521, 108=>250, 109=>876, 110=>570, + 111=>550, 112=>571, 113=>571, 114=>370, 115=>469, 116=>353, 117=>570, 118=>532, 119=>736, 120=>532, 121=>532, 122=>472, 123=>572, 124=>303, 125=>572, 126=>754, + 8364=>572, 1027=>549, 8218=>286, 402=>316, 8222=>466, 8230=>900, 8224=>450, 8225=>450, 710=>450, 8240=>1208, 352=>571, 8249=>360, 338=>962, 1036=>639, 381=>616, 1039=>677, + 8216=>286, 8217=>286, 8220=>466, 8221=>466, 8226=>531, 8211=>450, 8212=>900, 732=>450, 8482=>900, 353=>469, 8250=>360, 339=>920, 1116=>543, 382=>472, 376=>549, 160=>286, + 161=>360, 162=>572, 163=>572, 164=>572, 165=>572, 166=>303, 167=>450, 168=>450, 169=>900, 170=>424, 171=>550, 172=>754, 173=>325, 174=>900, 175=>450, 176=>450, + 177=>754, 178=>360, 179=>360, 180=>450, 181=>572, 182=>572, 183=>286, 184=>450, 185=>360, 186=>424, 187=>550, 188=>872, 189=>872, 190=>872, 191=>478, 192=>615, + 193=>615, 194=>615, 195=>615, 196=>615, 197=>615, 198=>876, 199=>628, 200=>568, 201=>568, 202=>568, 203=>568, 204=>265, 205=>265, 206=>265, 207=>265, 208=>697, + 209=>673, 210=>708, 211=>708, 212=>708, 213=>708, 214=>708, 215=>754, 216=>708, 217=>659, 218=>659, 219=>659, 220=>659, 221=>549, 222=>544, 223=>567, 224=>551, + 225=>551, 226=>551, 227=>551, 228=>551, 229=>551, 230=>883, 231=>495, 232=>554, 233=>554, 234=>554, 235=>554, 236=>250, 237=>250, 238=>250, 239=>250, 240=>550, + 241=>570, 242=>550, 243=>550, 244=>550, 245=>550, 246=>550, 247=>754, 248=>550, 249=>570, 250=>570, 251=>570, 252=>570, 253=>532, 254=>571, 255=>532, 256=>615, + 257=>551, 258=>615, 259=>551, 260=>615, 261=>551, 262=>628, 263=>495, 264=>628, 265=>495, 266=>628, 267=>495, 268=>628, 269=>495, 270=>693, 271=>571, 272=>697, + 273=>571, 274=>568, 275=>554, 276=>568, 277=>554, 278=>568, 279=>554, 280=>568, 281=>554, 282=>568, 283=>554, 284=>697, 285=>571, 286=>697, 287=>571, 288=>697, + 289=>571, 290=>697, 291=>571, 292=>677, 293=>570, 294=>824, 295=>625, 296=>265, 297=>250, 298=>265, 299=>250, 300=>265, 301=>250, 302=>265, 303=>250, 304=>265, + 305=>250, 306=>531, 307=>500, 308=>265, 309=>250, 310=>590, 311=>521, 312=>521, 313=>501, 314=>264, 315=>501, 316=>250, 317=>501, 318=>337, 319=>501, 320=>308, + 321=>505, 322=>255, 323=>673, 324=>570, 325=>673, 326=>570, 327=>673, 328=>570, 329=>732, 330=>673, 331=>570, 332=>708, 333=>550, 334=>708, 335=>550, 336=>708, + 337=>550, 340=>625, 341=>370, 342=>625, 343=>370, 344=>625, 345=>370, 346=>571, 347=>469, 348=>571, 349=>469, 350=>571, 351=>469, 354=>549, 355=>353, 356=>549, + 357=>353, 358=>549, 359=>353, 360=>659, 361=>570, 362=>659, 363=>570, 364=>659, 365=>570, 366=>659, 367=>570, 368=>659, 369=>570, 370=>659, 371=>570, 372=>890, + 373=>736, 374=>549, 375=>532, 377=>616, 378=>472, 379=>616, 380=>472, 383=>316, 384=>571, 385=>661, 386=>617, 387=>571, 388=>617, 389=>571, 390=>633, 391=>628, + 392=>495, 393=>697, 394=>737, 395=>617, 396=>571, 397=>550, 398=>568, 399=>708, 400=>553, 401=>518, 403=>697, 404=>618, 405=>885, 406=>318, 407=>265, 408=>671, + 409=>521, 410=>250, 411=>532, 412=>876, 413=>673, 414=>570, 415=>708, 416=>822, 417=>550, 418=>854, 419=>683, 420=>586, 421=>571, 422=>625, 423=>571, 424=>469, + 425=>568, 426=>302, 427=>353, 428=>549, 429=>353, 430=>549, 431=>772, 432=>570, 433=>688, 434=>648, 435=>669, 436=>656, 437=>616, 438=>472, 439=>599, 440=>599, + 441=>520, 442=>472, 443=>572, 444=>599, 445=>520, 446=>459, 447=>571, 448=>265, 449=>443, 450=>413, 451=>266, 452=>1279, 453=>1169, 454=>1039, 455=>751, 456=>708, + 457=>411, 458=>838, 459=>831, 460=>717, 461=>615, 462=>551, 463=>265, 464=>250, 465=>708, 466=>550, 467=>659, 468=>570, 469=>659, 470=>570, 471=>659, 472=>570, + 473=>659, 474=>570, 475=>659, 476=>570, 477=>554, 478=>615, 479=>551, 480=>615, 481=>551, 482=>876, 483=>883, 484=>697, 485=>571, 486=>697, 487=>571, 488=>590, + 489=>521, 490=>708, 491=>550, 492=>708, 493=>550, 494=>599, 495=>520, 496=>250, 497=>1279, 498=>1169, 499=>1039, 500=>697, 501=>571, 502=>1001, 503=>614, 504=>673, + 505=>570, 506=>615, 507=>551, 508=>876, 509=>883, 510=>708, 511=>550, 512=>615, 513=>551, 514=>615, 515=>551, 516=>568, 517=>554, 518=>568, 519=>554, 520=>265, + 521=>250, 522=>265, 523=>250, 524=>708, 525=>550, 526=>708, 527=>550, 528=>625, 529=>370, 530=>625, 531=>370, 532=>659, 533=>570, 534=>659, 535=>570, 536=>571, + 537=>469, 538=>549, 539=>353, 540=>564, 541=>469, 542=>677, 543=>570, 544=>662, 545=>754, 546=>628, 547=>549, 548=>616, 549=>472, 550=>615, 551=>551, 552=>568, + 553=>554, 554=>708, 555=>550, 556=>708, 557=>550, 558=>708, 559=>550, 560=>708, 561=>550, 562=>549, 563=>532, 564=>427, 565=>758, 566=>429, 567=>250, 568=>898, + 569=>898, 570=>615, 571=>628, 572=>495, 573=>501, 574=>549, 575=>469, 576=>472, 577=>542, 578=>431, 579=>617, 580=>659, 581=>615, 582=>568, 583=>554, 584=>265, + 585=>250, 586=>703, 587=>571, 588=>625, 589=>370, 590=>549, 591=>532, 592=>540, 593=>571, 594=>571, 595=>571, 596=>494, 597=>495, 598=>571, 599=>626, 600=>554, + 601=>554, 602=>737, 603=>486, 604=>479, 605=>698, 606=>598, 607=>250, 608=>626, 609=>571, 610=>566, 611=>536, 612=>536, 613=>570, 614=>570, 615=>570, 616=>250, + 617=>304, 618=>334, 619=>356, 620=>438, 621=>250, 622=>635, 623=>876, 624=>876, 625=>876, 626=>581, 627=>578, 628=>570, 629=>550, 630=>772, 631=>655, 632=>593, + 633=>373, 634=>373, 635=>372, 636=>370, 637=>369, 638=>393, 639=>477, 640=>543, 641=>543, 642=>469, 643=>302, 644=>302, 645=>415, 646=>302, 647=>353, 648=>353, + 649=>570, 650=>556, 651=>538, 652=>532, 653=>736, 654=>532, 655=>549, 656=>472, 657=>472, 658=>520, 659=>520, 660=>459, 661=>459, 662=>459, 663=>459, 664=>708, + 665=>521, 666=>598, 667=>637, 668=>588, 669=>263, 670=>600, 671=>456, 672=>654, 673=>459, 674=>459, 675=>913, 676=>952, 677=>911, 678=>742, 679=>549, 680=>700, + 681=>763, 682=>576, 683=>589, 684=>463, 685=>463, 686=>513, 687=>597, 688=>364, 689=>359, 690=>157, 691=>233, 692=>266, 693=>266, 694=>341, 695=>463, 696=>335, + 697=>250, 698=>414, 699=>286, 700=>286, 701=>286, 702=>276, 703=>276, 704=>333, 705=>333, 706=>450, 707=>450, 708=>450, 709=>450, 711=>450, 712=>247, 713=>450, + 714=>450, 715=>450, 716=>247, 717=>450, 718=>450, 719=>450, 720=>303, 721=>303, 722=>276, 723=>276, 724=>450, 725=>450, 726=>371, 727=>450, 728=>450, 729=>450, + 730=>450, 731=>450, 733=>450, 734=>284, 735=>450, 736=>383, 737=>149, 738=>335, 739=>399, 740=>333, 741=>444, 742=>444, 743=>444, 744=>444, 745=>444, 748=>450, + 749=>450, 750=>450, 755=>450, 759=>450, 768=>0, 769=>0, 770=>0, 771=>0, 772=>0, 773=>0, 774=>0, 775=>0, 776=>0, 777=>0, 778=>0, 779=>0, + 780=>0, 781=>0, 782=>0, 783=>0, 784=>0, 785=>0, 786=>0, 787=>0, 788=>0, 789=>0, 790=>0, 791=>0, 792=>0, 793=>0, 794=>0, 795=>0, + 796=>0, 797=>0, 798=>0, 799=>0, 800=>0, 801=>0, 802=>0, 803=>0, 804=>0, 805=>0, 806=>0, 807=>0, 808=>0, 809=>0, 810=>0, 811=>0, + 812=>0, 813=>0, 814=>0, 815=>0, 816=>0, 817=>0, 818=>0, 819=>0, 820=>0, 821=>0, 822=>0, 823=>0, 824=>0, 825=>0, 826=>0, 827=>0, + 828=>0, 829=>0, 830=>0, 831=>0, 832=>0, 833=>0, 834=>0, 835=>0, 836=>0, 837=>0, 838=>0, 839=>0, 840=>0, 841=>0, 842=>0, 843=>0, + 844=>0, 845=>0, 846=>0, 847=>0, 849=>0, 850=>0, 851=>0, 855=>0, 856=>0, 860=>0, 861=>0, 862=>0, 863=>0, 864=>0, 865=>0, 866=>0, + 884=>250, 885=>250, 890=>450, 891=>494, 892=>495, 893=>494, 894=>303, 900=>450, 901=>450, 902=>623, 903=>286, 904=>671, 905=>784, 906=>367, 908=>731, 910=>742, + 911=>743, 912=>304, 913=>615, 914=>617, 915=>501, 916=>615, 917=>568, 918=>616, 919=>677, 920=>708, 921=>265, 922=>590, 923=>615, 924=>776, 925=>673, 926=>568, + 927=>708, 928=>677, 929=>542, 931=>568, 932=>549, 933=>549, 934=>708, 935=>616, 936=>708, 937=>688, 938=>265, 939=>549, 940=>593, 941=>493, 942=>589, 943=>304, + 944=>521, 945=>593, 946=>574, 947=>532, 948=>550, 949=>486, 950=>489, 951=>570, 952=>550, 953=>304, 954=>530, 955=>532, 956=>572, 957=>502, 958=>501, 959=>550, + 960=>542, 961=>571, 962=>528, 963=>570, 964=>542, 965=>521, 966=>593, 967=>520, 968=>593, 969=>753, 970=>304, 971=>521, 972=>550, 973=>521, 974=>753, 976=>553, + 977=>557, 978=>628, 979=>758, 980=>628, 981=>593, 982=>753, 983=>597, 984=>708, 985=>550, 986=>583, 987=>528, 988=>518, 989=>413, 990=>593, 991=>593, 992=>778, + 993=>564, 994=>840, 995=>753, 996=>682, 997=>593, 998=>712, 999=>553, 1000=>618, 1001=>546, 1002=>690, 1003=>563, 1004=>629, 1005=>550, 1006=>549, 1007=>482, 1008=>597, + 1009=>571, 1010=>495, 1011=>250, 1012=>708, 1013=>554, 1014=>554, 1015=>544, 1016=>571, 1017=>628, 1018=>776, 1019=>585, 1020=>571, 1021=>633, 1022=>628, 1023=>633, 1024=>568, + 1025=>568, 1026=>708, 1028=>628, 1029=>571, 1030=>265, 1031=>265, 1032=>265, 1033=>984, 1034=>940, 1035=>708, 1037=>673, 1038=>548, 1040=>615, 1041=>617, 1042=>617, 1043=>549, + 1044=>703, 1045=>568, 1046=>969, 1047=>577, 1048=>673, 1049=>673, 1050=>639, 1051=>677, 1052=>776, 1053=>677, 1054=>708, 1055=>677, 1056=>542, 1057=>628, 1058=>549, 1059=>548, + 1060=>774, 1061=>616, 1062=>699, 1063=>617, 1064=>962, 1065=>984, 1066=>749, 1067=>794, 1068=>617, 1069=>628, 1070=>971, 1071=>625, 1072=>551, 1073=>555, 1074=>530, 1075=>473, + 1076=>622, 1077=>554, 1078=>811, 1079=>479, 1080=>584, 1081=>584, 1082=>543, 1083=>575, 1084=>679, 1085=>588, 1086=>550, 1087=>588, 1088=>571, 1089=>495, 1090=>524, 1091=>532, + 1092=>769, 1093=>532, 1094=>612, 1095=>532, 1096=>823, 1097=>848, 1098=>636, 1099=>710, 1100=>530, 1101=>494, 1102=>757, 1103=>541, 1104=>554, 1105=>554, 1106=>563, 1107=>473, + 1108=>494, 1109=>469, 1110=>250, 1111=>250, 1112=>250, 1113=>812, 1114=>809, 1115=>586, 1117=>584, 1118=>532, 1119=>588, 1120=>840, 1121=>753, 1122=>693, 1123=>604, 1124=>848, + 1125=>674, 1126=>791, 1127=>705, 1128=>1043, 1129=>901, 1130=>708, 1131=>550, 1132=>924, 1133=>742, 1134=>572, 1135=>486, 1136=>771, 1137=>789, 1138=>708, 1139=>533, 1140=>703, + 1141=>598, 1142=>703, 1143=>598, 1144=>893, 1145=>813, 1146=>857, 1147=>682, 1148=>1062, 1149=>925, 1150=>840, 1151=>753, 1152=>628, 1153=>495, 1154=>452, 1155=>0, 1156=>0, + 1157=>0, 1158=>0, 1160=>376, 1161=>376, 1162=>695, 1163=>609, 1164=>617, 1165=>530, 1166=>542, 1167=>571, 1168=>549, 1169=>473, 1170=>607, 1171=>500, 1172=>562, 1173=>477, + 1174=>969, 1175=>811, 1176=>577, 1177=>479, 1178=>639, 1179=>543, 1180=>639, 1181=>543, 1182=>639, 1183=>543, 1184=>771, 1185=>748, 1186=>677, 1187=>594, 1188=>913, 1189=>789, + 1190=>973, 1191=>824, 1192=>716, 1193=>586, 1194=>628, 1195=>495, 1196=>549, 1197=>476, 1198=>549, 1199=>532, 1200=>549, 1201=>532, 1202=>616, 1203=>532, 1204=>840, 1205=>726, + 1206=>617, 1207=>532, 1208=>617, 1209=>532, 1210=>617, 1211=>570, 1212=>847, 1213=>655, 1214=>847, 1215=>655, 1216=>265, 1217=>969, 1218=>811, 1219=>590, 1220=>543, 1221=>698, + 1222=>603, 1223=>677, 1224=>594, 1225=>699, 1226=>612, 1227=>617, 1228=>532, 1229=>799, 1230=>697, 1231=>250, 1232=>615, 1233=>551, 1234=>615, 1235=>551, 1236=>876, 1237=>883, + 1238=>568, 1239=>554, 1240=>708, 1241=>554, 1242=>708, 1243=>554, 1244=>969, 1245=>811, 1246=>577, 1247=>479, 1248=>599, 1249=>520, 1250=>673, 1251=>584, 1252=>673, 1253=>584, + 1254=>708, 1255=>550, 1256=>708, 1257=>550, 1258=>708, 1259=>550, 1260=>628, 1261=>494, 1262=>548, 1263=>532, 1264=>548, 1265=>532, 1266=>548, 1267=>532, 1268=>617, 1269=>532, + 1270=>501, 1271=>442, 1272=>794, 1273=>710, 1274=>607, 1275=>500, 1276=>616, 1277=>532, 1278=>616, 1279=>532, 1280=>617, 1281=>530, 1282=>905, 1283=>807, 1284=>877, 1285=>782, + 1286=>611, 1287=>529, 1288=>964, 1289=>861, 1290=>965, 1291=>870, 1292=>697, 1293=>593, 1294=>695, 1295=>640, 1296=>553, 1297=>486, 1298=>677, 1299=>575, 1329=>780, 1330=>659, + 1331=>794, 1332=>794, 1333=>659, 1334=>579, 1335=>613, 1336=>659, 1337=>765, 1338=>794, 1339=>659, 1340=>501, 1341=>741, 1342=>888, 1343=>659, 1344=>636, 1345=>579, 1346=>794, + 1347=>699, 1348=>794, 1349=>659, 1350=>756, 1351=>659, 1352=>659, 1353=>659, 1354=>711, 1355=>579, 1356=>794, 1357=>659, 1358=>794, 1359=>571, 1360=>659, 1361=>659, 1362=>719, + 1363=>774, 1364=>711, 1365=>708, 1366=>571, 1369=>276, 1370=>286, 1371=>450, 1372=>450, 1373=>352, 1374=>474, 1375=>450, 1377=>876, 1378=>570, 1379=>686, 1380=>690, 1381=>570, + 1382=>627, 1383=>479, 1384=>570, 1385=>630, 1386=>627, 1387=>570, 1388=>363, 1389=>804, 1390=>576, 1391=>570, 1392=>570, 1393=>571, 1394=>631, 1395=>570, 1396=>593, 1397=>250, + 1398=>684, 1399=>464, 1400=>570, 1401=>407, 1402=>876, 1403=>464, 1404=>691, 1405=>570, 1406=>626, 1407=>876, 1408=>570, 1409=>571, 1410=>451, 1411=>876, 1412=>583, 1413=>550, + 1414=>566, 1415=>686, 1417=>303, 1418=>390, 1456=>0, 1457=>0, 1458=>0, 1459=>0, 1460=>0, 1461=>0, 1462=>0, 1463=>0, 1464=>0, 1465=>0, 1467=>0, 1468=>0, + 1469=>0, 1471=>0, 1472=>265, 1473=>0, 1474=>0, 1475=>265, 1478=>410, 1479=>0, 1488=>566, 1489=>547, 1490=>403, 1491=>534, 1492=>576, 1493=>245, 1494=>380, 1495=>576, + 1496=>583, 1497=>245, 1498=>532, 1499=>500, 1500=>539, 1501=>576, 1502=>593, 1503=>245, 1504=>397, 1505=>629, 1506=>572, 1507=>576, 1508=>543, 1509=>468, 1510=>523, 1511=>596, + 1512=>532, 1513=>727, 1514=>591, 1520=>423, 1521=>409, 1522=>423, 1548=>290, 1557=>0, 1563=>286, 1567=>478, 1569=>423, 1570=>250, 1571=>250, 1572=>435, 1573=>250, 1574=>704, + 1575=>250, 1576=>847, 1577=>471, 1578=>847, 1579=>847, 1580=>581, 1581=>581, 1582=>581, 1583=>400, 1584=>400, 1585=>435, 1586=>435, 1587=>1099, 1588=>1099, 1589=>1088, 1590=>1088, + 1591=>832, 1592=>832, 1593=>537, 1594=>537, 1600=>264, 1601=>933, 1602=>698, 1603=>742, 1604=>654, 1605=>557, 1606=>661, 1607=>471, 1608=>435, 1609=>704, 1610=>704, 1611=>0, + 1612=>0, 1613=>0, 1614=>0, 1615=>0, 1616=>0, 1617=>0, 1618=>0, 1619=>0, 1620=>0, 1621=>0, 1626=>450, 1632=>483, 1633=>483, 1634=>483, 1635=>483, 1636=>483, + 1637=>483, 1638=>483, 1639=>483, 1640=>483, 1641=>483, 1642=>483, 1643=>292, 1644=>286, 1645=>490, 1646=>847, 1647=>698, 1652=>263, 1657=>847, 1658=>847, 1659=>847, 1660=>847, + 1661=>847, 1662=>847, 1663=>847, 1664=>847, 1665=>581, 1666=>581, 1667=>581, 1668=>581, 1669=>581, 1670=>581, 1671=>581, 1681=>435, 1682=>435, 1685=>549, 1688=>435, 1697=>933, + 1700=>933, 1702=>933, 1705=>805, 1711=>805, 1717=>654, 1722=>661, 1727=>581, 1734=>435, 1740=>704, 1742=>704, 1749=>471, 1776=>483, 1777=>483, 1778=>483, 1779=>483, 1780=>483, + 1781=>483, 1782=>483, 1783=>483, 1784=>483, 1785=>483, 3647=>586, 3713=>603, 3714=>615, 3716=>619, 3719=>434, 3720=>565, 3722=>615, 3725=>619, 3732=>602, 3733=>577, 3734=>580, + 3735=>589, 3737=>593, 3738=>563, 3739=>563, 3740=>670, 3741=>690, 3742=>618, 3743=>618, 3745=>631, 3746=>619, 3747=>615, 3749=>584, 3751=>569, 3754=>633, 3755=>737, 3757=>569, + 3758=>615, 3759=>708, 3760=>569, 3761=>0, 3762=>485, 3763=>485, 3764=>0, 3765=>0, 3766=>0, 3767=>0, 3768=>0, 3769=>0, 3771=>0, 3772=>0, 3773=>597, 3776=>337, + 3777=>591, 3778=>414, 3779=>492, 3780=>442, 3782=>606, 3784=>0, 3785=>0, 3786=>0, 3787=>0, 3788=>0, 3789=>0, 3804=>925, 3805=>925, 5121=>615, 5122=>615, 5123=>615, + 5124=>615, 5125=>692, 5126=>692, 5127=>692, 5129=>692, 5130=>692, 5131=>692, 5132=>751, 5133=>751, 5134=>751, 5135=>751, 5136=>751, 5137=>751, 5138=>870, 5139=>906, 5140=>870, + 5141=>906, 5142=>692, 5143=>870, 5144=>906, 5145=>870, 5146=>906, 5147=>692, 5149=>230, 5150=>488, 5151=>381, 5152=>381, 5153=>350, 5154=>350, 5155=>354, 5156=>350, 5157=>419, + 5158=>347, 5159=>230, 5160=>350, 5161=>350, 5162=>350, 5163=>980, 5164=>817, 5165=>857, 5166=>1005, 5167=>615, 5168=>615, 5169=>615, 5170=>615, 5171=>656, 5172=>656, 5173=>656, + 5175=>656, 5176=>656, 5177=>656, 5178=>751, 5179=>751, 5180=>751, 5181=>751, 5182=>751, 5183=>751, 5184=>870, 5185=>906, 5186=>870, 5187=>906, 5188=>870, 5189=>906, 5190=>870, + 5191=>906, 5192=>656, 5193=>457, 5194=>172, 5196=>659, 5197=>659, 5198=>659, 5199=>659, 5200=>657, 5201=>657, 5202=>657, 5204=>657, 5205=>657, 5206=>657, 5207=>829, 5208=>800, + 5209=>829, 5210=>800, 5211=>829, 5212=>800, 5213=>835, 5214=>810, 5215=>835, 5216=>810, 5217=>853, 5218=>810, 5219=>853, 5220=>810, 5221=>853, 5222=>457, 5223=>790, 5224=>790, + 5225=>779, 5226=>801, 5227=>565, 5228=>565, 5229=>565, 5230=>565, 5231=>565, 5232=>625, 5233=>565, 5234=>565, 5235=>565, 5236=>773, 5237=>693, 5238=>733, 5239=>734, 5240=>733, + 5241=>734, 5242=>773, 5243=>693, 5244=>773, 5245=>693, 5246=>733, 5247=>734, 5248=>733, 5249=>734, 5250=>733, 5251=>366, 5252=>366, 5253=>675, 5254=>697, 5255=>675, 5256=>697, + 5257=>565, 5258=>565, 5259=>565, 5260=>565, 5261=>565, 5262=>565, 5263=>565, 5264=>565, 5265=>565, 5266=>773, 5267=>693, 5268=>733, 5269=>734, 5270=>733, 5271=>734, 5272=>773, + 5273=>693, 5274=>773, 5275=>693, 5276=>733, 5277=>734, 5278=>733, 5279=>734, 5280=>733, 5281=>391, 5282=>391, 5283=>549, 5284=>501, 5285=>501, 5286=>501, 5287=>549, 5288=>470, + 5289=>549, 5290=>501, 5291=>501, 5292=>674, 5293=>691, 5294=>671, 5295=>687, 5296=>671, 5297=>687, 5298=>674, 5299=>691, 5300=>674, 5301=>691, 5302=>671, 5303=>687, 5304=>671, + 5305=>687, 5306=>671, 5307=>347, 5308=>457, 5309=>347, 5312=>766, 5313=>766, 5314=>766, 5315=>740, 5316=>766, 5317=>766, 5318=>766, 5319=>766, 5320=>766, 5321=>962, 5322=>931, + 5323=>953, 5324=>766, 5325=>953, 5326=>766, 5327=>766, 5328=>540, 5329=>407, 5330=>540, 5331=>766, 5332=>766, 5333=>766, 5334=>766, 5335=>766, 5336=>766, 5337=>766, 5338=>766, + 5339=>766, 5340=>962, 5341=>931, 5342=>953, 5343=>927, 5344=>953, 5345=>927, 5346=>962, 5347=>931, 5348=>962, 5349=>931, 5350=>975, 5351=>927, 5352=>975, 5353=>927, 5354=>540, + 5356=>656, 5357=>542, 5358=>542, 5359=>542, 5360=>542, 5361=>542, 5362=>595, 5363=>542, 5364=>542, 5365=>542, 5366=>751, 5367=>678, 5368=>712, 5369=>694, 5370=>712, 5371=>694, + 5372=>751, 5373=>678, 5374=>751, 5375=>678, 5376=>712, 5377=>694, 5378=>712, 5379=>694, 5380=>712, 5381=>376, 5382=>378, 5383=>376, 5392=>641, 5393=>641, 5394=>641, 5395=>802, + 5396=>802, 5397=>802, 5398=>802, 5399=>818, 5400=>785, 5401=>818, 5402=>785, 5403=>818, 5404=>785, 5405=>1026, 5406=>989, 5407=>1026, 5408=>989, 5409=>1026, 5410=>989, 5411=>1026, + 5412=>989, 5413=>576, 5414=>564, 5415=>564, 5416=>564, 5417=>564, 5418=>564, 5419=>601, 5420=>564, 5421=>564, 5422=>564, 5423=>760, 5424=>703, 5425=>734, 5426=>736, 5427=>734, + 5428=>736, 5429=>760, 5430=>703, 5431=>760, 5432=>703, 5433=>734, 5434=>736, 5435=>734, 5436=>736, 5437=>734, 5438=>376, 5440=>350, 5441=>436, 5442=>824, 5443=>824, 5444=>824, + 5445=>824, 5446=>824, 5447=>824, 5448=>542, 5449=>542, 5450=>542, 5451=>542, 5452=>542, 5453=>542, 5454=>751, 5455=>678, 5456=>376, 5458=>656, 5459=>615, 5460=>615, 5461=>615, + 5462=>615, 5463=>653, 5464=>653, 5465=>653, 5466=>653, 5467=>831, 5468=>906, 5469=>457, 5470=>659, 5471=>659, 5472=>659, 5473=>659, 5474=>659, 5475=>659, 5476=>657, 5477=>657, + 5478=>657, 5479=>657, 5480=>853, 5481=>810, 5482=>457, 5492=>747, 5493=>747, 5494=>747, 5495=>747, 5496=>747, 5497=>747, 5498=>747, 5499=>507, 5500=>677, 5501=>436, 5502=>942, + 5503=>942, 5504=>942, 5505=>942, 5506=>942, 5507=>942, 5508=>942, 5509=>743, 5514=>747, 5515=>747, 5516=>747, 5517=>747, 5518=>1133, 5519=>1133, 5520=>1133, 5521=>901, 5522=>901, + 5523=>1133, 5524=>1133, 5525=>629, 5526=>965, 5536=>766, 5537=>766, 5538=>766, 5539=>766, 5540=>766, 5541=>766, 5542=>540, 5543=>579, 5544=>579, 5545=>579, 5546=>579, 5547=>579, + 5548=>579, 5549=>579, 5550=>376, 5551=>565, 5598=>693, 5601=>690, 5702=>421, 5703=>421, 5742=>399, 5743=>942, 5744=>1178, 5745=>1469, 5746=>1469, 5747=>1237, 5748=>1237, 5749=>1469, + 5750=>1469, 7424=>532, 7425=>646, 7426=>883, 7427=>527, 7428=>495, 7429=>544, 7430=>544, 7431=>441, 7432=>486, 7433=>250, 7434=>355, 7435=>521, 7436=>524, 7437=>679, 7438=>584, + 7439=>550, 7440=>495, 7441=>615, 7442=>615, 7443=>615, 7444=>920, 7446=>550, 7447=>550, 7448=>472, 7449=>541, 7450=>541, 7451=>524, 7452=>517, 7453=>663, 7454=>853, 7455=>574, + 7456=>532, 7457=>736, 7458=>472, 7459=>473, 7462=>524, 7463=>532, 7464=>507, 7465=>472, 7466=>531, 7467=>575, 7468=>387, 7469=>552, 7470=>389, 7472=>436, 7473=>358, 7474=>358, + 7475=>439, 7476=>426, 7477=>167, 7478=>167, 7479=>372, 7480=>315, 7481=>489, 7482=>424, 7483=>424, 7484=>446, 7485=>396, 7486=>342, 7487=>394, 7488=>346, 7489=>415, 7490=>560, + 7491=>352, 7492=>352, 7493=>365, 7494=>583, 7495=>385, 7496=>365, 7497=>375, 7498=>375, 7499=>324, 7500=>323, 7501=>365, 7502=>161, 7503=>383, 7504=>561, 7505=>368, 7506=>372, + 7507=>333, 7508=>372, 7509=>372, 7510=>385, 7511=>265, 7512=>364, 7513=>422, 7514=>561, 7515=>375, 7517=>361, 7518=>335, 7519=>347, 7520=>374, 7521=>327, 7522=>161, 7523=>233, + 7524=>364, 7525=>375, 7526=>361, 7527=>335, 7528=>347, 7529=>374, 7530=>327, 7543=>571, 7544=>426, 7547=>334, 7557=>250, 7579=>365, 7580=>333, 7581=>333, 7582=>372, 7583=>324, + 7584=>267, 7585=>209, 7586=>365, 7587=>364, 7588=>235, 7589=>224, 7590=>234, 7591=>235, 7592=>211, 7593=>224, 7594=>211, 7595=>338, 7596=>561, 7597=>561, 7598=>369, 7599=>431, + 7600=>368, 7601=>372, 7602=>372, 7603=>324, 7604=>258, 7605=>265, 7606=>457, 7607=>376, 7608=>325, 7609=>365, 7610=>375, 7611=>330, 7612=>393, 7613=>330, 7614=>353, 7615=>372, + 7620=>0, 7621=>0, 7622=>0, 7623=>0, 7624=>0, 7625=>0, 7680=>615, 7681=>551, 7682=>617, 7683=>571, 7684=>617, 7685=>571, 7686=>617, 7687=>571, 7688=>628, 7689=>495, + 7690=>693, 7691=>571, 7692=>693, 7693=>571, 7694=>693, 7695=>571, 7696=>693, 7697=>571, 7698=>693, 7699=>571, 7700=>568, 7701=>554, 7702=>568, 7703=>554, 7704=>568, 7705=>554, + 7706=>568, 7707=>554, 7708=>568, 7709=>554, 7710=>518, 7711=>316, 7712=>697, 7713=>571, 7714=>677, 7715=>570, 7716=>677, 7717=>570, 7718=>677, 7719=>570, 7720=>677, 7721=>570, + 7722=>677, 7723=>570, 7724=>265, 7725=>250, 7726=>265, 7727=>250, 7728=>590, 7729=>521, 7730=>590, 7731=>521, 7732=>590, 7733=>521, 7734=>501, 7735=>250, 7736=>501, 7737=>250, + 7738=>501, 7739=>250, 7740=>501, 7741=>250, 7742=>776, 7743=>876, 7744=>776, 7745=>876, 7746=>776, 7747=>876, 7748=>673, 7749=>570, 7750=>673, 7751=>570, 7752=>673, 7753=>570, + 7754=>673, 7755=>570, 7756=>708, 7757=>550, 7758=>708, 7759=>550, 7760=>708, 7761=>550, 7762=>708, 7763=>550, 7764=>542, 7765=>571, 7766=>542, 7767=>571, 7768=>625, 7769=>370, + 7770=>625, 7771=>370, 7772=>625, 7773=>370, 7774=>625, 7775=>370, 7776=>571, 7777=>469, 7778=>571, 7779=>469, 7780=>571, 7781=>469, 7782=>571, 7783=>469, 7784=>571, 7785=>469, + 7786=>549, 7787=>353, 7788=>549, 7789=>353, 7790=>549, 7791=>353, 7792=>549, 7793=>353, 7794=>659, 7795=>570, 7796=>659, 7797=>570, 7798=>659, 7799=>570, 7800=>659, 7801=>570, + 7802=>659, 7803=>570, 7804=>615, 7805=>532, 7806=>615, 7807=>532, 7808=>890, 7809=>736, 7810=>890, 7811=>736, 7812=>890, 7813=>736, 7814=>890, 7815=>736, 7816=>890, 7817=>736, + 7818=>616, 7819=>532, 7820=>616, 7821=>532, 7822=>549, 7823=>532, 7824=>616, 7825=>472, 7826=>616, 7827=>472, 7828=>616, 7829=>472, 7830=>570, 7831=>353, 7832=>736, 7833=>532, + 7834=>551, 7835=>316, 7840=>615, 7841=>551, 7842=>615, 7843=>551, 7844=>615, 7845=>551, 7846=>615, 7847=>551, 7848=>615, 7849=>551, 7850=>615, 7851=>551, 7852=>615, 7853=>551, + 7854=>615, 7855=>551, 7856=>615, 7857=>551, 7858=>615, 7859=>551, 7860=>615, 7861=>551, 7862=>615, 7863=>551, 7864=>568, 7865=>554, 7866=>568, 7867=>554, 7868=>568, 7869=>554, + 7870=>568, 7871=>554, 7872=>568, 7873=>554, 7874=>568, 7875=>554, 7876=>568, 7877=>554, 7878=>568, 7879=>554, 7880=>265, 7881=>250, 7882=>265, 7883=>250, 7884=>708, 7885=>550, + 7886=>708, 7887=>550, 7888=>708, 7889=>550, 7890=>708, 7891=>550, 7892=>708, 7893=>550, 7894=>708, 7895=>550, 7896=>708, 7897=>550, 7898=>822, 7899=>550, 7900=>822, 7901=>550, + 7902=>822, 7903=>550, 7904=>822, 7905=>550, 7906=>822, 7907=>550, 7908=>659, 7909=>570, 7910=>659, 7911=>570, 7912=>772, 7913=>570, 7914=>772, 7915=>570, 7916=>772, 7917=>570, + 7918=>772, 7919=>570, 7920=>772, 7921=>570, 7922=>549, 7923=>532, 7924=>549, 7925=>532, 7926=>549, 7927=>532, 7928=>549, 7929=>532, 7936=>593, 7937=>593, 7938=>593, 7939=>593, + 7940=>593, 7941=>593, 7942=>593, 7943=>593, 7944=>615, 7945=>615, 7946=>790, 7947=>790, 7948=>692, 7949=>721, 7950=>637, 7951=>668, 7952=>486, 7953=>486, 7954=>486, 7955=>486, + 7956=>486, 7957=>486, 7960=>640, 7961=>640, 7962=>869, 7963=>877, 7964=>809, 7965=>835, 7968=>570, 7969=>570, 7970=>570, 7971=>570, 7972=>570, 7973=>570, 7974=>570, 7975=>570, + 7976=>753, 7977=>751, 7978=>977, 7979=>980, 7980=>924, 7981=>945, 7982=>840, 7983=>852, 7984=>304, 7985=>304, 7986=>304, 7987=>304, 7988=>304, 7989=>304, 7990=>304, 7991=>304, + 7992=>342, 7993=>336, 7994=>571, 7995=>571, 7996=>513, 7997=>540, 7998=>440, 7999=>443, 8000=>550, 8001=>550, 8002=>550, 8003=>550, 8004=>550, 8005=>550, 8008=>724, 8009=>763, + 8010=>985, 8011=>989, 8012=>844, 8013=>873, 8016=>521, 8017=>521, 8018=>521, 8019=>521, 8020=>521, 8021=>521, 8022=>521, 8023=>521, 8025=>705, 8027=>897, 8029=>911, 8031=>808, + 8032=>753, 8033=>753, 8034=>753, 8035=>753, 8036=>753, 8037=>753, 8038=>753, 8039=>753, 8040=>722, 8041=>759, 8042=>980, 8043=>985, 8044=>851, 8045=>875, 8046=>829, 8047=>857, + 8048=>593, 8049=>593, 8050=>486, 8051=>493, 8052=>570, 8053=>589, 8054=>304, 8055=>304, 8056=>550, 8057=>550, 8058=>521, 8059=>521, 8060=>753, 8061=>753, 8064=>593, 8065=>593, + 8066=>593, 8067=>593, 8068=>593, 8069=>593, 8070=>593, 8071=>593, 8072=>615, 8073=>615, 8074=>790, 8075=>790, 8076=>692, 8077=>721, 8078=>637, 8079=>668, 8080=>570, 8081=>570, + 8082=>570, 8083=>570, 8084=>570, 8085=>570, 8086=>570, 8087=>570, 8088=>753, 8089=>751, 8090=>977, 8091=>980, 8092=>924, 8093=>945, 8094=>840, 8095=>852, 8096=>753, 8097=>753, + 8098=>753, 8099=>753, 8100=>753, 8101=>753, 8102=>753, 8103=>753, 8104=>722, 8105=>759, 8106=>980, 8107=>985, 8108=>851, 8109=>875, 8110=>829, 8111=>857, 8112=>593, 8113=>593, + 8114=>593, 8115=>593, 8116=>593, 8118=>593, 8119=>593, 8120=>615, 8121=>615, 8122=>645, 8123=>623, 8124=>615, 8125=>450, 8126=>450, 8127=>450, 8128=>450, 8129=>450, 8130=>570, + 8131=>570, 8132=>589, 8134=>570, 8135=>570, 8136=>724, 8137=>671, 8138=>837, 8139=>784, 8140=>677, 8141=>450, 8142=>450, 8143=>450, 8144=>304, 8145=>304, 8146=>304, 8147=>304, + 8150=>304, 8151=>304, 8152=>265, 8153=>265, 8154=>427, 8155=>367, 8157=>450, 8158=>450, 8159=>450, 8160=>521, 8161=>521, 8162=>521, 8163=>521, 8164=>571, 8165=>571, 8166=>521, + 8167=>521, 8168=>549, 8169=>549, 8170=>760, 8171=>742, 8172=>616, 8173=>450, 8174=>450, 8175=>450, 8178=>753, 8179=>753, 8180=>753, 8182=>753, 8183=>753, 8184=>847, 8185=>731, + 8186=>830, 8187=>743, 8188=>688, 8189=>450, 8190=>450, 8192=>450, 8193=>900, 8194=>450, 8195=>900, 8196=>296, 8197=>225, 8198=>150, 8199=>572, 8200=>286, 8201=>180, 8202=>89, + 8203=>0, 8204=>0, 8205=>0, 8206=>0, 8207=>0, 8208=>325, 8209=>325, 8210=>572, 8213=>900, 8214=>450, 8215=>450, 8219=>286, 8223=>466, 8227=>531, 8228=>301, 8229=>601, + 8231=>286, 8234=>0, 8235=>0, 8236=>0, 8237=>0, 8238=>0, 8239=>180, 8241=>1562, 8242=>204, 8243=>336, 8244=>468, 8245=>204, 8246=>336, 8247=>468, 8248=>305, 8251=>754, + 8252=>437, 8253=>478, 8254=>450, 8255=>723, 8256=>723, 8257=>225, 8258=>900, 8259=>450, 8260=>150, 8261=>351, 8262=>351, 8263=>830, 8264=>659, 8265=>659, 8266=>447, 8267=>572, + 8268=>450, 8269=>450, 8270=>450, 8271=>303, 8272=>723, 8273=>450, 8274=>404, 8275=>754, 8276=>723, 8277=>754, 8278=>527, 8279=>597, 8280=>754, 8281=>754, 8282=>286, 8283=>717, + 8284=>754, 8285=>286, 8286=>286, 8287=>200, 8288=>0, 8289=>0, 8290=>0, 8291=>0, 8298=>0, 8299=>0, 8300=>0, 8301=>0, 8302=>0, 8303=>0, 8304=>360, 8305=>161, + 8308=>360, 8309=>360, 8310=>360, 8311=>360, 8312=>360, 8313=>360, 8314=>475, 8315=>475, 8316=>475, 8317=>221, 8318=>221, 8319=>359, 8320=>360, 8321=>360, 8322=>360, 8323=>360, + 8324=>360, 8325=>360, 8326=>360, 8327=>360, 8328=>360, 8329=>360, 8330=>475, 8331=>475, 8332=>475, 8333=>221, 8334=>221, 8336=>352, 8337=>375, 8338=>372, 8339=>399, 8340=>375, + 8352=>789, 8353=>572, 8354=>572, 8355=>572, 8356=>572, 8357=>876, 8358=>673, 8359=>1145, 8360=>966, 8361=>890, 8362=>706, 8363=>572, 8365=>572, 8366=>572, 8367=>1145, 8368=>572, + 8369=>572, 8370=>572, 8371=>572, 8372=>696, 8373=>577, 8400=>0, 8401=>0, 8406=>0, 8407=>0, 8448=>917, 8449=>917, 8450=>628, 8451=>1011, 8452=>578, 8453=>917, 8454=>960, + 8455=>553, 8456=>628, 8457=>856, 8459=>889, 8460=>679, 8461=>765, 8462=>570, 8463=>570, 8464=>422, 8465=>627, 8466=>648, 8467=>372, 8468=>736, 8469=>721, 8470=>936, 8471=>900, + 8472=>627, 8473=>631, 8474=>708, 8475=>718, 8476=>732, 8477=>713, 8478=>807, 8479=>615, 8480=>917, 8481=>967, 8483=>615, 8484=>670, 8485=>520, 8486=>688, 8487=>688, 8488=>554, + 8489=>304, 8490=>590, 8491=>615, 8492=>708, 8493=>633, 8494=>769, 8495=>532, 8496=>545, 8497=>708, 8498=>518, 8499=>962, 8500=>416, 8501=>670, 8502=>606, 8503=>422, 8504=>583, + 8505=>342, 8506=>833, 8507=>1074, 8508=>632, 8509=>655, 8510=>589, 8511=>764, 8512=>729, 8513=>697, 8514=>501, 8515=>501, 8516=>549, 8517=>737, 8518=>637, 8519=>554, 8520=>316, + 8521=>316, 8523=>702, 8526=>474, 8531=>872, 8532=>872, 8533=>872, 8534=>872, 8535=>872, 8536=>872, 8537=>872, 8538=>872, 8539=>872, 8540=>872, 8541=>872, 8542=>872, 8543=>511, + 8544=>265, 8545=>443, 8546=>620, 8547=>831, 8548=>615, 8549=>830, 8550=>1007, 8551=>1185, 8552=>826, 8553=>616, 8554=>839, 8555=>1018, 8556=>501, 8557=>628, 8558=>693, 8559=>776, + 8560=>250, 8561=>412, 8562=>573, 8563=>730, 8564=>532, 8565=>729, 8566=>892, 8567=>1053, 8568=>737, 8569=>532, 8570=>740, 8571=>901, 8572=>250, 8573=>495, 8574=>571, 8575=>876, + 8576=>1121, 8577=>693, 8578=>1121, 8579=>633, 8580=>494, 8592=>754, 8593=>754, 8594=>754, 8595=>754, 8596=>754, 8597=>754, 8598=>754, 8599=>754, 8600=>754, 8601=>754, 8602=>754, + 8603=>754, 8604=>754, 8605=>754, 8606=>754, 8607=>754, 8608=>754, 8609=>754, 8610=>754, 8611=>754, 8612=>754, 8613=>754, 8614=>754, 8615=>754, 8616=>754, 8617=>754, 8618=>754, + 8619=>754, 8620=>754, 8621=>754, 8622=>754, 8623=>754, 8624=>754, 8625=>754, 8626=>754, 8627=>754, 8628=>754, 8629=>754, 8630=>754, 8631=>754, 8632=>754, 8633=>754, 8634=>754, + 8635=>754, 8636=>754, 8637=>754, 8638=>754, 8639=>754, 8640=>754, 8641=>754, 8642=>754, 8643=>754, 8644=>754, 8645=>754, 8646=>754, 8647=>754, 8648=>754, 8649=>754, 8650=>754, + 8651=>754, 8652=>754, 8653=>754, 8654=>754, 8655=>754, 8656=>754, 8657=>754, 8658=>754, 8659=>754, 8660=>754, 8661=>754, 8662=>754, 8663=>754, 8664=>754, 8665=>754, 8666=>754, + 8667=>754, 8668=>754, 8669=>754, 8670=>754, 8671=>754, 8672=>754, 8673=>754, 8674=>754, 8675=>754, 8676=>754, 8677=>754, 8678=>754, 8679=>754, 8680=>754, 8681=>754, 8682=>754, + 8683=>754, 8684=>754, 8685=>754, 8686=>754, 8687=>754, 8688=>754, 8689=>754, 8690=>754, 8691=>754, 8692=>754, 8693=>754, 8694=>754, 8695=>754, 8696=>754, 8697=>754, 8698=>754, + 8699=>754, 8700=>754, 8701=>754, 8702=>754, 8703=>754, 8704=>615, 8705=>572, 8706=>465, 8707=>568, 8708=>568, 8709=>784, 8710=>602, 8711=>602, 8712=>784, 8713=>784, 8714=>646, + 8715=>784, 8716=>784, 8717=>646, 8718=>572, 8719=>681, 8720=>681, 8721=>606, 8722=>754, 8723=>754, 8724=>754, 8725=>150, 8726=>573, 8727=>754, 8728=>563, 8729=>286, 8730=>573, + 8731=>573, 8732=>573, 8733=>609, 8734=>750, 8735=>754, 8736=>807, 8737=>807, 8738=>754, 8739=>450, 8740=>450, 8741=>450, 8742=>450, 8743=>659, 8744=>659, 8745=>659, 8746=>659, + 8747=>469, 8748=>710, 8749=>951, 8750=>469, 8751=>710, 8752=>951, 8753=>469, 8754=>469, 8755=>469, 8756=>572, 8757=>572, 8758=>234, 8759=>572, 8760=>754, 8761=>754, 8762=>754, + 8763=>754, 8764=>754, 8765=>754, 8766=>754, 8767=>754, 8768=>337, 8769=>754, 8770=>754, 8771=>754, 8772=>754, 8773=>754, 8774=>754, 8775=>754, 8776=>754, 8777=>754, 8778=>754, + 8779=>754, 8780=>754, 8781=>754, 8782=>754, 8783=>754, 8784=>754, 8785=>754, 8786=>754, 8787=>754, 8788=>900, 8789=>900, 8790=>754, 8791=>754, 8792=>754, 8793=>754, 8794=>754, + 8795=>754, 8796=>754, 8797=>754, 8798=>754, 8799=>754, 8800=>754, 8801=>754, 8802=>754, 8803=>754, 8804=>754, 8805=>754, 8806=>754, 8807=>754, 8808=>754, 8809=>754, 8810=>942, + 8811=>942, 8812=>417, 8813=>754, 8814=>754, 8815=>754, 8816=>754, 8817=>754, 8818=>754, 8819=>754, 8820=>754, 8821=>754, 8822=>754, 8823=>754, 8824=>754, 8825=>754, 8826=>754, + 8827=>754, 8828=>754, 8829=>754, 8830=>754, 8831=>754, 8832=>754, 8833=>754, 8834=>754, 8835=>754, 8836=>754, 8837=>754, 8838=>754, 8839=>754, 8840=>754, 8841=>754, 8842=>754, + 8843=>754, 8844=>659, 8845=>659, 8846=>659, 8847=>754, 8848=>754, 8849=>754, 8850=>754, 8851=>649, 8852=>649, 8853=>754, 8854=>754, 8855=>754, 8856=>754, 8857=>754, 8858=>754, + 8859=>754, 8860=>754, 8861=>754, 8862=>754, 8863=>754, 8864=>754, 8865=>754, 8866=>784, 8867=>784, 8868=>784, 8869=>784, 8870=>468, 8871=>468, 8872=>784, 8873=>784, 8874=>784, + 8875=>784, 8876=>784, 8877=>784, 8878=>784, 8879=>784, 8882=>754, 8883=>754, 8884=>754, 8885=>754, 8886=>900, 8887=>900, 8888=>754, 8889=>754, 8890=>468, 8891=>659, 8892=>659, + 8893=>659, 8896=>738, 8897=>738, 8898=>738, 8899=>738, 8900=>444, 8901=>286, 8902=>563, 8904=>900, 8905=>900, 8906=>900, 8907=>900, 8908=>900, 8909=>754, 8918=>754, 8919=>754, + 8920=>1280, 8921=>1280, 8922=>754, 8923=>754, 8924=>754, 8925=>754, 8926=>754, 8927=>754, 8928=>754, 8929=>754, 8930=>754, 8931=>754, 8932=>754, 8933=>754, 8934=>754, 8935=>754, + 8936=>754, 8937=>754, 8938=>754, 8939=>754, 8940=>754, 8941=>754, 8946=>900, 8947=>784, 8948=>646, 8949=>784, 8950=>784, 8951=>646, 8952=>784, 8953=>784, 8954=>900, 8955=>784, + 8956=>646, 8957=>784, 8958=>646, 8959=>784, 8962=>571, 8966=>784, 8968=>351, 8969=>351, 8970=>351, 8971=>351, 8976=>754, 8977=>461, 8984=>900, 8985=>754, 8992=>469, 8993=>469, + 8997=>900, 9000=>1299, 9085=>681, 9115=>450, 9116=>450, 9117=>450, 9118=>450, 9119=>450, 9120=>450, 9121=>450, 9122=>450, 9123=>450, 9124=>450, 9125=>450, 9126=>450, 9127=>675, + 9128=>675, 9129=>675, 9130=>675, 9131=>675, 9132=>675, 9133=>675, 9134=>469, 9166=>754, 9167=>850, 9250=>571, 9251=>571, 9312=>807, 9313=>807, 9314=>807, 9315=>807, 9316=>807, + 9317=>807, 9318=>807, 9319=>807, 9320=>807, 9321=>807, 9600=>692, 9601=>692, 9602=>692, 9603=>692, 9604=>692, 9605=>692, 9606=>692, 9607=>692, 9608=>692, 9609=>692, 9610=>692, + 9611=>692, 9612=>692, 9613=>692, 9614=>692, 9615=>692, 9616=>692, 9617=>692, 9618=>692, 9619=>692, 9620=>692, 9621=>692, 9622=>692, 9623=>692, 9624=>692, 9625=>692, 9626=>692, + 9627=>692, 9628=>692, 9629=>692, 9630=>692, 9631=>692, 9632=>850, 9633=>850, 9634=>850, 9635=>850, 9636=>850, 9637=>850, 9638=>850, 9639=>850, 9640=>850, 9641=>850, 9642=>610, + 9643=>610, 9644=>850, 9645=>850, 9646=>495, 9647=>495, 9648=>692, 9649=>692, 9650=>692, 9651=>692, 9652=>452, 9653=>452, 9654=>692, 9655=>692, 9656=>452, 9657=>452, 9658=>692, + 9659=>692, 9660=>692, 9661=>692, 9662=>452, 9663=>452, 9664=>692, 9665=>692, 9666=>452, 9667=>452, 9668=>692, 9669=>692, 9670=>692, 9671=>692, 9672=>692, 9673=>785, 9674=>444, + 9675=>785, 9676=>785, 9677=>785, 9678=>785, 9679=>785, 9680=>785, 9681=>785, 9682=>785, 9683=>785, 9684=>785, 9685=>785, 9686=>474, 9687=>474, 9688=>712, 9689=>873, 9690=>873, + 9691=>873, 9692=>348, 9693=>348, 9694=>348, 9695=>348, 9696=>785, 9697=>785, 9698=>692, 9699=>692, 9700=>692, 9701=>692, 9702=>531, 9703=>850, 9704=>850, 9705=>850, 9706=>850, + 9707=>850, 9708=>692, 9709=>692, 9710=>692, 9711=>1007, 9712=>850, 9713=>850, 9714=>850, 9715=>850, 9716=>785, 9717=>785, 9718=>785, 9719=>785, 9720=>692, 9721=>692, 9722=>692, + 9723=>747, 9724=>747, 9725=>659, 9726=>659, 9727=>692, 9728=>807, 9729=>900, 9730=>807, 9731=>807, 9732=>807, 9733=>807, 9734=>807, 9735=>515, 9736=>806, 9737=>807, 9738=>799, + 9739=>799, 9740=>604, 9741=>911, 9742=>1121, 9743=>1125, 9744=>807, 9745=>807, 9746=>807, 9747=>479, 9748=>807, 9749=>807, 9750=>807, 9751=>807, 9752=>807, 9753=>807, 9754=>807, + 9755=>807, 9756=>807, 9757=>548, 9758=>807, 9759=>548, 9760=>807, 9761=>807, 9762=>807, 9763=>807, 9764=>602, 9765=>671, 9766=>584, 9767=>705, 9768=>490, 9769=>807, 9770=>807, + 9771=>807, 9772=>639, 9773=>807, 9774=>807, 9775=>807, 9776=>807, 9777=>807, 9778=>807, 9779=>807, 9780=>807, 9781=>807, 9782=>807, 9783=>807, 9784=>807, 9785=>807, 9786=>807, + 9787=>807, 9788=>807, 9789=>807, 9790=>807, 9791=>552, 9792=>658, 9793=>658, 9794=>807, 9795=>807, 9796=>807, 9797=>807, 9798=>807, 9799=>807, 9800=>807, 9801=>807, 9802=>807, + 9803=>807, 9804=>807, 9805=>807, 9806=>807, 9807=>807, 9808=>807, 9809=>807, 9810=>807, 9811=>807, 9812=>807, 9813=>807, 9814=>807, 9815=>807, 9816=>807, 9817=>807, 9818=>807, + 9819=>807, 9820=>807, 9821=>807, 9822=>807, 9823=>807, 9824=>807, 9825=>807, 9826=>807, 9827=>807, 9828=>807, 9829=>807, 9830=>807, 9831=>807, 9832=>807, 9833=>424, 9834=>574, + 9835=>807, 9836=>807, 9837=>424, 9838=>321, 9839=>435, 9840=>673, 9841=>689, 9842=>807, 9843=>807, 9844=>807, 9845=>807, 9846=>807, 9847=>807, 9848=>807, 9849=>807, 9850=>807, + 9851=>807, 9852=>807, 9853=>807, 9854=>807, 9855=>807, 9856=>782, 9857=>782, 9858=>782, 9859=>782, 9860=>782, 9861=>782, 9862=>807, 9863=>807, 9864=>807, 9865=>807, 9866=>807, + 9867=>807, 9868=>807, 9869=>807, 9870=>807, 9871=>807, 9872=>807, 9873=>807, 9874=>807, 9875=>807, 9876=>807, 9877=>487, 9878=>807, 9879=>807, 9880=>807, 9881=>807, 9882=>807, + 9883=>807, 9884=>807, 9888=>807, 9889=>632, 9890=>754, 9891=>754, 9892=>754, 9893=>754, 9894=>754, 9895=>754, 9896=>754, 9897=>754, 9898=>754, 9899=>754, 9900=>754, 9901=>754, + 9902=>754, 9903=>754, 9904=>759, 9905=>754, 9906=>658, 9985=>754, 9986=>754, 9987=>754, 9988=>754, 9990=>754, 9991=>754, 9992=>754, 9993=>754, 9996=>754, 9997=>754, 9998=>754, + 9999=>754, 10000=>754, 10001=>754, 10002=>754, 10003=>754, 10004=>754, 10005=>754, 10006=>754, 10007=>754, 10008=>754, 10009=>754, 10010=>754, 10011=>754, 10012=>754, 10013=>754, 10014=>754, + 10015=>754, 10016=>754, 10017=>754, 10018=>754, 10019=>754, 10020=>754, 10021=>754, 10022=>754, 10023=>754, 10025=>754, 10026=>754, 10027=>754, 10028=>754, 10029=>754, 10030=>754, 10031=>754, + 10032=>754, 10033=>754, 10034=>754, 10035=>754, 10036=>754, 10037=>754, 10038=>754, 10039=>754, 10040=>754, 10041=>754, 10042=>754, 10043=>754, 10044=>754, 10045=>754, 10046=>754, 10047=>754, + 10048=>754, 10049=>754, 10050=>754, 10051=>754, 10052=>754, 10053=>754, 10054=>754, 10055=>754, 10056=>754, 10057=>754, 10058=>754, 10059=>754, 10061=>807, 10063=>807, 10064=>807, 10065=>807, + 10066=>807, 10070=>807, 10072=>754, 10073=>754, 10074=>754, 10075=>290, 10076=>290, 10077=>484, 10078=>484, 10081=>754, 10082=>754, 10083=>754, 10084=>754, 10085=>754, 10086=>754, 10087=>754, + 10088=>754, 10089=>754, 10090=>754, 10091=>754, 10092=>754, 10093=>754, 10094=>754, 10095=>754, 10096=>754, 10097=>754, 10098=>754, 10099=>754, 10100=>754, 10101=>754, 10102=>807, 10103=>807, + 10104=>807, 10105=>807, 10106=>807, 10107=>807, 10108=>807, 10109=>807, 10110=>807, 10111=>807, 10112=>754, 10113=>754, 10114=>754, 10115=>754, 10116=>754, 10117=>754, 10118=>754, 10119=>754, + 10120=>754, 10121=>754, 10122=>754, 10123=>754, 10124=>754, 10125=>754, 10126=>754, 10127=>754, 10128=>754, 10129=>754, 10130=>754, 10131=>754, 10132=>754, 10136=>754, 10137=>754, 10138=>754, + 10139=>754, 10140=>754, 10141=>754, 10142=>754, 10143=>754, 10144=>754, 10145=>754, 10146=>754, 10147=>754, 10148=>754, 10149=>754, 10150=>754, 10151=>754, 10152=>754, 10153=>754, 10154=>754, + 10155=>754, 10156=>754, 10157=>754, 10158=>754, 10159=>754, 10161=>754, 10162=>754, 10163=>754, 10164=>754, 10165=>754, 10166=>754, 10167=>754, 10168=>754, 10169=>754, 10170=>754, 10171=>754, + 10172=>754, 10173=>754, 10174=>754, 10208=>444, 10214=>445, 10215=>445, 10216=>351, 10217=>351, 10218=>500, 10219=>500, 10224=>754, 10225=>754, 10226=>754, 10227=>754, 10228=>1042, 10229=>1290, + 10230=>1290, 10231=>1290, 10232=>1290, 10233=>1290, 10234=>1290, 10235=>1290, 10236=>1290, 10237=>1290, 10238=>1290, 10239=>1290, 10240=>659, 10241=>659, 10242=>659, 10243=>659, 10244=>659, 10245=>659, + 10246=>659, 10247=>659, 10248=>659, 10249=>659, 10250=>659, 10251=>659, 10252=>659, 10253=>659, 10254=>659, 10255=>659, 10256=>659, 10257=>659, 10258=>659, 10259=>659, 10260=>659, 10261=>659, + 10262=>659, 10263=>659, 10264=>659, 10265=>659, 10266=>659, 10267=>659, 10268=>659, 10269=>659, 10270=>659, 10271=>659, 10272=>659, 10273=>659, 10274=>659, 10275=>659, 10276=>659, 10277=>659, + 10278=>659, 10279=>659, 10280=>659, 10281=>659, 10282=>659, 10283=>659, 10284=>659, 10285=>659, 10286=>659, 10287=>659, 10288=>659, 10289=>659, 10290=>659, 10291=>659, 10292=>659, 10293=>659, + 10294=>659, 10295=>659, 10296=>659, 10297=>659, 10298=>659, 10299=>659, 10300=>659, 10301=>659, 10302=>659, 10303=>659, 10304=>659, 10305=>659, 10306=>659, 10307=>659, 10308=>659, 10309=>659, + 10310=>659, 10311=>659, 10312=>659, 10313=>659, 10314=>659, 10315=>659, 10316=>659, 10317=>659, 10318=>659, 10319=>659, 10320=>659, 10321=>659, 10322=>659, 10323=>659, 10324=>659, 10325=>659, + 10326=>659, 10327=>659, 10328=>659, 10329=>659, 10330=>659, 10331=>659, 10332=>659, 10333=>659, 10334=>659, 10335=>659, 10336=>659, 10337=>659, 10338=>659, 10339=>659, 10340=>659, 10341=>659, + 10342=>659, 10343=>659, 10344=>659, 10345=>659, 10346=>659, 10347=>659, 10348=>659, 10349=>659, 10350=>659, 10351=>659, 10352=>659, 10353=>659, 10354=>659, 10355=>659, 10356=>659, 10357=>659, + 10358=>659, 10359=>659, 10360=>659, 10361=>659, 10362=>659, 10363=>659, 10364=>659, 10365=>659, 10366=>659, 10367=>659, 10368=>659, 10369=>659, 10370=>659, 10371=>659, 10372=>659, 10373=>659, + 10374=>659, 10375=>659, 10376=>659, 10377=>659, 10378=>659, 10379=>659, 10380=>659, 10381=>659, 10382=>659, 10383=>659, 10384=>659, 10385=>659, 10386=>659, 10387=>659, 10388=>659, 10389=>659, + 10390=>659, 10391=>659, 10392=>659, 10393=>659, 10394=>659, 10395=>659, 10396=>659, 10397=>659, 10398=>659, 10399=>659, 10400=>659, 10401=>659, 10402=>659, 10403=>659, 10404=>659, 10405=>659, + 10406=>659, 10407=>659, 10408=>659, 10409=>659, 10410=>659, 10411=>659, 10412=>659, 10413=>659, 10414=>659, 10415=>659, 10416=>659, 10417=>659, 10418=>659, 10419=>659, 10420=>659, 10421=>659, + 10422=>659, 10423=>659, 10424=>659, 10425=>659, 10426=>659, 10427=>659, 10428=>659, 10429=>659, 10430=>659, 10431=>659, 10432=>659, 10433=>659, 10434=>659, 10435=>659, 10436=>659, 10437=>659, + 10438=>659, 10439=>659, 10440=>659, 10441=>659, 10442=>659, 10443=>659, 10444=>659, 10445=>659, 10446=>659, 10447=>659, 10448=>659, 10449=>659, 10450=>659, 10451=>659, 10452=>659, 10453=>659, + 10454=>659, 10455=>659, 10456=>659, 10457=>659, 10458=>659, 10459=>659, 10460=>659, 10461=>659, 10462=>659, 10463=>659, 10464=>659, 10465=>659, 10466=>659, 10467=>659, 10468=>659, 10469=>659, + 10470=>659, 10471=>659, 10472=>659, 10473=>659, 10474=>659, 10475=>659, 10476=>659, 10477=>659, 10478=>659, 10479=>659, 10480=>659, 10481=>659, 10482=>659, 10483=>659, 10484=>659, 10485=>659, + 10486=>659, 10487=>659, 10488=>659, 10489=>659, 10490=>659, 10491=>659, 10492=>659, 10493=>659, 10494=>659, 10495=>659, 10502=>754, 10503=>754, 10506=>754, 10507=>754, 10560=>615, 10561=>615, + 10702=>754, 10703=>900, 10704=>900, 10705=>900, 10706=>900, 10707=>900, 10708=>900, 10709=>900, 10731=>444, 10752=>900, 10753=>900, 10754=>900, 10764=>1192, 10765=>469, 10766=>469, 10767=>469, + 10768=>469, 10769=>469, 10770=>469, 10771=>469, 10772=>469, 10773=>469, 10774=>469, 10775=>469, 10776=>469, 10777=>469, 10778=>469, 10779=>469, 10780=>469, 10877=>754, 10878=>754, 10879=>754, + 10880=>754, 10881=>754, 10882=>754, 10883=>754, 10884=>754, 10885=>754, 10886=>754, 10887=>754, 10888=>754, 10889=>754, 10890=>754, 10891=>754, 10892=>754, 10893=>754, 10894=>754, 10895=>754, + 10896=>754, 10897=>754, 10898=>754, 10899=>754, 10900=>754, 10901=>754, 10902=>754, 10903=>754, 10904=>754, 10905=>754, 10906=>754, 10907=>754, 10908=>754, 10909=>754, 10910=>754, 10911=>754, + 10912=>754, 10926=>754, 10927=>754, 10928=>754, 10929=>754, 10930=>754, 10931=>754, 10932=>754, 10933=>754, 10934=>754, 10935=>754, 10936=>754, 10937=>754, 10938=>754, 11001=>754, 11002=>754, + 11008=>754, 11009=>754, 11010=>754, 11011=>754, 11012=>754, 11013=>754, 11014=>754, 11015=>754, 11016=>754, 11017=>754, 11018=>754, 11019=>754, 11020=>754, 11021=>754, 11022=>752, 11023=>752, + 11024=>752, 11025=>752, 11026=>850, 11027=>850, 11028=>850, 11029=>850, 11030=>692, 11031=>692, 11032=>692, 11033=>692, 11034=>850, 11040=>782, 11041=>786, 11042=>786, 11043=>786, 11360=>501, + 11361=>250, 11362=>501, 11363=>542, 11364=>625, 11365=>551, 11366=>353, 11367=>677, 11368=>570, 11369=>590, 11370=>521, 11371=>616, 11372=>472, 11380=>532, 11381=>589, 11382=>511, 11383=>593, + 61440=>879, 61441=>879, 61960=>703, 62047=>532, 63173=>550, 64256=>620, 64257=>567, 64258=>567, 64259=>870, 64260=>870, 64261=>617, 64262=>774, 64275=>1081, 64276=>1081, 64277=>1076, 64278=>1067, + 64279=>1376, 64285=>266, 64287=>444, 64288=>572, 64297=>754, 64298=>719, 64299=>719, 64300=>719, 64301=>719, 64302=>597, 64303=>597, 64304=>597, 64305=>589, 64306=>408, 64307=>546, 64308=>621, + 64309=>302, 64310=>393, 64312=>615, 64313=>302, 64314=>577, 64315=>599, 64316=>571, 64318=>663, 64320=>410, 64321=>694, 64323=>586, 64324=>599, 64326=>575, 64327=>619, 64328=>577, 64329=>719, + 64330=>653, 64331=>245, 64332=>589, 64333=>599, 64334=>599, 64338=>847, 64339=>883, 64340=>250, 64341=>271, 64342=>847, 64343=>883, 64344=>250, 64345=>271, 64346=>847, 64347=>883, 64348=>250, + 64349=>271, 64350=>847, 64351=>883, 64352=>250, 64353=>271, 64354=>847, 64355=>883, 64356=>250, 64357=>271, 64358=>847, 64359=>883, 64360=>250, 64361=>271, 64362=>933, 64363=>932, 64364=>430, + 64365=>455, 64366=>933, 64367=>932, 64368=>430, 64369=>455, 64370=>581, 64371=>581, 64372=>556, 64373=>581, 64374=>581, 64375=>581, 64376=>556, 64377=>581, 64378=>581, 64379=>581, 64380=>556, + 64381=>581, 64382=>581, 64383=>581, 64384=>556, 64385=>581, 64394=>435, 64395=>497, 64396=>435, 64397=>497, 64398=>805, 64399=>805, 64400=>428, 64401=>497, 64402=>805, 64403=>805, 64404=>428, + 64405=>497, 64414=>661, 64415=>685, 64473=>435, 64474=>465, 64488=>250, 64489=>271, 64508=>704, 64509=>750, 64510=>250, 64511=>271, 65024=>0, 65025=>0, 65026=>0, 65027=>0, 65028=>0, + 65029=>0, 65030=>0, 65031=>0, 65032=>0, 65033=>0, 65034=>0, 65035=>0, 65036=>0, 65037=>0, 65038=>0, 65039=>0, 65136=>264, 65137=>264, 65138=>264, 65139=>235, 65140=>264, + 65142=>264, 65143=>264, 65144=>264, 65145=>264, 65146=>264, 65147=>264, 65148=>264, 65149=>264, 65150=>264, 65151=>264, 65152=>423, 65153=>250, 65154=>274, 65155=>250, 65156=>274, 65157=>435, + 65158=>465, 65159=>250, 65160=>274, 65161=>704, 65162=>750, 65163=>250, 65164=>271, 65165=>250, 65166=>274, 65167=>847, 65168=>883, 65169=>250, 65170=>271, 65171=>471, 65172=>482, 65173=>847, + 65174=>883, 65175=>250, 65176=>271, 65177=>847, 65178=>883, 65179=>250, 65180=>271, 65181=>581, 65182=>581, 65183=>556, 65184=>581, 65185=>581, 65186=>581, 65187=>556, 65188=>581, 65189=>581, + 65190=>581, 65191=>556, 65192=>581, 65193=>400, 65194=>472, 65195=>400, 65196=>472, 65197=>435, 65198=>497, 65199=>435, 65200=>497, 65201=>1099, 65202=>1147, 65203=>754, 65204=>803, 65205=>1099, + 65206=>1147, 65207=>754, 65208=>803, 65209=>1088, 65210=>1103, 65211=>764, 65212=>780, 65213=>1088, 65214=>1103, 65215=>764, 65216=>780, 65217=>832, 65218=>854, 65219=>716, 65220=>738, 65221=>832, + 65222=>854, 65223=>716, 65224=>738, 65225=>537, 65226=>479, 65227=>537, 65228=>434, 65229=>537, 65230=>479, 65231=>470, 65232=>434, 65233=>933, 65234=>932, 65235=>430, 65236=>455, 65237=>698, + 65238=>750, 65239=>430, 65240=>455, 65241=>742, 65242=>758, 65243=>428, 65244=>497, 65245=>654, 65246=>681, 65247=>274, 65248=>298, 65249=>557, 65250=>599, 65251=>482, 65252=>520, 65253=>661, + 65254=>685, 65255=>250, 65256=>271, 65257=>471, 65258=>482, 65259=>475, 65260=>415, 65261=>435, 65262=>465, 65263=>704, 65264=>750, 65265=>704, 65266=>750, 65267=>250, 65268=>271, 65269=>513, + 65270=>537, 65271=>513, 65272=>537, 65273=>513, 65274=>537, 65275=>513, 65276=>537, 65279=>0, 65533=>923}; + font[:enc]=''; + font[:diff]=''; + font[:file]='DejaVuSansCondensed.z'; + font[:ctg]='DejaVuSansCondensed.ctg.z'; + font[:originalsize]=463772; +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSansCondensed.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSansCondensed.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSansCondensedb.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/DejaVuSansCondensedb.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,287 @@ +TCPDFFontDescriptor.define('DejaVuSansCondensedb') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='DejaVuSansCondensed-Bold'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>32,'FontBBox'=>'[-962 -388 1777 1123]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>540}; + font[:up]=-42; + font[:ut]=44; + font[:cw]={ + 0=>540, 32=>313, 33=>410, 34=>469, 35=>754, 36=>626, 37=>901, 38=>785, 39=>275, 40=>411, 41=>411, 42=>470, 43=>754, 44=>342, 45=>374, 46=>342, + 47=>329, 48=>626, 49=>626, 50=>626, 51=>626, 52=>626, 53=>626, 54=>626, 55=>626, 56=>626, 57=>626, 58=>360, 59=>360, 60=>754, 61=>754, 62=>754, + 63=>522, 64=>900, 65=>696, 66=>686, 67=>660, 68=>747, 69=>615, 70=>615, 71=>738, 72=>753, 73=>334, 74=>334, 75=>697, 76=>573, 77=>896, 78=>753, + 79=>765, 80=>659, 81=>765, 82=>693, 83=>648, 84=>614, 85=>730, 86=>696, 87=>993, 88=>694, 89=>651, 90=>652, 91=>411, 92=>329, 93=>411, 94=>754, + 95=>450, 96=>450, 97=>607, 98=>644, 99=>533, 100=>644, 101=>610, 102=>391, 103=>644, 104=>641, 105=>308, 106=>308, 107=>598, 108=>308, 109=>938, 110=>641, + 111=>618, 112=>644, 113=>644, 114=>444, 115=>536, 116=>430, 117=>641, 118=>586, 119=>831, 120=>580, 121=>586, 122=>523, 123=>641, 124=>329, 125=>641, 126=>754, + 8364=>626, 1027=>573, 8218=>342, 402=>391, 8222=>591, 8230=>900, 8224=>450, 8225=>450, 710=>450, 8240=>1296, 352=>648, 8249=>371, 338=>1050, 1036=>735, 381=>652, 1039=>753, + 8216=>342, 8217=>342, 8220=>591, 8221=>591, 8226=>575, 8211=>450, 8212=>900, 732=>450, 8482=>900, 353=>536, 8250=>371, 339=>984, 1116=>611, 382=>523, 376=>651, 160=>313, + 161=>410, 162=>626, 163=>626, 164=>572, 165=>626, 166=>329, 167=>450, 168=>450, 169=>900, 170=>507, 171=>581, 172=>754, 173=>374, 174=>900, 175=>450, 176=>450, + 177=>754, 178=>394, 179=>394, 180=>450, 181=>662, 182=>572, 183=>342, 184=>450, 185=>394, 186=>507, 187=>581, 188=>932, 189=>932, 190=>932, 191=>522, 192=>696, + 193=>696, 194=>696, 195=>696, 196=>696, 197=>696, 198=>976, 199=>660, 200=>615, 201=>615, 202=>615, 203=>615, 204=>334, 205=>334, 206=>334, 207=>334, 208=>754, + 209=>753, 210=>765, 211=>765, 212=>765, 213=>765, 214=>765, 215=>754, 216=>765, 217=>730, 218=>730, 219=>730, 220=>730, 221=>651, 222=>664, 223=>647, 224=>607, + 225=>607, 226=>607, 227=>607, 228=>607, 229=>607, 230=>943, 231=>533, 232=>610, 233=>610, 234=>610, 235=>610, 236=>308, 237=>308, 238=>308, 239=>308, 240=>618, + 241=>641, 242=>618, 243=>618, 244=>618, 245=>618, 246=>618, 247=>754, 248=>618, 249=>641, 250=>641, 251=>641, 252=>641, 253=>586, 254=>644, 255=>586, 256=>696, + 257=>607, 258=>696, 259=>607, 260=>696, 261=>607, 262=>660, 263=>533, 264=>660, 265=>533, 266=>660, 267=>533, 268=>660, 269=>533, 270=>747, 271=>644, 272=>754, + 273=>644, 274=>615, 275=>610, 276=>615, 277=>610, 278=>615, 279=>610, 280=>615, 281=>610, 282=>615, 283=>610, 284=>738, 285=>644, 286=>738, 287=>644, 288=>738, + 289=>644, 290=>738, 291=>644, 292=>753, 293=>641, 294=>876, 295=>711, 296=>334, 297=>308, 298=>334, 299=>308, 300=>334, 301=>308, 302=>334, 303=>308, 304=>334, + 305=>308, 306=>669, 307=>617, 308=>334, 309=>308, 310=>697, 311=>598, 312=>598, 313=>573, 314=>308, 315=>573, 316=>308, 317=>573, 318=>431, 319=>573, 320=>501, + 321=>578, 322=>334, 323=>753, 324=>641, 325=>753, 326=>641, 327=>753, 328=>641, 329=>884, 330=>753, 331=>641, 332=>765, 333=>618, 334=>765, 335=>618, 336=>765, + 337=>618, 340=>693, 341=>444, 342=>693, 343=>444, 344=>693, 345=>444, 346=>648, 347=>536, 348=>648, 349=>536, 350=>648, 351=>536, 354=>614, 355=>430, 356=>614, + 357=>430, 358=>614, 359=>430, 360=>730, 361=>641, 362=>730, 363=>641, 364=>730, 365=>641, 366=>730, 367=>641, 368=>730, 369=>641, 370=>730, 371=>641, 372=>993, + 373=>831, 374=>651, 375=>586, 377=>652, 378=>523, 379=>652, 380=>523, 383=>391, 384=>644, 385=>729, 386=>686, 387=>644, 388=>686, 389=>644, 390=>660, 391=>660, + 392=>533, 393=>754, 394=>791, 395=>681, 396=>644, 397=>619, 398=>615, 399=>764, 400=>626, 401=>615, 403=>738, 404=>713, 405=>940, 406=>392, 407=>350, 408=>697, + 409=>598, 410=>324, 411=>532, 412=>938, 413=>753, 414=>641, 415=>765, 416=>786, 417=>618, 418=>1002, 419=>866, 420=>703, 421=>644, 422=>693, 423=>648, 424=>536, + 425=>615, 426=>497, 427=>430, 428=>636, 429=>430, 430=>614, 431=>751, 432=>641, 433=>692, 434=>732, 435=>717, 436=>700, 437=>652, 438=>523, 439=>695, 440=>695, + 441=>576, 442=>523, 443=>626, 444=>695, 445=>576, 446=>515, 447=>644, 448=>334, 449=>593, 450=>489, 451=>334, 452=>1399, 453=>1271, 454=>1168, 455=>908, 456=>882, + 457=>617, 458=>1088, 459=>1062, 460=>949, 461=>696, 462=>607, 463=>334, 464=>308, 465=>765, 466=>618, 467=>730, 468=>641, 469=>730, 470=>641, 471=>730, 472=>641, + 473=>730, 474=>641, 475=>730, 476=>641, 477=>610, 478=>696, 479=>607, 480=>696, 481=>607, 482=>976, 483=>943, 484=>738, 485=>644, 486=>738, 487=>644, 488=>697, + 489=>598, 490=>765, 491=>618, 492=>765, 493=>618, 494=>695, 495=>523, 496=>308, 497=>1399, 498=>1271, 499=>1168, 500=>738, 501=>644, 502=>1160, 503=>708, 504=>753, + 505=>641, 506=>696, 507=>607, 508=>976, 509=>943, 510=>765, 511=>618, 512=>696, 513=>607, 514=>696, 515=>607, 516=>615, 517=>610, 518=>615, 519=>610, 520=>334, + 521=>308, 522=>334, 523=>308, 524=>765, 525=>618, 526=>765, 527=>618, 528=>693, 529=>444, 530=>693, 531=>444, 532=>730, 533=>641, 534=>730, 535=>641, 536=>648, + 537=>536, 538=>614, 539=>430, 540=>621, 541=>546, 542=>753, 543=>641, 544=>753, 545=>778, 546=>728, 547=>593, 548=>652, 549=>523, 550=>696, 551=>607, 552=>615, + 553=>610, 554=>765, 555=>618, 556=>765, 557=>618, 558=>765, 559=>618, 560=>765, 561=>618, 562=>651, 563=>586, 564=>442, 565=>780, 566=>460, 567=>308, 568=>979, + 569=>979, 570=>696, 571=>660, 572=>533, 573=>573, 574=>614, 575=>536, 576=>523, 577=>703, 578=>553, 579=>686, 580=>730, 581=>696, 582=>615, 583=>610, 584=>334, + 585=>308, 586=>774, 587=>712, 588=>693, 589=>444, 590=>651, 591=>586, 592=>607, 593=>644, 594=>644, 595=>644, 596=>533, 597=>533, 598=>645, 599=>712, 600=>610, + 601=>610, 602=>788, 603=>501, 604=>490, 605=>733, 606=>658, 607=>308, 608=>712, 609=>644, 610=>564, 611=>661, 612=>571, 613=>641, 614=>641, 615=>641, 616=>491, + 617=>396, 618=>491, 619=>502, 620=>624, 621=>308, 622=>757, 623=>938, 624=>938, 625=>938, 626=>641, 627=>713, 628=>578, 629=>618, 630=>817, 631=>613, 632=>716, + 633=>484, 634=>484, 635=>584, 636=>444, 637=>444, 638=>536, 639=>536, 640=>578, 641=>578, 642=>536, 643=>374, 644=>391, 645=>544, 646=>497, 647=>430, 648=>430, + 649=>828, 650=>692, 651=>603, 652=>586, 653=>831, 654=>586, 655=>651, 656=>624, 657=>615, 658=>576, 659=>576, 660=>515, 661=>515, 662=>515, 663=>515, 664=>765, + 665=>569, 666=>658, 667=>616, 668=>622, 669=>308, 670=>659, 671=>485, 672=>712, 673=>515, 674=>515, 675=>1040, 676=>1093, 677=>1039, 678=>876, 679=>691, 680=>836, + 681=>923, 682=>712, 683=>702, 684=>532, 685=>374, 686=>609, 687=>710, 688=>410, 689=>410, 690=>197, 691=>284, 692=>284, 693=>284, 694=>369, 695=>532, 696=>375, + 697=>271, 698=>469, 699=>342, 700=>342, 701=>342, 702=>330, 703=>330, 704=>293, 705=>293, 706=>450, 707=>450, 708=>450, 709=>450, 711=>450, 712=>275, 713=>450, + 714=>450, 715=>450, 716=>275, 717=>450, 718=>450, 719=>450, 720=>303, 721=>303, 722=>330, 723=>330, 724=>450, 725=>450, 726=>450, 727=>450, 728=>450, 729=>450, + 730=>450, 731=>450, 733=>450, 734=>315, 735=>450, 736=>370, 737=>197, 738=>343, 739=>371, 740=>293, 741=>450, 742=>450, 743=>450, 744=>450, 745=>450, 748=>450, + 749=>450, 750=>450, 755=>450, 759=>450, 768=>0, 769=>0, 770=>0, 771=>0, 772=>0, 773=>0, 774=>0, 775=>0, 776=>0, 777=>0, 778=>0, 779=>0, + 780=>0, 781=>0, 782=>0, 783=>0, 784=>0, 785=>0, 786=>0, 787=>0, 788=>0, 789=>0, 790=>0, 791=>0, 792=>0, 793=>0, 794=>0, 795=>0, + 796=>0, 797=>0, 798=>0, 799=>0, 800=>0, 801=>0, 802=>0, 803=>0, 804=>0, 805=>0, 806=>0, 807=>0, 808=>0, 809=>0, 810=>0, 811=>0, + 812=>0, 813=>0, 814=>0, 815=>0, 816=>0, 817=>0, 818=>0, 819=>0, 820=>0, 821=>0, 822=>0, 823=>0, 824=>0, 825=>0, 826=>0, 827=>0, + 828=>0, 829=>0, 830=>0, 831=>0, 832=>0, 833=>0, 834=>0, 835=>0, 836=>0, 837=>0, 838=>0, 839=>0, 840=>0, 841=>0, 842=>0, 843=>0, + 844=>0, 845=>0, 846=>0, 847=>0, 849=>0, 850=>0, 851=>0, 855=>0, 856=>0, 860=>0, 861=>0, 862=>0, 863=>0, 864=>0, 865=>0, 866=>0, + 884=>271, 885=>271, 890=>450, 891=>533, 892=>495, 893=>494, 894=>303, 900=>397, 901=>450, 902=>717, 903=>342, 904=>761, 905=>908, 906=>507, 908=>801, 910=>882, + 911=>804, 912=>351, 913=>696, 914=>686, 915=>573, 916=>696, 917=>615, 918=>652, 919=>753, 920=>765, 921=>334, 922=>697, 923=>696, 924=>896, 925=>753, 926=>568, + 927=>765, 928=>753, 929=>659, 931=>615, 932=>614, 933=>651, 934=>765, 935=>694, 936=>765, 937=>765, 938=>334, 939=>651, 940=>618, 941=>501, 942=>641, 943=>351, + 944=>607, 945=>618, 946=>644, 947=>613, 948=>618, 949=>501, 950=>532, 951=>641, 952=>618, 953=>351, 954=>639, 955=>569, 956=>662, 957=>613, 958=>532, 959=>618, + 960=>712, 961=>644, 962=>533, 963=>701, 964=>574, 965=>607, 966=>704, 967=>580, 968=>714, 969=>782, 970=>351, 971=>607, 972=>618, 973=>607, 974=>782, 976=>585, + 977=>594, 978=>671, 979=>883, 980=>671, 981=>716, 982=>782, 983=>669, 984=>765, 985=>618, 986=>660, 987=>533, 988=>615, 989=>444, 990=>632, 991=>593, 992=>827, + 993=>564, 994=>983, 995=>753, 996=>749, 997=>644, 998=>835, 999=>669, 1000=>660, 1001=>585, 1002=>709, 1003=>604, 1004=>677, 1005=>644, 1006=>614, 1007=>531, 1008=>669, + 1009=>644, 1010=>533, 1011=>308, 1012=>765, 1013=>580, 1014=>580, 1015=>664, 1016=>644, 1017=>660, 1018=>896, 1019=>659, 1020=>644, 1021=>628, 1022=>660, 1023=>628, 1024=>615, + 1025=>615, 1026=>791, 1028=>660, 1029=>648, 1030=>334, 1031=>334, 1032=>334, 1033=>1039, 1034=>1017, 1035=>791, 1037=>753, 1038=>694, 1040=>696, 1041=>686, 1042=>686, 1043=>573, + 1044=>801, 1045=>615, 1046=>1102, 1047=>639, 1048=>753, 1049=>753, 1050=>735, 1051=>747, 1052=>896, 1053=>753, 1054=>765, 1055=>753, 1056=>659, 1057=>660, 1058=>614, 1059=>694, + 1060=>892, 1061=>694, 1062=>835, 1063=>727, 1064=>1112, 1065=>1193, 1066=>845, 1067=>932, 1068=>686, 1069=>660, 1070=>1056, 1071=>693, 1072=>607, 1073=>628, 1074=>569, 1075=>470, + 1076=>727, 1077=>610, 1078=>896, 1079=>523, 1080=>630, 1081=>630, 1082=>611, 1083=>659, 1084=>735, 1085=>622, 1086=>618, 1087=>622, 1088=>644, 1089=>533, 1090=>521, 1091=>586, + 1092=>893, 1093=>580, 1094=>667, 1095=>618, 1096=>956, 1097=>995, 1098=>676, 1099=>813, 1100=>569, 1101=>533, 1102=>875, 1103=>578, 1104=>610, 1105=>610, 1106=>642, 1107=>470, + 1108=>533, 1109=>536, 1110=>308, 1111=>308, 1112=>308, 1113=>892, 1114=>860, 1115=>661, 1117=>630, 1118=>586, 1119=>622, 1120=>983, 1121=>782, 1122=>756, 1123=>662, 1124=>911, + 1125=>755, 1126=>893, 1127=>749, 1128=>1222, 1129=>1009, 1130=>765, 1131=>618, 1132=>1112, 1133=>906, 1134=>626, 1135=>501, 1136=>967, 1137=>955, 1138=>765, 1139=>601, 1140=>765, + 1141=>625, 1142=>765, 1143=>625, 1144=>1033, 1145=>939, 1146=>967, 1147=>776, 1148=>1265, 1149=>1055, 1150=>983, 1151=>782, 1152=>660, 1153=>533, 1154=>587, 1155=>0, 1156=>0, + 1157=>0, 1158=>0, 1160=>376, 1161=>376, 1162=>861, 1163=>726, 1164=>686, 1165=>550, 1166=>659, 1167=>644, 1168=>573, 1169=>470, 1170=>599, 1171=>488, 1172=>727, 1173=>602, + 1174=>1102, 1175=>896, 1176=>639, 1177=>523, 1178=>697, 1179=>611, 1180=>735, 1181=>611, 1182=>735, 1183=>611, 1184=>914, 1185=>743, 1186=>860, 1187=>727, 1188=>992, 1189=>787, + 1190=>1146, 1191=>915, 1192=>787, 1193=>639, 1194=>660, 1195=>533, 1196=>614, 1197=>521, 1198=>651, 1199=>586, 1200=>651, 1201=>586, 1202=>694, 1203=>580, 1204=>1001, 1205=>900, + 1206=>727, 1207=>618, 1208=>727, 1209=>618, 1210=>727, 1211=>641, 1212=>923, 1213=>729, 1214=>923, 1215=>729, 1216=>334, 1217=>1102, 1218=>896, 1219=>697, 1220=>567, 1221=>855, + 1222=>725, 1223=>753, 1224=>622, 1225=>861, 1226=>726, 1227=>727, 1228=>618, 1229=>1003, 1230=>839, 1231=>308, 1232=>696, 1233=>607, 1234=>696, 1235=>607, 1236=>976, 1237=>943, + 1238=>615, 1239=>610, 1240=>764, 1241=>610, 1242=>764, 1243=>610, 1244=>1102, 1245=>896, 1246=>639, 1247=>523, 1248=>695, 1249=>576, 1250=>753, 1251=>630, 1252=>753, 1253=>630, + 1254=>765, 1255=>618, 1256=>765, 1257=>618, 1258=>765, 1259=>618, 1260=>660, 1261=>533, 1262=>694, 1263=>586, 1264=>694, 1265=>586, 1266=>694, 1267=>586, 1268=>727, 1269=>618, + 1270=>573, 1271=>470, 1272=>932, 1273=>813, 1274=>599, 1275=>488, 1276=>694, 1277=>580, 1278=>694, 1279=>580, 1280=>686, 1281=>547, 1282=>1043, 1283=>804, 1284=>1007, 1285=>828, + 1286=>745, 1287=>624, 1288=>1117, 1289=>915, 1290=>1123, 1291=>912, 1292=>755, 1293=>574, 1294=>844, 1295=>722, 1296=>626, 1297=>501, 1298=>747, 1299=>659, 1329=>886, 1330=>730, + 1331=>886, 1332=>886, 1333=>730, 1334=>699, 1335=>730, 1336=>730, 1337=>877, 1338=>886, 1339=>730, 1340=>639, 1341=>970, 1342=>1022, 1343=>730, 1344=>639, 1345=>681, 1346=>886, + 1347=>789, 1348=>886, 1349=>714, 1350=>886, 1351=>730, 1352=>730, 1353=>730, 1354=>862, 1355=>699, 1356=>886, 1357=>730, 1358=>886, 1359=>648, 1360=>730, 1361=>714, 1362=>805, + 1363=>765, 1364=>842, 1365=>765, 1366=>648, 1369=>330, 1370=>342, 1371=>495, 1372=>495, 1373=>342, 1374=>491, 1375=>468, 1377=>938, 1378=>641, 1379=>779, 1380=>781, 1381=>641, + 1382=>735, 1383=>588, 1384=>641, 1385=>729, 1386=>735, 1387=>641, 1388=>448, 1389=>916, 1390=>644, 1391=>641, 1392=>641, 1393=>644, 1394=>737, 1395=>641, 1396=>676, 1397=>308, + 1398=>794, 1399=>502, 1400=>641, 1401=>502, 1402=>938, 1403=>502, 1404=>777, 1405=>641, 1406=>732, 1407=>938, 1408=>641, 1409=>644, 1410=>514, 1411=>938, 1412=>700, 1413=>618, + 1414=>648, 1415=>776, 1417=>360, 1418=>438, 1456=>0, 1457=>0, 1458=>0, 1459=>0, 1460=>0, 1461=>0, 1462=>0, 1463=>0, 1464=>0, 1465=>0, 1467=>0, 1468=>0, + 1469=>0, 1471=>0, 1472=>334, 1473=>0, 1474=>0, 1475=>334, 1478=>479, 1479=>0, 1488=>676, 1489=>658, 1490=>483, 1491=>615, 1492=>700, 1493=>334, 1494=>468, 1495=>700, + 1496=>692, 1497=>334, 1498=>700, 1499=>675, 1500=>646, 1501=>700, 1502=>771, 1503=>334, 1504=>479, 1505=>770, 1506=>647, 1507=>721, 1508=>699, 1509=>565, 1510=>676, 1511=>723, + 1512=>700, 1513=>867, 1514=>740, 1520=>623, 1521=>623, 1522=>623, 1548=>342, 1557=>0, 1563=>360, 1567=>522, 1569=>460, 1570=>308, 1571=>308, 1572=>559, 1573=>308, 1574=>825, + 1575=>308, 1576=>904, 1577=>531, 1578=>904, 1579=>904, 1580=>648, 1581=>648, 1582=>648, 1583=>461, 1584=>461, 1585=>518, 1586=>518, 1587=>1242, 1588=>1242, 1589=>1210, 1590=>1210, + 1591=>935, 1592=>935, 1593=>615, 1594=>615, 1600=>308, 1601=>1045, 1602=>804, 1603=>825, 1604=>781, 1605=>659, 1606=>768, 1607=>531, 1608=>559, 1609=>825, 1610=>825, 1611=>0, + 1612=>0, 1613=>0, 1614=>0, 1615=>0, 1616=>0, 1617=>0, 1618=>0, 1619=>0, 1620=>0, 1621=>0, 1626=>450, 1632=>549, 1633=>549, 1634=>549, 1635=>549, 1636=>549, + 1637=>549, 1638=>549, 1639=>549, 1640=>549, 1641=>549, 1642=>549, 1643=>336, 1644=>342, 1645=>490, 1646=>904, 1647=>804, 1652=>263, 1657=>904, 1658=>904, 1659=>904, 1660=>904, + 1661=>904, 1662=>904, 1663=>904, 1664=>904, 1665=>648, 1666=>648, 1667=>648, 1668=>648, 1669=>648, 1670=>648, 1671=>648, 1681=>518, 1682=>518, 1685=>613, 1688=>518, 1697=>1045, + 1700=>1045, 1702=>1045, 1705=>921, 1711=>921, 1717=>781, 1722=>768, 1727=>648, 1734=>559, 1740=>825, 1742=>825, 1749=>531, 1776=>549, 1777=>549, 1778=>549, 1779=>549, 1780=>549, + 1781=>549, 1782=>549, 1783=>549, 1784=>549, 1785=>549, 3647=>668, 3713=>710, 3714=>673, 3716=>674, 3719=>512, 3720=>668, 3722=>669, 3725=>685, 3732=>635, 3733=>633, 3734=>672, + 3735=>737, 3737=>657, 3738=>654, 3739=>654, 3740=>830, 3741=>744, 3742=>779, 3743=>779, 3745=>752, 3746=>685, 3747=>692, 3749=>691, 3751=>642, 3754=>744, 3755=>928, 3757=>651, + 3758=>705, 3759=>840, 3760=>620, 3761=>0, 3762=>549, 3763=>549, 3764=>0, 3765=>0, 3766=>0, 3767=>0, 3768=>0, 3769=>0, 3771=>0, 3772=>0, 3773=>603, 3776=>464, + 3777=>774, 3778=>464, 3779=>584, 3780=>569, 3782=>683, 3784=>0, 3785=>0, 3786=>0, 3787=>0, 3788=>0, 3789=>0, 3804=>1227, 3805=>1227, 5121=>696, 5122=>696, 5123=>696, + 5124=>696, 5125=>814, 5126=>814, 5127=>814, 5129=>814, 5130=>814, 5131=>814, 5132=>916, 5133=>908, 5134=>916, 5135=>908, 5136=>916, 5137=>908, 5138=>1034, 5139=>1025, 5140=>1034, + 5141=>1025, 5142=>814, 5143=>1034, 5144=>1028, 5145=>1034, 5146=>1028, 5147=>814, 5149=>278, 5150=>476, 5151=>382, 5152=>382, 5153=>355, 5154=>355, 5155=>355, 5156=>355, 5157=>507, + 5158=>423, 5159=>278, 5160=>355, 5161=>355, 5162=>355, 5163=>1092, 5164=>888, 5165=>1094, 5166=>1167, 5167=>696, 5168=>696, 5169=>696, 5170=>696, 5171=>797, 5172=>797, 5173=>797, + 5175=>797, 5176=>797, 5177=>797, 5178=>916, 5179=>908, 5180=>916, 5181=>908, 5182=>916, 5183=>908, 5184=>1034, 5185=>1025, 5186=>1034, 5187=>1025, 5188=>1034, 5189=>1028, 5190=>1034, + 5191=>1028, 5192=>797, 5193=>518, 5194=>206, 5196=>730, 5197=>730, 5198=>730, 5199=>730, 5200=>734, 5201=>734, 5202=>734, 5204=>734, 5205=>734, 5206=>734, 5207=>950, 5208=>943, + 5209=>950, 5210=>943, 5211=>950, 5212=>943, 5213=>954, 5214=>949, 5215=>954, 5216=>949, 5217=>954, 5218=>946, 5219=>954, 5220=>946, 5221=>954, 5222=>493, 5223=>904, 5224=>904, + 5225=>921, 5226=>915, 5227=>668, 5228=>668, 5229=>668, 5230=>668, 5231=>668, 5232=>680, 5233=>668, 5234=>668, 5235=>668, 5236=>926, 5237=>877, 5238=>882, 5239=>877, 5240=>882, + 5241=>877, 5242=>926, 5243=>877, 5244=>926, 5245=>877, 5246=>882, 5247=>877, 5248=>882, 5249=>877, 5250=>882, 5251=>451, 5252=>451, 5253=>844, 5254=>844, 5255=>844, 5256=>844, + 5257=>668, 5258=>668, 5259=>668, 5260=>668, 5261=>668, 5262=>680, 5263=>668, 5264=>668, 5265=>668, 5266=>926, 5267=>877, 5268=>926, 5269=>877, 5270=>926, 5271=>877, 5272=>926, + 5273=>877, 5274=>926, 5275=>877, 5276=>926, 5277=>877, 5278=>926, 5279=>877, 5280=>926, 5281=>451, 5282=>451, 5283=>563, 5284=>563, 5285=>563, 5286=>563, 5287=>563, 5288=>601, + 5289=>563, 5290=>563, 5291=>563, 5292=>793, 5293=>769, 5294=>777, 5295=>786, 5296=>777, 5297=>786, 5298=>793, 5299=>786, 5300=>793, 5301=>786, 5302=>777, 5303=>786, 5304=>777, + 5305=>786, 5306=>777, 5307=>392, 5308=>493, 5309=>392, 5312=>889, 5313=>889, 5314=>889, 5315=>889, 5316=>838, 5317=>838, 5318=>838, 5319=>838, 5320=>838, 5321=>1114, 5322=>1122, + 5323=>1080, 5324=>1105, 5325=>1080, 5326=>1105, 5327=>838, 5328=>593, 5329=>447, 5330=>593, 5331=>889, 5332=>889, 5333=>889, 5334=>889, 5335=>838, 5336=>838, 5337=>838, 5338=>838, + 5339=>838, 5340=>1107, 5341=>1122, 5342=>1155, 5343=>1105, 5344=>1155, 5345=>1105, 5346=>1105, 5347=>1093, 5348=>1105, 5349=>1093, 5350=>1155, 5351=>1105, 5352=>1155, 5353=>1105, 5354=>593, + 5356=>797, 5357=>657, 5358=>657, 5359=>657, 5360=>657, 5361=>657, 5362=>680, 5363=>657, 5364=>657, 5365=>657, 5366=>897, 5367=>862, 5368=>870, 5369=>890, 5370=>870, 5371=>890, + 5372=>897, 5373=>862, 5374=>897, 5375=>862, 5376=>870, 5377=>890, 5378=>870, 5379=>890, 5380=>870, 5381=>443, 5382=>414, 5383=>443, 5392=>831, 5393=>831, 5394=>831, 5395=>1022, + 5396=>1022, 5397=>1022, 5398=>1022, 5399=>1088, 5400=>1081, 5401=>1088, 5402=>1081, 5403=>1088, 5404=>1081, 5405=>1288, 5406=>1278, 5407=>1288, 5408=>1278, 5409=>1288, 5410=>1278, 5411=>1288, + 5412=>1278, 5413=>671, 5414=>698, 5415=>698, 5416=>698, 5417=>698, 5418=>698, 5419=>698, 5420=>698, 5421=>698, 5422=>698, 5423=>902, 5424=>903, 5425=>911, 5426=>896, 5427=>911, + 5428=>896, 5429=>902, 5430=>903, 5431=>902, 5432=>903, 5433=>911, 5434=>896, 5435=>911, 5436=>896, 5437=>911, 5438=>445, 5440=>355, 5441=>458, 5442=>929, 5443=>929, 5444=>878, + 5445=>878, 5446=>878, 5447=>878, 5448=>659, 5449=>659, 5450=>659, 5451=>659, 5452=>659, 5453=>659, 5454=>902, 5455=>863, 5456=>445, 5458=>797, 5459=>696, 5460=>696, 5461=>696, + 5462=>696, 5463=>835, 5464=>835, 5465=>835, 5466=>835, 5467=>1055, 5468=>1028, 5469=>542, 5470=>730, 5471=>730, 5472=>730, 5473=>730, 5474=>730, 5475=>730, 5476=>734, 5477=>734, + 5478=>734, 5479=>734, 5480=>954, 5481=>946, 5482=>493, 5492=>879, 5493=>879, 5494=>879, 5495=>879, 5496=>879, 5497=>879, 5498=>879, 5499=>556, 5500=>753, 5501=>458, 5502=>1114, + 5503=>1114, 5504=>1114, 5505=>1114, 5506=>1114, 5507=>1114, 5508=>1114, 5509=>890, 5514=>879, 5515=>879, 5516=>879, 5517=>879, 5518=>1432, 5519=>1432, 5520=>1432, 5521=>1165, 5522=>1165, + 5523=>1432, 5524=>1432, 5525=>763, 5526=>1146, 5536=>889, 5537=>889, 5538=>838, 5539=>838, 5540=>838, 5541=>838, 5542=>593, 5543=>698, 5544=>698, 5545=>698, 5546=>698, 5547=>698, + 5548=>698, 5549=>698, 5550=>445, 5551=>668, 5598=>747, 5601=>747, 5702=>446, 5703=>446, 5742=>371, 5743=>1114, 5744=>1432, 5745=>1814, 5746=>1814, 5747=>1548, 5748=>1510, 5749=>1814, + 5750=>1814, 7424=>586, 7425=>750, 7426=>943, 7427=>547, 7428=>533, 7429=>608, 7430=>608, 7431=>502, 7432=>501, 7433=>308, 7434=>444, 7435=>598, 7436=>485, 7437=>735, 7438=>630, + 7439=>618, 7440=>533, 7441=>594, 7442=>594, 7443=>594, 7444=>984, 7446=>618, 7447=>618, 7448=>500, 7449=>578, 7450=>578, 7451=>521, 7452=>571, 7453=>663, 7454=>853, 7455=>625, + 7456=>586, 7457=>831, 7458=>523, 7459=>581, 7462=>485, 7463=>586, 7464=>622, 7465=>500, 7466=>703, 7467=>659, 7468=>438, 7469=>615, 7470=>432, 7472=>470, 7473=>387, 7474=>387, + 7475=>465, 7476=>474, 7477=>211, 7478=>211, 7479=>439, 7480=>361, 7481=>563, 7482=>474, 7483=>474, 7484=>481, 7485=>458, 7486=>415, 7487=>436, 7488=>387, 7489=>460, 7490=>625, + 7491=>412, 7492=>412, 7493=>431, 7494=>641, 7495=>431, 7496=>431, 7497=>431, 7498=>431, 7499=>347, 7500=>347, 7501=>431, 7502=>197, 7503=>438, 7504=>597, 7505=>410, 7506=>439, + 7507=>372, 7508=>439, 7509=>439, 7510=>431, 7511=>349, 7512=>410, 7513=>416, 7514=>597, 7515=>451, 7517=>405, 7518=>386, 7519=>389, 7520=>443, 7521=>365, 7522=>197, 7523=>284, + 7524=>410, 7525=>451, 7526=>405, 7527=>386, 7528=>389, 7529=>443, 7530=>365, 7543=>644, 7544=>474, 7547=>491, 7557=>462, 7579=>431, 7580=>372, 7581=>372, 7582=>439, 7583=>347, + 7584=>339, 7585=>313, 7586=>431, 7587=>410, 7588=>312, 7589=>253, 7590=>312, 7591=>312, 7592=>388, 7593=>293, 7594=>296, 7595=>333, 7596=>598, 7597=>597, 7598=>505, 7599=>505, + 7600=>403, 7601=>439, 7602=>488, 7603=>379, 7604=>356, 7605=>349, 7606=>524, 7607=>444, 7608=>359, 7609=>405, 7610=>451, 7611=>375, 7612=>471, 7613=>422, 7614=>409, 7615=>382, + 7620=>0, 7621=>0, 7622=>0, 7623=>0, 7624=>0, 7625=>0, 7680=>696, 7681=>607, 7682=>686, 7683=>644, 7684=>686, 7685=>644, 7686=>686, 7687=>644, 7688=>660, 7689=>533, + 7690=>747, 7691=>644, 7692=>747, 7693=>644, 7694=>747, 7695=>644, 7696=>747, 7697=>644, 7698=>747, 7699=>644, 7700=>615, 7701=>610, 7702=>615, 7703=>610, 7704=>615, 7705=>610, + 7706=>615, 7707=>610, 7708=>615, 7709=>610, 7710=>615, 7711=>391, 7712=>738, 7713=>644, 7714=>753, 7715=>641, 7716=>753, 7717=>641, 7718=>753, 7719=>641, 7720=>753, 7721=>641, + 7722=>753, 7723=>641, 7724=>334, 7725=>308, 7726=>334, 7727=>308, 7728=>697, 7729=>598, 7730=>697, 7731=>598, 7732=>697, 7733=>598, 7734=>573, 7735=>308, 7736=>573, 7737=>308, + 7738=>573, 7739=>308, 7740=>573, 7741=>308, 7742=>896, 7743=>938, 7744=>896, 7745=>938, 7746=>896, 7747=>938, 7748=>753, 7749=>641, 7750=>753, 7751=>641, 7752=>753, 7753=>641, + 7754=>753, 7755=>641, 7756=>765, 7757=>618, 7758=>765, 7759=>618, 7760=>765, 7761=>618, 7762=>765, 7763=>618, 7764=>659, 7765=>644, 7766=>659, 7767=>644, 7768=>693, 7769=>444, + 7770=>693, 7771=>444, 7772=>693, 7773=>444, 7774=>693, 7775=>444, 7776=>648, 7777=>536, 7778=>648, 7779=>536, 7780=>648, 7781=>536, 7782=>648, 7783=>536, 7784=>648, 7785=>536, + 7786=>614, 7787=>430, 7788=>614, 7789=>430, 7790=>614, 7791=>430, 7792=>614, 7793=>430, 7794=>730, 7795=>641, 7796=>730, 7797=>641, 7798=>730, 7799=>641, 7800=>730, 7801=>641, + 7802=>730, 7803=>641, 7804=>696, 7805=>586, 7806=>696, 7807=>586, 7808=>993, 7809=>831, 7810=>993, 7811=>831, 7812=>993, 7813=>831, 7814=>993, 7815=>831, 7816=>993, 7817=>831, + 7818=>694, 7819=>580, 7820=>694, 7821=>580, 7822=>651, 7823=>586, 7824=>652, 7825=>523, 7826=>652, 7827=>523, 7828=>652, 7829=>523, 7830=>641, 7831=>430, 7832=>831, 7833=>586, + 7834=>607, 7835=>391, 7840=>696, 7841=>607, 7842=>696, 7843=>607, 7844=>696, 7845=>607, 7846=>696, 7847=>607, 7848=>696, 7849=>607, 7850=>696, 7851=>607, 7852=>696, 7853=>607, + 7854=>696, 7855=>607, 7856=>696, 7857=>607, 7858=>696, 7859=>607, 7860=>696, 7861=>607, 7862=>696, 7863=>607, 7864=>615, 7865=>610, 7866=>615, 7867=>610, 7868=>615, 7869=>610, + 7870=>615, 7871=>610, 7872=>615, 7873=>610, 7874=>615, 7875=>610, 7876=>615, 7877=>610, 7878=>615, 7879=>610, 7880=>334, 7881=>308, 7882=>334, 7883=>308, 7884=>765, 7885=>618, + 7886=>765, 7887=>618, 7888=>765, 7889=>618, 7890=>765, 7891=>618, 7892=>765, 7893=>618, 7894=>765, 7895=>618, 7896=>765, 7897=>618, 7898=>786, 7899=>618, 7900=>786, 7901=>618, + 7902=>786, 7903=>618, 7904=>786, 7905=>618, 7906=>786, 7907=>618, 7908=>730, 7909=>641, 7910=>730, 7911=>641, 7912=>751, 7913=>641, 7914=>751, 7915=>641, 7916=>751, 7917=>641, + 7918=>751, 7919=>641, 7920=>751, 7921=>641, 7922=>651, 7923=>586, 7924=>651, 7925=>586, 7926=>651, 7927=>586, 7928=>651, 7929=>586, 7936=>618, 7937=>618, 7938=>618, 7939=>618, + 7940=>618, 7941=>618, 7942=>618, 7943=>618, 7944=>696, 7945=>696, 7946=>937, 7947=>939, 7948=>841, 7949=>866, 7950=>751, 7951=>773, 7952=>501, 7953=>501, 7954=>501, 7955=>501, + 7956=>501, 7957=>501, 7960=>712, 7961=>715, 7962=>989, 7963=>986, 7964=>920, 7965=>947, 7968=>641, 7969=>641, 7970=>641, 7971=>641, 7972=>641, 7973=>641, 7974=>641, 7975=>641, + 7976=>851, 7977=>856, 7978=>1125, 7979=>1125, 7980=>1062, 7981=>1085, 7982=>948, 7983=>956, 7984=>351, 7985=>351, 7986=>351, 7987=>351, 7988=>351, 7989=>351, 7990=>351, 7991=>351, + 7992=>435, 7993=>440, 7994=>699, 7995=>707, 7996=>641, 7997=>664, 7998=>544, 7999=>544, 8000=>618, 8001=>618, 8002=>618, 8003=>618, 8004=>618, 8005=>618, 8008=>802, 8009=>839, + 8010=>1099, 8011=>1101, 8012=>947, 8013=>974, 8016=>607, 8017=>607, 8018=>607, 8019=>607, 8020=>607, 8021=>607, 8022=>607, 8023=>607, 8025=>837, 8027=>1065, 8029=>1079, 8031=>944, + 8032=>782, 8033=>782, 8034=>782, 8035=>782, 8036=>782, 8037=>782, 8038=>782, 8039=>782, 8040=>817, 8041=>862, 8042=>1121, 8043=>1126, 8044=>968, 8045=>994, 8046=>925, 8047=>968, + 8048=>618, 8049=>618, 8050=>501, 8051=>501, 8052=>641, 8053=>641, 8054=>351, 8055=>351, 8056=>618, 8057=>618, 8058=>607, 8059=>607, 8060=>782, 8061=>782, 8064=>618, 8065=>618, + 8066=>618, 8067=>618, 8068=>618, 8069=>618, 8070=>618, 8071=>618, 8072=>696, 8073=>696, 8074=>937, 8075=>939, 8076=>841, 8077=>866, 8078=>751, 8079=>773, 8080=>641, 8081=>641, + 8082=>641, 8083=>641, 8084=>641, 8085=>641, 8086=>641, 8087=>641, 8088=>851, 8089=>856, 8090=>1125, 8091=>1125, 8092=>1062, 8093=>1085, 8094=>948, 8095=>956, 8096=>782, 8097=>782, + 8098=>782, 8099=>782, 8100=>782, 8101=>782, 8102=>782, 8103=>782, 8104=>817, 8105=>862, 8106=>1121, 8107=>1126, 8108=>968, 8109=>994, 8110=>925, 8111=>968, 8112=>618, 8113=>618, + 8114=>618, 8115=>618, 8116=>618, 8118=>618, 8119=>618, 8120=>696, 8121=>696, 8122=>789, 8123=>717, 8124=>696, 8125=>450, 8126=>450, 8127=>450, 8128=>450, 8129=>450, 8130=>641, + 8131=>641, 8132=>641, 8134=>641, 8135=>641, 8136=>836, 8137=>761, 8138=>972, 8139=>908, 8140=>753, 8141=>450, 8142=>450, 8143=>450, 8144=>351, 8145=>351, 8146=>351, 8147=>351, + 8150=>351, 8151=>351, 8152=>334, 8153=>334, 8154=>559, 8155=>507, 8157=>450, 8158=>450, 8159=>450, 8160=>607, 8161=>607, 8162=>607, 8163=>607, 8164=>644, 8165=>644, 8166=>607, + 8167=>607, 8168=>651, 8169=>651, 8170=>918, 8171=>882, 8172=>754, 8173=>450, 8174=>450, 8175=>450, 8178=>782, 8179=>782, 8180=>782, 8182=>782, 8183=>782, 8184=>958, 8185=>801, + 8186=>976, 8187=>804, 8188=>765, 8189=>450, 8190=>450, 8192=>450, 8193=>900, 8194=>450, 8195=>900, 8196=>296, 8197=>225, 8198=>150, 8199=>626, 8200=>342, 8201=>180, 8202=>89, + 8203=>0, 8204=>0, 8205=>0, 8206=>0, 8207=>0, 8208=>374, 8209=>374, 8210=>626, 8213=>900, 8214=>450, 8215=>450, 8219=>342, 8223=>591, 8227=>575, 8228=>299, 8229=>600, + 8231=>313, 8234=>0, 8235=>0, 8236=>0, 8237=>0, 8238=>0, 8239=>180, 8241=>1698, 8242=>237, 8243=>402, 8244=>567, 8245=>237, 8246=>402, 8247=>567, 8248=>659, 8251=>875, + 8252=>564, 8253=>522, 8254=>450, 8255=>745, 8256=>745, 8257=>296, 8258=>920, 8259=>450, 8260=>410, 8261=>411, 8262=>411, 8263=>927, 8264=>746, 8265=>746, 8266=>461, 8267=>572, + 8268=>450, 8269=>450, 8270=>470, 8271=>360, 8272=>745, 8273=>470, 8274=>500, 8275=>754, 8276=>745, 8277=>754, 8278=>615, 8279=>731, 8280=>754, 8281=>754, 8282=>342, 8283=>784, + 8284=>754, 8285=>342, 8286=>342, 8287=>200, 8288=>0, 8289=>0, 8290=>0, 8291=>0, 8298=>0, 8299=>0, 8300=>0, 8301=>0, 8302=>0, 8303=>0, 8304=>394, 8305=>197, + 8308=>394, 8309=>394, 8310=>394, 8311=>394, 8312=>394, 8313=>394, 8314=>475, 8315=>475, 8316=>475, 8317=>259, 8318=>259, 8319=>410, 8320=>394, 8321=>394, 8322=>394, 8323=>394, + 8324=>394, 8325=>394, 8326=>394, 8327=>394, 8328=>394, 8329=>394, 8330=>475, 8331=>475, 8332=>475, 8333=>259, 8334=>259, 8336=>412, 8337=>431, 8338=>439, 8339=>371, 8340=>431, + 8352=>836, 8353=>626, 8354=>626, 8355=>626, 8356=>626, 8357=>938, 8358=>753, 8359=>1366, 8360=>1084, 8361=>993, 8362=>813, 8363=>626, 8365=>626, 8366=>614, 8367=>1252, 8368=>626, + 8369=>626, 8370=>626, 8371=>626, 8372=>773, 8373=>626, 8400=>0, 8401=>0, 8406=>0, 8407=>0, 8448=>1007, 8449=>1053, 8450=>660, 8451=>1090, 8452=>806, 8453=>982, 8454=>1029, + 8455=>553, 8456=>628, 8457=>978, 8459=>965, 8460=>822, 8461=>765, 8462=>641, 8463=>641, 8464=>544, 8465=>624, 8466=>781, 8467=>424, 8468=>876, 8469=>753, 8470=>1083, 8471=>900, + 8472=>627, 8473=>631, 8474=>765, 8475=>789, 8476=>732, 8477=>713, 8478=>807, 8479=>639, 8480=>917, 8481=>1152, 8483=>679, 8484=>652, 8485=>520, 8486=>765, 8487=>692, 8488=>686, + 8489=>304, 8490=>697, 8491=>696, 8492=>835, 8493=>699, 8494=>769, 8495=>572, 8496=>664, 8497=>729, 8498=>615, 8499=>1074, 8500=>418, 8501=>714, 8502=>662, 8503=>453, 8504=>625, + 8505=>342, 8506=>851, 8507=>1213, 8508=>710, 8509=>663, 8510=>586, 8511=>760, 8512=>756, 8513=>697, 8514=>501, 8515=>573, 8516=>684, 8517=>747, 8518=>644, 8519=>610, 8520=>308, + 8521=>308, 8523=>785, 8526=>492, 8531=>932, 8532=>932, 8533=>932, 8534=>932, 8535=>932, 8536=>932, 8537=>932, 8538=>932, 8539=>932, 8540=>932, 8541=>932, 8542=>932, 8543=>554, + 8544=>334, 8545=>593, 8546=>851, 8547=>989, 8548=>696, 8549=>989, 8550=>1247, 8551=>1505, 8552=>1008, 8553=>694, 8554=>1008, 8555=>1266, 8556=>573, 8557=>660, 8558=>747, 8559=>896, + 8560=>308, 8561=>546, 8562=>785, 8563=>885, 8564=>586, 8565=>866, 8566=>1104, 8567=>1342, 8568=>872, 8569=>580, 8570=>872, 8571=>1110, 8572=>308, 8573=>533, 8574=>644, 8575=>938, + 8576=>1160, 8577=>747, 8578=>1160, 8579=>660, 8580=>533, 8592=>754, 8593=>754, 8594=>754, 8595=>754, 8596=>754, 8597=>754, 8598=>754, 8599=>754, 8600=>754, 8601=>754, 8602=>754, + 8603=>754, 8604=>754, 8605=>754, 8606=>754, 8607=>754, 8608=>754, 8609=>754, 8610=>754, 8611=>754, 8612=>754, 8613=>754, 8614=>754, 8615=>754, 8616=>754, 8617=>754, 8618=>754, + 8619=>754, 8620=>754, 8621=>754, 8622=>754, 8623=>754, 8624=>754, 8625=>754, 8626=>754, 8627=>754, 8628=>754, 8629=>754, 8630=>754, 8631=>754, 8632=>754, 8633=>754, 8634=>754, + 8635=>754, 8636=>754, 8637=>754, 8638=>754, 8639=>754, 8640=>754, 8641=>754, 8642=>754, 8643=>754, 8644=>754, 8645=>754, 8646=>754, 8647=>754, 8648=>754, 8649=>754, 8650=>754, + 8651=>754, 8652=>754, 8653=>754, 8654=>754, 8655=>754, 8656=>754, 8657=>754, 8658=>754, 8659=>754, 8660=>754, 8661=>754, 8662=>754, 8663=>754, 8664=>754, 8665=>754, 8666=>754, + 8667=>754, 8668=>754, 8669=>754, 8670=>754, 8671=>754, 8672=>754, 8673=>754, 8674=>754, 8675=>754, 8676=>754, 8677=>754, 8678=>754, 8679=>754, 8680=>754, 8681=>754, 8682=>754, + 8683=>754, 8684=>754, 8685=>754, 8686=>754, 8687=>754, 8688=>754, 8689=>754, 8690=>754, 8691=>754, 8692=>754, 8693=>754, 8694=>754, 8695=>754, 8696=>754, 8697=>754, 8698=>754, + 8699=>754, 8700=>754, 8701=>754, 8702=>754, 8703=>754, 8704=>696, 8705=>626, 8706=>489, 8707=>615, 8708=>615, 8709=>771, 8710=>627, 8711=>627, 8712=>807, 8713=>807, 8714=>675, + 8715=>807, 8716=>807, 8717=>675, 8718=>572, 8719=>708, 8720=>708, 8721=>646, 8722=>754, 8723=>754, 8724=>626, 8725=>150, 8726=>626, 8727=>754, 8728=>563, 8729=>342, 8730=>600, + 8731=>600, 8732=>600, 8733=>602, 8734=>750, 8735=>754, 8736=>807, 8737=>807, 8738=>754, 8739=>450, 8740=>450, 8741=>450, 8742=>450, 8743=>730, 8744=>730, 8745=>730, 8746=>730, + 8747=>549, 8748=>835, 8749=>1165, 8750=>506, 8751=>879, 8752=>1181, 8753=>506, 8754=>506, 8755=>506, 8756=>626, 8757=>626, 8758=>264, 8759=>626, 8760=>754, 8761=>754, 8762=>754, + 8763=>754, 8764=>754, 8765=>754, 8766=>754, 8767=>754, 8768=>337, 8769=>754, 8770=>754, 8771=>754, 8772=>754, 8773=>754, 8774=>754, 8775=>754, 8776=>754, 8777=>754, 8778=>754, + 8779=>754, 8780=>754, 8781=>754, 8782=>754, 8783=>754, 8784=>754, 8785=>754, 8786=>754, 8787=>754, 8788=>956, 8789=>956, 8790=>754, 8791=>754, 8792=>754, 8793=>754, 8794=>754, + 8795=>754, 8796=>754, 8797=>754, 8798=>754, 8799=>754, 8800=>754, 8801=>754, 8802=>754, 8803=>754, 8804=>754, 8805=>754, 8806=>754, 8807=>754, 8808=>756, 8809=>756, 8810=>942, + 8811=>942, 8812=>450, 8813=>754, 8814=>754, 8815=>754, 8816=>754, 8817=>754, 8818=>754, 8819=>754, 8820=>754, 8821=>754, 8822=>754, 8823=>754, 8824=>754, 8825=>754, 8826=>754, + 8827=>754, 8828=>754, 8829=>754, 8830=>754, 8831=>754, 8832=>754, 8833=>754, 8834=>754, 8835=>754, 8836=>754, 8837=>754, 8838=>754, 8839=>754, 8840=>754, 8841=>754, 8842=>754, + 8843=>754, 8844=>730, 8845=>730, 8846=>730, 8847=>754, 8848=>754, 8849=>754, 8850=>754, 8851=>678, 8852=>678, 8853=>754, 8854=>754, 8855=>754, 8856=>754, 8857=>754, 8858=>754, + 8859=>754, 8860=>754, 8861=>754, 8862=>754, 8863=>754, 8864=>754, 8865=>754, 8866=>822, 8867=>822, 8868=>822, 8869=>822, 8870=>488, 8871=>488, 8872=>822, 8873=>822, 8874=>822, + 8875=>822, 8876=>822, 8877=>822, 8878=>822, 8879=>822, 8882=>754, 8883=>754, 8884=>754, 8885=>754, 8886=>900, 8887=>900, 8888=>754, 8889=>754, 8890=>488, 8891=>730, 8892=>730, + 8893=>730, 8896=>758, 8897=>758, 8898=>758, 8899=>758, 8900=>444, 8901=>342, 8902=>563, 8904=>900, 8905=>900, 8906=>900, 8907=>900, 8908=>900, 8909=>754, 8918=>754, 8919=>754, + 8920=>1280, 8921=>1280, 8922=>754, 8923=>754, 8924=>754, 8925=>754, 8926=>754, 8927=>754, 8928=>754, 8929=>754, 8930=>754, 8931=>754, 8932=>754, 8933=>754, 8934=>754, 8935=>754, + 8936=>754, 8937=>754, 8938=>754, 8939=>754, 8940=>754, 8941=>754, 8946=>1042, 8947=>807, 8948=>675, 8949=>807, 8950=>807, 8951=>675, 8952=>807, 8953=>807, 8954=>1042, 8955=>807, + 8956=>675, 8957=>807, 8958=>675, 8959=>807, 8962=>644, 8966=>826, 8968=>411, 8969=>411, 8970=>411, 8971=>411, 8976=>754, 8977=>484, 8984=>835, 8985=>754, 8992=>549, 8993=>549, + 8997=>900, 9000=>1299, 9085=>776, 9115=>450, 9116=>450, 9117=>450, 9118=>450, 9119=>450, 9120=>450, 9121=>450, 9122=>450, 9123=>450, 9124=>450, 9125=>450, 9126=>450, 9127=>675, + 9128=>675, 9129=>675, 9130=>675, 9131=>675, 9132=>675, 9133=>675, 9134=>549, 9166=>754, 9167=>850, 9250=>644, 9251=>644, 9312=>762, 9313=>762, 9314=>762, 9315=>762, 9316=>762, + 9317=>762, 9318=>762, 9319=>762, 9320=>762, 9321=>762, 9600=>692, 9601=>692, 9602=>692, 9603=>692, 9604=>692, 9605=>692, 9606=>692, 9607=>692, 9608=>692, 9609=>692, 9610=>692, + 9611=>692, 9612=>692, 9613=>692, 9614=>692, 9615=>692, 9616=>692, 9617=>692, 9618=>692, 9619=>692, 9620=>692, 9621=>692, 9622=>692, 9623=>692, 9624=>692, 9625=>692, 9626=>692, + 9627=>692, 9628=>692, 9629=>692, 9630=>692, 9631=>692, 9632=>850, 9633=>850, 9634=>850, 9635=>850, 9636=>850, 9637=>850, 9638=>850, 9639=>850, 9640=>850, 9641=>850, 9642=>610, + 9643=>610, 9644=>850, 9645=>850, 9646=>495, 9647=>495, 9648=>692, 9649=>692, 9650=>692, 9651=>692, 9652=>452, 9653=>452, 9654=>692, 9655=>692, 9656=>452, 9657=>452, 9658=>692, + 9659=>692, 9660=>692, 9661=>692, 9662=>452, 9663=>452, 9664=>692, 9665=>692, 9666=>452, 9667=>452, 9668=>692, 9669=>692, 9670=>692, 9671=>692, 9672=>692, 9673=>785, 9674=>444, + 9675=>785, 9676=>785, 9677=>785, 9678=>785, 9679=>785, 9680=>785, 9681=>785, 9682=>785, 9683=>785, 9684=>785, 9685=>785, 9686=>474, 9687=>474, 9688=>756, 9689=>873, 9690=>873, + 9691=>873, 9692=>348, 9693=>348, 9694=>348, 9695=>348, 9696=>692, 9697=>692, 9698=>692, 9699=>692, 9700=>692, 9701=>692, 9702=>575, 9703=>850, 9704=>850, 9705=>850, 9706=>850, + 9707=>850, 9708=>692, 9709=>692, 9710=>692, 9711=>1007, 9712=>850, 9713=>850, 9714=>850, 9715=>850, 9716=>785, 9717=>785, 9718=>785, 9719=>785, 9720=>692, 9721=>692, 9722=>692, + 9723=>747, 9724=>747, 9725=>659, 9726=>659, 9727=>692, 9728=>807, 9729=>900, 9730=>807, 9731=>807, 9732=>807, 9733=>807, 9734=>807, 9735=>515, 9736=>806, 9737=>807, 9738=>799, + 9739=>799, 9740=>604, 9741=>911, 9742=>1121, 9743=>1125, 9744=>807, 9745=>807, 9746=>807, 9747=>479, 9748=>807, 9749=>807, 9750=>807, 9751=>807, 9752=>807, 9753=>807, 9754=>807, + 9755=>807, 9756=>807, 9757=>548, 9758=>807, 9759=>548, 9760=>807, 9761=>807, 9762=>807, 9763=>807, 9764=>602, 9765=>671, 9766=>584, 9767=>705, 9768=>490, 9769=>807, 9770=>807, + 9771=>807, 9772=>639, 9773=>807, 9774=>807, 9775=>807, 9776=>807, 9777=>807, 9778=>807, 9779=>807, 9780=>807, 9781=>807, 9782=>807, 9783=>807, 9784=>807, 9785=>807, 9786=>807, + 9787=>807, 9788=>807, 9789=>807, 9790=>807, 9791=>552, 9792=>658, 9793=>658, 9794=>807, 9795=>807, 9796=>807, 9797=>807, 9798=>807, 9799=>807, 9800=>807, 9801=>807, 9802=>807, + 9803=>807, 9804=>807, 9805=>807, 9806=>807, 9807=>807, 9808=>807, 9809=>807, 9810=>807, 9811=>807, 9812=>807, 9813=>807, 9814=>807, 9815=>807, 9816=>807, 9817=>807, 9818=>807, + 9819=>807, 9820=>807, 9821=>807, 9822=>807, 9823=>807, 9824=>807, 9825=>807, 9826=>807, 9827=>807, 9828=>807, 9829=>807, 9830=>807, 9831=>807, 9832=>807, 9833=>424, 9834=>574, + 9835=>807, 9836=>807, 9837=>424, 9838=>321, 9839=>435, 9840=>673, 9841=>689, 9842=>807, 9843=>807, 9844=>807, 9845=>807, 9846=>807, 9847=>807, 9848=>807, 9849=>807, 9850=>807, + 9851=>807, 9852=>807, 9853=>807, 9854=>807, 9855=>807, 9856=>782, 9857=>782, 9858=>782, 9859=>782, 9860=>782, 9861=>782, 9862=>807, 9863=>807, 9864=>807, 9865=>807, 9866=>807, + 9867=>807, 9868=>807, 9869=>807, 9870=>807, 9871=>807, 9872=>807, 9873=>807, 9874=>807, 9875=>807, 9876=>807, 9877=>487, 9878=>807, 9879=>807, 9880=>807, 9881=>807, 9882=>807, + 9883=>807, 9884=>807, 9888=>807, 9889=>632, 9890=>754, 9891=>754, 9892=>754, 9893=>754, 9894=>754, 9895=>754, 9896=>754, 9897=>754, 9898=>754, 9899=>754, 9900=>754, 9901=>754, + 9902=>754, 9903=>754, 9904=>759, 9905=>754, 9906=>658, 9985=>754, 9986=>754, 9987=>754, 9988=>754, 9990=>754, 9991=>754, 9992=>754, 9993=>754, 9996=>754, 9997=>754, 9998=>754, + 9999=>754, 10000=>754, 10001=>754, 10002=>754, 10003=>754, 10004=>754, 10005=>754, 10006=>754, 10007=>754, 10008=>754, 10009=>754, 10010=>754, 10011=>754, 10012=>754, 10013=>754, 10014=>754, + 10015=>754, 10016=>754, 10017=>754, 10018=>754, 10019=>754, 10020=>754, 10021=>754, 10022=>754, 10023=>754, 10025=>754, 10026=>754, 10027=>754, 10028=>754, 10029=>754, 10030=>754, 10031=>754, + 10032=>754, 10033=>754, 10034=>754, 10035=>754, 10036=>754, 10037=>754, 10038=>754, 10039=>754, 10040=>754, 10041=>754, 10042=>754, 10043=>754, 10044=>754, 10045=>754, 10046=>754, 10047=>754, + 10048=>754, 10049=>754, 10050=>754, 10051=>754, 10052=>754, 10053=>754, 10054=>754, 10055=>754, 10056=>754, 10057=>754, 10058=>754, 10059=>754, 10061=>807, 10063=>807, 10064=>807, 10065=>807, + 10066=>807, 10070=>807, 10072=>754, 10073=>754, 10074=>754, 10075=>312, 10076=>312, 10077=>528, 10078=>528, 10081=>754, 10082=>754, 10083=>754, 10084=>754, 10085=>754, 10086=>754, 10087=>754, + 10088=>754, 10089=>754, 10090=>754, 10091=>754, 10092=>754, 10093=>754, 10094=>754, 10095=>754, 10096=>754, 10097=>754, 10098=>754, 10099=>754, 10100=>754, 10101=>754, 10102=>762, 10103=>762, + 10104=>762, 10105=>762, 10106=>762, 10107=>762, 10108=>762, 10109=>762, 10110=>762, 10111=>762, 10112=>754, 10113=>754, 10114=>754, 10115=>754, 10116=>754, 10117=>754, 10118=>754, 10119=>754, + 10120=>754, 10121=>754, 10122=>754, 10123=>754, 10124=>754, 10125=>754, 10126=>754, 10127=>754, 10128=>754, 10129=>754, 10130=>754, 10131=>754, 10132=>754, 10136=>754, 10137=>754, 10138=>754, + 10139=>754, 10140=>754, 10141=>754, 10142=>754, 10143=>754, 10144=>754, 10145=>754, 10146=>754, 10147=>754, 10148=>754, 10149=>754, 10150=>754, 10151=>754, 10152=>754, 10153=>754, 10154=>754, + 10155=>754, 10156=>754, 10157=>754, 10158=>754, 10159=>754, 10161=>754, 10162=>754, 10163=>754, 10164=>754, 10165=>754, 10166=>754, 10167=>754, 10168=>754, 10169=>754, 10170=>754, 10171=>754, + 10172=>754, 10173=>754, 10174=>754, 10208=>444, 10214=>438, 10215=>438, 10216=>411, 10217=>411, 10218=>648, 10219=>648, 10224=>754, 10225=>754, 10226=>754, 10227=>754, 10228=>1042, 10229=>1290, + 10230=>1290, 10231=>1290, 10232=>1290, 10233=>1290, 10234=>1290, 10235=>1290, 10236=>1290, 10237=>1290, 10238=>1290, 10239=>1290, 10240=>703, 10241=>703, 10242=>703, 10243=>703, 10244=>703, 10245=>703, + 10246=>703, 10247=>703, 10248=>703, 10249=>703, 10250=>703, 10251=>703, 10252=>703, 10253=>703, 10254=>703, 10255=>703, 10256=>703, 10257=>703, 10258=>703, 10259=>703, 10260=>703, 10261=>703, + 10262=>703, 10263=>703, 10264=>703, 10265=>703, 10266=>703, 10267=>703, 10268=>703, 10269=>703, 10270=>703, 10271=>703, 10272=>703, 10273=>703, 10274=>703, 10275=>703, 10276=>703, 10277=>703, + 10278=>703, 10279=>703, 10280=>703, 10281=>703, 10282=>703, 10283=>703, 10284=>703, 10285=>703, 10286=>703, 10287=>703, 10288=>703, 10289=>703, 10290=>703, 10291=>703, 10292=>703, 10293=>703, + 10294=>703, 10295=>703, 10296=>703, 10297=>703, 10298=>703, 10299=>703, 10300=>703, 10301=>703, 10302=>703, 10303=>703, 10304=>703, 10305=>703, 10306=>703, 10307=>703, 10308=>703, 10309=>703, + 10310=>703, 10311=>703, 10312=>703, 10313=>703, 10314=>703, 10315=>703, 10316=>703, 10317=>703, 10318=>703, 10319=>703, 10320=>703, 10321=>703, 10322=>703, 10323=>703, 10324=>703, 10325=>703, + 10326=>703, 10327=>703, 10328=>703, 10329=>703, 10330=>703, 10331=>703, 10332=>703, 10333=>703, 10334=>703, 10335=>703, 10336=>703, 10337=>703, 10338=>703, 10339=>703, 10340=>703, 10341=>703, + 10342=>703, 10343=>703, 10344=>703, 10345=>703, 10346=>703, 10347=>703, 10348=>703, 10349=>703, 10350=>703, 10351=>703, 10352=>703, 10353=>703, 10354=>703, 10355=>703, 10356=>703, 10357=>703, + 10358=>703, 10359=>703, 10360=>703, 10361=>703, 10362=>703, 10363=>703, 10364=>703, 10365=>703, 10366=>703, 10367=>703, 10368=>703, 10369=>703, 10370=>703, 10371=>703, 10372=>703, 10373=>703, + 10374=>703, 10375=>703, 10376=>703, 10377=>703, 10378=>703, 10379=>703, 10380=>703, 10381=>703, 10382=>703, 10383=>703, 10384=>703, 10385=>703, 10386=>703, 10387=>703, 10388=>703, 10389=>703, + 10390=>703, 10391=>703, 10392=>703, 10393=>703, 10394=>703, 10395=>703, 10396=>703, 10397=>703, 10398=>703, 10399=>703, 10400=>703, 10401=>703, 10402=>703, 10403=>703, 10404=>703, 10405=>703, + 10406=>703, 10407=>703, 10408=>703, 10409=>703, 10410=>703, 10411=>703, 10412=>703, 10413=>703, 10414=>703, 10415=>703, 10416=>703, 10417=>703, 10418=>703, 10419=>703, 10420=>703, 10421=>703, + 10422=>703, 10423=>703, 10424=>703, 10425=>703, 10426=>703, 10427=>703, 10428=>703, 10429=>703, 10430=>703, 10431=>703, 10432=>703, 10433=>703, 10434=>703, 10435=>703, 10436=>703, 10437=>703, + 10438=>703, 10439=>703, 10440=>703, 10441=>703, 10442=>703, 10443=>703, 10444=>703, 10445=>703, 10446=>703, 10447=>703, 10448=>703, 10449=>703, 10450=>703, 10451=>703, 10452=>703, 10453=>703, + 10454=>703, 10455=>703, 10456=>703, 10457=>703, 10458=>703, 10459=>703, 10460=>703, 10461=>703, 10462=>703, 10463=>703, 10464=>703, 10465=>703, 10466=>703, 10467=>703, 10468=>703, 10469=>703, + 10470=>703, 10471=>703, 10472=>703, 10473=>703, 10474=>703, 10475=>703, 10476=>703, 10477=>703, 10478=>703, 10479=>703, 10480=>703, 10481=>703, 10482=>703, 10483=>703, 10484=>703, 10485=>703, + 10486=>703, 10487=>703, 10488=>703, 10489=>703, 10490=>703, 10491=>703, 10492=>703, 10493=>703, 10494=>703, 10495=>703, 10502=>754, 10503=>754, 10506=>754, 10507=>754, 10560=>754, 10561=>754, + 10702=>754, 10703=>941, 10704=>941, 10705=>900, 10706=>900, 10707=>900, 10708=>900, 10709=>900, 10731=>444, 10752=>900, 10753=>900, 10754=>900, 10764=>1495, 10765=>506, 10766=>506, 10767=>506, + 10768=>506, 10769=>506, 10770=>506, 10771=>506, 10772=>506, 10773=>506, 10774=>506, 10775=>506, 10776=>506, 10777=>506, 10778=>506, 10779=>506, 10780=>506, 10877=>754, 10878=>754, 10879=>754, + 10880=>754, 10881=>754, 10882=>754, 10883=>754, 10884=>754, 10885=>754, 10886=>754, 10887=>754, 10888=>754, 10889=>754, 10890=>754, 10891=>754, 10892=>754, 10893=>754, 10894=>754, 10895=>754, + 10896=>754, 10897=>754, 10898=>754, 10899=>754, 10900=>754, 10901=>754, 10902=>754, 10903=>754, 10904=>754, 10905=>754, 10906=>754, 10907=>754, 10908=>754, 10909=>754, 10910=>754, 10911=>754, + 10912=>754, 10926=>754, 10927=>754, 10928=>754, 10929=>754, 10930=>754, 10931=>754, 10932=>754, 10933=>754, 10934=>754, 10935=>754, 10936=>754, 10937=>754, 10938=>754, 11001=>754, 11002=>754, + 11008=>754, 11009=>754, 11010=>754, 11011=>754, 11012=>754, 11013=>754, 11014=>754, 11015=>754, 11016=>754, 11017=>754, 11018=>754, 11019=>754, 11020=>754, 11021=>754, 11022=>754, 11023=>754, + 11024=>754, 11025=>754, 11026=>850, 11027=>850, 11028=>850, 11029=>850, 11030=>692, 11031=>692, 11032=>692, 11033=>692, 11034=>850, 11040=>782, 11041=>786, 11042=>786, 11043=>786, 11360=>573, + 11361=>324, 11362=>573, 11363=>659, 11364=>693, 11365=>607, 11366=>430, 11367=>860, 11368=>641, 11369=>697, 11370=>598, 11371=>652, 11372=>523, 11380=>586, 11381=>584, 11382=>464, 11383=>704, + 61960=>774, 62047=>647, 63173=>618, 64256=>729, 64257=>667, 64258=>667, 64259=>1003, 64260=>1004, 64261=>727, 64262=>917, 64275=>1249, 64276=>1245, 64277=>1240, 64278=>1245, 64279=>1542, 64285=>334, + 64287=>623, 64288=>647, 64297=>754, 64298=>867, 64299=>867, 64300=>867, 64301=>867, 64302=>676, 64303=>676, 64304=>676, 64305=>658, 64306=>483, 64307=>615, 64308=>700, 64309=>420, 64310=>468, + 64312=>692, 64313=>420, 64314=>700, 64315=>675, 64316=>646, 64318=>771, 64320=>479, 64321=>770, 64323=>721, 64324=>699, 64326=>676, 64327=>723, 64328=>700, 64329=>867, 64330=>740, 64331=>334, + 64332=>658, 64333=>678, 64334=>699, 64338=>904, 64339=>953, 64340=>338, 64341=>367, 64342=>904, 64343=>953, 64344=>338, 64345=>367, 64346=>904, 64347=>953, 64348=>338, 64349=>367, 64350=>904, + 64351=>953, 64352=>338, 64353=>367, 64354=>904, 64355=>953, 64356=>338, 64357=>367, 64358=>904, 64359=>953, 64360=>338, 64361=>367, 64362=>1045, 64363=>1072, 64364=>589, 64365=>647, 64366=>1045, + 64367=>1072, 64368=>589, 64369=>647, 64370=>648, 64371=>648, 64372=>648, 64373=>648, 64374=>648, 64375=>648, 64376=>648, 64377=>648, 64378=>648, 64379=>648, 64380=>648, 64381=>648, 64382=>648, + 64383=>648, 64384=>648, 64385=>648, 64394=>518, 64395=>560, 64396=>518, 64397=>560, 64398=>921, 64399=>921, 64400=>523, 64401=>523, 64402=>921, 64403=>921, 64404=>523, 64405=>523, 64414=>768, + 64415=>810, 64473=>559, 64474=>564, 64488=>338, 64489=>367, 64508=>825, 64509=>910, 64510=>338, 64511=>367, 65024=>0, 65025=>0, 65026=>0, 65027=>0, 65028=>0, 65029=>0, 65030=>0, + 65031=>0, 65032=>0, 65033=>0, 65034=>0, 65035=>0, 65036=>0, 65037=>0, 65038=>0, 65039=>0, 65136=>308, 65137=>308, 65138=>308, 65139=>311, 65140=>308, 65142=>308, 65143=>308, + 65144=>308, 65145=>308, 65146=>308, 65147=>308, 65148=>308, 65149=>308, 65150=>308, 65151=>308, 65152=>460, 65153=>308, 65154=>338, 65155=>308, 65156=>338, 65157=>559, 65158=>564, 65159=>308, + 65160=>338, 65161=>825, 65162=>825, 65163=>338, 65164=>367, 65165=>308, 65166=>338, 65167=>904, 65168=>953, 65169=>338, 65170=>367, 65171=>531, 65172=>545, 65173=>904, 65174=>953, 65175=>338, + 65176=>367, 65177=>904, 65178=>953, 65179=>338, 65180=>367, 65181=>648, 65182=>648, 65183=>648, 65184=>648, 65185=>648, 65186=>648, 65187=>648, 65188=>648, 65189=>648, 65190=>648, 65191=>648, + 65192=>648, 65193=>461, 65194=>520, 65195=>461, 65196=>520, 65197=>518, 65198=>560, 65199=>518, 65200=>560, 65201=>1242, 65202=>1272, 65203=>885, 65204=>916, 65205=>1242, 65206=>1272, 65207=>885, + 65208=>916, 65209=>1210, 65210=>1228, 65211=>870, 65212=>887, 65213=>1210, 65214=>1228, 65215=>870, 65216=>887, 65217=>935, 65218=>963, 65219=>848, 65220=>876, 65221=>935, 65222=>963, 65223=>848, + 65224=>876, 65225=>615, 65226=>615, 65227=>615, 65228=>508, 65229=>615, 65230=>615, 65231=>615, 65232=>508, 65233=>1045, 65234=>1072, 65235=>589, 65236=>647, 65237=>804, 65238=>811, 65239=>589, + 65240=>647, 65241=>825, 65242=>838, 65243=>523, 65244=>523, 65245=>781, 65246=>803, 65247=>338, 65248=>367, 65249=>659, 65250=>706, 65251=>557, 65252=>603, 65253=>768, 65254=>810, 65255=>338, + 65256=>367, 65257=>531, 65258=>545, 65259=>624, 65260=>594, 65261=>559, 65262=>564, 65263=>825, 65264=>910, 65265=>825, 65266=>910, 65267=>338, 65268=>367, 65269=>670, 65270=>683, 65271=>670, + 65272=>683, 65273=>670, 65274=>683, 65275=>670, 65276=>683, 65279=>0, 65533=>1002}; + font[:enc]=''; + font[:diff]=''; + font[:file]='DejaVuSansCondensed-Bold.z'; + font[:ctg]='DejaVuSansCondensed-Bold.ctg.z'; + font[:originalsize]=456120; +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSansCondensedbi.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/DejaVuSansCondensedbi.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,267 @@ +TCPDFFontDescriptor.define('DejaVuSansCondensedbi') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='DejaVuSansCondensed-BoldOblique'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>96,'FontBBox'=>'[-960 -388 1804 1121]','ItalicAngle'=>-11,'StemV'=>120,'MissingWidth'=>540}; + font[:up]=-42; + font[:ut]=44; + font[:cw]={ + 0=>540, 32=>313, 33=>410, 34=>469, 35=>626, 36=>626, 37=>901, 38=>785, 39=>275, 40=>411, 41=>411, 42=>470, 43=>754, 44=>342, 45=>374, 46=>342, + 47=>329, 48=>626, 49=>626, 50=>626, 51=>626, 52=>626, 53=>626, 54=>626, 55=>626, 56=>626, 57=>626, 58=>360, 59=>360, 60=>754, 61=>754, 62=>754, + 63=>522, 64=>900, 65=>696, 66=>686, 67=>660, 68=>747, 69=>615, 70=>615, 71=>738, 72=>753, 73=>334, 74=>334, 75=>697, 76=>573, 77=>896, 78=>753, + 79=>765, 80=>659, 81=>765, 82=>693, 83=>648, 84=>614, 85=>730, 86=>696, 87=>993, 88=>694, 89=>651, 90=>652, 91=>411, 92=>329, 93=>411, 94=>754, + 95=>450, 96=>450, 97=>607, 98=>644, 99=>533, 100=>644, 101=>610, 102=>391, 103=>644, 104=>641, 105=>308, 106=>308, 107=>598, 108=>308, 109=>938, 110=>641, + 111=>618, 112=>644, 113=>644, 114=>444, 115=>536, 116=>430, 117=>641, 118=>586, 119=>831, 120=>580, 121=>586, 122=>523, 123=>641, 124=>329, 125=>641, 126=>754, + 8364=>626, 1027=>573, 8218=>342, 402=>391, 8222=>580, 8230=>900, 8224=>450, 8225=>450, 710=>450, 8240=>1309, 352=>648, 8249=>371, 338=>1050, 1036=>735, 381=>652, 1039=>753, + 8216=>342, 8217=>342, 8220=>580, 8221=>580, 8226=>575, 8211=>450, 8212=>900, 732=>450, 8482=>900, 353=>536, 8250=>371, 339=>984, 1116=>611, 382=>523, 376=>651, 160=>313, + 161=>410, 162=>626, 163=>626, 164=>572, 165=>626, 166=>329, 167=>450, 168=>450, 169=>900, 170=>507, 171=>584, 172=>754, 173=>374, 174=>900, 175=>450, 176=>450, + 177=>754, 178=>394, 179=>394, 180=>450, 181=>662, 182=>572, 183=>342, 184=>450, 185=>394, 186=>507, 187=>584, 188=>932, 189=>932, 190=>932, 191=>522, 192=>696, + 193=>696, 194=>696, 195=>696, 196=>696, 197=>696, 198=>976, 199=>660, 200=>615, 201=>615, 202=>615, 203=>615, 204=>334, 205=>334, 206=>334, 207=>334, 208=>760, + 209=>753, 210=>765, 211=>765, 212=>765, 213=>765, 214=>765, 215=>754, 216=>765, 217=>730, 218=>730, 219=>730, 220=>730, 221=>651, 222=>668, 223=>647, 224=>607, + 225=>607, 226=>607, 227=>607, 228=>607, 229=>607, 230=>943, 231=>533, 232=>610, 233=>610, 234=>610, 235=>610, 236=>308, 237=>308, 238=>308, 239=>308, 240=>618, + 241=>641, 242=>618, 243=>618, 244=>618, 245=>618, 246=>618, 247=>754, 248=>618, 249=>641, 250=>641, 251=>641, 252=>641, 253=>586, 254=>644, 255=>586, 256=>696, + 257=>607, 258=>696, 259=>607, 260=>696, 261=>607, 262=>660, 263=>533, 264=>660, 265=>533, 266=>660, 267=>533, 268=>660, 269=>533, 270=>747, 271=>644, 272=>760, + 273=>644, 274=>615, 275=>610, 276=>615, 277=>610, 278=>615, 279=>610, 280=>615, 281=>610, 282=>615, 283=>610, 284=>738, 285=>644, 286=>738, 287=>644, 288=>738, + 289=>644, 290=>738, 291=>644, 292=>753, 293=>641, 294=>876, 295=>711, 296=>334, 297=>308, 298=>334, 299=>308, 300=>334, 301=>308, 302=>334, 303=>308, 304=>334, + 305=>308, 306=>669, 307=>617, 308=>334, 309=>308, 310=>697, 311=>598, 312=>598, 313=>573, 314=>308, 315=>573, 316=>308, 317=>573, 318=>413, 319=>573, 320=>438, + 321=>594, 322=>337, 323=>753, 324=>641, 325=>753, 326=>641, 327=>753, 328=>641, 329=>884, 330=>753, 331=>641, 332=>765, 333=>618, 334=>765, 335=>618, 336=>765, + 337=>618, 340=>693, 341=>444, 342=>693, 343=>444, 344=>693, 345=>444, 346=>648, 347=>536, 348=>648, 349=>536, 350=>648, 351=>536, 354=>614, 355=>430, 356=>614, + 357=>430, 358=>614, 359=>430, 360=>730, 361=>641, 362=>730, 363=>641, 364=>730, 365=>641, 366=>730, 367=>641, 368=>730, 369=>641, 370=>730, 371=>641, 372=>993, + 373=>831, 374=>651, 375=>586, 377=>652, 378=>523, 379=>652, 380=>523, 383=>391, 384=>644, 385=>729, 386=>686, 387=>644, 388=>686, 389=>644, 390=>660, 391=>660, + 392=>533, 393=>760, 394=>791, 395=>686, 396=>644, 397=>618, 398=>615, 399=>765, 400=>626, 401=>615, 403=>738, 404=>713, 405=>940, 406=>392, 407=>350, 408=>697, + 409=>598, 410=>324, 411=>532, 412=>938, 413=>753, 414=>641, 415=>765, 416=>765, 417=>618, 418=>1002, 419=>866, 420=>703, 421=>644, 422=>693, 423=>648, 424=>536, + 425=>615, 426=>497, 427=>430, 428=>636, 429=>430, 430=>614, 431=>730, 432=>641, 433=>692, 434=>732, 435=>717, 436=>700, 437=>652, 438=>523, 439=>695, 440=>695, + 441=>576, 442=>523, 443=>626, 444=>695, 445=>576, 446=>515, 447=>644, 448=>334, 449=>593, 450=>489, 451=>334, 452=>1393, 453=>1305, 454=>1176, 455=>879, 456=>881, + 457=>603, 458=>1074, 459=>1091, 460=>957, 461=>696, 462=>607, 463=>334, 464=>308, 465=>765, 466=>618, 467=>730, 468=>641, 469=>730, 470=>641, 471=>730, 472=>641, + 473=>730, 474=>641, 475=>730, 476=>641, 477=>610, 478=>696, 479=>607, 480=>696, 481=>607, 482=>976, 483=>943, 484=>738, 485=>644, 486=>738, 487=>644, 488=>697, + 489=>598, 490=>765, 491=>618, 492=>765, 493=>618, 494=>695, 495=>523, 496=>308, 497=>1393, 498=>1305, 499=>1176, 500=>738, 501=>644, 502=>1160, 503=>708, 504=>753, + 505=>641, 506=>696, 507=>607, 508=>976, 509=>943, 510=>765, 511=>618, 512=>696, 513=>607, 514=>696, 515=>607, 516=>615, 517=>610, 518=>615, 519=>610, 520=>334, + 521=>308, 522=>334, 523=>308, 524=>765, 525=>618, 526=>765, 527=>618, 528=>693, 529=>444, 530=>693, 531=>444, 532=>730, 533=>641, 534=>730, 535=>641, 536=>648, + 537=>536, 538=>614, 539=>430, 540=>621, 541=>546, 542=>753, 543=>641, 544=>753, 545=>778, 546=>728, 547=>593, 548=>652, 549=>523, 550=>696, 551=>607, 552=>615, + 553=>610, 554=>765, 555=>618, 556=>765, 557=>618, 558=>765, 559=>618, 560=>765, 561=>618, 562=>651, 563=>586, 564=>442, 565=>780, 566=>460, 567=>308, 568=>979, + 569=>979, 570=>696, 571=>660, 572=>533, 573=>573, 574=>614, 575=>536, 576=>523, 577=>703, 578=>553, 579=>686, 580=>730, 581=>696, 582=>615, 583=>610, 584=>334, + 585=>308, 586=>774, 587=>712, 588=>693, 589=>444, 590=>651, 591=>586, 592=>607, 593=>644, 594=>644, 595=>644, 596=>533, 597=>533, 598=>712, 599=>712, 600=>610, + 601=>610, 602=>788, 603=>501, 604=>490, 605=>696, 606=>658, 607=>308, 608=>712, 609=>644, 610=>564, 611=>661, 612=>571, 613=>641, 614=>641, 615=>641, 616=>491, + 617=>396, 618=>491, 619=>502, 620=>624, 621=>308, 622=>757, 623=>938, 624=>938, 625=>938, 626=>641, 627=>713, 628=>578, 629=>618, 630=>817, 631=>613, 632=>716, + 633=>484, 634=>484, 635=>584, 636=>444, 637=>444, 638=>536, 639=>536, 640=>578, 641=>578, 642=>536, 643=>374, 644=>391, 645=>544, 646=>497, 647=>430, 648=>430, + 649=>828, 650=>692, 651=>603, 652=>586, 653=>831, 654=>586, 655=>651, 656=>624, 657=>615, 658=>576, 659=>576, 660=>515, 661=>515, 662=>515, 663=>515, 664=>765, + 665=>569, 666=>658, 667=>616, 668=>622, 669=>308, 670=>659, 671=>485, 672=>712, 673=>515, 674=>515, 675=>1040, 676=>1093, 677=>1039, 678=>876, 679=>691, 680=>836, + 681=>923, 682=>712, 683=>702, 684=>532, 685=>374, 686=>609, 687=>710, 688=>410, 689=>410, 690=>197, 691=>284, 692=>284, 693=>284, 694=>369, 695=>532, 696=>375, + 697=>271, 698=>469, 699=>342, 700=>342, 701=>342, 702=>330, 703=>330, 704=>293, 705=>293, 706=>450, 707=>450, 708=>450, 709=>450, 711=>450, 712=>275, 713=>450, + 714=>450, 715=>450, 716=>275, 717=>450, 718=>450, 719=>450, 720=>303, 721=>303, 722=>330, 723=>330, 724=>450, 725=>450, 726=>450, 727=>450, 728=>450, 729=>450, + 730=>450, 731=>450, 733=>450, 734=>315, 735=>450, 736=>370, 737=>197, 738=>343, 739=>371, 740=>293, 741=>450, 742=>450, 743=>450, 744=>450, 745=>450, 748=>450, + 749=>450, 750=>450, 755=>450, 759=>450, 768=>0, 769=>0, 770=>0, 771=>0, 772=>0, 773=>0, 774=>0, 775=>0, 776=>0, 777=>0, 778=>0, 779=>0, + 780=>0, 781=>0, 782=>0, 783=>0, 784=>0, 785=>0, 786=>0, 787=>0, 788=>0, 789=>0, 790=>0, 791=>0, 792=>0, 793=>0, 794=>0, 795=>0, + 796=>0, 797=>0, 798=>0, 799=>0, 800=>0, 801=>0, 802=>0, 803=>0, 804=>0, 805=>0, 806=>0, 807=>0, 808=>0, 809=>0, 810=>0, 811=>0, + 812=>0, 813=>0, 814=>0, 815=>0, 816=>0, 817=>0, 818=>0, 819=>0, 820=>0, 821=>0, 822=>0, 823=>0, 824=>0, 825=>0, 826=>0, 827=>0, + 828=>0, 829=>0, 830=>0, 831=>0, 832=>0, 833=>0, 834=>0, 835=>0, 836=>0, 837=>0, 838=>0, 839=>0, 840=>0, 841=>0, 842=>0, 843=>0, + 844=>0, 845=>0, 846=>0, 847=>0, 849=>0, 850=>0, 855=>0, 856=>0, 860=>0, 861=>0, 862=>0, 863=>0, 864=>0, 865=>0, 866=>0, 884=>271, + 885=>271, 890=>450, 891=>533, 892=>495, 893=>494, 894=>303, 900=>397, 901=>450, 902=>717, 903=>342, 904=>761, 905=>908, 906=>507, 908=>801, 910=>882, 911=>804, + 912=>351, 913=>696, 914=>686, 915=>573, 916=>696, 917=>615, 918=>652, 919=>753, 920=>765, 921=>334, 922=>697, 923=>696, 924=>896, 925=>753, 926=>568, 927=>765, + 928=>753, 929=>659, 931=>615, 932=>614, 933=>651, 934=>765, 935=>694, 936=>765, 937=>765, 938=>334, 939=>651, 940=>618, 941=>501, 942=>641, 943=>351, 944=>607, + 945=>618, 946=>644, 947=>613, 948=>618, 949=>501, 950=>532, 951=>641, 952=>618, 953=>351, 954=>639, 955=>569, 956=>662, 957=>613, 958=>532, 959=>618, 960=>712, + 961=>644, 962=>533, 963=>701, 964=>574, 965=>607, 966=>704, 967=>580, 968=>714, 969=>782, 970=>351, 971=>607, 972=>618, 973=>607, 974=>782, 976=>585, 977=>594, + 978=>671, 979=>883, 980=>671, 981=>716, 982=>782, 983=>669, 984=>765, 985=>618, 986=>660, 987=>533, 988=>615, 989=>444, 990=>632, 991=>593, 992=>827, 993=>564, + 994=>983, 995=>753, 996=>749, 997=>644, 998=>835, 999=>669, 1000=>660, 1001=>585, 1002=>709, 1003=>604, 1004=>677, 1005=>644, 1006=>614, 1007=>531, 1008=>669, 1009=>644, + 1010=>533, 1011=>308, 1012=>765, 1013=>580, 1014=>580, 1015=>668, 1016=>644, 1017=>660, 1018=>896, 1019=>659, 1020=>644, 1021=>660, 1022=>660, 1023=>628, 1024=>615, 1025=>615, + 1026=>791, 1028=>660, 1029=>648, 1030=>334, 1031=>334, 1032=>334, 1033=>1039, 1034=>1017, 1035=>791, 1037=>753, 1038=>694, 1040=>696, 1041=>686, 1042=>686, 1043=>573, 1044=>801, + 1045=>615, 1046=>1102, 1047=>639, 1048=>753, 1049=>753, 1050=>735, 1051=>747, 1052=>896, 1053=>753, 1054=>765, 1055=>753, 1056=>659, 1057=>660, 1058=>614, 1059=>694, 1060=>892, + 1061=>694, 1062=>835, 1063=>727, 1064=>1112, 1065=>1193, 1066=>845, 1067=>932, 1068=>686, 1069=>660, 1070=>1056, 1071=>693, 1072=>607, 1073=>628, 1074=>569, 1075=>470, 1076=>727, + 1077=>610, 1078=>896, 1079=>523, 1080=>630, 1081=>630, 1082=>611, 1083=>659, 1084=>735, 1085=>622, 1086=>618, 1087=>622, 1088=>644, 1089=>533, 1090=>521, 1091=>586, 1092=>893, + 1093=>580, 1094=>667, 1095=>618, 1096=>956, 1097=>995, 1098=>676, 1099=>813, 1100=>569, 1101=>533, 1102=>875, 1103=>578, 1104=>610, 1105=>610, 1106=>642, 1107=>470, 1108=>533, + 1109=>536, 1110=>308, 1111=>308, 1112=>308, 1113=>892, 1114=>860, 1115=>661, 1117=>630, 1118=>586, 1119=>622, 1120=>983, 1121=>782, 1122=>756, 1123=>662, 1124=>911, 1125=>755, + 1126=>893, 1127=>749, 1128=>1222, 1129=>1009, 1130=>765, 1131=>618, 1132=>1112, 1133=>906, 1134=>626, 1135=>501, 1136=>967, 1137=>955, 1138=>765, 1139=>601, 1140=>765, 1141=>625, + 1142=>765, 1143=>625, 1144=>1033, 1145=>939, 1146=>967, 1147=>776, 1148=>1265, 1149=>1055, 1150=>983, 1151=>782, 1152=>660, 1153=>533, 1154=>587, 1155=>0, 1156=>0, 1157=>0, + 1158=>0, 1160=>376, 1161=>376, 1162=>844, 1163=>725, 1164=>686, 1165=>550, 1166=>662, 1167=>646, 1168=>573, 1169=>470, 1170=>599, 1171=>488, 1172=>709, 1173=>470, 1174=>1102, + 1175=>896, 1176=>639, 1177=>523, 1178=>697, 1179=>611, 1180=>735, 1181=>611, 1182=>735, 1183=>611, 1184=>914, 1185=>743, 1186=>753, 1187=>622, 1188=>992, 1189=>783, 1190=>1129, + 1191=>880, 1192=>787, 1193=>639, 1194=>660, 1195=>533, 1196=>614, 1197=>521, 1198=>651, 1199=>586, 1200=>651, 1201=>586, 1202=>694, 1203=>580, 1204=>993, 1205=>901, 1206=>727, + 1207=>618, 1208=>727, 1209=>618, 1210=>727, 1211=>641, 1212=>923, 1213=>729, 1214=>923, 1215=>729, 1216=>334, 1217=>1102, 1218=>896, 1219=>700, 1220=>566, 1221=>839, 1222=>724, + 1223=>753, 1224=>622, 1225=>844, 1226=>725, 1227=>727, 1228=>618, 1229=>986, 1230=>838, 1231=>308, 1232=>696, 1233=>607, 1234=>696, 1235=>607, 1236=>976, 1237=>943, 1238=>615, + 1239=>610, 1240=>765, 1241=>610, 1242=>765, 1243=>610, 1244=>1102, 1245=>896, 1246=>639, 1247=>523, 1248=>695, 1249=>576, 1250=>753, 1251=>630, 1252=>753, 1253=>630, 1254=>765, + 1255=>618, 1256=>765, 1257=>618, 1258=>765, 1259=>618, 1260=>660, 1261=>533, 1262=>694, 1263=>586, 1264=>694, 1265=>586, 1266=>694, 1267=>586, 1268=>727, 1269=>618, 1270=>573, + 1271=>470, 1272=>932, 1273=>813, 1274=>599, 1275=>488, 1276=>694, 1277=>580, 1278=>694, 1279=>580, 1280=>686, 1281=>547, 1282=>1043, 1283=>804, 1284=>1007, 1285=>828, 1286=>745, + 1287=>624, 1288=>1117, 1289=>915, 1290=>1123, 1291=>912, 1292=>755, 1293=>574, 1294=>844, 1295=>722, 1296=>626, 1297=>501, 1298=>747, 1299=>659, 1329=>886, 1330=>730, 1331=>886, + 1332=>886, 1333=>730, 1334=>699, 1335=>730, 1336=>730, 1337=>877, 1338=>886, 1339=>730, 1340=>639, 1341=>970, 1342=>1022, 1343=>730, 1344=>639, 1345=>681, 1346=>886, 1347=>789, + 1348=>886, 1349=>714, 1350=>886, 1351=>730, 1352=>730, 1353=>730, 1354=>862, 1355=>699, 1356=>886, 1357=>730, 1358=>886, 1359=>648, 1360=>730, 1361=>714, 1362=>805, 1363=>765, + 1364=>842, 1365=>765, 1366=>648, 1369=>330, 1370=>342, 1371=>495, 1372=>495, 1373=>342, 1374=>491, 1375=>468, 1377=>938, 1378=>641, 1379=>779, 1380=>781, 1381=>641, 1382=>735, + 1383=>588, 1384=>641, 1385=>729, 1386=>735, 1387=>641, 1388=>448, 1389=>916, 1390=>644, 1391=>641, 1392=>641, 1393=>644, 1394=>737, 1395=>641, 1396=>676, 1397=>308, 1398=>794, + 1399=>502, 1400=>641, 1401=>502, 1402=>938, 1403=>502, 1404=>777, 1405=>641, 1406=>732, 1407=>938, 1408=>641, 1409=>644, 1410=>514, 1411=>938, 1412=>700, 1413=>618, 1414=>648, + 1415=>776, 1417=>360, 1418=>438, 1456=>0, 1457=>0, 1458=>0, 1459=>0, 1460=>0, 1461=>0, 1462=>0, 1463=>0, 1464=>0, 1465=>0, 1467=>0, 1468=>0, 1469=>0, + 1471=>0, 1472=>334, 1473=>0, 1474=>0, 1475=>334, 1478=>479, 1479=>0, 1488=>676, 1489=>658, 1490=>483, 1491=>615, 1492=>700, 1493=>334, 1494=>468, 1495=>700, 1496=>692, + 1497=>334, 1498=>700, 1499=>675, 1500=>646, 1501=>700, 1502=>771, 1503=>334, 1504=>479, 1505=>770, 1506=>647, 1507=>721, 1508=>699, 1509=>565, 1510=>676, 1511=>723, 1512=>700, + 1513=>867, 1514=>740, 1520=>623, 1521=>623, 1522=>623, 3647=>668, 3713=>734, 3714=>673, 3716=>674, 3719=>512, 3720=>668, 3722=>669, 3725=>685, 3732=>635, 3733=>633, 3734=>672, + 3735=>737, 3737=>657, 3738=>654, 3739=>654, 3740=>830, 3741=>744, 3742=>779, 3743=>779, 3745=>752, 3746=>685, 3747=>692, 3749=>691, 3751=>642, 3754=>744, 3755=>928, 3757=>651, + 3758=>705, 3759=>840, 3760=>620, 3761=>0, 3762=>549, 3763=>549, 3764=>0, 3765=>0, 3766=>0, 3767=>0, 3768=>0, 3769=>0, 3771=>0, 3772=>0, 3773=>603, 3776=>464, + 3777=>774, 3778=>464, 3779=>584, 3780=>569, 3782=>683, 3784=>0, 3785=>0, 3786=>0, 3787=>0, 3788=>0, 3789=>0, 3804=>1227, 3805=>1227, 5121=>696, 5122=>696, 5123=>696, + 5124=>696, 5125=>814, 5126=>814, 5127=>814, 5129=>814, 5130=>814, 5131=>814, 5132=>916, 5133=>908, 5134=>916, 5135=>908, 5136=>916, 5137=>908, 5138=>1034, 5139=>1025, 5140=>1034, + 5141=>1025, 5142=>814, 5143=>1034, 5144=>1028, 5145=>1034, 5146=>1028, 5147=>814, 5149=>278, 5150=>476, 5151=>382, 5152=>382, 5153=>355, 5154=>355, 5155=>355, 5156=>355, 5157=>507, + 5158=>423, 5159=>278, 5160=>355, 5161=>355, 5162=>355, 5163=>1092, 5164=>888, 5165=>1094, 5166=>1167, 5167=>696, 5168=>696, 5169=>696, 5170=>696, 5171=>797, 5172=>797, 5173=>797, + 5175=>797, 5176=>797, 5177=>797, 5178=>916, 5179=>908, 5180=>916, 5181=>908, 5182=>916, 5183=>908, 5184=>1034, 5185=>1025, 5186=>1034, 5187=>1025, 5188=>1034, 5189=>1028, 5190=>1034, + 5191=>1028, 5192=>797, 5193=>518, 5194=>206, 5196=>730, 5197=>730, 5198=>730, 5199=>730, 5200=>734, 5201=>734, 5202=>734, 5204=>734, 5205=>734, 5206=>734, 5207=>950, 5208=>943, + 5209=>950, 5210=>943, 5211=>950, 5212=>943, 5213=>954, 5214=>949, 5215=>954, 5216=>949, 5217=>954, 5218=>946, 5219=>954, 5220=>946, 5221=>954, 5222=>493, 5223=>904, 5224=>904, + 5225=>921, 5226=>915, 5227=>668, 5228=>668, 5229=>668, 5230=>668, 5231=>668, 5232=>668, 5233=>668, 5234=>668, 5235=>668, 5236=>926, 5237=>877, 5238=>882, 5239=>877, 5240=>882, + 5241=>877, 5242=>926, 5243=>877, 5244=>926, 5245=>877, 5246=>882, 5247=>877, 5248=>882, 5249=>877, 5250=>882, 5251=>451, 5252=>451, 5253=>844, 5254=>844, 5255=>844, 5256=>844, + 5257=>668, 5258=>668, 5259=>668, 5260=>668, 5261=>668, 5262=>668, 5263=>668, 5264=>668, 5265=>668, 5266=>926, 5267=>877, 5268=>926, 5269=>877, 5270=>926, 5271=>877, 5272=>926, + 5273=>877, 5274=>926, 5275=>877, 5276=>926, 5277=>877, 5278=>926, 5279=>877, 5280=>926, 5281=>451, 5282=>451, 5283=>563, 5284=>563, 5285=>563, 5286=>563, 5287=>563, 5288=>563, + 5289=>563, 5290=>563, 5291=>563, 5292=>793, 5293=>769, 5294=>777, 5295=>786, 5296=>777, 5297=>786, 5298=>793, 5299=>786, 5300=>793, 5301=>786, 5302=>777, 5303=>786, 5304=>777, + 5305=>786, 5306=>777, 5307=>392, 5308=>493, 5309=>392, 5312=>889, 5313=>889, 5314=>889, 5315=>889, 5316=>838, 5317=>838, 5318=>838, 5319=>838, 5320=>838, 5321=>1114, 5322=>1122, + 5323=>1080, 5324=>1105, 5325=>1080, 5326=>1105, 5327=>838, 5328=>593, 5329=>447, 5330=>593, 5331=>889, 5332=>889, 5333=>889, 5334=>889, 5335=>838, 5336=>838, 5337=>838, 5338=>838, + 5339=>838, 5340=>1107, 5341=>1122, 5342=>1155, 5343=>1105, 5344=>1155, 5345=>1105, 5346=>1105, 5347=>1093, 5348=>1105, 5349=>1093, 5350=>1155, 5351=>1105, 5352=>1155, 5353=>1105, 5354=>593, + 5356=>797, 5357=>657, 5358=>657, 5359=>657, 5360=>657, 5361=>657, 5362=>657, 5363=>657, 5364=>657, 5365=>657, 5366=>897, 5367=>862, 5368=>870, 5369=>890, 5370=>870, 5371=>890, + 5372=>897, 5373=>862, 5374=>897, 5375=>862, 5376=>870, 5377=>890, 5378=>870, 5379=>890, 5380=>870, 5381=>443, 5382=>414, 5383=>443, 5392=>831, 5393=>831, 5394=>831, 5395=>1022, + 5396=>1022, 5397=>1022, 5398=>1022, 5399=>1088, 5400=>1081, 5401=>1088, 5402=>1081, 5403=>1088, 5404=>1081, 5405=>1288, 5406=>1278, 5407=>1288, 5408=>1278, 5409=>1288, 5410=>1278, 5411=>1288, + 5412=>1278, 5413=>671, 5414=>698, 5415=>698, 5416=>698, 5417=>698, 5418=>698, 5419=>698, 5420=>698, 5421=>698, 5422=>698, 5423=>902, 5424=>903, 5425=>911, 5426=>896, 5427=>911, + 5428=>896, 5429=>902, 5430=>903, 5431=>902, 5432=>903, 5433=>911, 5434=>896, 5435=>911, 5436=>896, 5437=>911, 5438=>445, 5440=>355, 5441=>458, 5442=>929, 5443=>929, 5444=>878, + 5445=>878, 5446=>878, 5447=>878, 5448=>659, 5449=>659, 5450=>659, 5451=>659, 5452=>659, 5453=>659, 5454=>902, 5455=>863, 5456=>445, 5458=>797, 5459=>696, 5460=>696, 5461=>696, + 5462=>696, 5463=>835, 5464=>835, 5465=>835, 5466=>835, 5467=>1055, 5468=>1028, 5469=>542, 5470=>730, 5471=>730, 5472=>730, 5473=>730, 5474=>730, 5475=>730, 5476=>734, 5477=>734, + 5478=>734, 5479=>734, 5480=>954, 5481=>946, 5482=>493, 5492=>879, 5493=>879, 5494=>879, 5495=>879, 5496=>879, 5497=>879, 5498=>879, 5499=>556, 5500=>753, 5501=>458, 5502=>1114, + 5503=>1114, 5504=>1114, 5505=>1114, 5506=>1114, 5507=>1114, 5508=>1114, 5509=>890, 5514=>879, 5515=>879, 5516=>879, 5517=>879, 5518=>1432, 5519=>1432, 5520=>1432, 5521=>1165, 5522=>1165, + 5523=>1432, 5524=>1432, 5525=>763, 5526=>1146, 5536=>889, 5537=>889, 5538=>838, 5539=>838, 5540=>838, 5541=>838, 5542=>593, 5543=>698, 5544=>698, 5545=>698, 5546=>698, 5547=>698, + 5548=>698, 5549=>698, 5550=>445, 5551=>668, 5598=>747, 5601=>747, 5702=>446, 5703=>446, 5742=>371, 5743=>1114, 5744=>1432, 5745=>1814, 5746=>1814, 5747=>1548, 5748=>1510, 5749=>1814, + 5750=>1814, 7424=>586, 7425=>750, 7426=>943, 7427=>547, 7428=>533, 7429=>608, 7430=>608, 7431=>502, 7432=>501, 7433=>308, 7434=>444, 7435=>598, 7436=>485, 7437=>735, 7438=>630, + 7439=>618, 7440=>533, 7441=>594, 7442=>594, 7443=>594, 7444=>984, 7446=>618, 7447=>618, 7448=>500, 7449=>578, 7450=>578, 7451=>521, 7452=>571, 7453=>663, 7454=>853, 7455=>625, + 7456=>586, 7457=>831, 7458=>523, 7459=>581, 7462=>485, 7463=>586, 7464=>622, 7465=>500, 7466=>703, 7467=>659, 7468=>438, 7469=>615, 7470=>432, 7472=>470, 7473=>387, 7474=>387, + 7475=>465, 7476=>474, 7477=>211, 7478=>211, 7479=>439, 7480=>361, 7481=>563, 7482=>474, 7483=>474, 7484=>481, 7485=>458, 7486=>415, 7487=>436, 7488=>387, 7489=>460, 7490=>625, + 7491=>412, 7492=>412, 7493=>431, 7494=>641, 7495=>431, 7496=>431, 7497=>431, 7498=>431, 7499=>347, 7500=>347, 7501=>431, 7502=>197, 7503=>438, 7504=>597, 7505=>410, 7506=>439, + 7507=>372, 7508=>439, 7509=>439, 7510=>431, 7511=>349, 7512=>410, 7513=>416, 7514=>597, 7515=>451, 7517=>405, 7518=>386, 7519=>389, 7520=>443, 7521=>365, 7522=>197, 7523=>284, + 7524=>410, 7525=>451, 7526=>405, 7527=>386, 7528=>389, 7529=>443, 7530=>365, 7543=>644, 7544=>474, 7547=>491, 7557=>462, 7579=>431, 7580=>372, 7581=>372, 7582=>439, 7583=>347, + 7584=>339, 7585=>313, 7586=>431, 7587=>410, 7588=>312, 7589=>253, 7590=>312, 7591=>312, 7592=>388, 7593=>293, 7594=>296, 7595=>333, 7596=>598, 7597=>597, 7598=>505, 7599=>505, + 7600=>403, 7601=>439, 7602=>488, 7603=>379, 7604=>356, 7605=>349, 7606=>524, 7607=>444, 7608=>359, 7609=>405, 7610=>451, 7611=>375, 7612=>471, 7613=>422, 7614=>409, 7615=>382, + 7620=>0, 7621=>0, 7622=>0, 7623=>0, 7624=>0, 7625=>0, 7680=>696, 7681=>607, 7682=>686, 7683=>644, 7684=>686, 7685=>644, 7686=>686, 7687=>644, 7688=>660, 7689=>533, + 7690=>747, 7691=>644, 7692=>747, 7693=>644, 7694=>747, 7695=>644, 7696=>747, 7697=>644, 7698=>747, 7699=>644, 7700=>615, 7701=>610, 7702=>615, 7703=>610, 7704=>615, 7705=>610, + 7706=>615, 7707=>610, 7708=>615, 7709=>610, 7710=>615, 7711=>391, 7712=>738, 7713=>644, 7714=>753, 7715=>641, 7716=>753, 7717=>641, 7718=>753, 7719=>641, 7720=>753, 7721=>641, + 7722=>753, 7723=>641, 7724=>334, 7725=>308, 7726=>334, 7727=>308, 7728=>697, 7729=>598, 7730=>697, 7731=>598, 7732=>697, 7733=>598, 7734=>573, 7735=>308, 7736=>573, 7737=>308, + 7738=>573, 7739=>308, 7740=>573, 7741=>308, 7742=>896, 7743=>938, 7744=>896, 7745=>938, 7746=>896, 7747=>938, 7748=>753, 7749=>641, 7750=>753, 7751=>641, 7752=>753, 7753=>641, + 7754=>753, 7755=>641, 7756=>765, 7757=>618, 7758=>765, 7759=>618, 7760=>765, 7761=>618, 7762=>765, 7763=>618, 7764=>659, 7765=>644, 7766=>659, 7767=>644, 7768=>693, 7769=>444, + 7770=>693, 7771=>444, 7772=>693, 7773=>444, 7774=>693, 7775=>444, 7776=>648, 7777=>536, 7778=>648, 7779=>536, 7780=>648, 7781=>536, 7782=>648, 7783=>536, 7784=>648, 7785=>536, + 7786=>614, 7787=>430, 7788=>614, 7789=>430, 7790=>614, 7791=>430, 7792=>614, 7793=>430, 7794=>730, 7795=>641, 7796=>730, 7797=>641, 7798=>730, 7799=>641, 7800=>730, 7801=>641, + 7802=>730, 7803=>641, 7804=>696, 7805=>586, 7806=>696, 7807=>586, 7808=>993, 7809=>831, 7810=>993, 7811=>831, 7812=>993, 7813=>831, 7814=>993, 7815=>831, 7816=>993, 7817=>831, + 7818=>694, 7819=>580, 7820=>694, 7821=>580, 7822=>651, 7823=>586, 7824=>652, 7825=>523, 7826=>652, 7827=>523, 7828=>652, 7829=>523, 7830=>641, 7831=>430, 7832=>831, 7833=>586, + 7834=>607, 7835=>391, 7840=>696, 7841=>607, 7842=>696, 7843=>607, 7844=>696, 7845=>607, 7846=>696, 7847=>607, 7848=>696, 7849=>607, 7850=>696, 7851=>607, 7852=>696, 7853=>607, + 7854=>696, 7855=>607, 7856=>696, 7857=>607, 7858=>696, 7859=>607, 7860=>696, 7861=>607, 7862=>696, 7863=>607, 7864=>615, 7865=>610, 7866=>615, 7867=>610, 7868=>615, 7869=>610, + 7870=>615, 7871=>610, 7872=>615, 7873=>610, 7874=>615, 7875=>610, 7876=>615, 7877=>610, 7878=>615, 7879=>610, 7880=>334, 7881=>308, 7882=>334, 7883=>308, 7884=>765, 7885=>618, + 7886=>765, 7887=>618, 7888=>765, 7889=>618, 7890=>765, 7891=>618, 7892=>765, 7893=>618, 7894=>765, 7895=>618, 7896=>765, 7897=>618, 7898=>765, 7899=>618, 7900=>765, 7901=>618, + 7902=>765, 7903=>618, 7904=>765, 7905=>618, 7906=>765, 7907=>618, 7908=>730, 7909=>641, 7910=>730, 7911=>641, 7912=>730, 7913=>641, 7914=>730, 7915=>641, 7916=>730, 7917=>641, + 7918=>730, 7919=>641, 7920=>730, 7921=>641, 7922=>651, 7923=>586, 7924=>651, 7925=>586, 7926=>651, 7927=>586, 7928=>651, 7929=>586, 7936=>618, 7937=>618, 7938=>618, 7939=>618, + 7940=>618, 7941=>618, 7942=>618, 7943=>618, 7944=>696, 7945=>696, 7946=>937, 7947=>939, 7948=>841, 7949=>866, 7950=>751, 7951=>773, 7952=>501, 7953=>501, 7954=>501, 7955=>501, + 7956=>501, 7957=>501, 7960=>712, 7961=>715, 7962=>989, 7963=>986, 7964=>920, 7965=>947, 7968=>641, 7969=>641, 7970=>641, 7971=>641, 7972=>641, 7973=>641, 7974=>641, 7975=>641, + 7976=>851, 7977=>856, 7978=>1125, 7979=>1125, 7980=>1062, 7981=>1085, 7982=>948, 7983=>956, 7984=>351, 7985=>351, 7986=>351, 7987=>351, 7988=>351, 7989=>351, 7990=>351, 7991=>351, + 7992=>435, 7993=>440, 7994=>699, 7995=>707, 7996=>641, 7997=>664, 7998=>544, 7999=>544, 8000=>618, 8001=>618, 8002=>618, 8003=>618, 8004=>618, 8005=>618, 8008=>802, 8009=>839, + 8010=>1099, 8011=>1101, 8012=>947, 8013=>974, 8016=>607, 8017=>607, 8018=>607, 8019=>607, 8020=>607, 8021=>607, 8022=>607, 8023=>607, 8025=>837, 8027=>1065, 8029=>1079, 8031=>944, + 8032=>782, 8033=>782, 8034=>782, 8035=>782, 8036=>782, 8037=>782, 8038=>782, 8039=>782, 8040=>817, 8041=>862, 8042=>1121, 8043=>1126, 8044=>968, 8045=>994, 8046=>925, 8047=>968, + 8048=>618, 8049=>618, 8050=>501, 8051=>501, 8052=>641, 8053=>641, 8054=>351, 8055=>351, 8056=>618, 8057=>618, 8058=>607, 8059=>607, 8060=>782, 8061=>782, 8064=>618, 8065=>618, + 8066=>618, 8067=>618, 8068=>618, 8069=>618, 8070=>618, 8071=>618, 8072=>696, 8073=>696, 8074=>937, 8075=>939, 8076=>841, 8077=>866, 8078=>751, 8079=>773, 8080=>641, 8081=>641, + 8082=>641, 8083=>641, 8084=>641, 8085=>641, 8086=>641, 8087=>641, 8088=>851, 8089=>856, 8090=>1125, 8091=>1125, 8092=>1062, 8093=>1085, 8094=>948, 8095=>956, 8096=>782, 8097=>782, + 8098=>782, 8099=>782, 8100=>782, 8101=>782, 8102=>782, 8103=>782, 8104=>817, 8105=>862, 8106=>1121, 8107=>1126, 8108=>968, 8109=>994, 8110=>925, 8111=>968, 8112=>618, 8113=>618, + 8114=>618, 8115=>618, 8116=>618, 8118=>618, 8119=>618, 8120=>696, 8121=>696, 8122=>789, 8123=>717, 8124=>696, 8125=>450, 8126=>450, 8127=>450, 8128=>450, 8129=>450, 8130=>641, + 8131=>641, 8132=>641, 8134=>641, 8135=>641, 8136=>836, 8137=>761, 8138=>972, 8139=>908, 8140=>753, 8141=>450, 8142=>450, 8143=>450, 8144=>351, 8145=>351, 8146=>351, 8147=>351, + 8150=>351, 8151=>351, 8152=>334, 8153=>334, 8154=>559, 8155=>507, 8157=>450, 8158=>450, 8159=>450, 8160=>607, 8161=>607, 8162=>607, 8163=>607, 8164=>644, 8165=>644, 8166=>607, + 8167=>607, 8168=>651, 8169=>651, 8170=>918, 8171=>882, 8172=>754, 8173=>450, 8174=>450, 8175=>450, 8178=>782, 8179=>782, 8180=>782, 8182=>782, 8183=>782, 8184=>958, 8185=>801, + 8186=>976, 8187=>804, 8188=>765, 8189=>450, 8190=>450, 8192=>450, 8193=>900, 8194=>450, 8195=>900, 8196=>296, 8197=>225, 8198=>150, 8199=>626, 8200=>342, 8201=>180, 8202=>89, + 8203=>0, 8204=>0, 8205=>0, 8206=>0, 8207=>0, 8208=>374, 8209=>374, 8210=>626, 8213=>900, 8214=>450, 8215=>450, 8219=>342, 8223=>591, 8227=>575, 8228=>342, 8229=>616, + 8231=>313, 8234=>0, 8235=>0, 8236=>0, 8237=>0, 8238=>0, 8239=>180, 8241=>1717, 8242=>237, 8243=>402, 8244=>567, 8245=>237, 8246=>402, 8247=>567, 8248=>659, 8251=>875, + 8252=>564, 8253=>522, 8254=>450, 8255=>745, 8256=>745, 8257=>296, 8258=>920, 8259=>450, 8260=>150, 8261=>411, 8262=>411, 8263=>927, 8264=>746, 8265=>746, 8266=>461, 8267=>618, + 8268=>450, 8269=>450, 8270=>470, 8271=>360, 8272=>745, 8273=>470, 8274=>500, 8275=>754, 8276=>746, 8277=>754, 8278=>615, 8279=>731, 8280=>754, 8281=>754, 8282=>342, 8283=>784, + 8284=>754, 8285=>342, 8286=>342, 8287=>200, 8288=>0, 8289=>0, 8290=>0, 8291=>0, 8298=>0, 8299=>0, 8300=>0, 8301=>0, 8302=>0, 8303=>0, 8304=>394, 8305=>197, + 8308=>394, 8309=>394, 8310=>394, 8311=>394, 8312=>394, 8313=>394, 8314=>475, 8315=>475, 8316=>475, 8317=>259, 8318=>259, 8319=>410, 8320=>394, 8321=>394, 8322=>394, 8323=>394, + 8324=>394, 8325=>394, 8326=>394, 8327=>394, 8328=>394, 8329=>394, 8330=>475, 8331=>475, 8332=>475, 8333=>259, 8334=>259, 8336=>412, 8337=>431, 8338=>439, 8339=>371, 8340=>431, + 8352=>836, 8353=>626, 8354=>626, 8355=>626, 8356=>626, 8357=>938, 8358=>753, 8359=>1339, 8360=>1084, 8361=>993, 8362=>768, 8363=>642, 8365=>626, 8366=>614, 8367=>1252, 8368=>626, + 8369=>626, 8370=>626, 8371=>626, 8372=>773, 8373=>626, 8400=>0, 8401=>0, 8406=>0, 8407=>0, 8448=>995, 8449=>995, 8450=>660, 8451=>1090, 8452=>807, 8453=>1002, 8454=>1033, + 8455=>626, 8456=>628, 8457=>856, 8459=>965, 8460=>822, 8461=>765, 8462=>641, 8463=>641, 8464=>544, 8465=>627, 8466=>781, 8467=>424, 8468=>876, 8469=>753, 8470=>1083, 8471=>900, + 8472=>627, 8473=>631, 8474=>765, 8475=>789, 8476=>732, 8477=>713, 8478=>807, 8479=>639, 8480=>917, 8481=>1115, 8483=>751, 8484=>652, 8485=>560, 8486=>765, 8487=>692, 8488=>686, + 8489=>272, 8490=>697, 8491=>696, 8492=>835, 8493=>699, 8494=>769, 8495=>572, 8496=>664, 8497=>729, 8498=>615, 8499=>1074, 8500=>418, 8501=>714, 8502=>662, 8503=>453, 8504=>625, + 8505=>342, 8506=>851, 8507=>1232, 8508=>710, 8509=>663, 8510=>586, 8511=>760, 8512=>756, 8513=>707, 8514=>518, 8515=>573, 8516=>684, 8517=>747, 8518=>644, 8519=>610, 8520=>308, + 8521=>308, 8523=>785, 8526=>492, 8531=>932, 8532=>932, 8533=>932, 8534=>932, 8535=>932, 8536=>932, 8537=>932, 8538=>932, 8539=>932, 8540=>932, 8541=>932, 8542=>932, 8543=>554, + 8544=>334, 8545=>593, 8546=>851, 8547=>989, 8548=>696, 8549=>989, 8550=>1247, 8551=>1505, 8552=>1008, 8553=>694, 8554=>1008, 8555=>1266, 8556=>573, 8557=>660, 8558=>747, 8559=>896, + 8560=>308, 8561=>546, 8562=>785, 8563=>885, 8564=>586, 8565=>866, 8566=>1104, 8567=>1342, 8568=>872, 8569=>580, 8570=>872, 8571=>1110, 8572=>308, 8573=>533, 8574=>644, 8575=>938, + 8576=>1160, 8577=>747, 8578=>1160, 8579=>660, 8580=>533, 8592=>754, 8593=>754, 8594=>754, 8595=>754, 8596=>754, 8597=>754, 8598=>754, 8599=>754, 8600=>754, 8601=>754, 8602=>754, + 8603=>754, 8604=>754, 8605=>754, 8606=>754, 8607=>754, 8608=>754, 8609=>754, 8610=>754, 8611=>754, 8612=>754, 8613=>754, 8614=>754, 8615=>754, 8616=>754, 8617=>754, 8618=>754, + 8619=>754, 8620=>754, 8621=>754, 8622=>754, 8623=>754, 8624=>754, 8625=>754, 8626=>754, 8627=>754, 8628=>754, 8629=>754, 8630=>754, 8631=>754, 8632=>754, 8633=>754, 8634=>754, + 8635=>754, 8636=>754, 8637=>754, 8638=>754, 8639=>754, 8640=>754, 8641=>754, 8642=>754, 8643=>754, 8644=>754, 8645=>754, 8646=>754, 8647=>754, 8648=>754, 8649=>754, 8650=>754, + 8651=>754, 8652=>754, 8653=>754, 8654=>754, 8655=>754, 8656=>754, 8657=>754, 8658=>754, 8659=>754, 8660=>754, 8661=>754, 8662=>754, 8663=>754, 8664=>754, 8665=>754, 8666=>754, + 8667=>754, 8668=>754, 8669=>754, 8670=>754, 8671=>754, 8672=>754, 8673=>754, 8674=>754, 8675=>754, 8676=>754, 8677=>754, 8678=>754, 8679=>754, 8680=>754, 8681=>754, 8682=>754, + 8683=>754, 8684=>754, 8685=>754, 8686=>754, 8687=>754, 8688=>754, 8689=>754, 8690=>754, 8691=>754, 8692=>754, 8693=>754, 8694=>754, 8695=>754, 8696=>754, 8697=>754, 8698=>754, + 8699=>754, 8700=>754, 8701=>754, 8702=>754, 8703=>754, 8704=>696, 8705=>626, 8706=>489, 8707=>615, 8708=>615, 8709=>771, 8710=>627, 8711=>627, 8712=>807, 8713=>807, 8714=>675, + 8715=>807, 8716=>807, 8717=>675, 8718=>572, 8719=>708, 8720=>708, 8721=>646, 8722=>754, 8723=>754, 8724=>626, 8725=>150, 8726=>626, 8727=>754, 8728=>563, 8729=>342, 8730=>600, + 8731=>600, 8732=>600, 8733=>602, 8734=>750, 8735=>754, 8736=>807, 8737=>807, 8738=>754, 8739=>450, 8740=>450, 8741=>450, 8742=>450, 8743=>730, 8744=>730, 8745=>730, 8746=>730, + 8747=>549, 8748=>835, 8749=>1165, 8750=>506, 8751=>879, 8752=>1181, 8753=>506, 8754=>506, 8755=>506, 8756=>626, 8757=>626, 8758=>264, 8759=>626, 8760=>754, 8761=>754, 8762=>754, + 8763=>754, 8764=>754, 8765=>754, 8766=>754, 8767=>754, 8768=>337, 8769=>754, 8770=>754, 8771=>754, 8772=>754, 8773=>754, 8774=>754, 8775=>754, 8776=>754, 8777=>754, 8778=>754, + 8779=>754, 8780=>754, 8781=>754, 8782=>754, 8783=>754, 8784=>754, 8785=>754, 8786=>754, 8787=>754, 8788=>956, 8789=>956, 8790=>754, 8791=>754, 8792=>754, 8793=>754, 8794=>754, + 8795=>754, 8796=>754, 8797=>754, 8798=>754, 8799=>754, 8800=>754, 8801=>754, 8802=>754, 8803=>754, 8804=>754, 8805=>754, 8806=>754, 8807=>754, 8808=>756, 8809=>756, 8810=>942, + 8811=>942, 8812=>450, 8813=>754, 8814=>754, 8815=>754, 8816=>754, 8817=>754, 8818=>754, 8819=>754, 8820=>754, 8821=>754, 8822=>754, 8823=>754, 8824=>754, 8825=>754, 8826=>754, + 8827=>754, 8828=>754, 8829=>754, 8830=>754, 8831=>754, 8832=>754, 8833=>754, 8834=>754, 8835=>754, 8836=>754, 8837=>754, 8838=>754, 8839=>754, 8840=>754, 8841=>754, 8842=>754, + 8843=>754, 8844=>730, 8845=>730, 8846=>730, 8847=>754, 8848=>754, 8849=>754, 8850=>754, 8851=>678, 8852=>678, 8853=>754, 8854=>754, 8855=>754, 8856=>754, 8857=>754, 8858=>754, + 8859=>754, 8860=>754, 8861=>754, 8862=>754, 8863=>754, 8864=>754, 8865=>754, 8866=>822, 8867=>822, 8868=>822, 8869=>822, 8870=>488, 8871=>488, 8872=>822, 8873=>822, 8874=>822, + 8875=>822, 8876=>822, 8877=>822, 8878=>822, 8879=>822, 8882=>754, 8883=>754, 8884=>754, 8885=>754, 8886=>900, 8887=>900, 8888=>754, 8889=>754, 8890=>488, 8891=>730, 8892=>730, + 8893=>730, 8896=>758, 8897=>758, 8898=>758, 8899=>758, 8900=>444, 8901=>342, 8902=>563, 8904=>900, 8905=>900, 8906=>900, 8907=>900, 8908=>900, 8909=>754, 8918=>754, 8919=>754, + 8920=>1280, 8921=>1280, 8922=>754, 8923=>754, 8924=>754, 8925=>754, 8926=>754, 8927=>754, 8928=>754, 8929=>754, 8930=>754, 8931=>754, 8932=>754, 8933=>754, 8934=>754, 8935=>754, + 8936=>754, 8937=>754, 8938=>754, 8939=>754, 8940=>754, 8941=>754, 8946=>1042, 8947=>807, 8948=>675, 8949=>807, 8950=>807, 8951=>675, 8952=>807, 8953=>807, 8954=>1042, 8955=>807, + 8956=>675, 8957=>807, 8958=>675, 8959=>807, 8962=>644, 8966=>826, 8968=>411, 8969=>411, 8970=>411, 8971=>411, 8976=>754, 8977=>484, 8984=>835, 8985=>754, 8992=>549, 8993=>549, + 8997=>900, 9000=>1299, 9085=>776, 9115=>450, 9116=>450, 9117=>450, 9118=>450, 9119=>450, 9120=>450, 9121=>450, 9122=>450, 9123=>450, 9124=>450, 9125=>450, 9126=>450, 9127=>675, + 9128=>675, 9129=>675, 9130=>675, 9131=>675, 9132=>675, 9133=>675, 9134=>549, 9166=>754, 9167=>850, 9250=>644, 9251=>644, 9312=>762, 9313=>762, 9314=>762, 9315=>762, 9316=>762, + 9317=>762, 9318=>762, 9319=>762, 9320=>762, 9321=>762, 9600=>692, 9601=>692, 9602=>692, 9603=>692, 9604=>692, 9605=>692, 9606=>692, 9607=>692, 9608=>692, 9609=>692, 9610=>692, + 9611=>692, 9612=>692, 9613=>692, 9614=>692, 9615=>692, 9616=>692, 9617=>692, 9618=>692, 9619=>692, 9620=>692, 9621=>692, 9622=>692, 9623=>692, 9624=>692, 9625=>692, 9626=>692, + 9627=>692, 9628=>692, 9629=>692, 9630=>692, 9631=>692, 9632=>850, 9633=>850, 9634=>850, 9635=>850, 9636=>850, 9637=>850, 9638=>850, 9639=>850, 9640=>850, 9641=>850, 9642=>610, + 9643=>610, 9644=>850, 9645=>850, 9646=>495, 9647=>495, 9648=>692, 9649=>692, 9650=>692, 9651=>692, 9652=>452, 9653=>452, 9654=>692, 9655=>692, 9656=>452, 9657=>452, 9658=>692, + 9659=>692, 9660=>692, 9661=>692, 9662=>452, 9663=>452, 9664=>692, 9665=>692, 9666=>452, 9667=>452, 9668=>692, 9669=>692, 9670=>692, 9671=>692, 9672=>692, 9673=>785, 9674=>444, + 9675=>785, 9676=>785, 9677=>785, 9678=>785, 9679=>785, 9680=>785, 9681=>785, 9682=>785, 9683=>785, 9684=>785, 9685=>785, 9686=>474, 9687=>474, 9688=>756, 9689=>873, 9690=>873, + 9691=>873, 9692=>348, 9693=>348, 9694=>348, 9695=>348, 9696=>692, 9697=>692, 9698=>692, 9699=>692, 9700=>692, 9701=>692, 9702=>575, 9703=>850, 9704=>850, 9705=>850, 9706=>850, + 9707=>850, 9708=>692, 9709=>692, 9710=>692, 9711=>1007, 9712=>850, 9713=>850, 9714=>850, 9715=>850, 9716=>785, 9717=>785, 9718=>785, 9719=>785, 9720=>692, 9721=>692, 9722=>692, + 9723=>747, 9724=>747, 9725=>659, 9726=>659, 9727=>692, 9728=>807, 9729=>900, 9730=>807, 9731=>807, 9732=>807, 9733=>807, 9734=>807, 9735=>515, 9736=>806, 9737=>807, 9738=>799, + 9739=>799, 9740=>604, 9741=>911, 9742=>1121, 9743=>1125, 9744=>807, 9745=>807, 9746=>807, 9747=>479, 9748=>807, 9749=>807, 9750=>807, 9751=>807, 9752=>807, 9753=>807, 9754=>807, + 9755=>807, 9756=>807, 9757=>548, 9758=>807, 9759=>548, 9760=>807, 9761=>807, 9762=>807, 9763=>807, 9764=>602, 9765=>671, 9766=>584, 9767=>705, 9768=>490, 9769=>807, 9770=>807, + 9771=>807, 9772=>639, 9773=>807, 9774=>807, 9775=>807, 9776=>807, 9777=>807, 9778=>807, 9779=>807, 9780=>807, 9781=>807, 9782=>807, 9783=>807, 9784=>807, 9785=>807, 9786=>807, + 9787=>807, 9788=>807, 9789=>807, 9790=>807, 9791=>552, 9792=>658, 9793=>658, 9794=>807, 9795=>807, 9796=>807, 9797=>807, 9798=>807, 9799=>807, 9800=>807, 9801=>807, 9802=>807, + 9803=>807, 9804=>807, 9805=>807, 9806=>807, 9807=>807, 9808=>807, 9809=>807, 9810=>807, 9811=>807, 9812=>807, 9813=>807, 9814=>807, 9815=>807, 9816=>807, 9817=>807, 9818=>807, + 9819=>807, 9820=>807, 9821=>807, 9822=>807, 9823=>807, 9824=>807, 9825=>807, 9826=>807, 9827=>807, 9828=>807, 9829=>807, 9830=>807, 9831=>807, 9832=>807, 9833=>424, 9834=>574, + 9835=>807, 9836=>807, 9837=>424, 9838=>321, 9839=>435, 9840=>673, 9841=>689, 9842=>807, 9843=>807, 9844=>807, 9845=>807, 9846=>807, 9847=>807, 9848=>807, 9849=>807, 9850=>807, + 9851=>807, 9852=>807, 9853=>807, 9854=>807, 9855=>807, 9856=>782, 9857=>782, 9858=>782, 9859=>782, 9860=>782, 9861=>782, 9862=>807, 9863=>807, 9864=>807, 9865=>807, 9866=>807, + 9867=>807, 9868=>807, 9869=>807, 9870=>807, 9871=>807, 9872=>807, 9873=>807, 9874=>807, 9875=>807, 9876=>807, 9877=>487, 9878=>807, 9879=>807, 9880=>807, 9881=>807, 9882=>807, + 9883=>807, 9884=>807, 9888=>807, 9889=>632, 9890=>754, 9891=>754, 9892=>754, 9893=>754, 9894=>754, 9895=>754, 9896=>754, 9897=>754, 9898=>754, 9899=>754, 9900=>754, 9901=>754, + 9902=>754, 9903=>754, 9904=>759, 9905=>754, 9906=>658, 9985=>754, 9986=>754, 9987=>754, 9988=>754, 9990=>754, 9991=>754, 9992=>754, 9993=>754, 9996=>754, 9997=>754, 9998=>754, + 9999=>754, 10000=>754, 10001=>754, 10002=>754, 10003=>754, 10004=>754, 10005=>754, 10006=>754, 10007=>754, 10008=>754, 10009=>754, 10010=>754, 10011=>754, 10012=>754, 10013=>754, 10014=>754, + 10015=>754, 10016=>754, 10017=>754, 10018=>754, 10019=>754, 10020=>754, 10021=>754, 10022=>754, 10023=>754, 10025=>754, 10026=>754, 10027=>754, 10028=>754, 10029=>754, 10030=>754, 10031=>754, + 10032=>754, 10033=>754, 10034=>754, 10035=>754, 10036=>754, 10037=>754, 10038=>754, 10039=>754, 10040=>754, 10041=>754, 10042=>754, 10043=>754, 10044=>754, 10045=>754, 10046=>754, 10047=>754, + 10048=>754, 10049=>754, 10050=>754, 10051=>754, 10052=>754, 10053=>754, 10054=>754, 10055=>754, 10056=>754, 10057=>754, 10058=>754, 10059=>754, 10061=>807, 10063=>807, 10064=>807, 10065=>807, + 10066=>807, 10070=>807, 10072=>754, 10073=>754, 10074=>754, 10075=>290, 10076=>290, 10077=>484, 10078=>484, 10081=>754, 10082=>754, 10083=>754, 10084=>754, 10085=>754, 10086=>754, 10087=>754, + 10088=>754, 10089=>754, 10090=>754, 10091=>754, 10092=>754, 10093=>754, 10094=>754, 10095=>754, 10096=>754, 10097=>754, 10098=>754, 10099=>754, 10100=>754, 10101=>754, 10102=>762, 10103=>762, + 10104=>762, 10105=>762, 10106=>762, 10107=>762, 10108=>762, 10109=>762, 10110=>762, 10111=>762, 10112=>754, 10113=>754, 10114=>754, 10115=>754, 10116=>754, 10117=>754, 10118=>754, 10119=>754, + 10120=>754, 10121=>754, 10122=>754, 10123=>754, 10124=>754, 10125=>754, 10126=>754, 10127=>754, 10128=>754, 10129=>754, 10130=>754, 10131=>754, 10132=>754, 10136=>754, 10137=>754, 10138=>754, + 10139=>754, 10140=>754, 10141=>754, 10142=>754, 10143=>754, 10144=>754, 10145=>754, 10146=>754, 10147=>754, 10148=>754, 10149=>754, 10150=>754, 10151=>754, 10152=>754, 10153=>754, 10154=>754, + 10155=>754, 10156=>754, 10157=>754, 10158=>754, 10159=>754, 10161=>754, 10162=>754, 10163=>754, 10164=>754, 10165=>754, 10166=>754, 10167=>754, 10168=>754, 10169=>754, 10170=>754, 10171=>754, + 10172=>754, 10173=>754, 10174=>754, 10208=>444, 10214=>438, 10215=>438, 10216=>411, 10217=>411, 10218=>648, 10219=>648, 10224=>754, 10225=>754, 10226=>754, 10227=>754, 10228=>1042, 10229=>1290, + 10230=>1290, 10231=>1290, 10232=>1290, 10233=>1290, 10234=>1290, 10235=>1290, 10236=>1290, 10237=>1290, 10238=>1290, 10239=>1290, 10240=>703, 10241=>703, 10242=>703, 10243=>703, 10244=>703, 10245=>703, + 10246=>703, 10247=>703, 10248=>703, 10249=>703, 10250=>703, 10251=>703, 10252=>703, 10253=>703, 10254=>703, 10255=>703, 10256=>703, 10257=>703, 10258=>703, 10259=>703, 10260=>703, 10261=>703, + 10262=>703, 10263=>703, 10264=>703, 10265=>703, 10266=>703, 10267=>703, 10268=>703, 10269=>703, 10270=>703, 10271=>703, 10272=>703, 10273=>703, 10274=>703, 10275=>703, 10276=>703, 10277=>703, + 10278=>703, 10279=>703, 10280=>703, 10281=>703, 10282=>703, 10283=>703, 10284=>703, 10285=>703, 10286=>703, 10287=>703, 10288=>703, 10289=>703, 10290=>703, 10291=>703, 10292=>703, 10293=>703, + 10294=>703, 10295=>703, 10296=>703, 10297=>703, 10298=>703, 10299=>703, 10300=>703, 10301=>703, 10302=>703, 10303=>703, 10304=>703, 10305=>703, 10306=>703, 10307=>703, 10308=>703, 10309=>703, + 10310=>703, 10311=>703, 10312=>703, 10313=>703, 10314=>703, 10315=>703, 10316=>703, 10317=>703, 10318=>703, 10319=>703, 10320=>703, 10321=>703, 10322=>703, 10323=>703, 10324=>703, 10325=>703, + 10326=>703, 10327=>703, 10328=>703, 10329=>703, 10330=>703, 10331=>703, 10332=>703, 10333=>703, 10334=>703, 10335=>703, 10336=>703, 10337=>703, 10338=>703, 10339=>703, 10340=>703, 10341=>703, + 10342=>703, 10343=>703, 10344=>703, 10345=>703, 10346=>703, 10347=>703, 10348=>703, 10349=>703, 10350=>703, 10351=>703, 10352=>703, 10353=>703, 10354=>703, 10355=>703, 10356=>703, 10357=>703, + 10358=>703, 10359=>703, 10360=>703, 10361=>703, 10362=>703, 10363=>703, 10364=>703, 10365=>703, 10366=>703, 10367=>703, 10368=>703, 10369=>703, 10370=>703, 10371=>703, 10372=>703, 10373=>703, + 10374=>703, 10375=>703, 10376=>703, 10377=>703, 10378=>703, 10379=>703, 10380=>703, 10381=>703, 10382=>703, 10383=>703, 10384=>703, 10385=>703, 10386=>703, 10387=>703, 10388=>703, 10389=>703, + 10390=>703, 10391=>703, 10392=>703, 10393=>703, 10394=>703, 10395=>703, 10396=>703, 10397=>703, 10398=>703, 10399=>703, 10400=>703, 10401=>703, 10402=>703, 10403=>703, 10404=>703, 10405=>703, + 10406=>703, 10407=>703, 10408=>703, 10409=>703, 10410=>703, 10411=>703, 10412=>703, 10413=>703, 10414=>703, 10415=>703, 10416=>703, 10417=>703, 10418=>703, 10419=>703, 10420=>703, 10421=>703, + 10422=>703, 10423=>703, 10424=>703, 10425=>703, 10426=>703, 10427=>703, 10428=>703, 10429=>703, 10430=>703, 10431=>703, 10432=>703, 10433=>703, 10434=>703, 10435=>703, 10436=>703, 10437=>703, + 10438=>703, 10439=>703, 10440=>703, 10441=>703, 10442=>703, 10443=>703, 10444=>703, 10445=>703, 10446=>703, 10447=>703, 10448=>703, 10449=>703, 10450=>703, 10451=>703, 10452=>703, 10453=>703, + 10454=>703, 10455=>703, 10456=>703, 10457=>703, 10458=>703, 10459=>703, 10460=>703, 10461=>703, 10462=>703, 10463=>703, 10464=>703, 10465=>703, 10466=>703, 10467=>703, 10468=>703, 10469=>703, + 10470=>703, 10471=>703, 10472=>703, 10473=>703, 10474=>703, 10475=>703, 10476=>703, 10477=>703, 10478=>703, 10479=>703, 10480=>703, 10481=>703, 10482=>703, 10483=>703, 10484=>703, 10485=>703, + 10486=>703, 10487=>703, 10488=>703, 10489=>703, 10490=>703, 10491=>703, 10492=>703, 10493=>703, 10494=>703, 10495=>703, 10502=>754, 10503=>754, 10506=>754, 10507=>754, 10560=>754, 10561=>754, + 10702=>754, 10703=>941, 10704=>941, 10705=>900, 10706=>900, 10707=>900, 10708=>900, 10709=>900, 10731=>444, 10752=>900, 10753=>900, 10754=>900, 10764=>1495, 10765=>506, 10766=>506, 10767=>506, + 10768=>506, 10769=>506, 10770=>506, 10771=>506, 10772=>506, 10773=>506, 10774=>506, 10775=>506, 10776=>506, 10777=>506, 10778=>506, 10779=>506, 10780=>506, 10877=>754, 10878=>754, 10879=>754, + 10880=>754, 10881=>754, 10882=>754, 10883=>754, 10884=>754, 10885=>754, 10886=>754, 10887=>754, 10888=>754, 10889=>754, 10890=>754, 10891=>754, 10892=>754, 10893=>754, 10894=>754, 10895=>754, + 10896=>754, 10897=>754, 10898=>754, 10899=>754, 10900=>754, 10901=>754, 10902=>754, 10903=>754, 10904=>754, 10905=>754, 10906=>754, 10907=>754, 10908=>754, 10909=>754, 10910=>754, 10911=>754, + 10912=>754, 10926=>754, 10927=>754, 10928=>754, 10929=>754, 10930=>754, 10931=>754, 10932=>754, 10933=>754, 10934=>754, 10935=>754, 10936=>754, 10937=>754, 10938=>754, 11001=>754, 11002=>754, + 11008=>754, 11009=>754, 11010=>754, 11011=>754, 11012=>754, 11013=>754, 11014=>754, 11015=>754, 11016=>754, 11017=>754, 11018=>754, 11019=>754, 11020=>754, 11021=>754, 11022=>754, 11023=>754, + 11024=>754, 11025=>754, 11026=>850, 11027=>850, 11028=>850, 11029=>850, 11030=>692, 11031=>692, 11032=>692, 11033=>692, 11034=>850, 11040=>782, 11041=>786, 11042=>786, 11043=>786, 11360=>573, + 11361=>324, 11362=>573, 11363=>659, 11364=>693, 11365=>607, 11366=>430, 11367=>860, 11368=>641, 11369=>697, 11370=>598, 11371=>652, 11372=>523, 11380=>586, 11381=>584, 11382=>464, 11383=>704, + 61960=>774, 62047=>647, 62917=>618, 64256=>749, 64257=>708, 64258=>708, 64259=>1024, 64260=>1024, 64261=>727, 64262=>917, 64275=>1249, 64276=>1245, 64277=>1240, 64278=>1245, 64279=>1542, 64285=>334, + 64287=>623, 64288=>647, 64297=>754, 64298=>877, 64299=>877, 64300=>877, 64301=>877, 64302=>676, 64303=>676, 64304=>676, 64305=>658, 64306=>452, 64307=>615, 64308=>700, 64309=>420, 64310=>468, + 64312=>747, 64313=>420, 64314=>700, 64315=>678, 64316=>650, 64318=>781, 64320=>479, 64321=>747, 64323=>744, 64324=>779, 64326=>654, 64327=>733, 64328=>700, 64329=>877, 64330=>740, 64331=>334, + 64332=>658, 64333=>678, 64334=>779, 65024=>0, 65025=>0, 65026=>0, 65027=>0, 65028=>0, 65029=>0, 65030=>0, 65031=>0, 65032=>0, 65033=>0, 65034=>0, 65035=>0, 65036=>0, + 65037=>0, 65038=>0, 65039=>0, 65533=>1002}; + font[:enc]=''; + font[:diff]=''; + font[:file]='DejaVuSansCondensed-BoldOblique.z'; + font[:ctg]='DejaVuSansCondensed-BoldOblique.ctg.z'; + font[:originalsize]=436624; +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSansCondensedi.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/DejaVuSansCondensedi.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,267 @@ +TCPDFFontDescriptor.define('DejaVuSansCondensedi') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='DejaVuSansCondensed-Oblique'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>96,'FontBBox'=>'[-914 -385 1493 1068]','ItalicAngle'=>-11,'StemV'=>70,'MissingWidth'=>540}; + font[:up]=-42; + font[:ut]=44; + font[:cw]={ + 0=>540, 32=>286, 33=>360, 34=>414, 35=>754, 36=>572, 37=>855, 38=>702, 39=>247, 40=>351, 41=>351, 42=>450, 43=>754, 44=>286, 45=>325, 46=>286, + 47=>303, 48=>572, 49=>572, 50=>572, 51=>572, 52=>572, 53=>572, 54=>572, 55=>572, 56=>572, 57=>572, 58=>303, 59=>303, 60=>754, 61=>754, 62=>754, + 63=>478, 64=>900, 65=>615, 66=>617, 67=>628, 68=>693, 69=>568, 70=>518, 71=>697, 72=>677, 73=>265, 74=>265, 75=>590, 76=>501, 77=>776, 78=>673, + 79=>708, 80=>542, 81=>708, 82=>625, 83=>571, 84=>549, 85=>659, 86=>615, 87=>890, 88=>616, 89=>549, 90=>616, 91=>351, 92=>303, 93=>351, 94=>754, + 95=>450, 96=>450, 97=>551, 98=>571, 99=>495, 100=>571, 101=>554, 102=>316, 103=>571, 104=>570, 105=>250, 106=>250, 107=>521, 108=>250, 109=>876, 110=>570, + 111=>550, 112=>571, 113=>571, 114=>370, 115=>469, 116=>353, 117=>570, 118=>532, 119=>736, 120=>532, 121=>532, 122=>472, 123=>572, 124=>303, 125=>572, 126=>754, + 8364=>572, 1027=>501, 8218=>286, 402=>316, 8222=>466, 8230=>900, 8224=>450, 8225=>450, 710=>450, 8240=>1215, 352=>571, 8249=>360, 338=>962, 1036=>639, 381=>616, 1039=>677, + 8216=>286, 8217=>286, 8220=>466, 8221=>466, 8226=>531, 8211=>450, 8212=>900, 732=>450, 8482=>900, 353=>469, 8250=>360, 339=>925, 1116=>543, 382=>472, 376=>549, 160=>286, + 161=>360, 162=>572, 163=>572, 164=>572, 165=>572, 166=>303, 167=>450, 168=>450, 169=>900, 170=>424, 171=>555, 172=>754, 173=>325, 174=>900, 175=>450, 176=>450, + 177=>754, 178=>360, 179=>360, 180=>450, 181=>572, 182=>572, 183=>286, 184=>450, 185=>360, 186=>424, 187=>555, 188=>872, 189=>872, 190=>872, 191=>478, 192=>615, + 193=>615, 194=>615, 195=>615, 196=>615, 197=>615, 198=>876, 199=>628, 200=>568, 201=>568, 202=>568, 203=>568, 204=>265, 205=>265, 206=>265, 207=>265, 208=>697, + 209=>673, 210=>708, 211=>708, 212=>708, 213=>708, 214=>708, 215=>754, 216=>708, 217=>659, 218=>659, 219=>659, 220=>659, 221=>549, 222=>547, 223=>567, 224=>551, + 225=>551, 226=>551, 227=>551, 228=>551, 229=>551, 230=>896, 231=>495, 232=>554, 233=>554, 234=>554, 235=>554, 236=>250, 237=>250, 238=>250, 239=>250, 240=>550, + 241=>570, 242=>550, 243=>550, 244=>550, 245=>550, 246=>550, 247=>754, 248=>550, 249=>570, 250=>570, 251=>570, 252=>570, 253=>532, 254=>571, 255=>532, 256=>615, + 257=>551, 258=>615, 259=>551, 260=>615, 261=>551, 262=>628, 263=>495, 264=>628, 265=>495, 266=>628, 267=>495, 268=>628, 269=>495, 270=>693, 271=>571, 272=>697, + 273=>571, 274=>568, 275=>554, 276=>568, 277=>554, 278=>568, 279=>554, 280=>568, 281=>554, 282=>568, 283=>554, 284=>697, 285=>571, 286=>697, 287=>571, 288=>697, + 289=>571, 290=>697, 291=>571, 292=>677, 293=>570, 294=>824, 295=>625, 296=>265, 297=>250, 298=>265, 299=>250, 300=>265, 301=>250, 302=>265, 303=>250, 304=>265, + 305=>250, 306=>531, 307=>500, 308=>265, 309=>250, 310=>590, 311=>521, 312=>521, 313=>501, 314=>250, 315=>501, 316=>250, 317=>501, 318=>296, 319=>501, 320=>536, + 321=>505, 322=>258, 323=>673, 324=>570, 325=>673, 326=>570, 327=>673, 328=>570, 329=>732, 330=>673, 331=>570, 332=>708, 333=>550, 334=>708, 335=>550, 336=>708, + 337=>550, 340=>625, 341=>370, 342=>625, 343=>370, 344=>625, 345=>370, 346=>571, 347=>469, 348=>571, 349=>469, 350=>571, 351=>469, 354=>549, 355=>353, 356=>549, + 357=>353, 358=>549, 359=>353, 360=>659, 361=>570, 362=>659, 363=>570, 364=>659, 365=>570, 366=>659, 367=>570, 368=>659, 369=>570, 370=>659, 371=>570, 372=>890, + 373=>736, 374=>549, 375=>532, 377=>616, 378=>472, 379=>616, 380=>472, 383=>316, 384=>571, 385=>661, 386=>617, 387=>571, 388=>617, 389=>571, 390=>633, 391=>628, + 392=>495, 393=>697, 394=>737, 395=>617, 396=>571, 397=>550, 398=>568, 399=>708, 400=>553, 401=>518, 403=>697, 404=>618, 405=>885, 406=>318, 407=>265, 408=>671, + 409=>521, 410=>250, 411=>532, 412=>876, 413=>673, 414=>570, 415=>708, 416=>822, 417=>550, 418=>844, 419=>663, 420=>586, 421=>571, 422=>625, 423=>571, 424=>469, + 425=>568, 426=>302, 427=>353, 428=>549, 429=>353, 430=>549, 431=>754, 432=>570, 433=>688, 434=>648, 435=>669, 436=>656, 437=>616, 438=>472, 439=>599, 440=>599, + 441=>520, 442=>472, 443=>572, 444=>599, 445=>520, 446=>459, 447=>571, 448=>265, 449=>443, 450=>413, 451=>266, 452=>1310, 453=>1165, 454=>1043, 455=>767, 456=>751, + 457=>500, 458=>938, 459=>923, 460=>820, 461=>615, 462=>551, 463=>265, 464=>250, 465=>708, 466=>550, 467=>659, 468=>570, 469=>659, 470=>570, 471=>659, 472=>570, + 473=>659, 474=>570, 475=>659, 476=>570, 477=>554, 478=>615, 479=>551, 480=>615, 481=>551, 482=>876, 483=>896, 484=>697, 485=>571, 486=>697, 487=>571, 488=>590, + 489=>521, 490=>708, 491=>550, 492=>708, 493=>550, 494=>599, 495=>472, 496=>250, 497=>1310, 498=>1165, 499=>1043, 500=>697, 501=>571, 502=>1001, 503=>614, 504=>673, + 505=>570, 506=>615, 507=>551, 508=>876, 509=>896, 510=>708, 511=>550, 512=>615, 513=>551, 514=>615, 515=>551, 516=>568, 517=>554, 518=>568, 519=>554, 520=>265, + 521=>250, 522=>265, 523=>250, 524=>708, 525=>550, 526=>708, 527=>550, 528=>625, 529=>370, 530=>625, 531=>370, 532=>659, 533=>570, 534=>659, 535=>570, 536=>571, + 537=>469, 538=>549, 539=>353, 540=>564, 541=>469, 542=>677, 543=>570, 544=>662, 545=>754, 546=>628, 547=>549, 548=>616, 549=>472, 550=>615, 551=>551, 552=>568, + 553=>554, 554=>708, 555=>550, 556=>708, 557=>550, 558=>708, 559=>550, 560=>708, 561=>550, 562=>549, 563=>532, 564=>427, 565=>758, 566=>429, 567=>250, 568=>898, + 569=>898, 570=>615, 571=>628, 572=>495, 573=>501, 574=>549, 575=>469, 576=>472, 577=>542, 578=>431, 579=>617, 580=>659, 581=>615, 582=>568, 583=>554, 584=>265, + 585=>250, 586=>703, 587=>571, 588=>625, 589=>370, 590=>549, 591=>532, 592=>551, 593=>571, 594=>571, 595=>571, 596=>495, 597=>495, 598=>571, 599=>654, 600=>554, + 601=>554, 602=>759, 603=>490, 604=>490, 605=>698, 606=>598, 607=>293, 608=>626, 609=>571, 610=>566, 611=>536, 612=>536, 613=>570, 614=>570, 615=>570, 616=>334, + 617=>348, 618=>334, 619=>356, 620=>438, 621=>250, 622=>635, 623=>876, 624=>876, 625=>876, 626=>581, 627=>578, 628=>570, 629=>550, 630=>772, 631=>655, 632=>593, + 633=>422, 634=>422, 635=>422, 636=>422, 637=>422, 638=>477, 639=>477, 640=>541, 641=>541, 642=>469, 643=>302, 644=>302, 645=>415, 646=>302, 647=>353, 648=>353, + 649=>570, 650=>556, 651=>538, 652=>532, 653=>736, 654=>532, 655=>549, 656=>472, 657=>472, 658=>520, 659=>520, 660=>459, 661=>459, 662=>459, 663=>459, 664=>708, + 665=>521, 666=>598, 667=>637, 668=>588, 669=>263, 670=>600, 671=>456, 672=>654, 673=>459, 674=>459, 675=>913, 676=>952, 677=>911, 678=>742, 679=>549, 680=>700, + 681=>763, 682=>576, 683=>589, 684=>463, 685=>463, 686=>513, 687=>597, 688=>359, 689=>359, 690=>157, 691=>233, 692=>266, 693=>266, 694=>341, 695=>463, 696=>335, + 697=>250, 698=>414, 699=>286, 700=>286, 701=>286, 702=>276, 703=>276, 704=>333, 705=>333, 706=>450, 707=>450, 708=>450, 709=>450, 711=>450, 712=>247, 713=>450, + 714=>450, 715=>450, 716=>247, 717=>450, 718=>450, 719=>450, 720=>303, 721=>303, 722=>276, 723=>276, 724=>450, 725=>450, 726=>371, 727=>450, 728=>450, 729=>450, + 730=>450, 731=>450, 733=>450, 734=>284, 735=>450, 736=>383, 737=>149, 738=>335, 739=>399, 740=>333, 741=>444, 742=>444, 743=>444, 744=>444, 745=>444, 748=>450, + 749=>450, 750=>450, 755=>450, 759=>450, 768=>0, 769=>0, 770=>0, 771=>0, 772=>0, 773=>0, 774=>0, 775=>0, 776=>0, 777=>0, 778=>0, 779=>0, + 780=>0, 781=>0, 782=>0, 783=>0, 784=>0, 785=>0, 786=>0, 787=>0, 788=>0, 789=>0, 790=>0, 791=>0, 792=>0, 793=>0, 794=>0, 795=>0, + 796=>0, 797=>0, 798=>0, 799=>0, 800=>0, 801=>0, 802=>0, 803=>0, 804=>0, 805=>0, 806=>0, 807=>0, 808=>0, 809=>0, 810=>0, 811=>0, + 812=>0, 813=>0, 814=>0, 815=>0, 816=>0, 817=>0, 818=>0, 819=>0, 820=>0, 821=>0, 822=>0, 823=>0, 824=>0, 825=>0, 826=>0, 827=>0, + 828=>0, 829=>0, 830=>0, 831=>0, 832=>0, 833=>0, 834=>0, 835=>0, 836=>0, 837=>0, 838=>0, 839=>0, 840=>0, 841=>0, 842=>0, 843=>0, + 844=>0, 845=>0, 846=>0, 847=>0, 849=>0, 855=>0, 856=>0, 860=>0, 861=>0, 862=>0, 863=>0, 864=>0, 865=>0, 866=>0, 884=>250, 885=>250, + 890=>450, 891=>494, 892=>495, 893=>494, 894=>303, 900=>450, 901=>450, 902=>625, 903=>286, 904=>690, 905=>813, 906=>391, 908=>755, 910=>773, 911=>814, 912=>304, + 913=>615, 914=>617, 915=>501, 916=>615, 917=>568, 918=>616, 919=>677, 920=>708, 921=>265, 922=>590, 923=>615, 924=>776, 925=>673, 926=>568, 927=>708, 928=>677, + 929=>542, 931=>568, 932=>549, 933=>549, 934=>708, 935=>616, 936=>708, 937=>688, 938=>265, 939=>549, 940=>593, 941=>488, 942=>567, 943=>304, 944=>521, 945=>593, + 946=>574, 947=>532, 948=>550, 949=>486, 950=>489, 951=>570, 952=>550, 953=>304, 954=>530, 955=>532, 956=>572, 957=>502, 958=>501, 959=>550, 960=>542, 961=>571, + 962=>528, 963=>570, 964=>542, 965=>521, 966=>593, 967=>532, 968=>593, 969=>753, 970=>304, 971=>521, 972=>550, 973=>521, 974=>753, 976=>553, 977=>557, 978=>628, + 979=>758, 980=>628, 981=>593, 982=>753, 983=>597, 984=>708, 985=>550, 986=>583, 987=>528, 988=>518, 989=>413, 990=>593, 991=>593, 992=>778, 993=>564, 994=>840, + 995=>753, 996=>682, 997=>593, 998=>712, 999=>553, 1000=>618, 1001=>546, 1002=>690, 1003=>563, 1004=>629, 1005=>550, 1006=>549, 1007=>482, 1008=>597, 1009=>571, 1010=>495, + 1011=>250, 1012=>708, 1013=>554, 1014=>554, 1015=>547, 1016=>571, 1017=>628, 1018=>776, 1019=>585, 1020=>571, 1021=>633, 1022=>628, 1023=>633, 1024=>568, 1025=>568, 1026=>708, + 1028=>628, 1029=>571, 1030=>265, 1031=>265, 1032=>265, 1033=>984, 1034=>940, 1035=>708, 1037=>673, 1038=>548, 1040=>615, 1041=>617, 1042=>617, 1043=>501, 1044=>703, 1045=>568, + 1046=>969, 1047=>577, 1048=>673, 1049=>673, 1050=>639, 1051=>677, 1052=>776, 1053=>677, 1054=>708, 1055=>677, 1056=>542, 1057=>628, 1058=>549, 1059=>548, 1060=>774, 1061=>616, + 1062=>699, 1063=>617, 1064=>962, 1065=>984, 1066=>749, 1067=>736, 1068=>617, 1069=>628, 1070=>971, 1071=>625, 1072=>551, 1073=>555, 1074=>530, 1075=>473, 1076=>622, 1077=>554, + 1078=>811, 1079=>479, 1080=>584, 1081=>584, 1082=>543, 1083=>575, 1084=>679, 1085=>588, 1086=>550, 1087=>588, 1088=>571, 1089=>495, 1090=>524, 1091=>532, 1092=>769, 1093=>532, + 1094=>612, 1095=>532, 1096=>823, 1097=>848, 1098=>636, 1099=>710, 1100=>530, 1101=>494, 1102=>757, 1103=>541, 1104=>554, 1105=>554, 1106=>563, 1107=>473, 1108=>494, 1109=>469, + 1110=>250, 1111=>250, 1112=>250, 1113=>812, 1114=>809, 1115=>586, 1117=>584, 1118=>532, 1119=>588, 1120=>840, 1121=>753, 1122=>693, 1123=>604, 1124=>848, 1125=>674, 1126=>791, + 1127=>705, 1128=>1043, 1129=>901, 1130=>708, 1131=>550, 1132=>924, 1133=>742, 1134=>572, 1135=>486, 1136=>771, 1137=>789, 1138=>708, 1139=>533, 1140=>703, 1141=>598, 1142=>703, + 1143=>598, 1144=>893, 1145=>813, 1146=>857, 1147=>682, 1148=>1062, 1149=>925, 1150=>840, 1151=>753, 1152=>628, 1153=>495, 1154=>452, 1155=>0, 1156=>0, 1157=>0, 1158=>0, + 1160=>376, 1161=>376, 1162=>673, 1163=>591, 1164=>617, 1165=>530, 1166=>542, 1167=>571, 1168=>549, 1169=>473, 1170=>607, 1171=>500, 1172=>501, 1173=>441, 1174=>969, 1175=>811, + 1176=>577, 1177=>479, 1178=>639, 1179=>543, 1180=>639, 1181=>543, 1182=>639, 1183=>543, 1184=>771, 1185=>748, 1186=>677, 1187=>594, 1188=>913, 1189=>789, 1190=>1002, 1191=>855, + 1192=>716, 1193=>586, 1194=>628, 1195=>495, 1196=>549, 1197=>476, 1198=>549, 1199=>532, 1200=>549, 1201=>532, 1202=>616, 1203=>532, 1204=>840, 1205=>726, 1206=>617, 1207=>532, + 1208=>617, 1209=>532, 1210=>617, 1211=>570, 1212=>836, 1213=>658, 1214=>836, 1215=>658, 1216=>265, 1217=>969, 1218=>811, 1219=>589, 1220=>543, 1221=>677, 1222=>575, 1223=>677, + 1224=>594, 1225=>677, 1226=>594, 1227=>617, 1228=>532, 1229=>776, 1230=>679, 1231=>250, 1232=>615, 1233=>551, 1234=>615, 1235=>551, 1236=>876, 1237=>896, 1238=>568, 1239=>554, + 1240=>708, 1241=>554, 1242=>708, 1243=>554, 1244=>969, 1245=>811, 1246=>577, 1247=>479, 1248=>599, 1249=>520, 1250=>673, 1251=>584, 1252=>673, 1253=>584, 1254=>708, 1255=>550, + 1256=>708, 1257=>550, 1258=>708, 1259=>550, 1260=>628, 1261=>494, 1262=>548, 1263=>532, 1264=>548, 1265=>532, 1266=>548, 1267=>532, 1268=>617, 1269=>532, 1270=>501, 1271=>442, + 1272=>736, 1273=>710, 1274=>607, 1275=>500, 1276=>616, 1277=>532, 1278=>616, 1279=>532, 1280=>617, 1281=>530, 1282=>905, 1283=>807, 1284=>877, 1285=>782, 1286=>611, 1287=>529, + 1288=>964, 1289=>861, 1290=>965, 1291=>870, 1292=>697, 1293=>593, 1294=>695, 1295=>640, 1296=>553, 1297=>486, 1298=>677, 1299=>575, 1329=>780, 1330=>659, 1331=>794, 1332=>794, + 1333=>659, 1334=>579, 1335=>613, 1336=>659, 1337=>765, 1338=>794, 1339=>659, 1340=>501, 1341=>741, 1342=>888, 1343=>659, 1344=>636, 1345=>579, 1346=>794, 1347=>699, 1348=>794, + 1349=>659, 1350=>756, 1351=>659, 1352=>659, 1353=>659, 1354=>711, 1355=>579, 1356=>794, 1357=>659, 1358=>794, 1359=>571, 1360=>659, 1361=>659, 1362=>719, 1363=>774, 1364=>711, + 1365=>708, 1366=>571, 1369=>276, 1370=>286, 1371=>450, 1372=>450, 1373=>352, 1374=>474, 1375=>450, 1377=>876, 1378=>570, 1379=>686, 1380=>690, 1381=>570, 1382=>627, 1383=>479, + 1384=>570, 1385=>630, 1386=>627, 1387=>570, 1388=>363, 1389=>804, 1390=>576, 1391=>570, 1392=>570, 1393=>571, 1394=>631, 1395=>570, 1396=>593, 1397=>250, 1398=>684, 1399=>464, + 1400=>570, 1401=>407, 1402=>876, 1403=>464, 1404=>691, 1405=>570, 1406=>626, 1407=>876, 1408=>570, 1409=>621, 1410=>451, 1411=>876, 1412=>583, 1413=>550, 1414=>566, 1415=>686, + 1417=>303, 1418=>390, 1456=>0, 1457=>0, 1458=>0, 1459=>0, 1460=>0, 1461=>0, 1462=>0, 1463=>0, 1464=>0, 1465=>0, 1467=>0, 1468=>0, 1469=>0, 1471=>0, + 1472=>265, 1473=>0, 1474=>0, 1475=>265, 1478=>410, 1479=>0, 1488=>566, 1489=>547, 1490=>403, 1491=>534, 1492=>576, 1493=>245, 1494=>380, 1495=>576, 1496=>583, 1497=>245, + 1498=>532, 1499=>500, 1500=>539, 1501=>576, 1502=>593, 1503=>245, 1504=>397, 1505=>629, 1506=>572, 1507=>576, 1508=>543, 1509=>468, 1510=>523, 1511=>596, 1512=>532, 1513=>727, + 1514=>591, 1520=>423, 1521=>409, 1522=>423, 3647=>586, 3713=>603, 3714=>615, 3716=>619, 3719=>434, 3720=>565, 3722=>615, 3725=>619, 3732=>577, 3733=>577, 3734=>605, 3735=>589, + 3737=>576, 3738=>533, 3739=>533, 3740=>670, 3741=>690, 3742=>618, 3743=>618, 3745=>631, 3746=>619, 3747=>615, 3749=>584, 3751=>569, 3754=>633, 3755=>737, 3757=>569, 3758=>615, + 3759=>708, 3760=>569, 3761=>0, 3762=>485, 3763=>485, 3764=>0, 3765=>0, 3766=>0, 3767=>0, 3768=>0, 3769=>0, 3771=>0, 3772=>0, 3773=>597, 3776=>324, 3777=>611, + 3778=>414, 3779=>492, 3780=>442, 3782=>606, 3784=>0, 3785=>0, 3786=>0, 3787=>0, 3788=>0, 3789=>0, 3804=>925, 3805=>925, 5121=>615, 5122=>615, 5123=>615, 5124=>615, + 5125=>728, 5126=>728, 5127=>728, 5129=>728, 5130=>647, 5131=>647, 5132=>751, 5133=>751, 5134=>751, 5135=>751, 5136=>751, 5137=>751, 5138=>870, 5139=>906, 5140=>870, 5141=>906, + 5142=>728, 5143=>870, 5144=>906, 5145=>870, 5146=>906, 5147=>647, 5149=>230, 5150=>488, 5151=>381, 5152=>381, 5153=>350, 5154=>350, 5155=>354, 5156=>350, 5157=>419, 5158=>347, + 5159=>230, 5160=>350, 5161=>350, 5162=>350, 5163=>980, 5164=>817, 5165=>857, 5166=>1005, 5167=>615, 5168=>615, 5169=>615, 5170=>615, 5171=>566, 5172=>566, 5173=>566, 5175=>566, + 5176=>566, 5177=>566, 5178=>751, 5179=>615, 5180=>751, 5181=>751, 5182=>751, 5183=>751, 5184=>870, 5185=>906, 5186=>870, 5187=>906, 5188=>870, 5189=>906, 5190=>870, 5191=>906, + 5192=>656, 5193=>457, 5194=>172, 5196=>659, 5197=>659, 5198=>659, 5199=>659, 5200=>657, 5201=>657, 5202=>657, 5204=>657, 5205=>657, 5206=>657, 5207=>829, 5208=>800, 5209=>829, + 5210=>800, 5211=>829, 5212=>800, 5213=>835, 5214=>810, 5215=>835, 5216=>810, 5217=>853, 5218=>810, 5219=>853, 5220=>810, 5221=>853, 5222=>457, 5223=>790, 5224=>790, 5225=>779, + 5226=>801, 5227=>565, 5228=>565, 5229=>565, 5230=>565, 5231=>565, 5232=>565, 5233=>565, 5234=>565, 5235=>565, 5236=>773, 5237=>693, 5238=>733, 5239=>734, 5240=>733, 5241=>734, + 5242=>773, 5243=>693, 5244=>773, 5245=>693, 5246=>733, 5247=>734, 5248=>733, 5249=>734, 5250=>733, 5251=>366, 5252=>366, 5253=>675, 5254=>697, 5255=>675, 5256=>697, 5257=>565, + 5258=>565, 5259=>565, 5260=>565, 5261=>565, 5262=>565, 5263=>565, 5264=>565, 5265=>565, 5266=>773, 5267=>693, 5268=>733, 5269=>734, 5270=>733, 5271=>734, 5272=>773, 5273=>693, + 5274=>773, 5275=>693, 5276=>733, 5277=>734, 5278=>733, 5279=>734, 5280=>733, 5281=>391, 5282=>391, 5283=>470, 5284=>470, 5285=>470, 5286=>470, 5287=>470, 5288=>470, 5289=>470, + 5290=>470, 5291=>470, 5292=>674, 5293=>691, 5294=>671, 5295=>687, 5296=>671, 5297=>687, 5298=>674, 5299=>691, 5300=>674, 5301=>691, 5302=>671, 5303=>687, 5304=>671, 5305=>687, + 5306=>671, 5307=>347, 5308=>457, 5309=>347, 5312=>766, 5313=>766, 5314=>766, 5315=>766, 5316=>719, 5317=>719, 5318=>719, 5319=>719, 5320=>719, 5321=>962, 5322=>931, 5323=>953, + 5324=>766, 5325=>953, 5326=>719, 5327=>766, 5328=>540, 5329=>407, 5330=>540, 5331=>766, 5332=>766, 5333=>766, 5334=>766, 5335=>719, 5336=>719, 5337=>719, 5338=>719, 5339=>719, + 5340=>962, 5341=>931, 5342=>953, 5343=>927, 5344=>953, 5345=>927, 5346=>962, 5347=>931, 5348=>962, 5349=>931, 5350=>975, 5351=>927, 5352=>975, 5353=>927, 5354=>540, 5356=>656, + 5357=>542, 5358=>542, 5359=>542, 5360=>542, 5361=>542, 5362=>542, 5363=>542, 5364=>542, 5365=>542, 5366=>751, 5367=>678, 5368=>712, 5369=>694, 5370=>712, 5371=>694, 5372=>751, + 5373=>678, 5374=>751, 5375=>678, 5376=>712, 5377=>694, 5378=>712, 5379=>694, 5380=>712, 5381=>376, 5382=>378, 5383=>376, 5392=>641, 5393=>641, 5394=>641, 5395=>802, 5396=>802, + 5397=>802, 5398=>802, 5399=>818, 5400=>785, 5401=>818, 5402=>785, 5403=>818, 5404=>785, 5405=>1026, 5406=>989, 5407=>1026, 5408=>989, 5409=>1026, 5410=>989, 5411=>1026, 5412=>989, + 5413=>576, 5414=>564, 5415=>564, 5416=>564, 5417=>564, 5418=>564, 5419=>564, 5420=>564, 5421=>564, 5422=>564, 5423=>760, 5424=>703, 5425=>734, 5426=>736, 5427=>734, 5428=>736, + 5429=>760, 5430=>703, 5431=>760, 5432=>703, 5433=>734, 5434=>736, 5435=>734, 5436=>736, 5437=>734, 5438=>376, 5440=>350, 5441=>436, 5442=>824, 5443=>824, 5444=>776, 5445=>824, + 5446=>776, 5447=>776, 5448=>542, 5449=>542, 5450=>542, 5451=>542, 5452=>542, 5453=>542, 5454=>751, 5455=>678, 5456=>376, 5458=>656, 5459=>615, 5460=>615, 5461=>615, 5462=>615, + 5463=>605, 5464=>605, 5465=>605, 5466=>605, 5467=>831, 5468=>906, 5469=>457, 5470=>659, 5471=>659, 5472=>659, 5473=>659, 5474=>659, 5475=>659, 5476=>657, 5477=>657, 5478=>657, + 5479=>657, 5480=>853, 5481=>810, 5482=>457, 5492=>747, 5493=>747, 5494=>747, 5495=>747, 5496=>747, 5497=>747, 5498=>747, 5499=>507, 5500=>677, 5501=>436, 5502=>942, 5503=>942, + 5504=>942, 5505=>942, 5506=>942, 5507=>942, 5508=>942, 5509=>743, 5514=>747, 5515=>747, 5516=>747, 5517=>747, 5518=>1133, 5519=>1133, 5520=>1133, 5521=>901, 5522=>901, 5523=>1133, + 5524=>1133, 5525=>629, 5526=>965, 5536=>766, 5537=>766, 5538=>719, 5539=>719, 5540=>719, 5541=>719, 5542=>540, 5543=>579, 5544=>579, 5545=>579, 5546=>579, 5547=>579, 5548=>579, + 5549=>579, 5550=>376, 5551=>565, 5598=>693, 5601=>693, 5702=>421, 5703=>421, 5742=>399, 5743=>942, 5744=>1178, 5745=>1469, 5746=>1469, 5747=>1237, 5748=>1237, 5749=>1469, 5750=>1469, + 7424=>532, 7425=>646, 7426=>883, 7427=>527, 7428=>495, 7429=>544, 7430=>544, 7431=>441, 7432=>486, 7433=>250, 7434=>355, 7435=>521, 7436=>524, 7437=>679, 7438=>584, 7439=>550, + 7440=>495, 7441=>615, 7442=>615, 7443=>615, 7444=>920, 7446=>550, 7447=>550, 7448=>472, 7449=>541, 7450=>541, 7451=>524, 7452=>517, 7453=>663, 7454=>853, 7455=>574, 7456=>532, + 7457=>736, 7458=>472, 7459=>473, 7462=>524, 7463=>532, 7464=>507, 7465=>472, 7466=>531, 7467=>575, 7468=>387, 7469=>552, 7470=>389, 7472=>436, 7473=>358, 7474=>358, 7475=>439, + 7476=>426, 7477=>167, 7478=>167, 7479=>372, 7480=>315, 7481=>489, 7482=>424, 7483=>424, 7484=>446, 7485=>396, 7486=>342, 7487=>394, 7488=>346, 7489=>415, 7490=>560, 7491=>352, + 7492=>352, 7493=>365, 7494=>583, 7495=>385, 7496=>365, 7497=>375, 7498=>375, 7499=>324, 7500=>323, 7501=>365, 7502=>161, 7503=>383, 7504=>561, 7505=>368, 7506=>372, 7507=>333, + 7508=>372, 7509=>372, 7510=>385, 7511=>265, 7512=>364, 7513=>422, 7514=>561, 7515=>375, 7516=>900, 7517=>361, 7518=>335, 7519=>347, 7520=>374, 7521=>327, 7522=>161, 7523=>233, + 7524=>364, 7525=>375, 7526=>361, 7527=>335, 7528=>347, 7529=>374, 7530=>327, 7543=>571, 7544=>426, 7547=>334, 7557=>250, 7579=>365, 7580=>333, 7581=>333, 7582=>372, 7583=>324, + 7584=>267, 7585=>209, 7586=>365, 7587=>364, 7588=>235, 7589=>224, 7590=>234, 7591=>235, 7592=>211, 7593=>224, 7594=>211, 7595=>338, 7596=>561, 7597=>561, 7598=>369, 7599=>431, + 7600=>368, 7601=>372, 7602=>372, 7603=>324, 7604=>258, 7605=>265, 7606=>457, 7607=>376, 7608=>325, 7609=>365, 7610=>375, 7611=>330, 7612=>393, 7613=>330, 7614=>353, 7615=>372, + 7620=>0, 7621=>0, 7622=>0, 7623=>0, 7624=>0, 7625=>0, 7680=>615, 7681=>551, 7682=>617, 7683=>571, 7684=>617, 7685=>571, 7686=>617, 7687=>571, 7688=>628, 7689=>495, + 7690=>693, 7691=>571, 7692=>693, 7693=>571, 7694=>693, 7695=>571, 7696=>693, 7697=>571, 7698=>693, 7699=>571, 7700=>568, 7701=>554, 7702=>568, 7703=>554, 7704=>568, 7705=>554, + 7706=>568, 7707=>554, 7708=>568, 7709=>554, 7710=>518, 7711=>316, 7712=>697, 7713=>571, 7714=>677, 7715=>570, 7716=>677, 7717=>570, 7718=>677, 7719=>570, 7720=>677, 7721=>570, + 7722=>677, 7723=>570, 7724=>265, 7725=>250, 7726=>265, 7727=>250, 7728=>590, 7729=>521, 7730=>590, 7731=>521, 7732=>590, 7733=>521, 7734=>501, 7735=>250, 7736=>501, 7737=>250, + 7738=>501, 7739=>250, 7740=>501, 7741=>250, 7742=>776, 7743=>876, 7744=>776, 7745=>876, 7746=>776, 7747=>876, 7748=>673, 7749=>570, 7750=>673, 7751=>570, 7752=>673, 7753=>570, + 7754=>673, 7755=>570, 7756=>708, 7757=>550, 7758=>708, 7759=>550, 7760=>708, 7761=>550, 7762=>708, 7763=>550, 7764=>542, 7765=>571, 7766=>542, 7767=>571, 7768=>625, 7769=>370, + 7770=>625, 7771=>370, 7772=>625, 7773=>370, 7774=>625, 7775=>370, 7776=>571, 7777=>469, 7778=>571, 7779=>469, 7780=>571, 7781=>469, 7782=>571, 7783=>469, 7784=>571, 7785=>469, + 7786=>549, 7787=>353, 7788=>549, 7789=>353, 7790=>549, 7791=>353, 7792=>549, 7793=>353, 7794=>659, 7795=>570, 7796=>659, 7797=>570, 7798=>659, 7799=>570, 7800=>659, 7801=>570, + 7802=>659, 7803=>570, 7804=>615, 7805=>532, 7806=>615, 7807=>532, 7808=>890, 7809=>736, 7810=>890, 7811=>736, 7812=>890, 7813=>736, 7814=>890, 7815=>736, 7816=>890, 7817=>736, + 7818=>616, 7819=>532, 7820=>616, 7821=>532, 7822=>549, 7823=>532, 7824=>616, 7825=>472, 7826=>616, 7827=>472, 7828=>616, 7829=>472, 7830=>570, 7831=>353, 7832=>736, 7833=>532, + 7834=>551, 7835=>316, 7840=>615, 7841=>551, 7842=>615, 7843=>551, 7844=>615, 7845=>551, 7846=>615, 7847=>551, 7848=>615, 7849=>551, 7850=>615, 7851=>551, 7852=>615, 7853=>551, + 7854=>615, 7855=>551, 7856=>615, 7857=>551, 7858=>615, 7859=>551, 7860=>615, 7861=>551, 7862=>615, 7863=>551, 7864=>568, 7865=>554, 7866=>568, 7867=>554, 7868=>568, 7869=>554, + 7870=>568, 7871=>554, 7872=>568, 7873=>554, 7874=>568, 7875=>554, 7876=>568, 7877=>554, 7878=>568, 7879=>554, 7880=>265, 7881=>250, 7882=>265, 7883=>250, 7884=>708, 7885=>550, + 7886=>708, 7887=>550, 7888=>708, 7889=>550, 7890=>708, 7891=>550, 7892=>708, 7893=>550, 7894=>708, 7895=>550, 7896=>708, 7897=>550, 7898=>822, 7899=>550, 7900=>822, 7901=>550, + 7902=>822, 7903=>550, 7904=>822, 7905=>550, 7906=>822, 7907=>550, 7908=>659, 7909=>570, 7910=>659, 7911=>570, 7912=>754, 7913=>570, 7914=>754, 7915=>570, 7916=>754, 7917=>570, + 7918=>754, 7919=>570, 7920=>754, 7921=>570, 7922=>549, 7923=>532, 7924=>549, 7925=>532, 7926=>549, 7927=>532, 7928=>549, 7929=>532, 7936=>593, 7937=>593, 7938=>593, 7939=>593, + 7940=>593, 7941=>593, 7942=>593, 7943=>593, 7944=>615, 7945=>615, 7946=>790, 7947=>790, 7948=>692, 7949=>721, 7950=>637, 7951=>668, 7952=>486, 7953=>486, 7954=>486, 7955=>486, + 7956=>486, 7957=>486, 7960=>640, 7961=>640, 7962=>869, 7963=>877, 7964=>809, 7965=>835, 7968=>570, 7969=>570, 7970=>570, 7971=>570, 7972=>570, 7973=>570, 7974=>570, 7975=>570, + 7976=>753, 7977=>751, 7978=>977, 7979=>980, 7980=>924, 7981=>945, 7982=>840, 7983=>852, 7984=>304, 7985=>304, 7986=>304, 7987=>304, 7988=>304, 7989=>304, 7990=>304, 7991=>304, + 7992=>342, 7993=>336, 7994=>571, 7995=>571, 7996=>513, 7997=>540, 7998=>440, 7999=>443, 8000=>550, 8001=>550, 8002=>550, 8003=>550, 8004=>550, 8005=>550, 8008=>724, 8009=>763, + 8010=>985, 8011=>989, 8012=>844, 8013=>873, 8016=>521, 8017=>521, 8018=>521, 8019=>521, 8020=>521, 8021=>521, 8022=>521, 8023=>521, 8025=>705, 8027=>897, 8029=>911, 8031=>808, + 8032=>753, 8033=>753, 8034=>753, 8035=>753, 8036=>753, 8037=>753, 8038=>753, 8039=>753, 8040=>722, 8041=>759, 8042=>980, 8043=>985, 8044=>851, 8045=>875, 8046=>829, 8047=>857, + 8048=>593, 8049=>593, 8050=>486, 8051=>493, 8052=>570, 8053=>589, 8054=>304, 8055=>304, 8056=>550, 8057=>550, 8058=>521, 8059=>521, 8060=>753, 8061=>753, 8064=>593, 8065=>593, + 8066=>593, 8067=>593, 8068=>593, 8069=>593, 8070=>593, 8071=>593, 8072=>615, 8073=>615, 8074=>790, 8075=>790, 8076=>692, 8077=>721, 8078=>637, 8079=>668, 8080=>570, 8081=>570, + 8082=>570, 8083=>570, 8084=>570, 8085=>570, 8086=>570, 8087=>570, 8088=>753, 8089=>751, 8090=>977, 8091=>980, 8092=>924, 8093=>945, 8094=>840, 8095=>852, 8096=>753, 8097=>753, + 8098=>753, 8099=>753, 8100=>753, 8101=>753, 8102=>753, 8103=>753, 8104=>722, 8105=>759, 8106=>980, 8107=>985, 8108=>851, 8109=>875, 8110=>829, 8111=>857, 8112=>593, 8113=>593, + 8114=>593, 8115=>593, 8116=>593, 8118=>593, 8119=>593, 8120=>615, 8121=>615, 8122=>645, 8123=>623, 8124=>615, 8125=>450, 8126=>450, 8127=>450, 8128=>450, 8129=>450, 8130=>570, + 8131=>570, 8132=>589, 8134=>570, 8135=>570, 8136=>724, 8137=>671, 8138=>837, 8139=>784, 8140=>677, 8141=>450, 8142=>450, 8143=>450, 8144=>304, 8145=>304, 8146=>304, 8147=>304, + 8150=>304, 8151=>304, 8152=>265, 8153=>265, 8154=>427, 8155=>367, 8157=>450, 8158=>450, 8159=>450, 8160=>521, 8161=>521, 8162=>521, 8163=>521, 8164=>571, 8165=>571, 8166=>521, + 8167=>521, 8168=>549, 8169=>549, 8170=>760, 8171=>742, 8172=>616, 8173=>450, 8174=>450, 8175=>450, 8178=>753, 8179=>753, 8180=>753, 8182=>753, 8183=>753, 8184=>847, 8185=>731, + 8186=>830, 8187=>743, 8188=>688, 8189=>450, 8190=>450, 8192=>450, 8193=>900, 8194=>450, 8195=>900, 8196=>296, 8197=>225, 8198=>150, 8199=>572, 8200=>286, 8201=>180, 8202=>89, + 8203=>0, 8204=>0, 8205=>0, 8206=>0, 8207=>0, 8208=>325, 8209=>325, 8210=>572, 8213=>900, 8214=>0, 8215=>450, 8219=>286, 8223=>466, 8227=>531, 8228=>299, 8229=>600, + 8231=>286, 8234=>0, 8235=>0, 8236=>0, 8237=>0, 8238=>0, 8239=>180, 8241=>1521, 8242=>204, 8243=>336, 8244=>468, 8245=>204, 8246=>336, 8247=>468, 8248=>305, 8251=>754, + 8252=>437, 8253=>478, 8254=>450, 8255=>723, 8256=>723, 8257=>225, 8258=>900, 8259=>450, 8260=>150, 8261=>351, 8262=>351, 8263=>830, 8264=>659, 8265=>659, 8266=>447, 8267=>572, + 8268=>450, 8269=>450, 8270=>450, 8271=>303, 8272=>723, 8273=>450, 8274=>404, 8275=>754, 8276=>723, 8277=>754, 8278=>527, 8279=>597, 8280=>754, 8281=>754, 8282=>286, 8283=>717, + 8284=>754, 8285=>286, 8286=>286, 8287=>200, 8288=>0, 8289=>0, 8290=>0, 8291=>0, 8298=>0, 8299=>0, 8300=>0, 8301=>0, 8302=>0, 8303=>0, 8304=>360, 8305=>161, + 8308=>360, 8309=>360, 8310=>360, 8311=>360, 8312=>360, 8313=>360, 8314=>475, 8315=>475, 8316=>475, 8317=>221, 8318=>221, 8319=>359, 8320=>360, 8321=>360, 8322=>360, 8323=>360, + 8324=>360, 8325=>360, 8326=>360, 8327=>360, 8328=>360, 8329=>360, 8330=>475, 8331=>475, 8332=>475, 8333=>221, 8334=>221, 8336=>352, 8337=>375, 8338=>372, 8339=>399, 8340=>375, + 8352=>789, 8353=>572, 8354=>572, 8355=>572, 8356=>572, 8357=>876, 8358=>673, 8359=>1143, 8360=>966, 8361=>890, 8362=>754, 8363=>572, 8365=>590, 8366=>549, 8367=>1145, 8368=>572, + 8369=>572, 8370=>572, 8371=>572, 8372=>696, 8373=>577, 8400=>0, 8401=>0, 8406=>0, 8407=>0, 8448=>873, 8449=>873, 8450=>628, 8451=>1011, 8452=>807, 8453=>872, 8454=>929, + 8455=>553, 8456=>628, 8457=>856, 8459=>889, 8460=>648, 8461=>765, 8462=>570, 8463=>570, 8464=>422, 8465=>627, 8466=>648, 8467=>372, 8468=>736, 8469=>721, 8470=>936, 8471=>900, + 8472=>627, 8473=>631, 8474=>708, 8475=>718, 8476=>732, 8477=>713, 8478=>807, 8479=>615, 8480=>917, 8481=>912, 8483=>615, 8484=>670, 8485=>520, 8486=>688, 8487=>688, 8488=>554, + 8489=>304, 8490=>590, 8491=>615, 8492=>708, 8493=>633, 8494=>769, 8495=>532, 8496=>545, 8497=>708, 8498=>518, 8499=>962, 8500=>416, 8501=>670, 8502=>606, 8503=>404, 8504=>625, + 8505=>342, 8506=>833, 8507=>1041, 8508=>632, 8509=>655, 8510=>589, 8511=>764, 8512=>729, 8513=>697, 8514=>501, 8515=>501, 8516=>549, 8517=>737, 8518=>637, 8519=>554, 8520=>316, + 8521=>316, 8523=>702, 8526=>474, 8531=>872, 8532=>872, 8533=>872, 8534=>872, 8535=>872, 8536=>872, 8537=>872, 8538=>872, 8539=>872, 8540=>872, 8541=>872, 8542=>872, 8543=>511, + 8544=>265, 8545=>443, 8546=>620, 8547=>831, 8548=>615, 8549=>830, 8550=>1007, 8551=>1185, 8552=>826, 8553=>616, 8554=>839, 8555=>1018, 8556=>501, 8557=>628, 8558=>693, 8559=>776, + 8560=>250, 8561=>412, 8562=>573, 8563=>730, 8564=>532, 8565=>729, 8566=>892, 8567=>1053, 8568=>737, 8569=>532, 8570=>740, 8571=>901, 8572=>250, 8573=>495, 8574=>571, 8575=>876, + 8576=>1121, 8577=>693, 8578=>1121, 8579=>633, 8580=>494, 8592=>754, 8593=>754, 8594=>754, 8595=>754, 8596=>754, 8597=>754, 8598=>754, 8599=>754, 8600=>754, 8601=>754, 8602=>754, + 8603=>754, 8604=>754, 8605=>754, 8606=>754, 8607=>754, 8608=>754, 8609=>754, 8610=>754, 8611=>754, 8612=>754, 8613=>754, 8614=>754, 8615=>754, 8616=>754, 8617=>754, 8618=>754, + 8619=>754, 8620=>754, 8621=>754, 8622=>754, 8623=>754, 8624=>754, 8625=>754, 8626=>754, 8627=>754, 8628=>754, 8629=>754, 8630=>754, 8631=>754, 8632=>754, 8633=>754, 8634=>754, + 8635=>754, 8636=>754, 8637=>754, 8638=>754, 8639=>754, 8640=>754, 8641=>754, 8642=>754, 8643=>754, 8644=>754, 8645=>754, 8646=>754, 8647=>754, 8648=>754, 8649=>754, 8650=>754, + 8651=>754, 8652=>754, 8653=>754, 8654=>754, 8655=>754, 8656=>754, 8657=>754, 8658=>754, 8659=>754, 8660=>754, 8661=>754, 8662=>754, 8663=>754, 8664=>754, 8665=>754, 8666=>754, + 8667=>754, 8668=>754, 8669=>754, 8670=>754, 8671=>754, 8672=>754, 8673=>754, 8674=>754, 8675=>754, 8676=>754, 8677=>754, 8678=>754, 8679=>754, 8680=>754, 8681=>754, 8682=>754, + 8683=>754, 8684=>754, 8685=>754, 8686=>754, 8687=>754, 8688=>754, 8689=>754, 8690=>754, 8691=>754, 8692=>754, 8693=>754, 8694=>754, 8695=>754, 8696=>754, 8697=>754, 8698=>754, + 8699=>754, 8700=>754, 8701=>754, 8702=>754, 8703=>754, 8704=>615, 8705=>572, 8706=>465, 8707=>568, 8708=>568, 8709=>784, 8710=>602, 8711=>602, 8712=>784, 8713=>784, 8714=>646, + 8715=>784, 8716=>784, 8717=>646, 8718=>572, 8719=>681, 8720=>681, 8721=>606, 8722=>754, 8723=>754, 8724=>754, 8725=>150, 8726=>573, 8727=>754, 8728=>563, 8729=>286, 8730=>573, + 8731=>573, 8732=>573, 8733=>609, 8734=>750, 8735=>754, 8736=>807, 8737=>807, 8738=>754, 8739=>450, 8740=>450, 8741=>450, 8742=>450, 8743=>659, 8744=>659, 8745=>659, 8746=>659, + 8747=>469, 8748=>710, 8749=>951, 8750=>469, 8751=>710, 8752=>951, 8753=>469, 8754=>469, 8755=>469, 8756=>572, 8757=>572, 8758=>234, 8759=>572, 8760=>754, 8761=>754, 8762=>754, + 8763=>754, 8764=>754, 8765=>754, 8766=>754, 8767=>754, 8768=>337, 8769=>754, 8770=>754, 8771=>754, 8772=>754, 8773=>754, 8774=>754, 8775=>754, 8776=>754, 8777=>754, 8778=>754, + 8779=>754, 8780=>754, 8781=>754, 8782=>754, 8783=>754, 8784=>754, 8785=>754, 8786=>754, 8787=>754, 8788=>900, 8789=>900, 8790=>754, 8791=>754, 8792=>754, 8793=>754, 8794=>754, + 8795=>754, 8796=>754, 8797=>754, 8798=>754, 8799=>754, 8800=>754, 8801=>754, 8802=>754, 8803=>754, 8804=>754, 8805=>754, 8806=>754, 8807=>754, 8808=>754, 8809=>754, 8810=>942, + 8811=>942, 8812=>417, 8813=>754, 8814=>754, 8815=>754, 8816=>754, 8817=>754, 8818=>754, 8819=>754, 8820=>754, 8821=>754, 8822=>754, 8823=>754, 8824=>754, 8825=>754, 8826=>754, + 8827=>754, 8828=>754, 8829=>754, 8830=>754, 8831=>754, 8832=>754, 8833=>754, 8834=>754, 8835=>754, 8836=>754, 8837=>754, 8838=>754, 8839=>754, 8840=>754, 8841=>754, 8842=>754, + 8843=>754, 8844=>659, 8845=>659, 8846=>659, 8847=>754, 8848=>754, 8849=>754, 8850=>754, 8851=>649, 8852=>649, 8853=>754, 8854=>754, 8855=>754, 8856=>754, 8857=>754, 8858=>754, + 8859=>754, 8860=>754, 8861=>754, 8862=>754, 8863=>754, 8864=>754, 8865=>754, 8866=>784, 8867=>784, 8868=>784, 8869=>784, 8870=>468, 8871=>468, 8872=>784, 8873=>784, 8874=>784, + 8875=>784, 8876=>784, 8877=>784, 8878=>784, 8879=>784, 8882=>754, 8883=>754, 8884=>754, 8885=>754, 8886=>900, 8887=>900, 8888=>754, 8889=>754, 8890=>468, 8891=>659, 8892=>659, + 8893=>659, 8896=>738, 8897=>738, 8898=>738, 8899=>738, 8900=>444, 8901=>286, 8902=>563, 8904=>900, 8905=>900, 8906=>900, 8907=>900, 8908=>900, 8909=>754, 8918=>754, 8919=>754, + 8920=>1280, 8921=>1280, 8922=>754, 8923=>754, 8924=>754, 8925=>754, 8926=>754, 8927=>754, 8928=>754, 8929=>754, 8930=>754, 8931=>754, 8932=>754, 8933=>754, 8934=>754, 8935=>754, + 8936=>754, 8937=>754, 8938=>754, 8939=>754, 8940=>754, 8941=>754, 8946=>900, 8947=>784, 8948=>646, 8949=>784, 8950=>784, 8951=>646, 8952=>784, 8953=>784, 8954=>900, 8955=>784, + 8956=>646, 8957=>784, 8958=>646, 8959=>784, 8962=>571, 8966=>784, 8968=>351, 8969=>351, 8970=>351, 8971=>351, 8976=>754, 8977=>461, 8984=>900, 8985=>754, 8992=>469, 8993=>469, + 8997=>900, 9000=>1299, 9085=>681, 9115=>450, 9116=>450, 9117=>450, 9118=>450, 9119=>450, 9120=>450, 9121=>450, 9122=>450, 9123=>450, 9124=>450, 9125=>450, 9126=>450, 9127=>675, + 9128=>675, 9129=>675, 9130=>675, 9131=>675, 9132=>675, 9133=>675, 9134=>469, 9166=>754, 9167=>850, 9250=>571, 9251=>571, 9312=>807, 9313=>807, 9314=>807, 9315=>807, 9316=>807, + 9317=>807, 9318=>807, 9319=>807, 9320=>807, 9321=>807, 9600=>692, 9601=>692, 9602=>692, 9603=>692, 9604=>692, 9605=>692, 9606=>692, 9607=>692, 9608=>692, 9609=>692, 9610=>692, + 9611=>692, 9612=>692, 9613=>692, 9614=>692, 9615=>692, 9616=>692, 9617=>692, 9618=>692, 9619=>692, 9620=>692, 9621=>692, 9622=>692, 9623=>692, 9624=>692, 9625=>692, 9626=>692, + 9627=>692, 9628=>692, 9629=>692, 9630=>692, 9631=>692, 9632=>850, 9633=>850, 9634=>850, 9635=>850, 9636=>850, 9637=>850, 9638=>850, 9639=>850, 9640=>850, 9641=>850, 9642=>610, + 9643=>610, 9644=>850, 9645=>850, 9646=>495, 9647=>495, 9648=>692, 9649=>692, 9650=>692, 9651=>692, 9652=>452, 9653=>452, 9654=>692, 9655=>692, 9656=>452, 9657=>452, 9658=>692, + 9659=>692, 9660=>692, 9661=>692, 9662=>452, 9663=>452, 9664=>692, 9665=>692, 9666=>452, 9667=>452, 9668=>692, 9669=>692, 9670=>692, 9671=>692, 9672=>692, 9673=>785, 9674=>444, + 9675=>785, 9676=>785, 9677=>785, 9678=>785, 9679=>785, 9680=>785, 9681=>785, 9682=>785, 9683=>785, 9684=>785, 9685=>785, 9686=>474, 9687=>474, 9688=>712, 9689=>873, 9690=>873, + 9691=>873, 9692=>348, 9693=>348, 9694=>348, 9695=>348, 9696=>692, 9697=>692, 9698=>692, 9699=>692, 9700=>692, 9701=>692, 9702=>531, 9703=>850, 9704=>850, 9705=>850, 9706=>850, + 9707=>850, 9708=>692, 9709=>692, 9710=>692, 9711=>1007, 9712=>850, 9713=>850, 9714=>850, 9715=>850, 9716=>785, 9717=>785, 9718=>785, 9719=>785, 9720=>692, 9721=>692, 9722=>692, + 9723=>747, 9724=>747, 9725=>659, 9726=>659, 9727=>692, 9728=>807, 9729=>900, 9730=>807, 9731=>807, 9732=>807, 9733=>807, 9734=>807, 9735=>515, 9736=>806, 9737=>807, 9738=>799, + 9739=>799, 9740=>604, 9741=>911, 9742=>1121, 9743=>1125, 9744=>807, 9745=>807, 9746=>807, 9747=>479, 9748=>807, 9749=>807, 9750=>807, 9751=>807, 9752=>807, 9753=>807, 9754=>807, + 9755=>807, 9756=>807, 9757=>548, 9758=>807, 9759=>548, 9760=>807, 9761=>807, 9762=>807, 9763=>807, 9764=>602, 9765=>671, 9766=>584, 9767=>705, 9768=>490, 9769=>807, 9770=>807, + 9771=>807, 9772=>639, 9773=>807, 9774=>807, 9775=>807, 9776=>807, 9777=>807, 9778=>807, 9779=>807, 9780=>807, 9781=>807, 9782=>807, 9783=>807, 9784=>807, 9785=>807, 9786=>807, + 9787=>807, 9788=>807, 9789=>807, 9790=>807, 9791=>552, 9792=>658, 9793=>658, 9794=>807, 9795=>807, 9796=>807, 9797=>807, 9798=>807, 9799=>807, 9800=>807, 9801=>807, 9802=>807, + 9803=>807, 9804=>807, 9805=>807, 9806=>807, 9807=>807, 9808=>807, 9809=>807, 9810=>807, 9811=>807, 9812=>807, 9813=>807, 9814=>807, 9815=>807, 9816=>807, 9817=>807, 9818=>807, + 9819=>807, 9820=>807, 9821=>807, 9822=>807, 9823=>807, 9824=>807, 9825=>807, 9826=>807, 9827=>807, 9828=>807, 9829=>807, 9830=>807, 9831=>807, 9832=>807, 9833=>424, 9834=>574, + 9835=>807, 9836=>807, 9837=>424, 9838=>321, 9839=>435, 9840=>673, 9841=>689, 9842=>807, 9843=>807, 9844=>807, 9845=>807, 9846=>807, 9847=>807, 9848=>807, 9849=>807, 9850=>807, + 9851=>807, 9852=>807, 9853=>807, 9854=>807, 9855=>807, 9856=>782, 9857=>782, 9858=>782, 9859=>782, 9860=>782, 9861=>782, 9862=>800, 9863=>800, 9864=>800, 9865=>800, 9866=>800, + 9867=>800, 9868=>800, 9869=>800, 9870=>800, 9871=>800, 9872=>675, 9873=>675, 9874=>800, 9875=>734, 9876=>644, 9877=>483, 9878=>766, 9879=>800, 9880=>615, 9881=>800, 9882=>637, + 9883=>800, 9884=>800, 9888=>800, 9889=>800, 9890=>754, 9891=>754, 9892=>754, 9893=>754, 9894=>754, 9895=>754, 9896=>754, 9897=>754, 9898=>754, 9899=>754, 9900=>754, 9901=>754, + 9902=>754, 9903=>754, 9904=>759, 9905=>754, 9906=>658, 9985=>754, 9986=>754, 9987=>754, 9988=>754, 9990=>754, 9991=>754, 9992=>754, 9993=>754, 9996=>754, 9997=>754, 9998=>754, + 9999=>754, 10000=>754, 10001=>754, 10002=>754, 10003=>754, 10004=>754, 10005=>754, 10006=>754, 10007=>754, 10008=>754, 10009=>754, 10010=>754, 10011=>754, 10012=>754, 10013=>754, 10014=>754, + 10015=>754, 10016=>754, 10017=>754, 10018=>754, 10019=>754, 10020=>754, 10021=>754, 10022=>754, 10023=>754, 10025=>754, 10026=>754, 10027=>754, 10028=>754, 10029=>754, 10030=>754, 10031=>754, + 10032=>754, 10033=>754, 10034=>754, 10035=>754, 10036=>754, 10037=>754, 10038=>754, 10039=>754, 10040=>754, 10041=>754, 10042=>754, 10043=>754, 10044=>754, 10045=>754, 10046=>754, 10047=>754, + 10048=>754, 10049=>754, 10050=>754, 10051=>754, 10052=>754, 10053=>754, 10054=>754, 10055=>754, 10056=>754, 10057=>754, 10058=>754, 10059=>754, 10061=>807, 10063=>807, 10064=>807, 10065=>807, + 10066=>807, 10070=>807, 10072=>754, 10073=>754, 10074=>754, 10075=>290, 10076=>290, 10077=>484, 10078=>484, 10081=>754, 10082=>754, 10083=>754, 10084=>754, 10085=>754, 10086=>754, 10087=>754, + 10088=>754, 10089=>754, 10090=>754, 10091=>754, 10092=>754, 10093=>754, 10094=>754, 10095=>754, 10096=>754, 10097=>754, 10098=>754, 10099=>754, 10100=>754, 10101=>754, 10102=>807, 10103=>807, + 10104=>807, 10105=>807, 10106=>807, 10107=>807, 10108=>807, 10109=>807, 10110=>807, 10111=>807, 10112=>754, 10113=>754, 10114=>754, 10115=>754, 10116=>754, 10117=>754, 10118=>754, 10119=>754, + 10120=>754, 10121=>754, 10122=>754, 10123=>754, 10124=>754, 10125=>754, 10126=>754, 10127=>754, 10128=>754, 10129=>754, 10130=>754, 10131=>754, 10132=>754, 10136=>754, 10137=>754, 10138=>754, + 10139=>754, 10140=>754, 10141=>754, 10142=>754, 10143=>754, 10144=>754, 10145=>754, 10146=>754, 10147=>754, 10148=>754, 10149=>754, 10150=>754, 10151=>754, 10152=>754, 10153=>754, 10154=>754, + 10155=>754, 10156=>754, 10157=>754, 10158=>754, 10159=>754, 10161=>754, 10162=>754, 10163=>754, 10164=>754, 10165=>754, 10166=>754, 10167=>754, 10168=>754, 10169=>754, 10170=>754, 10171=>754, + 10172=>754, 10173=>754, 10174=>754, 10208=>444, 10214=>445, 10215=>445, 10216=>351, 10217=>351, 10218=>500, 10219=>500, 10224=>754, 10225=>754, 10226=>754, 10227=>754, 10228=>1042, 10229=>1290, + 10230=>1290, 10231=>1290, 10232=>1290, 10233=>1290, 10234=>1290, 10235=>1290, 10236=>1290, 10237=>1290, 10238=>1290, 10239=>1290, 10240=>659, 10241=>659, 10242=>659, 10243=>659, 10244=>659, 10245=>659, + 10246=>659, 10247=>659, 10248=>659, 10249=>659, 10250=>659, 10251=>659, 10252=>659, 10253=>659, 10254=>659, 10255=>659, 10256=>659, 10257=>659, 10258=>659, 10259=>659, 10260=>659, 10261=>659, + 10262=>659, 10263=>659, 10264=>659, 10265=>659, 10266=>659, 10267=>659, 10268=>659, 10269=>659, 10270=>659, 10271=>659, 10272=>659, 10273=>659, 10274=>659, 10275=>659, 10276=>659, 10277=>659, + 10278=>659, 10279=>659, 10280=>659, 10281=>659, 10282=>659, 10283=>659, 10284=>659, 10285=>659, 10286=>659, 10287=>659, 10288=>659, 10289=>659, 10290=>659, 10291=>659, 10292=>659, 10293=>659, + 10294=>659, 10295=>659, 10296=>659, 10297=>659, 10298=>659, 10299=>659, 10300=>659, 10301=>659, 10302=>659, 10303=>659, 10304=>659, 10305=>659, 10306=>659, 10307=>659, 10308=>659, 10309=>659, + 10310=>659, 10311=>659, 10312=>659, 10313=>659, 10314=>659, 10315=>659, 10316=>659, 10317=>659, 10318=>659, 10319=>659, 10320=>659, 10321=>659, 10322=>659, 10323=>659, 10324=>659, 10325=>659, + 10326=>659, 10327=>659, 10328=>659, 10329=>659, 10330=>659, 10331=>659, 10332=>659, 10333=>659, 10334=>659, 10335=>659, 10336=>659, 10337=>659, 10338=>659, 10339=>659, 10340=>659, 10341=>659, + 10342=>659, 10343=>659, 10344=>659, 10345=>659, 10346=>659, 10347=>659, 10348=>659, 10349=>659, 10350=>659, 10351=>659, 10352=>659, 10353=>659, 10354=>659, 10355=>659, 10356=>659, 10357=>659, + 10358=>659, 10359=>659, 10360=>659, 10361=>659, 10362=>659, 10363=>659, 10364=>659, 10365=>659, 10366=>659, 10367=>659, 10368=>659, 10369=>659, 10370=>659, 10371=>659, 10372=>659, 10373=>659, + 10374=>659, 10375=>659, 10376=>659, 10377=>659, 10378=>659, 10379=>659, 10380=>659, 10381=>659, 10382=>659, 10383=>659, 10384=>659, 10385=>659, 10386=>659, 10387=>659, 10388=>659, 10389=>659, + 10390=>659, 10391=>659, 10392=>659, 10393=>659, 10394=>659, 10395=>659, 10396=>659, 10397=>659, 10398=>659, 10399=>659, 10400=>659, 10401=>659, 10402=>659, 10403=>659, 10404=>659, 10405=>659, + 10406=>659, 10407=>659, 10408=>659, 10409=>659, 10410=>659, 10411=>659, 10412=>659, 10413=>659, 10414=>659, 10415=>659, 10416=>659, 10417=>659, 10418=>659, 10419=>659, 10420=>659, 10421=>659, + 10422=>659, 10423=>659, 10424=>659, 10425=>659, 10426=>659, 10427=>659, 10428=>659, 10429=>659, 10430=>659, 10431=>659, 10432=>659, 10433=>659, 10434=>659, 10435=>659, 10436=>659, 10437=>659, + 10438=>659, 10439=>659, 10440=>659, 10441=>659, 10442=>659, 10443=>659, 10444=>659, 10445=>659, 10446=>659, 10447=>659, 10448=>659, 10449=>659, 10450=>659, 10451=>659, 10452=>659, 10453=>659, + 10454=>659, 10455=>659, 10456=>659, 10457=>659, 10458=>659, 10459=>659, 10460=>659, 10461=>659, 10462=>659, 10463=>659, 10464=>659, 10465=>659, 10466=>659, 10467=>659, 10468=>659, 10469=>659, + 10470=>659, 10471=>659, 10472=>659, 10473=>659, 10474=>659, 10475=>659, 10476=>659, 10477=>659, 10478=>659, 10479=>659, 10480=>659, 10481=>659, 10482=>659, 10483=>659, 10484=>659, 10485=>659, + 10486=>659, 10487=>659, 10488=>659, 10489=>659, 10490=>659, 10491=>659, 10492=>659, 10493=>659, 10494=>659, 10495=>659, 10502=>754, 10503=>754, 10506=>754, 10507=>754, 10560=>615, 10561=>615, + 10702=>754, 10703=>900, 10704=>900, 10705=>900, 10706=>900, 10707=>900, 10708=>900, 10709=>900, 10731=>444, 10752=>900, 10753=>900, 10754=>900, 10764=>1192, 10765=>469, 10766=>469, 10767=>469, + 10768=>469, 10769=>469, 10770=>469, 10771=>469, 10772=>469, 10773=>469, 10774=>469, 10775=>469, 10776=>469, 10777=>469, 10778=>469, 10779=>469, 10780=>469, 10877=>754, 10878=>754, 10879=>754, + 10880=>754, 10881=>754, 10882=>754, 10883=>754, 10884=>754, 10885=>754, 10886=>754, 10887=>754, 10888=>754, 10889=>754, 10890=>754, 10891=>754, 10892=>754, 10893=>754, 10894=>754, 10895=>754, + 10896=>754, 10897=>754, 10898=>754, 10899=>754, 10900=>754, 10901=>754, 10902=>754, 10903=>754, 10904=>754, 10905=>754, 10906=>754, 10907=>754, 10908=>754, 10909=>754, 10910=>754, 10911=>754, + 10912=>754, 10926=>754, 10927=>754, 10928=>754, 10929=>754, 10930=>754, 10931=>754, 10932=>754, 10933=>754, 10934=>754, 10935=>754, 10936=>754, 10937=>754, 10938=>754, 11001=>754, 11002=>754, + 11008=>754, 11009=>754, 11010=>754, 11011=>754, 11012=>754, 11013=>754, 11014=>754, 11015=>754, 11016=>754, 11017=>754, 11018=>754, 11019=>754, 11020=>754, 11021=>754, 11022=>752, 11023=>752, + 11024=>752, 11025=>752, 11026=>850, 11027=>850, 11028=>850, 11029=>850, 11030=>692, 11031=>692, 11032=>692, 11033=>692, 11034=>850, 11040=>782, 11041=>786, 11042=>786, 11043=>786, 11360=>501, + 11361=>250, 11362=>501, 11363=>542, 11364=>625, 11365=>551, 11366=>353, 11367=>677, 11368=>570, 11369=>590, 11370=>521, 11371=>616, 11372=>472, 11380=>532, 11381=>589, 11382=>511, 11383=>593, + 61960=>703, 62047=>532, 63173=>550, 64256=>649, 64257=>581, 64258=>581, 64259=>899, 64260=>899, 64261=>617, 64262=>774, 64275=>1081, 64276=>1081, 64277=>1076, 64278=>1067, 64279=>1376, 64285=>266, + 64287=>444, 64288=>572, 64297=>754, 64298=>719, 64299=>719, 64300=>719, 64301=>719, 64302=>597, 64303=>597, 64304=>597, 64305=>589, 64306=>408, 64307=>546, 64308=>621, 64309=>302, 64310=>393, + 64311=>900, 64312=>615, 64313=>302, 64314=>577, 64315=>599, 64316=>571, 64318=>663, 64320=>410, 64321=>694, 64323=>586, 64324=>599, 64326=>575, 64327=>619, 64328=>577, 64329=>719, 64330=>653, + 64331=>245, 64332=>589, 64333=>599, 64334=>599, 65024=>0, 65025=>0, 65026=>0, 65027=>0, 65028=>0, 65029=>0, 65030=>0, 65031=>0, 65032=>0, 65033=>0, 65034=>0, 65035=>0, + 65036=>0, 65037=>0, 65038=>0, 65039=>0, 65533=>923}; + font[:enc]=''; + font[:diff]=''; + font[:file]='DejaVuSansCondensed-Oblique.z'; + font[:ctg]='DejaVuSansCondensed-Oblique.ctg.z'; + font[:originalsize]=425256; +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSansMono-Bold.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSansMono-Bold.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSansMono-Bold.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSansMono-Bold.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSansMono-BoldOblique.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSansMono-BoldOblique.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSansMono-BoldOblique.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSansMono-BoldOblique.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSansMono-Oblique.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSansMono-Oblique.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSansMono-Oblique.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSansMono-Oblique.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSansMono.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSansMono.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSansMono.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/DejaVuSansMono.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,168 @@ +TCPDFFontDescriptor.define('DejaVuSansMono') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='DejaVuSansMono'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>33,'FontBBox'=>'[-344 -375 718 1058]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>602}; + font[:up]=-42; + font[:ut]=44; + font[:cw]={ + 0=>602, 32=>602, 33=>602, 34=>602, 35=>602, 36=>602, 37=>602, 38=>602, 39=>602, 40=>602, 41=>602, 42=>602, 43=>602, 44=>602, 45=>602, 46=>602, + 47=>602, 48=>602, 49=>602, 50=>602, 51=>602, 52=>602, 53=>602, 54=>602, 55=>602, 56=>602, 57=>602, 58=>602, 59=>602, 60=>602, 61=>602, 62=>602, + 63=>602, 64=>602, 65=>602, 66=>602, 67=>602, 68=>602, 69=>602, 70=>602, 71=>602, 72=>602, 73=>602, 74=>602, 75=>602, 76=>602, 77=>602, 78=>602, + 79=>602, 80=>602, 81=>602, 82=>602, 83=>602, 84=>602, 85=>602, 86=>602, 87=>602, 88=>602, 89=>602, 90=>602, 91=>602, 92=>602, 93=>602, 94=>602, + 95=>602, 96=>602, 97=>602, 98=>602, 99=>602, 100=>602, 101=>602, 102=>602, 103=>602, 104=>602, 105=>602, 106=>602, 107=>602, 108=>602, 109=>602, 110=>602, + 111=>602, 112=>602, 113=>602, 114=>602, 115=>602, 116=>602, 117=>602, 118=>602, 119=>602, 120=>602, 121=>602, 122=>602, 123=>602, 124=>602, 125=>602, 126=>602, + 8364=>602, 1027=>602, 8218=>602, 402=>602, 8222=>602, 8230=>602, 8224=>602, 8225=>602, 710=>602, 8240=>602, 352=>602, 8249=>602, 338=>602, 1036=>602, 381=>602, 1039=>602, + 8216=>602, 8217=>602, 8220=>602, 8221=>602, 8226=>602, 8211=>602, 8212=>602, 732=>602, 8482=>602, 353=>602, 8250=>602, 339=>602, 1116=>602, 382=>602, 376=>602, 160=>602, + 161=>602, 162=>602, 163=>602, 164=>602, 165=>602, 166=>602, 167=>602, 168=>602, 169=>602, 170=>602, 171=>602, 172=>602, 173=>602, 174=>602, 175=>602, 176=>602, + 177=>602, 178=>602, 179=>602, 180=>602, 181=>602, 182=>602, 183=>602, 184=>602, 185=>602, 186=>602, 187=>602, 188=>602, 189=>602, 190=>602, 191=>602, 192=>602, + 193=>602, 194=>602, 195=>602, 196=>602, 197=>602, 198=>602, 199=>602, 200=>602, 201=>602, 202=>602, 203=>602, 204=>602, 205=>602, 206=>602, 207=>602, 208=>602, + 209=>602, 210=>602, 211=>602, 212=>602, 213=>602, 214=>602, 215=>602, 216=>602, 217=>602, 218=>602, 219=>602, 220=>602, 221=>602, 222=>602, 223=>602, 224=>602, + 225=>602, 226=>602, 227=>602, 228=>602, 229=>602, 230=>602, 231=>602, 232=>602, 233=>602, 234=>602, 235=>602, 236=>602, 237=>602, 238=>602, 239=>602, 240=>602, + 241=>602, 242=>602, 243=>602, 244=>602, 245=>602, 246=>602, 247=>602, 248=>602, 249=>602, 250=>602, 251=>602, 252=>602, 253=>602, 254=>602, 255=>602, 256=>602, + 257=>602, 258=>602, 259=>602, 260=>602, 261=>602, 262=>602, 263=>602, 264=>602, 265=>602, 266=>602, 267=>602, 268=>602, 269=>602, 270=>602, 271=>602, 272=>602, + 273=>602, 274=>602, 275=>602, 276=>602, 277=>602, 278=>602, 279=>602, 280=>602, 281=>602, 282=>602, 283=>602, 284=>602, 285=>602, 286=>602, 287=>602, 288=>602, + 289=>602, 290=>602, 291=>602, 292=>602, 293=>602, 294=>602, 295=>602, 296=>602, 297=>602, 298=>602, 299=>602, 300=>602, 301=>602, 302=>602, 303=>602, 304=>602, + 305=>602, 306=>602, 307=>602, 308=>602, 309=>602, 310=>602, 311=>602, 312=>602, 313=>602, 314=>602, 315=>602, 316=>602, 317=>602, 318=>602, 319=>602, 320=>602, + 321=>602, 322=>602, 323=>602, 324=>602, 325=>602, 326=>602, 327=>602, 328=>602, 329=>602, 330=>602, 331=>602, 332=>602, 333=>602, 334=>602, 335=>602, 336=>602, + 337=>602, 340=>602, 341=>602, 342=>602, 343=>602, 344=>602, 345=>602, 346=>602, 347=>602, 348=>602, 349=>602, 350=>602, 351=>602, 354=>602, 355=>602, 356=>602, + 357=>602, 358=>602, 359=>602, 360=>602, 361=>602, 362=>602, 363=>602, 364=>602, 365=>602, 366=>602, 367=>602, 368=>602, 369=>602, 370=>602, 371=>602, 372=>602, + 373=>602, 374=>602, 375=>602, 377=>602, 378=>602, 379=>602, 380=>602, 383=>602, 385=>602, 386=>602, 387=>602, 388=>602, 389=>602, 390=>602, 391=>602, 392=>602, + 393=>602, 394=>602, 395=>602, 396=>602, 397=>602, 398=>602, 399=>602, 400=>602, 401=>602, 403=>602, 404=>602, 405=>602, 406=>602, 407=>602, 408=>602, 409=>602, + 410=>602, 411=>602, 412=>602, 413=>602, 414=>602, 415=>602, 416=>602, 417=>602, 418=>602, 419=>602, 420=>602, 421=>602, 422=>602, 423=>602, 424=>602, 425=>602, + 426=>602, 427=>602, 428=>602, 429=>602, 430=>602, 431=>602, 432=>602, 433=>602, 434=>602, 435=>602, 436=>602, 437=>602, 438=>602, 439=>602, 440=>602, 441=>602, + 443=>602, 444=>602, 445=>602, 446=>602, 448=>602, 449=>602, 450=>602, 451=>602, 461=>602, 462=>602, 463=>602, 464=>602, 465=>602, 466=>602, 467=>602, 468=>602, + 470=>602, 471=>602, 472=>602, 473=>602, 474=>602, 475=>602, 476=>602, 477=>602, 479=>602, 482=>602, 483=>602, 486=>602, 487=>602, 488=>602, 489=>602, 490=>602, + 491=>602, 492=>602, 493=>602, 494=>602, 495=>602, 496=>602, 500=>602, 501=>602, 502=>602, 504=>602, 505=>602, 508=>602, 509=>602, 510=>602, 511=>602, 512=>602, + 513=>602, 514=>602, 515=>602, 516=>602, 517=>602, 518=>602, 519=>602, 520=>602, 521=>602, 522=>602, 523=>602, 524=>602, 525=>602, 526=>602, 527=>602, 528=>602, + 529=>602, 530=>602, 531=>602, 532=>602, 533=>602, 534=>602, 535=>602, 536=>602, 537=>602, 538=>602, 539=>602, 542=>602, 543=>602, 545=>602, 548=>602, 549=>602, + 550=>602, 551=>602, 552=>602, 553=>602, 555=>602, 557=>602, 558=>602, 559=>602, 561=>602, 562=>602, 563=>602, 564=>602, 565=>602, 566=>602, 567=>602, 568=>602, + 569=>602, 570=>602, 571=>602, 572=>602, 573=>602, 574=>602, 575=>602, 576=>602, 577=>602, 581=>602, 592=>602, 593=>602, 594=>602, 595=>602, 596=>602, 597=>602, + 598=>602, 599=>602, 600=>602, 601=>602, 602=>602, 603=>602, 604=>602, 605=>602, 606=>602, 607=>602, 608=>602, 609=>602, 610=>602, 611=>602, 612=>602, 613=>602, + 614=>602, 615=>602, 616=>602, 617=>602, 618=>602, 619=>602, 620=>602, 621=>602, 622=>602, 623=>602, 624=>602, 625=>602, 626=>602, 627=>602, 628=>602, 629=>602, + 630=>602, 631=>602, 632=>602, 633=>602, 634=>602, 635=>602, 636=>602, 637=>602, 638=>602, 639=>602, 640=>602, 641=>602, 642=>602, 643=>602, 644=>602, 645=>602, + 646=>602, 647=>602, 648=>602, 649=>602, 650=>602, 651=>602, 652=>602, 653=>602, 654=>602, 655=>602, 656=>602, 657=>602, 658=>602, 659=>602, 660=>602, 661=>602, + 662=>602, 663=>602, 664=>602, 665=>602, 666=>602, 667=>602, 668=>602, 669=>602, 670=>602, 671=>602, 672=>602, 673=>602, 674=>602, 675=>602, 676=>602, 677=>602, + 678=>602, 679=>602, 680=>602, 681=>602, 682=>602, 683=>602, 684=>602, 685=>602, 686=>602, 687=>602, 688=>602, 689=>602, 690=>602, 691=>602, 692=>602, 693=>602, + 694=>602, 695=>602, 696=>602, 697=>602, 699=>602, 700=>602, 701=>602, 702=>602, 703=>602, 704=>602, 705=>602, 711=>602, 712=>602, 713=>602, 716=>602, 717=>602, + 720=>602, 721=>602, 722=>602, 723=>602, 726=>602, 728=>602, 729=>602, 730=>602, 731=>602, 733=>602, 734=>602, 736=>602, 737=>602, 738=>602, 739=>602, 740=>602, + 741=>602, 742=>602, 743=>602, 744=>602, 745=>602, 755=>602, 768=>602, 769=>602, 770=>602, 771=>602, 772=>602, 773=>602, 774=>602, 775=>602, 776=>602, 777=>602, + 778=>602, 779=>602, 780=>602, 781=>602, 782=>602, 783=>602, 784=>602, 785=>602, 786=>602, 787=>602, 788=>602, 789=>602, 790=>602, 791=>602, 792=>602, 793=>602, + 794=>602, 795=>602, 796=>602, 797=>602, 798=>602, 799=>602, 800=>602, 801=>602, 802=>602, 803=>602, 804=>602, 805=>602, 806=>602, 807=>602, 808=>602, 809=>602, + 810=>602, 811=>602, 812=>602, 813=>602, 814=>602, 815=>602, 816=>602, 817=>602, 818=>602, 819=>602, 820=>602, 821=>602, 822=>602, 823=>602, 824=>602, 825=>602, + 826=>602, 827=>602, 828=>602, 829=>602, 830=>602, 831=>602, 835=>602, 856=>602, 865=>602, 884=>602, 885=>602, 890=>602, 894=>602, 900=>602, 901=>602, 902=>602, + 903=>602, 904=>602, 905=>602, 906=>602, 908=>602, 910=>602, 911=>602, 912=>602, 913=>602, 914=>602, 915=>602, 916=>602, 917=>602, 918=>602, 919=>602, 920=>602, + 921=>602, 922=>602, 923=>602, 924=>602, 925=>602, 926=>602, 927=>602, 928=>602, 929=>602, 931=>602, 932=>602, 933=>602, 934=>602, 935=>602, 936=>602, 937=>602, + 938=>602, 939=>602, 940=>602, 941=>602, 942=>602, 943=>602, 944=>602, 945=>602, 946=>602, 947=>602, 948=>602, 949=>602, 950=>602, 951=>602, 952=>602, 953=>602, + 954=>602, 955=>602, 956=>602, 957=>602, 958=>602, 959=>602, 960=>602, 961=>602, 962=>602, 963=>602, 964=>602, 965=>602, 966=>602, 967=>602, 968=>602, 969=>602, + 970=>602, 971=>602, 972=>602, 973=>602, 974=>602, 976=>602, 977=>602, 978=>602, 979=>602, 980=>602, 981=>602, 982=>602, 983=>602, 984=>602, 985=>602, 986=>602, + 987=>602, 988=>602, 989=>602, 990=>602, 991=>602, 992=>602, 993=>602, 1008=>602, 1009=>602, 1010=>602, 1011=>602, 1012=>602, 1013=>602, 1014=>602, 1015=>602, 1016=>602, + 1017=>602, 1018=>602, 1019=>602, 1020=>602, 1021=>602, 1022=>602, 1023=>602, 1024=>602, 1025=>602, 1026=>602, 1028=>602, 1029=>602, 1030=>602, 1031=>602, 1032=>602, 1033=>602, + 1034=>602, 1035=>602, 1037=>602, 1038=>602, 1040=>602, 1041=>602, 1042=>602, 1043=>602, 1044=>602, 1045=>602, 1046=>602, 1047=>602, 1048=>602, 1049=>602, 1050=>602, 1051=>602, + 1052=>602, 1053=>602, 1054=>602, 1055=>602, 1056=>602, 1057=>602, 1058=>602, 1059=>602, 1060=>602, 1061=>602, 1062=>602, 1063=>602, 1064=>602, 1065=>602, 1066=>602, 1067=>602, + 1068=>602, 1069=>602, 1070=>602, 1071=>602, 1072=>602, 1073=>602, 1074=>602, 1075=>602, 1076=>602, 1077=>602, 1078=>602, 1079=>602, 1080=>602, 1081=>602, 1082=>602, 1083=>602, + 1084=>602, 1085=>602, 1086=>602, 1087=>602, 1088=>602, 1089=>602, 1090=>602, 1091=>602, 1092=>602, 1093=>602, 1094=>602, 1095=>602, 1096=>602, 1097=>602, 1098=>602, 1099=>602, + 1100=>602, 1101=>602, 1102=>602, 1103=>602, 1104=>602, 1105=>602, 1106=>602, 1107=>602, 1108=>602, 1109=>602, 1110=>602, 1111=>602, 1112=>602, 1113=>602, 1114=>602, 1115=>602, + 1117=>602, 1118=>602, 1119=>602, 1168=>602, 1169=>602, 1170=>602, 1171=>602, 1172=>602, 1173=>602, 1176=>602, 1177=>602, 1178=>602, 1179=>602, 1186=>602, 1187=>602, 1194=>602, + 1195=>602, 1196=>602, 1197=>602, 1198=>602, 1199=>602, 1202=>602, 1203=>602, 1210=>602, 1211=>602, 1216=>602, 1217=>602, 1218=>602, 1219=>602, 1220=>602, 1223=>602, 1224=>602, + 1227=>602, 1228=>602, 1231=>602, 1232=>602, 1233=>602, 1234=>602, 1235=>602, 1236=>602, 1237=>602, 1238=>602, 1239=>602, 1240=>602, 1241=>602, 1242=>602, 1243=>602, 1244=>602, + 1245=>602, 1246=>602, 1247=>602, 1248=>602, 1249=>602, 1250=>602, 1251=>602, 1252=>602, 1253=>602, 1254=>602, 1255=>602, 1256=>602, 1257=>602, 1258=>602, 1259=>602, 1260=>602, + 1261=>602, 1262=>602, 1263=>602, 1264=>602, 1265=>602, 1266=>602, 1267=>602, 1268=>602, 1269=>602, 1270=>602, 1271=>602, 1272=>602, 1273=>602, 3713=>602, 3714=>602, 3716=>602, + 3719=>602, 3720=>602, 3722=>602, 3725=>602, 3732=>602, 3733=>602, 3734=>602, 3735=>602, 3737=>602, 3738=>602, 3739=>602, 3740=>602, 3741=>602, 3742=>602, 3743=>602, 3745=>602, + 3746=>602, 3747=>602, 3749=>602, 3751=>602, 3754=>602, 3755=>602, 3757=>602, 3758=>602, 3759=>602, 7426=>602, 7432=>602, 7433=>602, 7444=>602, 7446=>602, 7447=>602, 7453=>602, + 7454=>602, 7455=>602, 7491=>602, 7492=>602, 7493=>602, 7494=>602, 7495=>602, 7496=>602, 7497=>602, 7498=>602, 7499=>602, 7500=>602, 7501=>602, 7502=>602, 7503=>602, 7504=>602, + 7505=>602, 7506=>602, 7507=>602, 7508=>602, 7509=>602, 7510=>602, 7511=>602, 7512=>602, 7513=>602, 7514=>602, 7515=>602, 7543=>602, 7547=>602, 7557=>602, 7579=>602, 7580=>602, + 7581=>602, 7582=>602, 7583=>602, 7584=>602, 7585=>602, 7586=>602, 7587=>602, 7588=>602, 7589=>602, 7590=>602, 7591=>602, 7592=>602, 7593=>602, 7594=>602, 7595=>602, 7596=>602, + 7597=>602, 7598=>602, 7599=>602, 7600=>602, 7601=>602, 7602=>602, 7603=>602, 7604=>602, 7605=>602, 7606=>602, 7607=>602, 7609=>602, 7610=>602, 7611=>602, 7612=>602, 7613=>602, + 7614=>602, 7615=>602, 7680=>602, 7681=>602, 7682=>602, 7683=>602, 7684=>602, 7685=>602, 7686=>602, 7687=>602, 7690=>602, 7691=>602, 7692=>602, 7693=>602, 7694=>602, 7695=>602, + 7698=>602, 7699=>602, 7704=>602, 7705=>602, 7706=>602, 7707=>602, 7708=>602, 7709=>602, 7710=>602, 7711=>602, 7712=>602, 7713=>602, 7714=>602, 7715=>602, 7716=>602, 7717=>602, + 7720=>602, 7721=>602, 7722=>602, 7723=>602, 7724=>602, 7725=>602, 7728=>602, 7729=>602, 7730=>602, 7731=>602, 7732=>602, 7733=>602, 7734=>602, 7735=>602, 7736=>602, 7737=>602, + 7738=>602, 7739=>602, 7740=>602, 7741=>602, 7742=>602, 7743=>602, 7744=>602, 7745=>602, 7746=>602, 7747=>602, 7748=>602, 7749=>602, 7750=>602, 7751=>602, 7752=>602, 7753=>602, + 7754=>602, 7755=>602, 7766=>602, 7767=>602, 7768=>602, 7769=>602, 7770=>602, 7771=>602, 7772=>602, 7773=>602, 7774=>602, 7775=>602, 7776=>602, 7777=>602, 7778=>602, 7779=>602, + 7784=>602, 7785=>602, 7786=>602, 7787=>602, 7788=>602, 7789=>602, 7790=>602, 7791=>602, 7792=>602, 7793=>602, 7794=>602, 7795=>602, 7796=>602, 7797=>602, 7798=>602, 7799=>602, + 7806=>602, 7807=>602, 7808=>602, 7809=>602, 7810=>602, 7811=>602, 7812=>602, 7813=>602, 7814=>602, 7815=>602, 7816=>602, 7817=>602, 7818=>602, 7819=>602, 7822=>602, 7823=>602, + 7826=>602, 7827=>602, 7828=>602, 7829=>602, 7830=>602, 7835=>602, 7840=>602, 7841=>602, 7864=>602, 7865=>602, 7868=>602, 7869=>602, 7882=>602, 7883=>602, 7884=>602, 7885=>602, + 7908=>602, 7909=>602, 7922=>602, 7923=>602, 7924=>602, 7925=>602, 7928=>602, 7929=>602, 7936=>602, 7937=>602, 7938=>602, 7939=>602, 7940=>602, 7941=>602, 7942=>602, 7943=>602, + 7944=>602, 7945=>602, 7946=>602, 7947=>602, 7948=>602, 7949=>602, 7950=>602, 7951=>602, 7952=>602, 7953=>602, 7954=>602, 7955=>602, 7956=>602, 7957=>602, 7960=>602, 7961=>602, + 7962=>602, 7963=>602, 7964=>602, 7965=>602, 7968=>602, 7969=>602, 7970=>602, 7971=>602, 7972=>602, 7973=>602, 7974=>602, 7975=>602, 7976=>602, 7977=>602, 7978=>602, 7979=>602, + 7980=>602, 7981=>602, 7982=>602, 7983=>602, 7984=>602, 7985=>602, 7986=>602, 7987=>602, 7988=>602, 7989=>602, 7990=>602, 7991=>602, 7992=>602, 7993=>602, 7994=>602, 7995=>602, + 7996=>602, 7997=>602, 7998=>602, 7999=>602, 8000=>602, 8001=>602, 8002=>602, 8003=>602, 8004=>602, 8005=>602, 8008=>602, 8009=>602, 8010=>602, 8011=>602, 8012=>602, 8013=>602, + 8016=>602, 8017=>602, 8018=>602, 8019=>602, 8020=>602, 8021=>602, 8022=>602, 8023=>602, 8025=>602, 8027=>602, 8029=>602, 8031=>602, 8032=>602, 8033=>602, 8034=>602, 8035=>602, + 8036=>602, 8037=>602, 8038=>602, 8039=>602, 8040=>602, 8041=>602, 8042=>602, 8043=>602, 8044=>602, 8045=>602, 8046=>602, 8047=>602, 8048=>602, 8049=>602, 8050=>602, 8051=>602, + 8052=>602, 8053=>602, 8054=>602, 8055=>602, 8056=>602, 8057=>602, 8058=>602, 8059=>602, 8060=>602, 8061=>602, 8064=>602, 8065=>602, 8066=>602, 8067=>602, 8068=>602, 8069=>602, + 8070=>602, 8071=>602, 8072=>602, 8073=>602, 8074=>602, 8075=>602, 8076=>602, 8077=>602, 8078=>602, 8079=>602, 8080=>602, 8081=>602, 8082=>602, 8083=>602, 8084=>602, 8085=>602, + 8086=>602, 8087=>602, 8088=>602, 8089=>602, 8090=>602, 8091=>602, 8092=>602, 8093=>602, 8094=>602, 8095=>602, 8096=>602, 8097=>602, 8098=>602, 8099=>602, 8100=>602, 8101=>602, + 8102=>602, 8103=>602, 8104=>602, 8105=>602, 8106=>602, 8107=>602, 8108=>602, 8109=>602, 8110=>602, 8111=>602, 8112=>602, 8113=>602, 8114=>602, 8115=>602, 8116=>602, 8118=>602, + 8119=>602, 8120=>602, 8121=>602, 8122=>602, 8123=>602, 8124=>602, 8125=>602, 8126=>602, 8127=>602, 8128=>602, 8129=>602, 8130=>602, 8131=>602, 8132=>602, 8134=>602, 8135=>602, + 8136=>602, 8137=>602, 8138=>602, 8139=>602, 8140=>602, 8141=>602, 8142=>602, 8143=>602, 8144=>602, 8145=>602, 8146=>602, 8147=>602, 8150=>602, 8151=>602, 8152=>602, 8153=>602, + 8154=>602, 8155=>602, 8157=>602, 8158=>602, 8159=>602, 8160=>602, 8161=>602, 8162=>602, 8163=>602, 8164=>602, 8165=>602, 8166=>602, 8167=>602, 8168=>602, 8169=>602, 8170=>602, + 8171=>602, 8172=>602, 8173=>602, 8174=>602, 8175=>602, 8178=>602, 8179=>602, 8180=>602, 8182=>602, 8183=>602, 8184=>602, 8185=>602, 8186=>602, 8187=>602, 8188=>602, 8189=>602, + 8190=>602, 8192=>602, 8193=>602, 8194=>602, 8195=>602, 8196=>602, 8197=>602, 8198=>602, 8199=>602, 8200=>602, 8201=>602, 8202=>602, 8208=>602, 8209=>602, 8210=>602, 8213=>602, + 8215=>602, 8219=>602, 8223=>602, 8227=>602, 8239=>602, 8241=>602, 8252=>602, 8253=>602, 8254=>602, 8261=>602, 8262=>602, 8263=>602, 8264=>602, 8265=>602, 8287=>602, 8304=>602, + 8308=>602, 8309=>602, 8310=>602, 8311=>602, 8312=>602, 8313=>602, 8319=>602, 8320=>602, 8321=>602, 8322=>602, 8323=>602, 8324=>602, 8325=>602, 8326=>602, 8327=>602, 8328=>602, + 8329=>602, 8358=>602, 8369=>602, 8372=>602, 8373=>602, 8462=>602, 8470=>602, 8486=>602, 8490=>602, 8491=>602, 8531=>602, 8532=>602, 8533=>602, 8534=>602, 8535=>602, 8536=>602, + 8537=>602, 8538=>602, 8539=>602, 8540=>602, 8541=>602, 8542=>602, 8543=>602, 8592=>602, 8593=>602, 8594=>602, 8595=>602, 8596=>602, 8597=>602, 8598=>602, 8599=>602, 8600=>602, + 8601=>602, 8602=>602, 8603=>602, 8604=>602, 8605=>602, 8606=>602, 8607=>602, 8608=>602, 8609=>602, 8610=>602, 8611=>602, 8612=>602, 8613=>602, 8614=>602, 8615=>602, 8616=>602, + 8617=>602, 8618=>602, 8619=>602, 8620=>602, 8621=>602, 8622=>602, 8623=>602, 8624=>602, 8625=>602, 8626=>602, 8627=>602, 8628=>602, 8629=>602, 8630=>602, 8631=>602, 8632=>602, + 8633=>602, 8634=>602, 8635=>602, 8636=>602, 8637=>602, 8638=>602, 8639=>602, 8640=>602, 8641=>602, 8642=>602, 8643=>602, 8644=>602, 8645=>602, 8646=>602, 8647=>602, 8648=>602, + 8649=>602, 8650=>602, 8651=>602, 8652=>602, 8653=>602, 8654=>602, 8655=>602, 8656=>602, 8657=>602, 8658=>602, 8659=>602, 8660=>602, 8661=>602, 8662=>602, 8663=>602, 8664=>602, + 8665=>602, 8666=>602, 8667=>602, 8668=>602, 8669=>602, 8670=>602, 8671=>602, 8672=>602, 8673=>602, 8674=>602, 8675=>602, 8676=>602, 8677=>602, 8678=>602, 8679=>602, 8680=>602, + 8681=>602, 8682=>602, 8683=>602, 8684=>602, 8685=>602, 8686=>602, 8687=>602, 8688=>602, 8689=>602, 8690=>602, 8691=>602, 8692=>602, 8693=>602, 8694=>602, 8695=>602, 8696=>602, + 8697=>602, 8698=>602, 8699=>602, 8700=>602, 8701=>602, 8702=>602, 8703=>602, 8706=>602, 8709=>602, 8710=>602, 8711=>602, 8712=>602, 8713=>602, 8714=>602, 8715=>602, 8716=>602, + 8717=>602, 8719=>602, 8721=>602, 8722=>602, 8723=>602, 8725=>602, 8727=>602, 8728=>602, 8729=>602, 8730=>602, 8733=>602, 8734=>602, 8735=>602, 8736=>602, 8743=>602, 8744=>602, + 8745=>602, 8746=>602, 8747=>602, 8748=>602, 8749=>602, 8760=>602, 8761=>602, 8762=>602, 8763=>602, 8764=>602, 8765=>602, 8769=>602, 8770=>602, 8771=>602, 8772=>602, 8773=>602, + 8774=>602, 8775=>602, 8776=>602, 8777=>602, 8778=>602, 8779=>602, 8780=>602, 8781=>602, 8782=>602, 8783=>602, 8784=>602, 8785=>602, 8786=>602, 8787=>602, 8788=>602, 8789=>602, + 8790=>602, 8791=>602, 8792=>602, 8793=>602, 8794=>602, 8795=>602, 8796=>602, 8797=>602, 8798=>602, 8799=>602, 8800=>602, 8801=>602, 8802=>602, 8803=>602, 8804=>602, 8805=>602, + 8806=>602, 8807=>602, 8808=>602, 8809=>602, 8813=>602, 8814=>602, 8815=>602, 8816=>602, 8817=>602, 8818=>602, 8819=>602, 8820=>602, 8821=>602, 8822=>602, 8823=>602, 8824=>602, + 8825=>602, 8826=>602, 8827=>602, 8828=>602, 8829=>602, 8830=>602, 8831=>602, 8832=>602, 8833=>602, 8834=>602, 8835=>602, 8836=>602, 8837=>602, 8838=>602, 8839=>602, 8840=>602, + 8841=>602, 8842=>602, 8843=>602, 8847=>602, 8848=>602, 8849=>602, 8850=>602, 8853=>602, 8854=>602, 8855=>602, 8856=>602, 8857=>602, 8858=>602, 8859=>602, 8860=>602, 8861=>602, + 8862=>602, 8863=>602, 8864=>602, 8865=>602, 8901=>602, 8902=>602, 8909=>602, 8922=>602, 8923=>602, 8924=>602, 8925=>602, 8926=>602, 8927=>602, 8928=>602, 8929=>602, 8930=>602, + 8931=>602, 8932=>602, 8933=>602, 8934=>602, 8935=>602, 8936=>602, 8937=>602, 8943=>602, 8960=>602, 8961=>602, 8962=>602, 8963=>602, 8964=>602, 8965=>602, 8966=>602, 8968=>602, + 8969=>602, 8970=>602, 8971=>602, 8972=>602, 8973=>602, 8974=>602, 8975=>602, 8976=>602, 8977=>602, 8978=>602, 8979=>602, 8980=>602, 8981=>602, 8984=>602, 8985=>602, 8988=>602, + 8989=>602, 8990=>602, 8991=>602, 8992=>602, 8993=>602, 8997=>602, 8998=>602, 8999=>602, 9000=>602, 9003=>602, 9013=>602, 9015=>602, 9016=>602, 9017=>602, 9018=>602, 9019=>602, + 9020=>602, 9021=>602, 9022=>602, 9025=>602, 9026=>602, 9027=>602, 9028=>602, 9031=>602, 9032=>602, 9033=>602, 9035=>602, 9036=>602, 9037=>602, 9040=>602, 9042=>602, 9043=>602, + 9044=>602, 9047=>602, 9048=>602, 9049=>602, 9050=>602, 9051=>602, 9052=>602, 9054=>602, 9055=>602, 9056=>602, 9059=>602, 9060=>602, 9061=>602, 9064=>602, 9065=>602, 9067=>602, + 9068=>602, 9069=>602, 9070=>602, 9071=>602, 9072=>602, 9075=>602, 9076=>602, 9077=>602, 9078=>602, 9079=>602, 9080=>602, 9081=>602, 9082=>602, 9085=>602, 9088=>602, 9089=>602, + 9090=>602, 9091=>602, 9096=>602, 9097=>602, 9098=>602, 9099=>602, 9109=>602, 9115=>602, 9116=>602, 9117=>602, 9118=>602, 9119=>602, 9120=>602, 9121=>602, 9122=>602, 9123=>602, + 9124=>602, 9125=>602, 9126=>602, 9127=>602, 9128=>602, 9129=>602, 9130=>602, 9131=>602, 9132=>602, 9133=>602, 9134=>602, 9166=>602, 9167=>602, 9251=>602, 9472=>602, 9473=>602, + 9474=>602, 9475=>602, 9476=>602, 9477=>602, 9478=>602, 9479=>602, 9480=>602, 9481=>602, 9482=>602, 9483=>602, 9484=>602, 9485=>602, 9486=>602, 9487=>602, 9488=>602, 9489=>602, + 9490=>602, 9491=>602, 9492=>602, 9493=>602, 9494=>602, 9495=>602, 9496=>602, 9497=>602, 9498=>602, 9499=>602, 9500=>602, 9501=>602, 9502=>602, 9503=>602, 9504=>602, 9505=>602, + 9506=>602, 9507=>602, 9508=>602, 9509=>602, 9510=>602, 9511=>602, 9512=>602, 9513=>602, 9514=>602, 9515=>602, 9516=>602, 9517=>602, 9518=>602, 9519=>602, 9520=>602, 9521=>602, + 9522=>602, 9523=>602, 9524=>602, 9525=>602, 9526=>602, 9527=>602, 9528=>602, 9529=>602, 9530=>602, 9531=>602, 9532=>602, 9533=>602, 9534=>602, 9535=>602, 9536=>602, 9537=>602, + 9538=>602, 9539=>602, 9540=>602, 9541=>602, 9542=>602, 9543=>602, 9544=>602, 9545=>602, 9546=>602, 9547=>602, 9548=>602, 9549=>602, 9550=>602, 9551=>602, 9552=>602, 9553=>602, + 9554=>602, 9555=>602, 9556=>602, 9557=>602, 9558=>602, 9559=>602, 9560=>602, 9561=>602, 9562=>602, 9563=>602, 9564=>602, 9565=>602, 9566=>602, 9567=>602, 9568=>602, 9569=>602, + 9570=>602, 9571=>602, 9572=>602, 9573=>602, 9574=>602, 9575=>602, 9576=>602, 9577=>602, 9578=>602, 9579=>602, 9580=>602, 9581=>602, 9582=>602, 9583=>602, 9584=>602, 9585=>602, + 9586=>602, 9587=>602, 9588=>602, 9589=>602, 9590=>602, 9591=>602, 9592=>602, 9593=>602, 9594=>602, 9595=>602, 9596=>602, 9597=>602, 9598=>602, 9599=>602, 9600=>602, 9601=>602, + 9602=>602, 9603=>602, 9604=>602, 9605=>602, 9606=>602, 9607=>602, 9608=>602, 9609=>602, 9610=>602, 9611=>602, 9612=>602, 9613=>602, 9614=>602, 9615=>602, 9616=>602, 9617=>602, + 9618=>602, 9619=>602, 9620=>602, 9621=>602, 9622=>602, 9623=>602, 9624=>602, 9625=>602, 9626=>602, 9627=>602, 9628=>602, 9629=>602, 9630=>602, 9631=>602, 9632=>602, 9633=>602, + 9634=>602, 9635=>602, 9636=>602, 9637=>602, 9638=>602, 9639=>602, 9640=>602, 9641=>602, 9642=>602, 9643=>602, 9644=>602, 9645=>602, 9646=>602, 9647=>602, 9648=>602, 9649=>602, + 9650=>602, 9651=>602, 9652=>602, 9653=>602, 9654=>602, 9655=>602, 9656=>602, 9657=>602, 9658=>602, 9659=>602, 9660=>602, 9661=>602, 9662=>602, 9663=>602, 9664=>602, 9665=>602, + 9666=>602, 9667=>602, 9668=>602, 9669=>602, 9670=>602, 9671=>602, 9672=>602, 9673=>602, 9674=>602, 9675=>602, 9676=>602, 9677=>602, 9678=>602, 9679=>602, 9680=>602, 9681=>602, + 9682=>602, 9683=>602, 9684=>602, 9685=>602, 9686=>602, 9687=>602, 9688=>602, 9689=>602, 9690=>602, 9691=>602, 9692=>602, 9693=>602, 9694=>602, 9695=>602, 9696=>602, 9697=>602, + 9698=>602, 9699=>602, 9700=>602, 9701=>602, 9702=>602, 9703=>602, 9704=>602, 9705=>602, 9706=>602, 9707=>602, 9708=>602, 9709=>602, 9710=>602, 9711=>602, 9712=>602, 9713=>602, + 9714=>602, 9715=>602, 9716=>602, 9717=>602, 9718=>602, 9719=>602, 9720=>602, 9721=>602, 9722=>602, 9723=>602, 9724=>602, 9725=>602, 9726=>602, 9727=>602, 9728=>602, 9729=>602, + 9730=>602, 9731=>602, 9732=>602, 9733=>602, 9734=>602, 9735=>602, 9736=>602, 9737=>602, 9738=>602, 9739=>602, 9740=>602, 9741=>602, 9742=>602, 9743=>602, 9744=>602, 9745=>602, + 9746=>602, 9747=>602, 9748=>602, 9749=>602, 9750=>602, 9751=>602, 9752=>602, 9753=>602, 9754=>602, 9755=>602, 9756=>602, 9757=>602, 9758=>602, 9759=>602, 9760=>602, 9761=>602, + 9762=>602, 9763=>602, 9764=>602, 9765=>602, 9766=>602, 9767=>602, 9768=>602, 9769=>602, 9770=>602, 9771=>602, 9772=>602, 9773=>602, 9774=>602, 9775=>602, 9784=>602, 9785=>602, + 9786=>602, 9787=>602, 9788=>602, 9789=>602, 9790=>602, 9791=>602, 9792=>602, 9793=>602, 9794=>602, 9795=>602, 9796=>602, 9797=>602, 9798=>602, 9799=>602, 9800=>602, 9801=>602, + 9802=>602, 9803=>602, 9804=>602, 9805=>602, 9806=>602, 9807=>602, 9808=>602, 9809=>602, 9810=>602, 9811=>602, 9812=>602, 9813=>602, 9814=>602, 9815=>602, 9816=>602, 9817=>602, + 9818=>602, 9819=>602, 9820=>602, 9821=>602, 9822=>602, 9823=>602, 9824=>602, 9825=>602, 9826=>602, 9827=>602, 9828=>602, 9829=>602, 9830=>602, 9831=>602, 9832=>602, 9833=>602, + 9834=>602, 9835=>602, 9836=>602, 9837=>602, 9838=>602, 9839=>602, 9840=>602, 9841=>602, 9842=>602, 9843=>602, 9844=>602, 9845=>602, 9846=>602, 9847=>602, 9848=>602, 9849=>602, + 9850=>602, 9851=>602, 9852=>602, 9853=>602, 9854=>602, 9855=>602, 9856=>602, 9857=>602, 9858=>602, 9859=>602, 9860=>602, 9861=>602, 9862=>602, 9863=>602, 9864=>602, 9865=>602, + 9866=>602, 9867=>602, 9872=>602, 9873=>602, 9874=>602, 9875=>602, 9876=>602, 9877=>602, 9878=>602, 9879=>602, 9880=>602, 9881=>602, 9882=>602, 9883=>602, 9884=>602, 9888=>602, + 9889=>602, 9904=>602, 9905=>602, 9985=>602, 9986=>602, 9987=>602, 9988=>602, 9990=>602, 9991=>602, 9992=>602, 9993=>602, 9996=>602, 9997=>602, 9998=>602, 9999=>602, 10000=>602, + 10001=>602, 10002=>602, 10003=>602, 10004=>602, 10005=>602, 10006=>602, 10007=>602, 10008=>602, 10009=>602, 10010=>602, 10011=>602, 10012=>602, 10013=>602, 10014=>602, 10015=>602, 10016=>602, + 10017=>602, 10018=>602, 10019=>602, 10020=>602, 10021=>602, 10022=>602, 10023=>602, 10025=>602, 10026=>602, 10027=>602, 10028=>602, 10029=>602, 10030=>602, 10031=>602, 10032=>602, 10033=>602, + 10034=>602, 10035=>602, 10036=>602, 10037=>602, 10038=>602, 10039=>602, 10040=>602, 10041=>602, 10042=>602, 10043=>602, 10044=>602, 10045=>602, 10046=>602, 10047=>602, 10048=>602, 10049=>602, + 10050=>602, 10051=>602, 10052=>602, 10053=>602, 10054=>602, 10055=>602, 10056=>602, 10057=>602, 10058=>602, 10059=>602, 10061=>602, 10063=>602, 10064=>602, 10065=>602, 10066=>602, 10070=>602, + 10072=>602, 10073=>602, 10074=>602, 10075=>602, 10076=>602, 10077=>602, 10078=>602, 10081=>602, 10082=>602, 10083=>602, 10084=>602, 10085=>602, 10086=>602, 10087=>602, 10088=>602, 10089=>602, + 10090=>602, 10091=>602, 10092=>602, 10093=>602, 10094=>602, 10095=>602, 10096=>602, 10097=>602, 10098=>602, 10099=>602, 10100=>602, 10101=>602, 10132=>602, 10136=>602, 10137=>602, 10138=>602, + 10139=>602, 10140=>602, 10141=>602, 10142=>602, 10143=>602, 10144=>602, 10145=>602, 10146=>602, 10147=>602, 10148=>602, 10149=>602, 10150=>602, 10151=>602, 10152=>602, 10153=>602, 10154=>602, + 10155=>602, 10156=>602, 10157=>602, 10158=>602, 10159=>602, 10161=>602, 10162=>602, 10163=>602, 10164=>602, 10165=>602, 10166=>602, 10167=>602, 10168=>602, 10169=>602, 10170=>602, 10171=>602, + 10172=>602, 10173=>602, 10174=>602, 10208=>602, 10216=>602, 10217=>602, 10731=>602, 11026=>602, 11027=>602, 11028=>602, 11029=>602, 11030=>602, 11031=>602, 11032=>602, 11033=>602, 11034=>602, + 63173=>602, 64257=>602, 64258=>602, 65533=>602}; + font[:enc]=''; + font[:diff]=''; + font[:file]='DejaVuSansMono.z'; + font[:ctg]='DejaVuSansMono.ctg.z'; + font[:originalsize]=258332; +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSansMono.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSansMono.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSansMonob.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/DejaVuSansMonob.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,160 @@ +TCPDFFontDescriptor.define('DejaVuSansMonob') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='DejaVuSansMono-Bold'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>33,'FontBBox'=>'[-446 -394 720 1102]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>602}; + font[:up]=-42; + font[:ut]=44; + font[:cw]={ + 0=>602, 32=>602, 33=>602, 34=>602, 35=>602, 36=>602, 37=>602, 38=>602, 39=>602, 40=>602, 41=>602, 42=>602, 43=>602, 44=>602, 45=>602, 46=>602, + 47=>602, 48=>602, 49=>602, 50=>602, 51=>602, 52=>602, 53=>602, 54=>602, 55=>602, 56=>602, 57=>602, 58=>602, 59=>602, 60=>602, 61=>602, 62=>602, + 63=>602, 64=>602, 65=>602, 66=>602, 67=>602, 68=>602, 69=>602, 70=>602, 71=>602, 72=>602, 73=>602, 74=>602, 75=>602, 76=>602, 77=>602, 78=>602, + 79=>602, 80=>602, 81=>602, 82=>602, 83=>602, 84=>602, 85=>602, 86=>602, 87=>602, 88=>602, 89=>602, 90=>602, 91=>602, 92=>602, 93=>602, 94=>602, + 95=>602, 96=>602, 97=>602, 98=>602, 99=>602, 100=>602, 101=>602, 102=>602, 103=>602, 104=>602, 105=>602, 106=>602, 107=>602, 108=>602, 109=>602, 110=>602, + 111=>602, 112=>602, 113=>602, 114=>602, 115=>602, 116=>602, 117=>602, 118=>602, 119=>602, 120=>602, 121=>602, 122=>602, 123=>602, 124=>602, 125=>602, 126=>602, + 8364=>602, 1027=>602, 8218=>602, 402=>602, 8222=>602, 8230=>602, 8224=>602, 8225=>602, 710=>602, 8240=>602, 352=>602, 8249=>602, 338=>602, 1036=>602, 381=>602, 1039=>602, + 8216=>602, 8217=>602, 8220=>602, 8221=>602, 8226=>602, 8211=>602, 8212=>602, 732=>602, 8482=>602, 353=>602, 8250=>602, 339=>602, 1116=>602, 382=>602, 376=>602, 160=>602, + 161=>602, 162=>602, 163=>602, 164=>602, 165=>602, 166=>602, 167=>602, 168=>602, 169=>602, 170=>602, 171=>602, 172=>602, 173=>602, 174=>602, 175=>602, 176=>602, + 177=>602, 178=>602, 179=>602, 180=>602, 181=>602, 182=>602, 183=>602, 184=>602, 185=>602, 186=>602, 187=>602, 188=>602, 189=>602, 190=>602, 191=>602, 192=>602, + 193=>602, 194=>602, 195=>602, 196=>602, 197=>602, 198=>602, 199=>602, 200=>602, 201=>602, 202=>602, 203=>602, 204=>602, 205=>602, 206=>602, 207=>602, 208=>602, + 209=>602, 210=>602, 211=>602, 212=>602, 213=>602, 214=>602, 215=>602, 216=>602, 217=>602, 218=>602, 219=>602, 220=>602, 221=>602, 222=>602, 223=>602, 224=>602, + 225=>602, 226=>602, 227=>602, 228=>602, 229=>602, 230=>602, 231=>602, 232=>602, 233=>602, 234=>602, 235=>602, 236=>602, 237=>602, 238=>602, 239=>602, 240=>602, + 241=>602, 242=>602, 243=>602, 244=>602, 245=>602, 246=>602, 247=>602, 248=>602, 249=>602, 250=>602, 251=>602, 252=>602, 253=>602, 254=>602, 255=>602, 256=>602, + 257=>602, 258=>602, 259=>602, 260=>602, 261=>602, 262=>602, 263=>602, 264=>602, 265=>602, 266=>602, 267=>602, 268=>602, 269=>602, 270=>602, 271=>602, 272=>602, + 273=>602, 274=>602, 275=>602, 276=>602, 277=>602, 278=>602, 279=>602, 280=>602, 281=>602, 282=>602, 283=>602, 284=>602, 285=>602, 286=>602, 287=>602, 288=>602, + 289=>602, 290=>602, 291=>602, 292=>602, 293=>602, 294=>602, 295=>602, 296=>602, 297=>602, 298=>602, 299=>602, 300=>602, 301=>602, 302=>602, 303=>602, 304=>602, + 305=>602, 306=>602, 307=>602, 308=>602, 309=>602, 310=>602, 311=>602, 312=>602, 313=>602, 314=>602, 315=>602, 316=>602, 317=>602, 318=>602, 319=>602, 320=>602, + 321=>602, 322=>602, 323=>602, 324=>602, 325=>602, 326=>602, 327=>602, 328=>602, 329=>602, 330=>602, 331=>602, 332=>602, 333=>602, 334=>602, 335=>602, 336=>602, + 337=>602, 340=>602, 341=>602, 342=>602, 343=>602, 344=>602, 345=>602, 346=>602, 347=>602, 348=>602, 349=>602, 350=>602, 351=>602, 354=>602, 355=>602, 356=>602, + 357=>602, 358=>602, 359=>602, 360=>602, 361=>602, 362=>602, 363=>602, 364=>602, 365=>602, 366=>602, 367=>602, 368=>602, 369=>602, 370=>602, 371=>602, 372=>602, + 373=>602, 374=>602, 375=>602, 377=>602, 378=>602, 379=>602, 380=>602, 383=>602, 385=>602, 386=>602, 387=>602, 388=>602, 389=>602, 390=>602, 391=>602, 392=>602, + 393=>602, 394=>602, 395=>602, 396=>602, 397=>602, 398=>602, 399=>602, 400=>602, 401=>602, 403=>602, 404=>602, 405=>602, 406=>602, 407=>602, 408=>602, 409=>602, + 410=>602, 411=>602, 412=>602, 413=>602, 414=>602, 415=>602, 416=>602, 417=>602, 418=>602, 419=>602, 420=>602, 421=>602, 422=>602, 423=>602, 424=>602, 425=>602, + 426=>602, 427=>602, 428=>602, 429=>602, 430=>602, 431=>602, 432=>602, 433=>602, 434=>602, 435=>602, 436=>602, 437=>602, 438=>602, 439=>602, 440=>602, 441=>602, + 443=>602, 444=>602, 445=>602, 446=>602, 448=>602, 449=>602, 450=>602, 451=>602, 461=>602, 462=>602, 463=>602, 464=>602, 465=>602, 466=>602, 467=>602, 468=>602, + 470=>602, 471=>602, 472=>602, 473=>602, 474=>602, 475=>602, 476=>602, 477=>602, 479=>602, 482=>602, 483=>602, 486=>602, 487=>602, 488=>602, 489=>602, 490=>602, + 491=>602, 492=>602, 493=>602, 494=>602, 495=>602, 500=>602, 501=>602, 502=>602, 504=>602, 505=>602, 508=>602, 509=>602, 510=>602, 511=>602, 512=>602, 513=>602, + 514=>602, 515=>602, 516=>602, 517=>602, 518=>602, 519=>602, 520=>602, 521=>602, 522=>602, 523=>602, 524=>602, 525=>602, 526=>602, 527=>602, 528=>602, 529=>602, + 530=>602, 531=>602, 532=>602, 533=>602, 534=>602, 535=>602, 536=>602, 537=>602, 538=>602, 539=>602, 542=>602, 543=>602, 545=>602, 548=>602, 549=>602, 550=>602, + 551=>602, 552=>602, 553=>602, 555=>602, 557=>602, 558=>602, 559=>602, 561=>602, 562=>602, 563=>602, 564=>602, 565=>602, 566=>602, 567=>602, 568=>602, 569=>602, + 570=>602, 571=>602, 572=>602, 573=>602, 574=>602, 575=>602, 576=>602, 577=>602, 581=>602, 592=>602, 593=>602, 594=>602, 595=>602, 596=>602, 597=>602, 598=>602, + 599=>602, 600=>602, 601=>602, 602=>602, 603=>602, 604=>602, 605=>602, 606=>602, 607=>602, 608=>602, 609=>602, 610=>602, 611=>602, 612=>602, 613=>602, 614=>602, + 615=>602, 616=>602, 617=>602, 618=>602, 619=>602, 620=>602, 621=>602, 622=>602, 623=>602, 624=>602, 625=>602, 626=>602, 627=>602, 628=>602, 629=>602, 630=>602, + 631=>602, 632=>602, 633=>602, 634=>602, 635=>602, 636=>602, 637=>602, 638=>602, 639=>602, 640=>602, 641=>602, 642=>602, 643=>602, 644=>602, 645=>602, 646=>602, + 647=>602, 648=>602, 649=>602, 650=>602, 651=>602, 652=>602, 653=>602, 654=>602, 655=>602, 656=>602, 657=>602, 658=>602, 659=>602, 660=>602, 661=>602, 662=>602, + 663=>602, 664=>602, 665=>602, 666=>602, 667=>602, 668=>602, 669=>602, 670=>602, 671=>602, 672=>602, 673=>602, 674=>602, 675=>602, 676=>602, 677=>602, 678=>602, + 679=>602, 680=>602, 681=>602, 682=>602, 683=>602, 684=>602, 685=>602, 686=>602, 687=>602, 688=>602, 689=>602, 690=>602, 691=>602, 692=>602, 693=>602, 694=>602, + 695=>602, 696=>602, 697=>602, 699=>602, 700=>602, 701=>602, 702=>602, 703=>602, 704=>602, 705=>602, 711=>602, 712=>602, 713=>602, 716=>602, 717=>602, 720=>602, + 721=>602, 722=>602, 723=>602, 726=>602, 728=>602, 729=>602, 730=>602, 731=>602, 733=>602, 734=>602, 736=>602, 737=>602, 738=>602, 739=>602, 740=>602, 741=>602, + 742=>602, 743=>602, 744=>602, 745=>602, 755=>602, 768=>602, 769=>602, 770=>602, 771=>602, 772=>602, 773=>602, 774=>602, 775=>602, 776=>602, 777=>602, 778=>602, + 779=>602, 780=>602, 781=>602, 782=>602, 783=>602, 784=>602, 785=>602, 786=>602, 787=>602, 788=>602, 789=>602, 790=>602, 791=>602, 792=>602, 793=>602, 794=>602, + 795=>602, 796=>602, 797=>602, 798=>602, 799=>602, 800=>602, 801=>602, 802=>602, 803=>602, 804=>602, 805=>602, 806=>602, 807=>602, 808=>602, 809=>602, 810=>602, + 811=>602, 812=>602, 813=>602, 814=>602, 815=>602, 816=>602, 817=>602, 818=>602, 819=>602, 820=>602, 821=>602, 822=>602, 823=>602, 824=>602, 825=>602, 826=>602, + 827=>602, 828=>602, 829=>602, 830=>602, 831=>602, 835=>602, 856=>602, 865=>602, 884=>602, 885=>602, 890=>602, 894=>602, 900=>602, 901=>602, 902=>602, 903=>602, + 904=>602, 905=>602, 906=>602, 908=>602, 910=>602, 911=>602, 912=>602, 913=>602, 914=>602, 915=>602, 916=>602, 917=>602, 918=>602, 919=>602, 920=>602, 921=>602, + 922=>602, 923=>602, 924=>602, 925=>602, 926=>602, 927=>602, 928=>602, 929=>602, 931=>602, 932=>602, 933=>602, 934=>602, 935=>602, 936=>602, 937=>602, 938=>602, + 939=>602, 940=>602, 941=>602, 942=>602, 943=>602, 944=>602, 945=>602, 946=>602, 947=>602, 948=>602, 949=>602, 950=>602, 951=>602, 952=>602, 953=>602, 954=>602, + 955=>602, 956=>602, 957=>602, 958=>602, 959=>602, 960=>602, 961=>602, 962=>602, 963=>602, 964=>602, 965=>602, 966=>602, 967=>602, 968=>602, 969=>602, 970=>602, + 971=>602, 972=>602, 973=>602, 974=>602, 976=>602, 977=>602, 978=>602, 979=>602, 980=>602, 981=>602, 982=>602, 983=>602, 984=>602, 985=>602, 986=>602, 987=>602, + 988=>602, 989=>602, 990=>602, 991=>602, 992=>602, 993=>602, 1008=>602, 1009=>602, 1010=>602, 1011=>602, 1012=>602, 1013=>602, 1014=>602, 1015=>602, 1016=>602, 1017=>602, + 1018=>602, 1019=>602, 1020=>602, 1021=>602, 1022=>602, 1023=>602, 1024=>602, 1025=>602, 1026=>602, 1028=>602, 1029=>602, 1030=>602, 1031=>602, 1032=>602, 1033=>602, 1034=>602, + 1035=>602, 1037=>602, 1038=>602, 1040=>602, 1041=>602, 1042=>602, 1043=>602, 1044=>602, 1045=>602, 1046=>602, 1047=>602, 1048=>602, 1049=>602, 1050=>602, 1051=>602, 1052=>602, + 1053=>602, 1054=>602, 1055=>602, 1056=>602, 1057=>602, 1058=>602, 1059=>602, 1060=>602, 1061=>602, 1062=>602, 1063=>602, 1064=>602, 1065=>602, 1066=>602, 1067=>602, 1068=>602, + 1069=>602, 1070=>602, 1071=>602, 1072=>602, 1073=>602, 1074=>602, 1075=>602, 1076=>602, 1077=>602, 1078=>602, 1079=>602, 1080=>602, 1081=>602, 1082=>602, 1083=>602, 1084=>602, + 1085=>602, 1086=>602, 1087=>602, 1088=>602, 1089=>602, 1090=>602, 1091=>602, 1092=>602, 1093=>602, 1094=>602, 1095=>602, 1096=>602, 1097=>602, 1098=>602, 1099=>602, 1100=>602, + 1101=>602, 1102=>602, 1103=>602, 1104=>602, 1105=>602, 1106=>602, 1107=>602, 1108=>602, 1109=>602, 1110=>602, 1111=>602, 1112=>602, 1113=>602, 1114=>602, 1115=>602, 1117=>602, + 1118=>602, 1119=>602, 1168=>602, 1169=>602, 1170=>602, 1171=>602, 1172=>602, 1173=>602, 1176=>602, 1177=>602, 1178=>602, 1179=>602, 1186=>602, 1187=>602, 1194=>602, 1195=>602, + 1196=>602, 1197=>602, 1198=>602, 1199=>602, 1202=>602, 1203=>602, 1210=>602, 1211=>602, 1216=>602, 1217=>602, 1218=>602, 1219=>602, 1220=>602, 1223=>602, 1224=>602, 1227=>602, + 1228=>602, 1231=>602, 1232=>602, 1233=>602, 1234=>602, 1235=>602, 1236=>602, 1237=>602, 1238=>602, 1239=>602, 1240=>602, 1241=>602, 1242=>602, 1243=>602, 1244=>602, 1245=>602, + 1246=>602, 1247=>602, 1248=>602, 1249=>602, 1250=>602, 1251=>602, 1252=>602, 1253=>602, 1254=>602, 1255=>602, 1256=>602, 1257=>602, 1258=>602, 1259=>602, 1260=>602, 1261=>602, + 1262=>602, 1263=>602, 1264=>602, 1265=>602, 1266=>602, 1267=>602, 1268=>602, 1269=>602, 1270=>602, 1271=>602, 1272=>602, 1273=>602, 3713=>602, 3714=>602, 3716=>602, 3719=>602, + 3720=>602, 3722=>602, 3725=>602, 3732=>602, 3733=>602, 3734=>602, 3735=>602, 3737=>602, 3738=>602, 3739=>602, 3740=>602, 3741=>602, 3742=>602, 3743=>602, 3745=>602, 3746=>602, + 3747=>602, 3749=>602, 3751=>602, 3754=>602, 3755=>602, 3757=>602, 3758=>602, 3759=>602, 7426=>602, 7432=>602, 7433=>602, 7444=>602, 7446=>602, 7447=>602, 7453=>602, 7454=>602, + 7455=>602, 7491=>602, 7492=>602, 7493=>602, 7494=>602, 7495=>602, 7496=>602, 7497=>602, 7498=>602, 7499=>602, 7500=>602, 7501=>602, 7502=>602, 7503=>602, 7504=>602, 7505=>602, + 7506=>602, 7507=>602, 7508=>602, 7509=>602, 7510=>602, 7511=>602, 7512=>602, 7513=>602, 7514=>602, 7515=>602, 7543=>602, 7547=>602, 7557=>602, 7579=>602, 7580=>602, 7581=>602, + 7582=>602, 7583=>602, 7584=>602, 7585=>602, 7586=>602, 7587=>602, 7588=>602, 7589=>602, 7590=>602, 7591=>602, 7592=>602, 7593=>602, 7594=>602, 7595=>602, 7596=>602, 7597=>602, + 7598=>602, 7599=>602, 7600=>602, 7601=>602, 7602=>602, 7603=>602, 7604=>602, 7605=>602, 7606=>602, 7607=>602, 7609=>602, 7610=>602, 7611=>602, 7612=>602, 7613=>602, 7614=>602, + 7615=>602, 7680=>602, 7681=>602, 7682=>602, 7683=>602, 7684=>602, 7685=>602, 7686=>602, 7687=>602, 7690=>602, 7691=>602, 7692=>602, 7693=>602, 7694=>602, 7695=>602, 7698=>602, + 7699=>602, 7704=>602, 7705=>602, 7706=>602, 7707=>602, 7708=>602, 7709=>602, 7710=>602, 7711=>602, 7712=>602, 7713=>602, 7714=>602, 7715=>602, 7716=>602, 7717=>602, 7720=>602, + 7721=>602, 7722=>602, 7723=>602, 7724=>602, 7725=>602, 7728=>602, 7729=>602, 7730=>602, 7731=>602, 7732=>602, 7733=>602, 7734=>602, 7735=>602, 7736=>602, 7737=>602, 7738=>602, + 7739=>602, 7740=>602, 7741=>602, 7742=>602, 7743=>602, 7744=>602, 7745=>602, 7746=>602, 7747=>602, 7748=>602, 7749=>602, 7750=>602, 7751=>602, 7752=>602, 7753=>602, 7754=>602, + 7755=>602, 7766=>602, 7767=>602, 7768=>602, 7769=>602, 7770=>602, 7771=>602, 7772=>602, 7773=>602, 7774=>602, 7775=>602, 7776=>602, 7777=>602, 7778=>602, 7779=>602, 7784=>602, + 7785=>602, 7786=>602, 7787=>602, 7788=>602, 7789=>602, 7790=>602, 7791=>602, 7792=>602, 7793=>602, 7794=>602, 7795=>602, 7796=>602, 7797=>602, 7798=>602, 7799=>602, 7806=>602, + 7807=>602, 7808=>602, 7809=>602, 7810=>602, 7811=>602, 7812=>602, 7813=>602, 7814=>602, 7815=>602, 7816=>602, 7817=>602, 7818=>602, 7819=>602, 7822=>602, 7823=>602, 7826=>602, + 7827=>602, 7828=>602, 7829=>602, 7830=>602, 7835=>602, 7840=>602, 7841=>602, 7864=>602, 7865=>602, 7868=>602, 7869=>602, 7882=>602, 7883=>602, 7884=>602, 7885=>602, 7908=>602, + 7909=>602, 7922=>602, 7923=>602, 7924=>602, 7925=>602, 7928=>602, 7929=>602, 7936=>602, 7937=>602, 7938=>602, 7939=>602, 7940=>602, 7941=>602, 7942=>602, 7943=>602, 7944=>602, + 7945=>602, 7946=>602, 7947=>602, 7948=>602, 7949=>602, 7950=>602, 7951=>602, 7952=>602, 7953=>602, 7954=>602, 7955=>602, 7956=>602, 7957=>602, 7960=>602, 7961=>602, 7962=>602, + 7963=>602, 7964=>602, 7965=>602, 7968=>602, 7969=>602, 7970=>602, 7971=>602, 7972=>602, 7973=>602, 7974=>602, 7975=>602, 7976=>602, 7977=>602, 7978=>602, 7979=>602, 7980=>602, + 7981=>602, 7982=>602, 7983=>602, 7984=>602, 7985=>602, 7986=>602, 7987=>602, 7988=>602, 7989=>602, 7990=>602, 7991=>602, 7992=>602, 7993=>602, 7994=>602, 7995=>602, 7996=>602, + 7997=>602, 7998=>602, 7999=>602, 8000=>602, 8001=>602, 8002=>602, 8003=>602, 8004=>602, 8005=>602, 8008=>602, 8009=>602, 8010=>602, 8011=>602, 8012=>602, 8013=>602, 8016=>602, + 8017=>602, 8018=>602, 8019=>602, 8020=>602, 8021=>602, 8022=>602, 8023=>602, 8025=>602, 8027=>602, 8029=>602, 8031=>602, 8032=>602, 8033=>602, 8034=>602, 8035=>602, 8036=>602, + 8037=>602, 8038=>602, 8039=>602, 8040=>602, 8041=>602, 8042=>602, 8043=>602, 8044=>602, 8045=>602, 8046=>602, 8047=>602, 8048=>602, 8049=>602, 8050=>602, 8051=>602, 8052=>602, + 8053=>602, 8054=>602, 8055=>602, 8056=>602, 8057=>602, 8058=>602, 8059=>602, 8060=>602, 8061=>602, 8064=>602, 8065=>602, 8066=>602, 8067=>602, 8068=>602, 8069=>602, 8070=>602, + 8071=>602, 8072=>602, 8073=>602, 8074=>602, 8075=>602, 8076=>602, 8077=>602, 8078=>602, 8079=>602, 8080=>602, 8081=>602, 8082=>602, 8083=>602, 8084=>602, 8085=>602, 8086=>602, + 8087=>602, 8088=>602, 8089=>602, 8090=>602, 8091=>602, 8092=>602, 8093=>602, 8094=>602, 8095=>602, 8096=>602, 8097=>602, 8098=>602, 8099=>602, 8100=>602, 8101=>602, 8102=>602, + 8103=>602, 8104=>602, 8105=>602, 8106=>602, 8107=>602, 8108=>602, 8109=>602, 8110=>602, 8111=>602, 8112=>602, 8113=>602, 8114=>602, 8115=>602, 8116=>602, 8118=>602, 8119=>602, + 8120=>602, 8121=>602, 8122=>602, 8123=>602, 8124=>602, 8125=>602, 8126=>602, 8127=>602, 8128=>602, 8129=>602, 8130=>602, 8131=>602, 8132=>602, 8134=>602, 8135=>602, 8136=>602, + 8137=>602, 8138=>602, 8139=>602, 8140=>602, 8141=>602, 8142=>602, 8143=>602, 8144=>602, 8145=>602, 8146=>602, 8147=>602, 8150=>602, 8151=>602, 8152=>602, 8153=>602, 8154=>602, + 8155=>602, 8157=>602, 8158=>602, 8159=>602, 8160=>602, 8161=>602, 8162=>602, 8163=>602, 8164=>602, 8165=>602, 8166=>602, 8167=>602, 8168=>602, 8169=>602, 8170=>602, 8171=>602, + 8172=>602, 8173=>602, 8174=>602, 8175=>602, 8178=>602, 8179=>602, 8180=>602, 8182=>602, 8183=>602, 8184=>602, 8185=>602, 8186=>602, 8187=>602, 8188=>602, 8189=>602, 8190=>602, + 8192=>602, 8193=>602, 8194=>602, 8195=>602, 8196=>602, 8197=>602, 8198=>602, 8199=>602, 8200=>602, 8201=>602, 8202=>602, 8208=>602, 8209=>602, 8210=>602, 8213=>602, 8215=>602, + 8219=>602, 8223=>602, 8227=>602, 8239=>602, 8241=>602, 8252=>602, 8253=>602, 8254=>602, 8261=>602, 8262=>602, 8263=>602, 8264=>602, 8265=>602, 8287=>602, 8304=>602, 8308=>602, + 8309=>602, 8310=>602, 8311=>602, 8312=>602, 8313=>602, 8319=>602, 8320=>602, 8321=>602, 8322=>602, 8323=>602, 8324=>602, 8325=>602, 8326=>602, 8327=>602, 8328=>602, 8329=>602, + 8358=>602, 8369=>602, 8372=>602, 8373=>602, 8462=>602, 8470=>602, 8486=>602, 8490=>602, 8491=>602, 8531=>602, 8532=>602, 8533=>602, 8534=>602, 8535=>602, 8536=>602, 8537=>602, + 8538=>602, 8539=>602, 8540=>602, 8541=>602, 8542=>602, 8543=>602, 8592=>602, 8593=>602, 8594=>602, 8595=>602, 8596=>602, 8597=>602, 8598=>602, 8599=>602, 8600=>602, 8601=>602, + 8602=>602, 8603=>602, 8604=>602, 8605=>602, 8606=>602, 8607=>602, 8608=>602, 8609=>602, 8610=>602, 8611=>602, 8612=>602, 8613=>602, 8614=>602, 8615=>602, 8616=>602, 8617=>602, + 8618=>602, 8619=>602, 8620=>602, 8621=>602, 8622=>602, 8623=>602, 8624=>602, 8625=>602, 8626=>602, 8627=>602, 8628=>602, 8629=>602, 8630=>602, 8631=>602, 8632=>602, 8633=>602, + 8634=>602, 8635=>602, 8636=>602, 8637=>602, 8638=>602, 8639=>602, 8640=>602, 8641=>602, 8642=>602, 8643=>602, 8644=>602, 8645=>602, 8646=>602, 8647=>602, 8648=>602, 8649=>602, + 8650=>602, 8651=>602, 8652=>602, 8653=>602, 8654=>602, 8655=>602, 8656=>602, 8657=>602, 8658=>602, 8659=>602, 8660=>602, 8661=>602, 8662=>602, 8663=>602, 8664=>602, 8665=>602, + 8666=>602, 8667=>602, 8668=>602, 8669=>602, 8670=>602, 8671=>602, 8672=>602, 8673=>602, 8674=>602, 8675=>602, 8676=>602, 8677=>602, 8678=>602, 8679=>602, 8680=>602, 8681=>602, + 8682=>602, 8683=>602, 8684=>602, 8685=>602, 8686=>602, 8687=>602, 8688=>602, 8689=>602, 8690=>602, 8691=>602, 8692=>602, 8693=>602, 8694=>602, 8695=>602, 8696=>602, 8697=>602, + 8698=>602, 8699=>602, 8700=>602, 8701=>602, 8702=>602, 8703=>602, 8706=>602, 8709=>602, 8710=>602, 8711=>602, 8712=>602, 8713=>602, 8714=>602, 8715=>602, 8716=>602, 8717=>602, + 8719=>602, 8721=>602, 8722=>602, 8723=>602, 8725=>602, 8727=>602, 8728=>602, 8729=>602, 8730=>602, 8733=>602, 8734=>602, 8735=>602, 8736=>602, 8743=>602, 8744=>602, 8745=>602, + 8746=>602, 8747=>602, 8748=>602, 8749=>602, 8760=>602, 8761=>602, 8762=>602, 8763=>602, 8764=>602, 8765=>602, 8769=>602, 8770=>602, 8771=>602, 8772=>602, 8773=>602, 8774=>602, + 8775=>602, 8776=>602, 8777=>602, 8778=>602, 8779=>602, 8780=>602, 8781=>602, 8782=>602, 8783=>602, 8784=>602, 8785=>602, 8786=>602, 8787=>602, 8788=>602, 8789=>602, 8790=>602, + 8791=>602, 8792=>602, 8793=>602, 8794=>602, 8795=>602, 8796=>602, 8797=>602, 8798=>602, 8799=>602, 8800=>602, 8801=>602, 8802=>602, 8803=>602, 8804=>602, 8805=>602, 8806=>602, + 8807=>602, 8808=>602, 8809=>602, 8813=>602, 8814=>602, 8815=>602, 8816=>602, 8817=>602, 8818=>602, 8819=>602, 8820=>602, 8821=>602, 8822=>602, 8823=>602, 8824=>602, 8825=>602, + 8826=>602, 8827=>602, 8828=>602, 8829=>602, 8830=>602, 8831=>602, 8832=>602, 8833=>602, 8834=>602, 8835=>602, 8836=>602, 8837=>602, 8838=>602, 8839=>602, 8840=>602, 8841=>602, + 8842=>602, 8843=>602, 8847=>602, 8848=>602, 8849=>602, 8850=>602, 8853=>602, 8854=>602, 8855=>602, 8856=>602, 8857=>602, 8858=>602, 8859=>602, 8860=>602, 8861=>602, 8862=>602, + 8863=>602, 8864=>602, 8865=>602, 8901=>602, 8902=>602, 8909=>602, 8922=>602, 8923=>602, 8924=>602, 8925=>602, 8926=>602, 8927=>602, 8928=>602, 8929=>602, 8930=>602, 8931=>602, + 8932=>602, 8933=>602, 8934=>602, 8935=>602, 8936=>602, 8937=>602, 8943=>602, 8960=>602, 8961=>602, 8962=>602, 8963=>602, 8964=>602, 8965=>602, 8966=>602, 8968=>602, 8969=>602, + 8970=>602, 8971=>602, 8972=>602, 8973=>602, 8974=>602, 8975=>602, 8976=>602, 8977=>602, 8978=>602, 8979=>602, 8980=>602, 8981=>602, 8984=>602, 8985=>602, 8988=>602, 8989=>602, + 8990=>602, 8991=>602, 8992=>602, 8993=>602, 8997=>602, 8998=>602, 8999=>602, 9000=>602, 9003=>602, 9013=>602, 9015=>602, 9016=>602, 9017=>602, 9018=>602, 9019=>602, 9020=>602, + 9021=>602, 9022=>602, 9025=>602, 9026=>602, 9027=>602, 9028=>602, 9031=>602, 9032=>602, 9033=>602, 9035=>602, 9036=>602, 9037=>602, 9040=>602, 9042=>602, 9043=>602, 9044=>602, + 9047=>602, 9048=>602, 9049=>602, 9050=>602, 9051=>602, 9052=>602, 9054=>602, 9055=>602, 9056=>602, 9059=>602, 9060=>602, 9061=>602, 9064=>602, 9065=>602, 9067=>602, 9068=>602, + 9069=>602, 9070=>602, 9071=>602, 9072=>602, 9075=>602, 9076=>602, 9077=>602, 9078=>602, 9079=>602, 9080=>602, 9081=>602, 9082=>602, 9085=>602, 9088=>602, 9089=>602, 9090=>602, + 9091=>602, 9096=>602, 9097=>602, 9098=>602, 9099=>602, 9109=>602, 9115=>602, 9116=>602, 9117=>602, 9118=>602, 9119=>602, 9120=>602, 9121=>602, 9122=>602, 9123=>602, 9124=>602, + 9125=>602, 9126=>602, 9127=>602, 9128=>602, 9129=>602, 9130=>602, 9131=>602, 9132=>602, 9133=>602, 9134=>602, 9166=>602, 9167=>602, 9251=>602, 9600=>602, 9601=>602, 9602=>602, + 9603=>602, 9604=>602, 9605=>602, 9606=>602, 9607=>602, 9608=>602, 9609=>602, 9610=>602, 9611=>602, 9612=>602, 9613=>602, 9614=>602, 9615=>602, 9616=>602, 9617=>602, 9618=>602, + 9619=>602, 9620=>602, 9621=>602, 9622=>602, 9623=>602, 9624=>602, 9625=>602, 9626=>602, 9627=>602, 9628=>602, 9629=>602, 9630=>602, 9631=>602, 9632=>602, 9633=>602, 9634=>602, + 9635=>602, 9636=>602, 9637=>602, 9638=>602, 9639=>602, 9640=>602, 9641=>602, 9642=>602, 9643=>602, 9644=>602, 9645=>602, 9646=>602, 9647=>602, 9648=>602, 9649=>602, 9650=>602, + 9651=>602, 9652=>602, 9653=>602, 9654=>602, 9655=>602, 9656=>602, 9657=>602, 9658=>602, 9659=>602, 9660=>602, 9661=>602, 9662=>602, 9663=>602, 9664=>602, 9665=>602, 9666=>602, + 9667=>602, 9668=>602, 9669=>602, 9670=>602, 9671=>602, 9672=>602, 9673=>602, 9674=>602, 9675=>602, 9676=>602, 9677=>602, 9678=>602, 9679=>602, 9680=>602, 9681=>602, 9682=>602, + 9683=>602, 9684=>602, 9685=>602, 9686=>602, 9687=>602, 9688=>602, 9689=>602, 9690=>602, 9691=>602, 9692=>602, 9693=>602, 9694=>602, 9695=>602, 9696=>602, 9697=>602, 9698=>602, + 9699=>602, 9700=>602, 9701=>602, 9702=>602, 9703=>602, 9704=>602, 9705=>602, 9706=>602, 9707=>602, 9708=>602, 9709=>602, 9710=>602, 9711=>602, 9712=>602, 9713=>602, 9714=>602, + 9715=>602, 9716=>602, 9717=>602, 9718=>602, 9719=>602, 9720=>602, 9721=>602, 9722=>602, 9723=>602, 9724=>602, 9725=>602, 9726=>602, 9727=>602, 9728=>602, 9729=>602, 9730=>602, + 9731=>602, 9732=>602, 9733=>602, 9734=>602, 9735=>602, 9736=>602, 9737=>602, 9738=>602, 9739=>602, 9740=>602, 9741=>602, 9742=>602, 9743=>602, 9744=>602, 9745=>602, 9746=>602, + 9747=>602, 9748=>602, 9749=>602, 9750=>602, 9751=>602, 9752=>602, 9753=>602, 9754=>602, 9755=>602, 9756=>602, 9757=>602, 9758=>602, 9759=>602, 9760=>602, 9761=>602, 9762=>602, + 9763=>602, 9764=>602, 9765=>602, 9766=>602, 9767=>602, 9768=>602, 9769=>602, 9770=>602, 9771=>602, 9772=>602, 9773=>602, 9774=>602, 9775=>602, 9784=>602, 9785=>602, 9786=>602, + 9787=>602, 9788=>602, 9789=>602, 9790=>602, 9791=>602, 9792=>602, 9793=>602, 9794=>602, 9795=>602, 9796=>602, 9797=>602, 9798=>602, 9799=>602, 9800=>602, 9801=>602, 9802=>602, + 9803=>602, 9804=>602, 9805=>602, 9806=>602, 9807=>602, 9808=>602, 9809=>602, 9810=>602, 9811=>602, 9812=>602, 9813=>602, 9814=>602, 9815=>602, 9816=>602, 9817=>602, 9818=>602, + 9819=>602, 9820=>602, 9821=>602, 9822=>602, 9823=>602, 9824=>602, 9825=>602, 9826=>602, 9827=>602, 9828=>602, 9829=>602, 9830=>602, 9831=>602, 9832=>602, 9833=>602, 9834=>602, + 9835=>602, 9836=>602, 9837=>602, 9838=>602, 9839=>602, 9840=>602, 9841=>602, 9842=>602, 9843=>602, 9844=>602, 9845=>602, 9846=>602, 9847=>602, 9848=>602, 9849=>602, 9850=>602, + 9851=>602, 9852=>602, 9853=>602, 9854=>602, 9855=>602, 9856=>602, 9857=>602, 9858=>602, 9859=>602, 9860=>602, 9861=>602, 9862=>602, 9863=>602, 9864=>602, 9865=>602, 9866=>602, + 9867=>602, 9872=>602, 9873=>602, 9874=>602, 9875=>602, 9876=>602, 9877=>602, 9878=>602, 9879=>602, 9880=>602, 9881=>602, 9882=>602, 9883=>602, 9884=>602, 9888=>602, 9889=>602, + 9904=>602, 9905=>602, 9985=>602, 9986=>602, 9987=>602, 9988=>602, 9990=>602, 9991=>602, 9992=>602, 9993=>602, 9996=>602, 9997=>602, 9998=>602, 9999=>602, 10000=>602, 10001=>602, + 10002=>602, 10003=>602, 10004=>602, 10005=>602, 10006=>602, 10007=>602, 10008=>602, 10009=>602, 10010=>602, 10011=>602, 10012=>602, 10013=>602, 10014=>602, 10015=>602, 10016=>602, 10017=>602, + 10018=>602, 10019=>602, 10020=>602, 10021=>602, 10022=>602, 10023=>602, 10025=>602, 10026=>602, 10027=>602, 10028=>602, 10029=>602, 10030=>602, 10031=>602, 10032=>602, 10033=>602, 10034=>602, + 10035=>602, 10036=>602, 10037=>602, 10038=>602, 10039=>602, 10040=>602, 10041=>602, 10042=>602, 10043=>602, 10044=>602, 10045=>602, 10046=>602, 10047=>602, 10048=>602, 10049=>602, 10050=>602, + 10051=>602, 10052=>602, 10053=>602, 10054=>602, 10055=>602, 10056=>602, 10057=>602, 10058=>602, 10059=>602, 10061=>602, 10063=>602, 10064=>602, 10065=>602, 10066=>602, 10070=>602, 10072=>602, + 10073=>602, 10074=>602, 10075=>602, 10076=>602, 10077=>602, 10078=>602, 10081=>602, 10082=>602, 10083=>602, 10084=>602, 10085=>602, 10086=>602, 10087=>602, 10088=>602, 10089=>602, 10090=>602, + 10091=>602, 10092=>602, 10093=>602, 10094=>602, 10095=>602, 10096=>602, 10097=>602, 10098=>602, 10099=>602, 10100=>602, 10101=>602, 10132=>602, 10136=>602, 10137=>602, 10138=>602, 10139=>602, + 10140=>602, 10141=>602, 10142=>602, 10143=>602, 10144=>602, 10145=>602, 10146=>602, 10147=>602, 10148=>602, 10149=>602, 10150=>602, 10151=>602, 10152=>602, 10153=>602, 10154=>602, 10155=>602, + 10156=>602, 10157=>602, 10158=>602, 10159=>602, 10161=>602, 10162=>602, 10163=>602, 10164=>602, 10165=>602, 10166=>602, 10167=>602, 10168=>602, 10169=>602, 10170=>602, 10171=>602, 10172=>602, + 10173=>602, 10174=>602, 10175=>602, 10208=>602, 10216=>602, 10217=>602, 10731=>602, 11026=>602, 11027=>602, 11028=>602, 11029=>602, 11030=>602, 11031=>602, 11032=>602, 11033=>602, 11034=>602, + 63173=>602, 64257=>602, 64258=>602, 65533=>602}; + font[:enc]=''; + font[:diff]=''; + font[:file]='DejaVuSansMono-Bold.z'; + font[:ctg]='DejaVuSansMono-Bold.ctg.z'; + font[:originalsize]=245648; +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSansMonobi.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/DejaVuSansMonobi.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,143 @@ +TCPDFFontDescriptor.define('DejaVuSansMonobi') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='DejaVuSansMono-BoldOblique'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>97,'FontBBox'=>'[-386 -394 808 1102]','ItalicAngle'=>-11,'StemV'=>120,'MissingWidth'=>602}; + font[:up]=-42; + font[:ut]=44; + font[:cw]={ + 0=>602, 32=>602, 33=>602, 34=>602, 35=>602, 36=>602, 37=>602, 38=>602, 39=>602, 40=>602, 41=>602, 42=>602, 43=>602, 44=>602, 45=>602, 46=>602, + 47=>602, 48=>602, 49=>602, 50=>602, 51=>602, 52=>602, 53=>602, 54=>602, 55=>602, 56=>602, 57=>602, 58=>602, 59=>602, 60=>602, 61=>602, 62=>602, + 63=>602, 64=>602, 65=>602, 66=>602, 67=>602, 68=>602, 69=>602, 70=>602, 71=>602, 72=>602, 73=>602, 74=>602, 75=>602, 76=>602, 77=>602, 78=>602, + 79=>602, 80=>602, 81=>602, 82=>602, 83=>602, 84=>602, 85=>602, 86=>602, 87=>602, 88=>602, 89=>602, 90=>602, 91=>602, 92=>602, 93=>602, 94=>602, + 95=>602, 96=>602, 97=>602, 98=>602, 99=>602, 100=>602, 101=>602, 102=>602, 103=>602, 104=>602, 105=>602, 106=>602, 107=>602, 108=>602, 109=>602, 110=>602, + 111=>602, 112=>602, 113=>602, 114=>602, 115=>602, 116=>602, 117=>602, 118=>602, 119=>602, 120=>602, 121=>602, 122=>602, 123=>602, 124=>602, 125=>602, 126=>602, + 8364=>602, 1027=>602, 8218=>602, 402=>602, 8222=>602, 8230=>602, 8224=>602, 8225=>602, 710=>602, 8240=>602, 352=>602, 8249=>602, 338=>602, 1036=>602, 381=>602, 1039=>602, + 8216=>602, 8217=>602, 8220=>602, 8221=>602, 8226=>602, 8211=>602, 8212=>602, 732=>602, 8482=>602, 353=>602, 8250=>602, 339=>602, 1116=>602, 382=>602, 376=>602, 160=>602, + 161=>602, 162=>602, 163=>602, 164=>602, 165=>602, 166=>602, 167=>602, 168=>602, 169=>602, 170=>602, 171=>602, 172=>602, 173=>602, 174=>602, 175=>602, 176=>602, + 177=>602, 178=>602, 179=>602, 180=>602, 181=>602, 182=>602, 183=>602, 184=>602, 185=>602, 186=>602, 187=>602, 188=>602, 189=>602, 190=>602, 191=>602, 192=>602, + 193=>602, 194=>602, 195=>602, 196=>602, 197=>602, 198=>602, 199=>602, 200=>602, 201=>602, 202=>602, 203=>602, 204=>602, 205=>602, 206=>602, 207=>602, 208=>602, + 209=>602, 210=>602, 211=>602, 212=>602, 213=>602, 214=>602, 215=>602, 216=>602, 217=>602, 218=>602, 219=>602, 220=>602, 221=>602, 222=>602, 223=>602, 224=>602, + 225=>602, 226=>602, 227=>602, 228=>602, 229=>602, 230=>602, 231=>602, 232=>602, 233=>602, 234=>602, 235=>602, 236=>602, 237=>602, 238=>602, 239=>602, 240=>602, + 241=>602, 242=>602, 243=>602, 244=>602, 245=>602, 246=>602, 247=>602, 248=>602, 249=>602, 250=>602, 251=>602, 252=>602, 253=>602, 254=>602, 255=>602, 256=>602, + 257=>602, 258=>602, 259=>602, 260=>602, 261=>602, 262=>602, 263=>602, 264=>602, 265=>602, 266=>602, 267=>602, 268=>602, 269=>602, 270=>602, 271=>602, 272=>602, + 273=>602, 274=>602, 275=>602, 276=>602, 277=>602, 278=>602, 279=>602, 280=>602, 281=>602, 282=>602, 283=>602, 284=>602, 285=>602, 286=>602, 287=>602, 288=>602, + 289=>602, 290=>602, 291=>602, 292=>602, 293=>602, 294=>602, 295=>602, 296=>602, 297=>602, 298=>602, 299=>602, 300=>602, 301=>602, 302=>602, 303=>602, 304=>602, + 305=>602, 306=>602, 307=>602, 308=>602, 309=>602, 310=>602, 311=>602, 312=>602, 313=>602, 314=>602, 315=>602, 316=>602, 317=>602, 318=>602, 319=>602, 320=>602, + 321=>602, 322=>602, 323=>602, 324=>602, 325=>602, 326=>602, 327=>602, 328=>602, 329=>602, 330=>602, 331=>602, 332=>602, 333=>602, 334=>602, 335=>602, 336=>602, + 337=>602, 340=>602, 341=>602, 342=>602, 343=>602, 344=>602, 345=>602, 346=>602, 347=>602, 348=>602, 349=>602, 350=>602, 351=>602, 354=>602, 355=>602, 356=>602, + 357=>602, 358=>602, 359=>602, 360=>602, 361=>602, 362=>602, 363=>602, 364=>602, 365=>602, 366=>602, 367=>602, 368=>602, 369=>602, 370=>602, 371=>602, 372=>602, + 373=>602, 374=>602, 375=>602, 377=>602, 378=>602, 379=>602, 380=>602, 383=>602, 385=>602, 386=>602, 387=>602, 388=>602, 389=>602, 390=>602, 391=>602, 392=>602, + 393=>602, 394=>602, 395=>602, 396=>602, 397=>602, 398=>602, 399=>602, 400=>602, 401=>602, 403=>602, 404=>602, 405=>602, 406=>602, 407=>602, 408=>602, 409=>602, + 410=>602, 411=>602, 412=>602, 413=>602, 414=>602, 415=>602, 416=>602, 417=>602, 418=>602, 419=>602, 420=>602, 421=>602, 422=>602, 423=>602, 424=>602, 425=>602, + 426=>602, 427=>602, 428=>602, 429=>602, 430=>602, 431=>602, 432=>602, 433=>602, 434=>602, 435=>602, 436=>602, 437=>602, 438=>602, 439=>602, 440=>602, 441=>602, + 443=>602, 444=>602, 445=>602, 446=>602, 448=>602, 449=>602, 450=>602, 451=>602, 461=>602, 462=>602, 463=>602, 464=>602, 465=>602, 466=>602, 467=>602, 468=>602, + 470=>602, 471=>602, 472=>602, 473=>602, 474=>602, 475=>602, 476=>602, 477=>602, 479=>602, 482=>602, 483=>602, 486=>602, 487=>602, 488=>602, 489=>602, 490=>602, + 491=>602, 492=>602, 493=>602, 494=>602, 495=>602, 500=>602, 501=>602, 502=>602, 504=>602, 505=>602, 508=>602, 509=>602, 510=>602, 511=>602, 512=>602, 513=>602, + 514=>602, 515=>602, 516=>602, 517=>602, 518=>602, 519=>602, 520=>602, 521=>602, 522=>602, 523=>602, 524=>602, 525=>602, 526=>602, 527=>602, 528=>602, 529=>602, + 530=>602, 531=>602, 532=>602, 533=>602, 534=>602, 535=>602, 536=>602, 537=>602, 538=>602, 539=>602, 542=>602, 543=>602, 545=>602, 548=>602, 549=>602, 550=>602, + 551=>602, 552=>602, 553=>602, 555=>602, 557=>602, 558=>602, 559=>602, 561=>602, 562=>602, 563=>602, 564=>602, 565=>602, 566=>602, 567=>602, 568=>602, 569=>602, + 570=>602, 571=>602, 572=>602, 573=>602, 574=>602, 575=>602, 576=>602, 577=>602, 581=>602, 592=>602, 593=>602, 594=>602, 595=>602, 596=>602, 597=>602, 598=>602, + 599=>602, 600=>602, 601=>602, 602=>602, 603=>602, 604=>602, 605=>602, 606=>602, 607=>602, 608=>602, 609=>602, 610=>602, 611=>602, 612=>602, 613=>602, 614=>602, + 615=>602, 616=>602, 617=>602, 618=>602, 619=>602, 620=>602, 621=>602, 622=>602, 623=>602, 624=>602, 625=>602, 626=>602, 627=>602, 628=>602, 629=>602, 630=>602, + 631=>602, 632=>602, 633=>602, 634=>602, 635=>602, 636=>602, 637=>602, 638=>602, 639=>602, 640=>602, 641=>602, 642=>602, 643=>602, 644=>602, 645=>602, 646=>602, + 647=>602, 648=>602, 649=>602, 650=>602, 651=>602, 652=>602, 653=>602, 654=>602, 655=>602, 656=>602, 657=>602, 658=>602, 659=>602, 660=>602, 661=>602, 662=>602, + 663=>602, 664=>602, 665=>602, 666=>602, 667=>602, 668=>602, 669=>602, 670=>602, 671=>602, 672=>602, 673=>602, 674=>602, 675=>602, 676=>602, 677=>602, 678=>602, + 679=>602, 680=>602, 681=>602, 682=>602, 683=>602, 684=>602, 685=>602, 686=>602, 687=>602, 688=>602, 689=>602, 690=>602, 691=>602, 692=>602, 693=>602, 694=>602, + 695=>602, 696=>602, 697=>602, 699=>602, 700=>602, 701=>602, 702=>602, 703=>602, 704=>602, 705=>602, 711=>602, 712=>602, 713=>602, 716=>602, 717=>602, 720=>602, + 721=>602, 722=>602, 723=>602, 726=>602, 728=>602, 729=>602, 730=>602, 731=>602, 733=>602, 734=>602, 736=>602, 737=>602, 738=>602, 739=>602, 740=>602, 741=>602, + 742=>602, 743=>602, 744=>602, 745=>602, 755=>602, 768=>602, 769=>602, 770=>602, 771=>602, 772=>602, 773=>602, 774=>602, 775=>602, 776=>602, 777=>602, 778=>602, + 779=>602, 780=>602, 781=>602, 782=>602, 783=>602, 784=>602, 785=>602, 786=>602, 787=>602, 788=>602, 789=>602, 790=>602, 791=>602, 792=>602, 793=>602, 794=>602, + 795=>602, 796=>602, 797=>602, 798=>602, 799=>602, 800=>602, 801=>602, 802=>602, 803=>602, 804=>602, 805=>602, 806=>602, 807=>602, 808=>602, 809=>602, 810=>602, + 811=>602, 812=>602, 813=>602, 814=>602, 815=>602, 816=>602, 817=>602, 818=>602, 819=>602, 820=>602, 821=>602, 822=>602, 823=>602, 824=>602, 825=>602, 826=>602, + 827=>602, 828=>602, 829=>602, 830=>602, 831=>602, 835=>602, 856=>602, 865=>602, 884=>602, 885=>602, 890=>602, 894=>602, 900=>602, 901=>602, 902=>602, 903=>602, + 904=>602, 905=>602, 906=>602, 908=>602, 910=>602, 911=>602, 912=>602, 913=>602, 914=>602, 915=>602, 916=>602, 917=>602, 918=>602, 919=>602, 920=>602, 921=>602, + 922=>602, 923=>602, 924=>602, 925=>602, 926=>602, 927=>602, 928=>602, 929=>602, 931=>602, 932=>602, 933=>602, 934=>602, 935=>602, 936=>602, 937=>602, 938=>602, + 939=>602, 940=>602, 941=>602, 942=>602, 943=>602, 944=>602, 945=>602, 946=>602, 947=>602, 948=>602, 949=>602, 950=>602, 951=>602, 952=>602, 953=>602, 954=>602, + 955=>602, 956=>602, 957=>602, 958=>602, 959=>602, 960=>602, 961=>602, 962=>602, 963=>602, 964=>602, 965=>602, 966=>602, 967=>602, 968=>602, 969=>602, 970=>602, + 971=>602, 972=>602, 973=>602, 974=>602, 976=>602, 977=>602, 978=>602, 979=>602, 980=>602, 981=>602, 982=>602, 983=>602, 984=>602, 985=>602, 986=>602, 987=>602, + 988=>602, 989=>602, 990=>602, 991=>602, 992=>602, 993=>602, 1008=>602, 1009=>602, 1010=>602, 1011=>602, 1012=>602, 1013=>602, 1014=>602, 1015=>602, 1016=>602, 1017=>602, + 1018=>602, 1019=>602, 1020=>602, 1021=>602, 1022=>602, 1023=>602, 1024=>602, 1025=>602, 1026=>602, 1028=>602, 1029=>602, 1030=>602, 1031=>602, 1032=>602, 1033=>602, 1034=>602, + 1035=>602, 1037=>602, 1038=>602, 1040=>602, 1041=>602, 1042=>602, 1043=>602, 1044=>602, 1045=>602, 1046=>602, 1047=>602, 1048=>602, 1049=>602, 1050=>602, 1051=>602, 1052=>602, + 1053=>602, 1054=>602, 1055=>602, 1056=>602, 1057=>602, 1058=>602, 1059=>602, 1060=>602, 1061=>602, 1062=>602, 1063=>602, 1064=>602, 1065=>602, 1066=>602, 1067=>602, 1068=>602, + 1069=>602, 1070=>602, 1071=>602, 1072=>602, 1073=>602, 1074=>602, 1075=>602, 1076=>602, 1077=>602, 1078=>602, 1079=>602, 1080=>602, 1081=>602, 1082=>602, 1083=>602, 1084=>602, + 1085=>602, 1086=>602, 1087=>602, 1088=>602, 1089=>602, 1090=>602, 1091=>602, 1092=>602, 1093=>602, 1094=>602, 1095=>602, 1096=>602, 1097=>602, 1098=>602, 1099=>602, 1100=>602, + 1101=>602, 1102=>602, 1103=>602, 1104=>602, 1105=>602, 1106=>602, 1107=>602, 1108=>602, 1109=>602, 1110=>602, 1111=>602, 1112=>602, 1113=>602, 1114=>602, 1115=>602, 1117=>602, + 1118=>602, 1119=>602, 1168=>602, 1169=>602, 1170=>602, 1171=>602, 1172=>602, 1173=>602, 1176=>602, 1177=>602, 1178=>602, 1179=>602, 1186=>602, 1187=>602, 1194=>602, 1195=>602, + 1196=>602, 1197=>602, 1198=>602, 1199=>602, 1202=>602, 1203=>602, 1210=>602, 1211=>602, 1216=>602, 1217=>602, 1218=>602, 1219=>602, 1220=>602, 1223=>602, 1224=>602, 1227=>602, + 1228=>602, 1231=>602, 1232=>602, 1233=>602, 1234=>602, 1235=>602, 1236=>602, 1237=>602, 1238=>602, 1239=>602, 1240=>602, 1241=>602, 1242=>602, 1243=>602, 1244=>602, 1245=>602, + 1246=>602, 1247=>602, 1248=>602, 1249=>602, 1250=>602, 1251=>602, 1252=>602, 1253=>602, 1254=>602, 1255=>602, 1256=>602, 1257=>602, 1258=>602, 1259=>602, 1260=>602, 1261=>602, + 1262=>602, 1263=>602, 1264=>602, 1265=>602, 1266=>602, 1267=>602, 1268=>602, 1269=>602, 1270=>602, 1271=>602, 1272=>602, 1273=>602, 3713=>602, 3714=>602, 3716=>602, 3719=>602, + 3720=>602, 3722=>602, 3725=>602, 3732=>602, 3733=>602, 3734=>602, 3735=>602, 3737=>602, 3738=>602, 3739=>602, 3740=>602, 3741=>602, 3742=>602, 3743=>602, 3745=>602, 3746=>602, + 3747=>602, 3749=>602, 3751=>602, 3754=>602, 3755=>602, 3757=>602, 3758=>602, 3759=>602, 7426=>602, 7432=>602, 7433=>602, 7444=>602, 7446=>602, 7447=>602, 7453=>602, 7454=>602, + 7455=>602, 7491=>602, 7492=>602, 7493=>602, 7494=>602, 7495=>602, 7496=>602, 7497=>602, 7498=>602, 7499=>602, 7500=>602, 7501=>602, 7502=>602, 7503=>602, 7504=>602, 7505=>602, + 7506=>602, 7507=>602, 7508=>602, 7509=>602, 7510=>602, 7511=>602, 7512=>602, 7513=>602, 7514=>602, 7515=>602, 7543=>602, 7547=>602, 7557=>602, 7579=>602, 7580=>602, 7581=>602, + 7582=>602, 7583=>602, 7584=>602, 7585=>602, 7586=>602, 7587=>602, 7588=>602, 7589=>602, 7590=>602, 7591=>602, 7592=>602, 7593=>602, 7594=>602, 7595=>602, 7596=>602, 7597=>602, + 7598=>602, 7599=>602, 7600=>602, 7601=>602, 7602=>602, 7603=>602, 7604=>602, 7605=>602, 7606=>602, 7607=>602, 7609=>602, 7610=>602, 7611=>602, 7612=>602, 7613=>602, 7614=>602, + 7615=>602, 7680=>602, 7681=>602, 7682=>602, 7683=>602, 7684=>602, 7685=>602, 7686=>602, 7687=>602, 7690=>602, 7691=>602, 7692=>602, 7693=>602, 7694=>602, 7695=>602, 7698=>602, + 7699=>602, 7704=>602, 7705=>602, 7706=>602, 7707=>602, 7708=>602, 7709=>602, 7710=>602, 7711=>602, 7712=>602, 7713=>602, 7714=>602, 7715=>602, 7716=>602, 7717=>602, 7720=>602, + 7721=>602, 7722=>602, 7723=>602, 7724=>602, 7725=>602, 7728=>602, 7729=>602, 7730=>602, 7731=>602, 7732=>602, 7733=>602, 7734=>602, 7735=>602, 7736=>602, 7737=>602, 7738=>602, + 7739=>602, 7740=>602, 7741=>602, 7742=>602, 7743=>602, 7744=>602, 7745=>602, 7746=>602, 7747=>602, 7748=>602, 7749=>602, 7750=>602, 7751=>602, 7752=>602, 7753=>602, 7754=>602, + 7755=>602, 7766=>602, 7767=>602, 7768=>602, 7769=>602, 7770=>602, 7771=>602, 7772=>602, 7773=>602, 7774=>602, 7775=>602, 7776=>602, 7777=>602, 7778=>602, 7779=>602, 7784=>602, + 7785=>602, 7786=>602, 7787=>602, 7788=>602, 7789=>602, 7790=>602, 7791=>602, 7792=>602, 7793=>602, 7794=>602, 7795=>602, 7796=>602, 7797=>602, 7798=>602, 7799=>602, 7806=>602, + 7807=>602, 7808=>602, 7809=>602, 7810=>602, 7811=>602, 7812=>602, 7813=>602, 7814=>602, 7815=>602, 7816=>602, 7817=>602, 7818=>602, 7819=>602, 7822=>602, 7823=>602, 7826=>602, + 7827=>602, 7828=>602, 7829=>602, 7830=>602, 7835=>602, 7840=>602, 7841=>602, 7864=>602, 7865=>602, 7868=>602, 7869=>602, 7882=>602, 7883=>602, 7884=>602, 7885=>602, 7908=>602, + 7909=>602, 7922=>602, 7923=>602, 7924=>602, 7925=>602, 7928=>602, 7929=>602, 7936=>602, 7937=>602, 7938=>602, 7939=>602, 7940=>602, 7941=>602, 7942=>602, 7943=>602, 7944=>602, + 7945=>602, 7946=>602, 7947=>602, 7948=>602, 7949=>602, 7950=>602, 7951=>602, 7952=>602, 7953=>602, 7954=>602, 7955=>602, 7956=>602, 7957=>602, 7960=>602, 7961=>602, 7962=>602, + 7963=>602, 7964=>602, 7965=>602, 7968=>602, 7969=>602, 7970=>602, 7971=>602, 7972=>602, 7973=>602, 7974=>602, 7975=>602, 7976=>602, 7977=>602, 7978=>602, 7979=>602, 7980=>602, + 7981=>602, 7982=>602, 7983=>602, 7984=>602, 7985=>602, 7986=>602, 7987=>602, 7988=>602, 7989=>602, 7990=>602, 7991=>602, 7992=>602, 7993=>602, 7994=>602, 7995=>602, 7996=>602, + 7997=>602, 7998=>602, 7999=>602, 8000=>602, 8001=>602, 8002=>602, 8003=>602, 8004=>602, 8005=>602, 8008=>602, 8009=>602, 8010=>602, 8011=>602, 8012=>602, 8013=>602, 8016=>602, + 8017=>602, 8018=>602, 8019=>602, 8020=>602, 8021=>602, 8022=>602, 8023=>602, 8025=>602, 8027=>602, 8029=>602, 8031=>602, 8032=>602, 8033=>602, 8034=>602, 8035=>602, 8036=>602, + 8037=>602, 8038=>602, 8039=>602, 8040=>602, 8041=>602, 8042=>602, 8043=>602, 8044=>602, 8045=>602, 8046=>602, 8047=>602, 8048=>602, 8049=>602, 8050=>602, 8051=>602, 8052=>602, + 8053=>602, 8054=>602, 8055=>602, 8056=>602, 8057=>602, 8058=>602, 8059=>602, 8060=>602, 8061=>602, 8064=>602, 8065=>602, 8066=>602, 8067=>602, 8068=>602, 8069=>602, 8070=>602, + 8071=>602, 8072=>602, 8073=>602, 8074=>602, 8075=>602, 8076=>602, 8077=>602, 8078=>602, 8079=>602, 8080=>602, 8081=>602, 8082=>602, 8083=>602, 8084=>602, 8085=>602, 8086=>602, + 8087=>602, 8088=>602, 8089=>602, 8090=>602, 8091=>602, 8092=>602, 8093=>602, 8094=>602, 8095=>602, 8096=>602, 8097=>602, 8098=>602, 8099=>602, 8100=>602, 8101=>602, 8102=>602, + 8103=>602, 8104=>602, 8105=>602, 8106=>602, 8107=>602, 8108=>602, 8109=>602, 8110=>602, 8111=>602, 8112=>602, 8113=>602, 8114=>602, 8115=>602, 8116=>602, 8118=>602, 8119=>602, + 8120=>602, 8121=>602, 8122=>602, 8123=>602, 8124=>602, 8125=>602, 8126=>602, 8127=>602, 8128=>602, 8129=>602, 8130=>602, 8131=>602, 8132=>602, 8134=>602, 8135=>602, 8136=>602, + 8137=>602, 8138=>602, 8139=>602, 8140=>602, 8141=>602, 8142=>602, 8143=>602, 8144=>602, 8145=>602, 8146=>602, 8147=>602, 8150=>602, 8151=>602, 8152=>602, 8153=>602, 8154=>602, + 8155=>602, 8157=>602, 8158=>602, 8159=>602, 8160=>602, 8161=>602, 8162=>602, 8163=>602, 8164=>602, 8165=>602, 8166=>602, 8167=>602, 8168=>602, 8169=>602, 8170=>602, 8171=>602, + 8172=>602, 8173=>602, 8174=>602, 8175=>602, 8178=>602, 8179=>602, 8180=>602, 8182=>602, 8183=>602, 8184=>602, 8185=>602, 8186=>602, 8187=>602, 8188=>602, 8189=>602, 8190=>602, + 8192=>602, 8193=>602, 8194=>602, 8195=>602, 8196=>602, 8197=>602, 8198=>602, 8199=>602, 8200=>602, 8201=>602, 8202=>602, 8208=>602, 8209=>602, 8210=>602, 8213=>602, 8215=>602, + 8219=>602, 8223=>602, 8227=>602, 8239=>602, 8241=>602, 8252=>602, 8253=>602, 8254=>602, 8261=>602, 8262=>602, 8263=>602, 8264=>602, 8265=>602, 8287=>602, 8304=>602, 8308=>602, + 8309=>602, 8310=>602, 8311=>602, 8312=>602, 8313=>602, 8319=>602, 8320=>602, 8321=>602, 8322=>602, 8323=>602, 8324=>602, 8325=>602, 8326=>602, 8327=>602, 8328=>602, 8329=>602, + 8358=>602, 8369=>602, 8372=>602, 8373=>602, 8462=>602, 8470=>602, 8486=>602, 8490=>602, 8491=>602, 8531=>602, 8532=>602, 8533=>602, 8534=>602, 8535=>602, 8536=>602, 8537=>602, + 8538=>602, 8539=>602, 8540=>602, 8541=>602, 8542=>602, 8543=>602, 8592=>602, 8593=>602, 8594=>602, 8595=>602, 8596=>602, 8597=>602, 8598=>602, 8599=>602, 8600=>602, 8601=>602, + 8602=>602, 8603=>602, 8604=>602, 8605=>602, 8606=>602, 8607=>602, 8608=>602, 8609=>602, 8610=>602, 8611=>602, 8612=>602, 8613=>602, 8614=>602, 8615=>602, 8616=>602, 8617=>602, + 8618=>602, 8619=>602, 8620=>602, 8621=>602, 8622=>602, 8623=>602, 8624=>602, 8625=>602, 8626=>602, 8627=>602, 8628=>602, 8629=>602, 8630=>602, 8631=>602, 8632=>602, 8633=>602, + 8634=>602, 8635=>602, 8636=>602, 8637=>602, 8638=>602, 8639=>602, 8640=>602, 8641=>602, 8642=>602, 8643=>602, 8644=>602, 8645=>602, 8646=>602, 8647=>602, 8648=>602, 8649=>602, + 8650=>602, 8651=>602, 8652=>602, 8653=>602, 8654=>602, 8655=>602, 8656=>602, 8657=>602, 8658=>602, 8659=>602, 8660=>602, 8661=>602, 8662=>602, 8663=>602, 8664=>602, 8665=>602, + 8666=>602, 8667=>602, 8668=>602, 8669=>602, 8670=>602, 8671=>602, 8672=>602, 8673=>602, 8674=>602, 8675=>602, 8676=>602, 8677=>602, 8678=>602, 8679=>602, 8680=>602, 8681=>602, + 8682=>602, 8683=>602, 8684=>602, 8685=>602, 8686=>602, 8687=>602, 8688=>602, 8689=>602, 8690=>602, 8691=>602, 8692=>602, 8693=>602, 8694=>602, 8695=>602, 8696=>602, 8697=>602, + 8698=>602, 8699=>602, 8700=>602, 8701=>602, 8702=>602, 8703=>602, 8706=>602, 8709=>602, 8710=>602, 8711=>602, 8712=>602, 8713=>602, 8714=>602, 8715=>602, 8716=>602, 8717=>602, + 8719=>602, 8721=>602, 8722=>602, 8723=>602, 8725=>602, 8727=>602, 8728=>602, 8729=>602, 8730=>602, 8733=>602, 8734=>602, 8735=>602, 8736=>602, 8743=>602, 8744=>602, 8745=>602, + 8746=>602, 8747=>602, 8748=>602, 8749=>602, 8760=>602, 8761=>602, 8762=>602, 8763=>602, 8764=>602, 8765=>602, 8769=>602, 8770=>602, 8771=>602, 8772=>602, 8773=>602, 8774=>602, + 8775=>602, 8776=>602, 8777=>602, 8778=>602, 8779=>602, 8780=>602, 8781=>602, 8782=>602, 8783=>602, 8784=>602, 8785=>602, 8786=>602, 8787=>602, 8788=>602, 8789=>602, 8790=>602, + 8791=>602, 8792=>602, 8793=>602, 8794=>602, 8795=>602, 8796=>602, 8797=>602, 8798=>602, 8799=>602, 8800=>602, 8801=>602, 8802=>602, 8803=>602, 8804=>602, 8805=>602, 8806=>602, + 8807=>602, 8808=>602, 8809=>602, 8813=>602, 8814=>602, 8815=>602, 8816=>602, 8817=>602, 8818=>602, 8819=>602, 8820=>602, 8821=>602, 8822=>602, 8823=>602, 8824=>602, 8825=>602, + 8826=>602, 8827=>602, 8828=>602, 8829=>602, 8830=>602, 8831=>602, 8832=>602, 8833=>602, 8834=>602, 8835=>602, 8836=>602, 8837=>602, 8838=>602, 8839=>602, 8840=>602, 8841=>602, + 8842=>602, 8843=>602, 8847=>602, 8848=>602, 8849=>602, 8850=>602, 8853=>602, 8854=>602, 8855=>602, 8856=>602, 8857=>602, 8858=>602, 8859=>602, 8860=>602, 8861=>602, 8862=>602, + 8863=>602, 8864=>602, 8865=>602, 8901=>602, 8902=>602, 8909=>602, 8922=>602, 8923=>602, 8924=>602, 8925=>602, 8926=>602, 8927=>602, 8928=>602, 8929=>602, 8930=>602, 8931=>602, + 8932=>602, 8933=>602, 8934=>602, 8935=>602, 8936=>602, 8937=>602, 8943=>602, 8960=>602, 8961=>602, 8962=>602, 8963=>602, 8964=>602, 8965=>602, 8966=>602, 8968=>602, 8969=>602, + 8970=>602, 8971=>602, 8972=>602, 8973=>602, 8974=>602, 8975=>602, 8976=>602, 8977=>602, 8978=>602, 8979=>602, 8980=>602, 8981=>602, 8984=>602, 8985=>602, 8988=>602, 8989=>602, + 8990=>602, 8991=>602, 8992=>602, 8993=>602, 8997=>602, 8998=>602, 8999=>602, 9000=>602, 9003=>602, 9013=>602, 9015=>602, 9016=>602, 9017=>602, 9018=>602, 9019=>602, 9020=>602, + 9021=>602, 9022=>602, 9025=>602, 9026=>602, 9027=>602, 9028=>602, 9031=>602, 9032=>602, 9033=>602, 9035=>602, 9036=>602, 9037=>602, 9040=>602, 9042=>602, 9043=>602, 9044=>602, + 9047=>602, 9048=>602, 9049=>602, 9050=>602, 9051=>602, 9052=>602, 9054=>602, 9055=>602, 9056=>602, 9059=>602, 9060=>602, 9061=>602, 9064=>602, 9065=>602, 9067=>602, 9068=>602, + 9069=>602, 9070=>602, 9071=>602, 9072=>602, 9075=>602, 9076=>602, 9077=>602, 9078=>602, 9079=>602, 9080=>602, 9081=>602, 9082=>602, 9085=>602, 9088=>602, 9089=>602, 9090=>602, + 9091=>602, 9096=>602, 9097=>602, 9098=>602, 9099=>602, 9109=>602, 9115=>602, 9116=>602, 9117=>602, 9118=>602, 9119=>602, 9120=>602, 9121=>602, 9122=>602, 9123=>602, 9124=>602, + 9125=>602, 9126=>602, 9127=>602, 9128=>602, 9129=>602, 9130=>602, 9131=>602, 9132=>602, 9133=>602, 9134=>602, 9166=>602, 9167=>602, 9251=>602, 9600=>602, 9601=>602, 9602=>602, + 9603=>602, 9604=>602, 9605=>602, 9606=>602, 9607=>602, 9608=>602, 9609=>602, 9610=>602, 9611=>602, 9612=>602, 9613=>602, 9614=>602, 9615=>602, 9616=>602, 9617=>602, 9618=>602, + 9619=>602, 9620=>602, 9621=>602, 9622=>602, 9623=>602, 9624=>602, 9625=>602, 9626=>602, 9627=>602, 9628=>602, 9629=>602, 9630=>602, 9631=>602, 9632=>602, 9633=>602, 9634=>602, + 9635=>602, 9636=>602, 9637=>602, 9638=>602, 9639=>602, 9640=>602, 9641=>602, 9642=>602, 9643=>602, 9644=>602, 9645=>602, 9646=>602, 9647=>602, 9648=>602, 9649=>602, 9650=>602, + 9651=>602, 9652=>602, 9653=>602, 9654=>602, 9655=>602, 9656=>602, 9657=>602, 9658=>602, 9659=>602, 9660=>602, 9661=>602, 9662=>602, 9663=>602, 9664=>602, 9665=>602, 9666=>602, + 9667=>602, 9668=>602, 9669=>602, 9670=>602, 9671=>602, 9672=>602, 9673=>602, 9674=>602, 9675=>602, 9676=>602, 9677=>602, 9678=>602, 9679=>602, 9680=>602, 9681=>602, 9682=>602, + 9683=>602, 9684=>602, 9685=>602, 9686=>602, 9687=>602, 9688=>602, 9689=>602, 9690=>602, 9691=>602, 9692=>602, 9693=>602, 9694=>602, 9695=>602, 9696=>602, 9697=>602, 9698=>602, + 9699=>602, 9700=>602, 9701=>602, 9702=>602, 9703=>602, 9704=>602, 9705=>602, 9706=>602, 9707=>602, 9708=>602, 9709=>602, 9710=>602, 9711=>602, 9712=>602, 9713=>602, 9714=>602, + 9715=>602, 9716=>602, 9717=>602, 9718=>602, 9719=>602, 9720=>602, 9721=>602, 9722=>602, 9723=>602, 9724=>602, 9725=>602, 9726=>602, 9727=>602, 9728=>602, 9784=>602, 9785=>602, + 9786=>602, 9787=>602, 9788=>602, 9791=>602, 9792=>602, 9793=>602, 9794=>602, 9795=>602, 9796=>602, 9797=>602, 9798=>602, 9799=>602, 9824=>602, 9825=>602, 9826=>602, 9827=>602, + 9828=>602, 9829=>602, 9830=>602, 9831=>602, 9833=>602, 9834=>602, 9835=>602, 9836=>602, 9837=>602, 9838=>602, 9839=>602, 10208=>602, 10216=>602, 10217=>602, 10731=>602, 11026=>602, + 11027=>602, 11028=>602, 11029=>602, 11030=>602, 11031=>602, 11032=>602, 11033=>602, 11034=>602, 63173=>602, 64257=>602, 64258=>602, 65533=>602}; + font[:enc]=''; + font[:diff]=''; + font[:file]='DejaVuSansMono-BoldOblique.z'; + font[:ctg]='DejaVuSansMono-BoldOblique.ctg.z'; + font[:originalsize]=195388; +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSansMonoi.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/DejaVuSansMonoi.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,151 @@ +TCPDFFontDescriptor.define('DejaVuSansMonoi') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='DejaVuSansMono-Oblique'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>97,'FontBBox'=>'[-311 -375 746 1058]','ItalicAngle'=>-11,'StemV'=>70,'MissingWidth'=>602}; + font[:up]=-42; + font[:ut]=44; + font[:cw]={ + 0=>602, 32=>602, 33=>602, 34=>602, 35=>602, 36=>602, 37=>602, 38=>602, 39=>602, 40=>602, 41=>602, 42=>602, 43=>602, 44=>602, 45=>602, 46=>602, + 47=>602, 48=>602, 49=>602, 50=>602, 51=>602, 52=>602, 53=>602, 54=>602, 55=>602, 56=>602, 57=>602, 58=>602, 59=>602, 60=>602, 61=>602, 62=>602, + 63=>602, 64=>602, 65=>602, 66=>602, 67=>602, 68=>602, 69=>602, 70=>602, 71=>602, 72=>602, 73=>602, 74=>602, 75=>602, 76=>602, 77=>602, 78=>602, + 79=>602, 80=>602, 81=>602, 82=>602, 83=>602, 84=>602, 85=>602, 86=>602, 87=>602, 88=>602, 89=>602, 90=>602, 91=>602, 92=>602, 93=>602, 94=>602, + 95=>602, 96=>602, 97=>602, 98=>602, 99=>602, 100=>602, 101=>602, 102=>602, 103=>602, 104=>602, 105=>602, 106=>602, 107=>602, 108=>602, 109=>602, 110=>602, + 111=>602, 112=>602, 113=>602, 114=>602, 115=>602, 116=>602, 117=>602, 118=>602, 119=>602, 120=>602, 121=>602, 122=>602, 123=>602, 124=>602, 125=>602, 126=>602, + 8364=>602, 1027=>602, 8218=>602, 402=>602, 8222=>602, 8230=>602, 8224=>602, 8225=>602, 710=>602, 8240=>602, 352=>602, 8249=>602, 338=>602, 1036=>602, 381=>602, 1039=>602, + 8216=>602, 8217=>602, 8220=>602, 8221=>602, 8226=>602, 8211=>602, 8212=>602, 732=>602, 8482=>602, 353=>602, 8250=>602, 339=>602, 1116=>602, 382=>602, 376=>602, 160=>602, + 161=>602, 162=>602, 163=>602, 164=>602, 165=>602, 166=>602, 167=>602, 168=>602, 169=>602, 170=>602, 171=>602, 172=>602, 173=>602, 174=>602, 175=>602, 176=>602, + 177=>602, 178=>602, 179=>602, 180=>602, 181=>602, 182=>602, 183=>602, 184=>602, 185=>602, 186=>602, 187=>602, 188=>602, 189=>602, 190=>602, 191=>602, 192=>602, + 193=>602, 194=>602, 195=>602, 196=>602, 197=>602, 198=>602, 199=>602, 200=>602, 201=>602, 202=>602, 203=>602, 204=>602, 205=>602, 206=>602, 207=>602, 208=>602, + 209=>602, 210=>602, 211=>602, 212=>602, 213=>602, 214=>602, 215=>602, 216=>602, 217=>602, 218=>602, 219=>602, 220=>602, 221=>602, 222=>602, 223=>602, 224=>602, + 225=>602, 226=>602, 227=>602, 228=>602, 229=>602, 230=>602, 231=>602, 232=>602, 233=>602, 234=>602, 235=>602, 236=>602, 237=>602, 238=>602, 239=>602, 240=>602, + 241=>602, 242=>602, 243=>602, 244=>602, 245=>602, 246=>602, 247=>602, 248=>602, 249=>602, 250=>602, 251=>602, 252=>602, 253=>602, 254=>602, 255=>602, 256=>602, + 257=>602, 258=>602, 259=>602, 260=>602, 261=>602, 262=>602, 263=>602, 264=>602, 265=>602, 266=>602, 267=>602, 268=>602, 269=>602, 270=>602, 271=>602, 272=>602, + 273=>602, 274=>602, 275=>602, 276=>602, 277=>602, 278=>602, 279=>602, 280=>602, 281=>602, 282=>602, 283=>602, 284=>602, 285=>602, 286=>602, 287=>602, 288=>602, + 289=>602, 290=>602, 291=>602, 292=>602, 293=>602, 294=>602, 295=>602, 296=>602, 297=>602, 298=>602, 299=>602, 300=>602, 301=>602, 302=>602, 303=>602, 304=>602, + 305=>602, 306=>602, 307=>602, 308=>602, 309=>602, 310=>602, 311=>602, 312=>602, 313=>602, 314=>602, 315=>602, 316=>602, 317=>602, 318=>602, 319=>602, 320=>602, + 321=>602, 322=>602, 323=>602, 324=>602, 325=>602, 326=>602, 327=>602, 328=>602, 329=>602, 330=>602, 331=>602, 332=>602, 333=>602, 334=>602, 335=>602, 336=>602, + 337=>602, 340=>602, 341=>602, 342=>602, 343=>602, 344=>602, 345=>602, 346=>602, 347=>602, 348=>602, 349=>602, 350=>602, 351=>602, 354=>602, 355=>602, 356=>602, + 357=>602, 358=>602, 359=>602, 360=>602, 361=>602, 362=>602, 363=>602, 364=>602, 365=>602, 366=>602, 367=>602, 368=>602, 369=>602, 370=>602, 371=>602, 372=>602, + 373=>602, 374=>602, 375=>602, 377=>602, 378=>602, 379=>602, 380=>602, 383=>602, 385=>602, 386=>602, 387=>602, 388=>602, 389=>602, 390=>602, 391=>602, 392=>602, + 393=>602, 394=>602, 395=>602, 396=>602, 397=>602, 398=>602, 399=>602, 400=>602, 401=>602, 403=>602, 404=>602, 405=>602, 406=>602, 407=>602, 408=>602, 409=>602, + 410=>602, 411=>602, 412=>602, 413=>602, 414=>602, 415=>602, 416=>602, 417=>602, 418=>602, 419=>602, 420=>602, 421=>602, 422=>602, 423=>602, 424=>602, 425=>602, + 426=>602, 427=>602, 428=>602, 429=>602, 430=>602, 431=>602, 432=>602, 433=>602, 434=>602, 435=>602, 436=>602, 437=>602, 438=>602, 439=>602, 440=>602, 441=>602, + 443=>602, 444=>602, 445=>602, 446=>602, 448=>602, 449=>602, 450=>602, 451=>602, 461=>602, 462=>602, 463=>602, 464=>602, 465=>602, 466=>602, 467=>602, 468=>602, + 470=>602, 471=>602, 472=>602, 473=>602, 474=>602, 475=>602, 476=>602, 477=>602, 479=>602, 482=>602, 483=>602, 486=>602, 487=>602, 488=>602, 489=>602, 490=>602, + 491=>602, 492=>602, 493=>602, 494=>602, 495=>602, 500=>602, 501=>602, 502=>602, 504=>602, 505=>602, 508=>602, 509=>602, 510=>602, 511=>602, 512=>602, 513=>602, + 514=>602, 515=>602, 516=>602, 517=>602, 518=>602, 519=>602, 520=>602, 521=>602, 522=>602, 523=>602, 524=>602, 525=>602, 526=>602, 527=>602, 528=>602, 529=>602, + 530=>602, 531=>602, 532=>602, 533=>602, 534=>602, 535=>602, 536=>602, 537=>602, 538=>602, 539=>602, 542=>602, 543=>602, 545=>602, 548=>602, 549=>602, 550=>602, + 551=>602, 552=>602, 553=>602, 555=>602, 557=>602, 558=>602, 559=>602, 561=>602, 562=>602, 563=>602, 564=>602, 565=>602, 566=>602, 567=>602, 568=>602, 569=>602, + 570=>602, 571=>602, 572=>602, 573=>602, 574=>602, 575=>602, 576=>602, 577=>602, 581=>602, 592=>602, 593=>602, 594=>602, 595=>602, 596=>602, 597=>602, 598=>602, + 599=>602, 600=>602, 601=>602, 602=>602, 603=>602, 604=>602, 605=>602, 606=>602, 607=>602, 608=>602, 609=>602, 610=>602, 611=>602, 612=>602, 613=>602, 614=>602, + 615=>602, 616=>602, 617=>602, 618=>602, 619=>602, 620=>602, 621=>602, 622=>602, 623=>602, 624=>602, 625=>602, 626=>602, 627=>602, 628=>602, 629=>602, 630=>602, + 631=>602, 632=>602, 633=>602, 634=>602, 635=>602, 636=>602, 637=>602, 638=>602, 639=>602, 640=>602, 641=>602, 642=>602, 643=>602, 644=>602, 645=>602, 646=>602, + 647=>602, 648=>602, 649=>602, 650=>602, 651=>602, 652=>602, 653=>602, 654=>602, 655=>602, 656=>602, 657=>602, 658=>602, 659=>602, 660=>602, 661=>602, 662=>602, + 663=>602, 664=>602, 665=>602, 666=>602, 667=>602, 668=>602, 669=>602, 670=>602, 671=>602, 672=>602, 673=>602, 674=>602, 675=>602, 676=>602, 677=>602, 678=>602, + 679=>602, 680=>602, 681=>602, 682=>602, 683=>602, 684=>602, 685=>602, 686=>602, 687=>602, 688=>602, 689=>602, 690=>602, 691=>602, 692=>602, 693=>602, 694=>602, + 695=>602, 696=>602, 697=>602, 699=>602, 700=>602, 701=>602, 702=>602, 703=>602, 704=>602, 705=>602, 711=>602, 712=>602, 713=>602, 716=>602, 717=>602, 720=>602, + 721=>602, 722=>602, 723=>602, 726=>602, 728=>602, 729=>602, 730=>602, 731=>602, 733=>602, 734=>602, 736=>602, 737=>602, 738=>602, 739=>602, 740=>602, 741=>602, + 742=>602, 743=>602, 744=>602, 745=>602, 755=>602, 768=>602, 769=>602, 770=>602, 771=>602, 772=>602, 773=>602, 774=>602, 775=>602, 776=>602, 777=>602, 778=>602, + 779=>602, 780=>602, 781=>602, 782=>602, 783=>602, 784=>602, 785=>602, 786=>602, 787=>602, 788=>602, 789=>602, 790=>602, 791=>602, 792=>602, 793=>602, 794=>602, + 795=>602, 796=>602, 797=>602, 798=>602, 799=>602, 800=>602, 801=>602, 802=>602, 803=>602, 804=>602, 805=>602, 806=>602, 807=>602, 808=>602, 809=>602, 810=>602, + 811=>602, 812=>602, 813=>602, 814=>602, 815=>602, 816=>602, 817=>602, 818=>602, 819=>602, 820=>602, 821=>602, 822=>602, 823=>602, 824=>602, 825=>602, 826=>602, + 827=>602, 828=>602, 829=>602, 830=>602, 831=>602, 835=>602, 856=>602, 865=>602, 884=>602, 885=>602, 890=>602, 894=>602, 900=>602, 901=>602, 902=>602, 903=>602, + 904=>602, 905=>602, 906=>602, 908=>602, 910=>602, 911=>602, 912=>602, 913=>602, 914=>602, 915=>602, 916=>602, 917=>602, 918=>602, 919=>602, 920=>602, 921=>602, + 922=>602, 923=>602, 924=>602, 925=>602, 926=>602, 927=>602, 928=>602, 929=>602, 931=>602, 932=>602, 933=>602, 934=>602, 935=>602, 936=>602, 937=>602, 938=>602, + 939=>602, 940=>602, 941=>602, 942=>602, 943=>602, 944=>602, 945=>602, 946=>602, 947=>602, 948=>602, 949=>602, 950=>602, 951=>602, 952=>602, 953=>602, 954=>602, + 955=>602, 956=>602, 957=>602, 958=>602, 959=>602, 960=>602, 961=>602, 962=>602, 963=>602, 964=>602, 965=>602, 966=>602, 967=>602, 968=>602, 969=>602, 970=>602, + 971=>602, 972=>602, 973=>602, 974=>602, 976=>602, 977=>602, 978=>602, 979=>602, 980=>602, 981=>602, 982=>602, 983=>602, 984=>602, 985=>602, 986=>602, 987=>602, + 988=>602, 989=>602, 990=>602, 991=>602, 992=>602, 993=>602, 1008=>602, 1009=>602, 1010=>602, 1011=>602, 1012=>602, 1013=>602, 1014=>602, 1015=>602, 1016=>602, 1017=>602, + 1018=>602, 1019=>602, 1020=>602, 1021=>602, 1022=>602, 1023=>602, 1024=>602, 1025=>602, 1026=>602, 1028=>602, 1029=>602, 1030=>602, 1031=>602, 1032=>602, 1033=>602, 1034=>602, + 1035=>602, 1037=>602, 1038=>602, 1040=>602, 1041=>602, 1042=>602, 1043=>602, 1044=>602, 1045=>602, 1046=>602, 1047=>602, 1048=>602, 1049=>602, 1050=>602, 1051=>602, 1052=>602, + 1053=>602, 1054=>602, 1055=>602, 1056=>602, 1057=>602, 1058=>602, 1059=>602, 1060=>602, 1061=>602, 1062=>602, 1063=>602, 1064=>602, 1065=>602, 1066=>602, 1067=>602, 1068=>602, + 1069=>602, 1070=>602, 1071=>602, 1072=>602, 1073=>602, 1074=>602, 1075=>602, 1076=>602, 1077=>602, 1078=>602, 1079=>602, 1080=>602, 1081=>602, 1082=>602, 1083=>602, 1084=>602, + 1085=>602, 1086=>602, 1087=>602, 1088=>602, 1089=>602, 1090=>602, 1091=>602, 1092=>602, 1093=>602, 1094=>602, 1095=>602, 1096=>602, 1097=>602, 1098=>602, 1099=>602, 1100=>602, + 1101=>602, 1102=>602, 1103=>602, 1104=>602, 1105=>602, 1106=>602, 1107=>602, 1108=>602, 1109=>602, 1110=>602, 1111=>602, 1112=>602, 1113=>602, 1114=>602, 1115=>602, 1117=>602, + 1118=>602, 1119=>602, 1168=>602, 1169=>602, 1170=>602, 1171=>602, 1172=>602, 1173=>602, 1176=>602, 1177=>602, 1178=>602, 1179=>602, 1186=>602, 1187=>602, 1194=>602, 1195=>602, + 1196=>602, 1197=>602, 1198=>602, 1199=>602, 1202=>602, 1203=>602, 1210=>602, 1211=>602, 1216=>602, 1217=>602, 1218=>602, 1219=>602, 1220=>602, 1223=>602, 1224=>602, 1227=>602, + 1228=>602, 1231=>602, 1232=>602, 1233=>602, 1234=>602, 1235=>602, 1236=>602, 1237=>602, 1238=>602, 1239=>602, 1240=>602, 1241=>602, 1242=>602, 1243=>602, 1244=>602, 1245=>602, + 1246=>602, 1247=>602, 1248=>602, 1249=>602, 1250=>602, 1251=>602, 1252=>602, 1253=>602, 1254=>602, 1255=>602, 1256=>602, 1257=>602, 1258=>602, 1259=>602, 1260=>602, 1261=>602, + 1262=>602, 1263=>602, 1264=>602, 1265=>602, 1266=>602, 1267=>602, 1268=>602, 1269=>602, 1270=>602, 1271=>602, 1272=>602, 1273=>602, 3713=>602, 3714=>602, 3716=>602, 3719=>602, + 3720=>602, 3722=>602, 3725=>602, 3732=>602, 3733=>602, 3734=>602, 3735=>602, 3737=>602, 3738=>602, 3739=>602, 3740=>602, 3741=>602, 3742=>602, 3743=>602, 3745=>602, 3746=>602, + 3747=>602, 3749=>602, 3751=>602, 3754=>602, 3755=>602, 3757=>602, 3758=>602, 3759=>602, 7426=>602, 7432=>602, 7433=>602, 7444=>602, 7446=>602, 7447=>602, 7453=>602, 7454=>602, + 7455=>602, 7491=>602, 7492=>602, 7493=>602, 7494=>602, 7495=>602, 7496=>602, 7497=>602, 7498=>602, 7499=>602, 7500=>602, 7501=>602, 7502=>602, 7503=>602, 7504=>602, 7505=>602, + 7506=>602, 7507=>602, 7508=>602, 7509=>602, 7510=>602, 7511=>602, 7512=>602, 7513=>602, 7514=>602, 7515=>602, 7543=>602, 7547=>602, 7557=>602, 7579=>602, 7580=>602, 7581=>602, + 7582=>602, 7583=>602, 7584=>602, 7585=>602, 7586=>602, 7587=>602, 7588=>602, 7589=>602, 7590=>602, 7591=>602, 7592=>602, 7593=>602, 7594=>602, 7595=>602, 7596=>602, 7597=>602, + 7598=>602, 7599=>602, 7600=>602, 7601=>602, 7602=>602, 7603=>602, 7604=>602, 7605=>602, 7606=>602, 7607=>602, 7609=>602, 7610=>602, 7611=>602, 7612=>602, 7613=>602, 7614=>602, + 7615=>602, 7680=>602, 7681=>602, 7682=>602, 7683=>602, 7684=>602, 7685=>602, 7686=>602, 7687=>602, 7690=>602, 7691=>602, 7692=>602, 7693=>602, 7694=>602, 7695=>602, 7698=>602, + 7699=>602, 7704=>602, 7705=>602, 7706=>602, 7707=>602, 7708=>602, 7709=>602, 7710=>602, 7711=>602, 7712=>602, 7713=>602, 7714=>602, 7715=>602, 7716=>602, 7717=>602, 7720=>602, + 7721=>602, 7722=>602, 7723=>602, 7724=>602, 7725=>602, 7728=>602, 7729=>602, 7730=>602, 7731=>602, 7732=>602, 7733=>602, 7734=>602, 7735=>602, 7736=>602, 7737=>602, 7738=>602, + 7739=>602, 7740=>602, 7741=>602, 7742=>602, 7743=>602, 7744=>602, 7745=>602, 7746=>602, 7747=>602, 7748=>602, 7749=>602, 7750=>602, 7751=>602, 7752=>602, 7753=>602, 7754=>602, + 7755=>602, 7766=>602, 7767=>602, 7768=>602, 7769=>602, 7770=>602, 7771=>602, 7772=>602, 7773=>602, 7774=>602, 7775=>602, 7776=>602, 7777=>602, 7778=>602, 7779=>602, 7784=>602, + 7785=>602, 7786=>602, 7787=>602, 7788=>602, 7789=>602, 7790=>602, 7791=>602, 7792=>602, 7793=>602, 7794=>602, 7795=>602, 7796=>602, 7797=>602, 7798=>602, 7799=>602, 7806=>602, + 7807=>602, 7808=>602, 7809=>602, 7810=>602, 7811=>602, 7812=>602, 7813=>602, 7814=>602, 7815=>602, 7816=>602, 7817=>602, 7818=>602, 7819=>602, 7822=>602, 7823=>602, 7826=>602, + 7827=>602, 7828=>602, 7829=>602, 7830=>602, 7835=>602, 7840=>602, 7841=>602, 7864=>602, 7865=>602, 7868=>602, 7869=>602, 7882=>602, 7883=>602, 7884=>602, 7885=>602, 7908=>602, + 7909=>602, 7922=>602, 7923=>602, 7924=>602, 7925=>602, 7928=>602, 7929=>602, 7936=>602, 7937=>602, 7938=>602, 7939=>602, 7940=>602, 7941=>602, 7942=>602, 7943=>602, 7944=>602, + 7945=>602, 7946=>602, 7947=>602, 7948=>602, 7949=>602, 7950=>602, 7951=>602, 7952=>602, 7953=>602, 7954=>602, 7955=>602, 7956=>602, 7957=>602, 7960=>602, 7961=>602, 7962=>602, + 7963=>602, 7964=>602, 7965=>602, 7968=>602, 7969=>602, 7970=>602, 7971=>602, 7972=>602, 7973=>602, 7974=>602, 7975=>602, 7976=>602, 7977=>602, 7978=>602, 7979=>602, 7980=>602, + 7981=>602, 7982=>602, 7983=>602, 7984=>602, 7985=>602, 7986=>602, 7987=>602, 7988=>602, 7989=>602, 7990=>602, 7991=>602, 7992=>602, 7993=>602, 7994=>602, 7995=>602, 7996=>602, + 7997=>602, 7998=>602, 7999=>602, 8000=>602, 8001=>602, 8002=>602, 8003=>602, 8004=>602, 8005=>602, 8008=>602, 8009=>602, 8010=>602, 8011=>602, 8012=>602, 8013=>602, 8016=>602, + 8017=>602, 8018=>602, 8019=>602, 8020=>602, 8021=>602, 8022=>602, 8023=>602, 8025=>602, 8027=>602, 8029=>602, 8031=>602, 8032=>602, 8033=>602, 8034=>602, 8035=>602, 8036=>602, + 8037=>602, 8038=>602, 8039=>602, 8040=>602, 8041=>602, 8042=>602, 8043=>602, 8044=>602, 8045=>602, 8046=>602, 8047=>602, 8048=>602, 8049=>602, 8050=>602, 8051=>602, 8052=>602, + 8053=>602, 8054=>602, 8055=>602, 8056=>602, 8057=>602, 8058=>602, 8059=>602, 8060=>602, 8061=>602, 8064=>602, 8065=>602, 8066=>602, 8067=>602, 8068=>602, 8069=>602, 8070=>602, + 8071=>602, 8072=>602, 8073=>602, 8074=>602, 8075=>602, 8076=>602, 8077=>602, 8078=>602, 8079=>602, 8080=>602, 8081=>602, 8082=>602, 8083=>602, 8084=>602, 8085=>602, 8086=>602, + 8087=>602, 8088=>602, 8089=>602, 8090=>602, 8091=>602, 8092=>602, 8093=>602, 8094=>602, 8095=>602, 8096=>602, 8097=>602, 8098=>602, 8099=>602, 8100=>602, 8101=>602, 8102=>602, + 8103=>602, 8104=>602, 8105=>602, 8106=>602, 8107=>602, 8108=>602, 8109=>602, 8110=>602, 8111=>602, 8112=>602, 8113=>602, 8114=>602, 8115=>602, 8116=>602, 8118=>602, 8119=>602, + 8120=>602, 8121=>602, 8122=>602, 8123=>602, 8124=>602, 8125=>602, 8126=>602, 8127=>602, 8128=>602, 8129=>602, 8130=>602, 8131=>602, 8132=>602, 8134=>602, 8135=>602, 8136=>602, + 8137=>602, 8138=>602, 8139=>602, 8140=>602, 8141=>602, 8142=>602, 8143=>602, 8144=>602, 8145=>602, 8146=>602, 8147=>602, 8150=>602, 8151=>602, 8152=>602, 8153=>602, 8154=>602, + 8155=>602, 8157=>602, 8158=>602, 8159=>602, 8160=>602, 8161=>602, 8162=>602, 8163=>602, 8164=>602, 8165=>602, 8166=>602, 8167=>602, 8168=>602, 8169=>602, 8170=>602, 8171=>602, + 8172=>602, 8173=>602, 8174=>602, 8175=>602, 8178=>602, 8179=>602, 8180=>602, 8182=>602, 8183=>602, 8184=>602, 8185=>602, 8186=>602, 8187=>602, 8188=>602, 8189=>602, 8190=>602, + 8192=>602, 8193=>602, 8194=>602, 8195=>602, 8196=>602, 8197=>602, 8198=>602, 8199=>602, 8200=>602, 8201=>602, 8202=>602, 8208=>602, 8209=>602, 8210=>602, 8213=>602, 8215=>602, + 8219=>602, 8223=>602, 8227=>602, 8239=>602, 8241=>602, 8252=>602, 8253=>602, 8254=>602, 8261=>602, 8262=>602, 8263=>602, 8264=>602, 8265=>602, 8287=>602, 8304=>602, 8308=>602, + 8309=>602, 8310=>602, 8311=>602, 8312=>602, 8313=>602, 8319=>602, 8320=>602, 8321=>602, 8322=>602, 8323=>602, 8324=>602, 8325=>602, 8326=>602, 8327=>602, 8328=>602, 8329=>602, + 8358=>602, 8369=>602, 8372=>602, 8373=>602, 8462=>602, 8470=>602, 8486=>602, 8490=>602, 8491=>602, 8531=>602, 8532=>602, 8533=>602, 8534=>602, 8535=>602, 8536=>602, 8537=>602, + 8538=>602, 8539=>602, 8540=>602, 8541=>602, 8542=>602, 8543=>602, 8592=>602, 8593=>602, 8594=>602, 8595=>602, 8596=>602, 8597=>602, 8598=>602, 8599=>602, 8600=>602, 8601=>602, + 8602=>602, 8603=>602, 8604=>602, 8605=>602, 8606=>602, 8607=>602, 8608=>602, 8609=>602, 8610=>602, 8611=>602, 8612=>602, 8613=>602, 8614=>602, 8615=>602, 8616=>602, 8617=>602, + 8618=>602, 8619=>602, 8620=>602, 8621=>602, 8622=>602, 8623=>602, 8624=>602, 8625=>602, 8626=>602, 8627=>602, 8628=>602, 8629=>602, 8630=>602, 8631=>602, 8632=>602, 8633=>602, + 8634=>602, 8635=>602, 8636=>602, 8637=>602, 8638=>602, 8639=>602, 8640=>602, 8641=>602, 8642=>602, 8643=>602, 8644=>602, 8645=>602, 8646=>602, 8647=>602, 8648=>602, 8649=>602, + 8650=>602, 8651=>602, 8652=>602, 8653=>602, 8654=>602, 8655=>602, 8656=>602, 8657=>602, 8658=>602, 8659=>602, 8660=>602, 8661=>602, 8662=>602, 8663=>602, 8664=>602, 8665=>602, + 8666=>602, 8667=>602, 8668=>602, 8669=>602, 8670=>602, 8671=>602, 8672=>602, 8673=>602, 8674=>602, 8675=>602, 8676=>602, 8677=>602, 8678=>602, 8679=>602, 8680=>602, 8681=>602, + 8682=>602, 8683=>602, 8684=>602, 8685=>602, 8686=>602, 8687=>602, 8688=>602, 8689=>602, 8690=>602, 8691=>602, 8692=>602, 8693=>602, 8694=>602, 8695=>602, 8696=>602, 8697=>602, + 8698=>602, 8699=>602, 8700=>602, 8701=>602, 8702=>602, 8703=>602, 8706=>602, 8709=>602, 8710=>602, 8711=>602, 8712=>602, 8713=>602, 8714=>602, 8715=>602, 8716=>602, 8717=>602, + 8719=>602, 8721=>602, 8722=>602, 8723=>602, 8725=>602, 8727=>602, 8728=>602, 8729=>602, 8730=>602, 8733=>602, 8734=>602, 8735=>602, 8736=>602, 8743=>602, 8744=>602, 8745=>602, + 8746=>602, 8747=>602, 8748=>602, 8749=>602, 8760=>602, 8761=>602, 8762=>602, 8763=>602, 8764=>602, 8765=>602, 8769=>602, 8770=>602, 8771=>602, 8772=>602, 8773=>602, 8774=>602, + 8775=>602, 8776=>602, 8777=>602, 8778=>602, 8779=>602, 8780=>602, 8781=>602, 8782=>602, 8783=>602, 8784=>602, 8785=>602, 8786=>602, 8787=>602, 8788=>602, 8789=>602, 8790=>602, + 8791=>602, 8792=>602, 8793=>602, 8794=>602, 8795=>602, 8796=>602, 8797=>602, 8798=>602, 8799=>602, 8800=>602, 8801=>602, 8802=>602, 8803=>602, 8804=>602, 8805=>602, 8806=>602, + 8807=>602, 8808=>602, 8809=>602, 8813=>602, 8814=>602, 8815=>602, 8816=>602, 8817=>602, 8818=>602, 8819=>602, 8820=>602, 8821=>602, 8822=>602, 8823=>602, 8824=>602, 8825=>602, + 8826=>602, 8827=>602, 8828=>602, 8829=>602, 8830=>602, 8831=>602, 8832=>602, 8833=>602, 8834=>602, 8835=>602, 8836=>602, 8837=>602, 8838=>602, 8839=>602, 8840=>602, 8841=>602, + 8842=>602, 8843=>602, 8847=>602, 8848=>602, 8849=>602, 8850=>602, 8853=>602, 8854=>602, 8855=>602, 8856=>602, 8857=>602, 8858=>602, 8859=>602, 8860=>602, 8861=>602, 8862=>602, + 8863=>602, 8864=>602, 8865=>602, 8901=>602, 8902=>602, 8909=>602, 8922=>602, 8923=>602, 8924=>602, 8925=>602, 8926=>602, 8927=>602, 8928=>602, 8929=>602, 8930=>602, 8931=>602, + 8932=>602, 8933=>602, 8934=>602, 8935=>602, 8936=>602, 8937=>602, 8943=>602, 8960=>602, 8961=>602, 8962=>602, 8963=>602, 8964=>602, 8965=>602, 8966=>602, 8968=>602, 8969=>602, + 8970=>602, 8971=>602, 8972=>602, 8973=>602, 8974=>602, 8975=>602, 8976=>602, 8977=>602, 8978=>602, 8979=>602, 8980=>602, 8981=>602, 8984=>602, 8985=>602, 8988=>602, 8989=>602, + 8990=>602, 8991=>602, 8992=>602, 8993=>602, 8997=>602, 8998=>602, 8999=>602, 9000=>602, 9003=>602, 9013=>602, 9015=>602, 9016=>602, 9017=>602, 9018=>602, 9019=>602, 9020=>602, + 9021=>602, 9022=>602, 9025=>602, 9026=>602, 9027=>602, 9028=>602, 9031=>602, 9032=>602, 9033=>602, 9035=>602, 9036=>602, 9037=>602, 9040=>602, 9042=>602, 9043=>602, 9044=>602, + 9047=>602, 9048=>602, 9049=>602, 9050=>602, 9051=>602, 9052=>602, 9054=>602, 9055=>602, 9056=>602, 9059=>602, 9060=>602, 9061=>602, 9064=>602, 9065=>602, 9067=>602, 9068=>602, + 9069=>602, 9070=>602, 9071=>602, 9072=>602, 9075=>602, 9076=>602, 9077=>602, 9078=>602, 9079=>602, 9080=>602, 9081=>602, 9082=>602, 9085=>602, 9088=>602, 9089=>602, 9090=>602, + 9091=>602, 9096=>602, 9097=>602, 9098=>602, 9099=>602, 9109=>602, 9115=>602, 9116=>602, 9117=>602, 9118=>602, 9119=>602, 9120=>602, 9121=>602, 9122=>602, 9123=>602, 9124=>602, + 9125=>602, 9126=>602, 9127=>602, 9128=>602, 9129=>602, 9130=>602, 9131=>602, 9132=>602, 9133=>602, 9134=>602, 9166=>602, 9167=>602, 9251=>602, 9472=>602, 9473=>602, 9474=>602, + 9475=>602, 9476=>602, 9477=>602, 9478=>602, 9479=>602, 9480=>602, 9481=>602, 9482=>602, 9483=>602, 9484=>602, 9485=>602, 9486=>602, 9487=>602, 9488=>602, 9489=>602, 9490=>602, + 9491=>602, 9492=>602, 9493=>602, 9494=>602, 9495=>602, 9496=>602, 9497=>602, 9498=>602, 9499=>602, 9500=>602, 9501=>602, 9502=>602, 9503=>602, 9504=>602, 9505=>602, 9506=>602, + 9507=>602, 9508=>602, 9509=>602, 9510=>602, 9511=>602, 9512=>602, 9513=>602, 9514=>602, 9515=>602, 9516=>602, 9517=>602, 9518=>602, 9519=>602, 9520=>602, 9521=>602, 9522=>602, + 9523=>602, 9524=>602, 9525=>602, 9526=>602, 9527=>602, 9528=>602, 9529=>602, 9530=>602, 9531=>602, 9532=>602, 9533=>602, 9534=>602, 9535=>602, 9536=>602, 9537=>602, 9538=>602, + 9539=>602, 9540=>602, 9541=>602, 9542=>602, 9543=>602, 9544=>602, 9545=>602, 9546=>602, 9547=>602, 9548=>602, 9549=>602, 9550=>602, 9551=>602, 9552=>602, 9553=>602, 9554=>602, + 9555=>602, 9556=>602, 9557=>602, 9558=>602, 9559=>602, 9560=>602, 9561=>602, 9562=>602, 9563=>602, 9564=>602, 9565=>602, 9566=>602, 9567=>602, 9568=>602, 9569=>602, 9570=>602, + 9571=>602, 9572=>602, 9573=>602, 9574=>602, 9575=>602, 9576=>602, 9577=>602, 9578=>602, 9579=>602, 9580=>602, 9581=>602, 9582=>602, 9583=>602, 9584=>602, 9585=>602, 9586=>602, + 9587=>602, 9588=>602, 9589=>602, 9590=>602, 9591=>602, 9592=>602, 9593=>602, 9594=>602, 9595=>602, 9596=>602, 9597=>602, 9598=>602, 9599=>602, 9600=>602, 9601=>602, 9602=>602, + 9603=>602, 9604=>602, 9605=>602, 9606=>602, 9607=>602, 9608=>602, 9609=>602, 9610=>602, 9611=>602, 9612=>602, 9613=>602, 9614=>602, 9615=>602, 9616=>602, 9617=>602, 9618=>602, + 9619=>602, 9620=>602, 9621=>602, 9622=>602, 9623=>602, 9624=>602, 9625=>602, 9626=>602, 9627=>602, 9628=>602, 9629=>602, 9630=>602, 9631=>602, 9632=>602, 9633=>602, 9634=>602, + 9635=>602, 9636=>602, 9637=>602, 9638=>602, 9639=>602, 9640=>602, 9641=>602, 9642=>602, 9643=>602, 9644=>602, 9645=>602, 9646=>602, 9647=>602, 9648=>602, 9649=>602, 9650=>602, + 9651=>602, 9652=>602, 9653=>602, 9654=>602, 9655=>602, 9656=>602, 9657=>602, 9658=>602, 9659=>602, 9660=>602, 9661=>602, 9662=>602, 9663=>602, 9664=>602, 9665=>602, 9666=>602, + 9667=>602, 9668=>602, 9669=>602, 9670=>602, 9671=>602, 9672=>602, 9673=>602, 9674=>602, 9675=>602, 9676=>602, 9677=>602, 9678=>602, 9679=>602, 9680=>602, 9681=>602, 9682=>602, + 9683=>602, 9684=>602, 9685=>602, 9686=>602, 9687=>602, 9688=>602, 9689=>602, 9690=>602, 9691=>602, 9692=>602, 9693=>602, 9694=>602, 9695=>602, 9696=>602, 9697=>602, 9698=>602, + 9699=>602, 9700=>602, 9701=>602, 9702=>602, 9703=>602, 9704=>602, 9705=>602, 9706=>602, 9707=>602, 9708=>602, 9709=>602, 9710=>602, 9711=>602, 9712=>602, 9713=>602, 9714=>602, + 9715=>602, 9716=>602, 9717=>602, 9718=>602, 9719=>602, 9720=>602, 9721=>602, 9722=>602, 9723=>602, 9724=>602, 9725=>602, 9726=>602, 9727=>602, 9728=>602, 9784=>602, 9785=>602, + 9786=>602, 9787=>602, 9788=>602, 9791=>602, 9792=>602, 9793=>602, 9794=>602, 9795=>602, 9796=>602, 9797=>602, 9798=>602, 9799=>602, 9824=>602, 9825=>602, 9826=>602, 9827=>602, + 9828=>602, 9829=>602, 9830=>602, 9831=>602, 9833=>602, 9834=>602, 9835=>602, 9836=>602, 9837=>602, 9838=>602, 9839=>602, 10208=>602, 10216=>602, 10217=>602, 10731=>602, 11026=>602, + 11027=>602, 11028=>602, 11029=>602, 11030=>602, 11031=>602, 11032=>602, 11033=>602, 11034=>602, 63173=>602, 64257=>602, 64258=>602, 65533=>602}; + font[:enc]=''; + font[:diff]=''; + font[:file]='DejaVuSansMono-Oblique.z'; + font[:ctg]='DejaVuSansMono-Oblique.ctg.z'; + font[:originalsize]=203124; +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSansbi.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/DejaVuSansbi.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,267 @@ +TCPDFFontDescriptor.define('DejaVuSansbi') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='DejaVuSans-BoldOblique'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>96,'FontBBox'=>'[-1067 -388 2005 1121]','ItalicAngle'=>-11,'StemV'=>120,'MissingWidth'=>600}; + font[:up]=-42; + font[:ut]=44; + font[:cw]={ + 0=>600, 32=>348, 33=>456, 34=>521, 35=>696, 36=>696, 37=>1002, 38=>872, 39=>306, 40=>457, 41=>457, 42=>523, 43=>838, 44=>380, 45=>415, 46=>380, + 47=>365, 48=>696, 49=>696, 50=>696, 51=>696, 52=>696, 53=>696, 54=>696, 55=>696, 56=>696, 57=>696, 58=>400, 59=>400, 60=>838, 61=>838, 62=>838, + 63=>580, 64=>1000, 65=>774, 66=>762, 67=>734, 68=>830, 69=>683, 70=>683, 71=>821, 72=>837, 73=>372, 74=>372, 75=>775, 76=>637, 77=>995, 78=>837, + 79=>850, 80=>733, 81=>850, 82=>770, 83=>720, 84=>682, 85=>812, 86=>774, 87=>1103, 88=>771, 89=>724, 90=>725, 91=>457, 92=>365, 93=>457, 94=>838, + 95=>500, 96=>500, 97=>675, 98=>716, 99=>593, 100=>716, 101=>678, 102=>435, 103=>716, 104=>712, 105=>343, 106=>343, 107=>665, 108=>343, 109=>1042, 110=>712, + 111=>687, 112=>716, 113=>716, 114=>493, 115=>595, 116=>478, 117=>712, 118=>652, 119=>924, 120=>645, 121=>652, 122=>582, 123=>712, 124=>365, 125=>712, 126=>838, + 8364=>696, 1027=>637, 8218=>380, 402=>435, 8222=>644, 8230=>1000, 8224=>500, 8225=>500, 710=>500, 8240=>1454, 352=>720, 8249=>412, 338=>1167, 1036=>817, 381=>725, 1039=>837, + 8216=>380, 8217=>380, 8220=>644, 8221=>644, 8226=>639, 8211=>500, 8212=>1000, 732=>500, 8482=>1000, 353=>595, 8250=>412, 339=>1094, 1116=>679, 382=>582, 376=>724, 160=>348, + 161=>456, 162=>696, 163=>696, 164=>636, 165=>696, 166=>365, 167=>500, 168=>500, 169=>1000, 170=>564, 171=>650, 172=>838, 173=>415, 174=>1000, 175=>500, 176=>500, + 177=>838, 178=>438, 179=>438, 180=>500, 181=>736, 182=>636, 183=>380, 184=>500, 185=>438, 186=>564, 187=>650, 188=>1035, 189=>1035, 190=>1035, 191=>580, 192=>774, + 193=>774, 194=>774, 195=>774, 196=>774, 197=>774, 198=>1085, 199=>734, 200=>683, 201=>683, 202=>683, 203=>683, 204=>372, 205=>372, 206=>372, 207=>372, 208=>845, + 209=>837, 210=>850, 211=>850, 212=>850, 213=>850, 214=>850, 215=>838, 216=>850, 217=>812, 218=>812, 219=>812, 220=>812, 221=>724, 222=>742, 223=>719, 224=>675, + 225=>675, 226=>675, 227=>675, 228=>675, 229=>675, 230=>1048, 231=>593, 232=>678, 233=>678, 234=>678, 235=>678, 236=>343, 237=>343, 238=>343, 239=>343, 240=>687, + 241=>712, 242=>687, 243=>687, 244=>687, 245=>687, 246=>687, 247=>838, 248=>687, 249=>712, 250=>712, 251=>712, 252=>712, 253=>652, 254=>716, 255=>652, 256=>774, + 257=>675, 258=>774, 259=>675, 260=>774, 261=>675, 262=>734, 263=>593, 264=>734, 265=>593, 266=>734, 267=>593, 268=>734, 269=>593, 270=>830, 271=>716, 272=>845, + 273=>716, 274=>683, 275=>678, 276=>683, 277=>678, 278=>683, 279=>678, 280=>683, 281=>678, 282=>683, 283=>678, 284=>821, 285=>716, 286=>821, 287=>716, 288=>821, + 289=>716, 290=>821, 291=>716, 292=>837, 293=>712, 294=>974, 295=>790, 296=>372, 297=>343, 298=>372, 299=>343, 300=>372, 301=>343, 302=>372, 303=>343, 304=>372, + 305=>343, 306=>744, 307=>686, 308=>372, 309=>343, 310=>775, 311=>665, 312=>665, 313=>637, 314=>343, 315=>637, 316=>343, 317=>637, 318=>459, 319=>637, 320=>486, + 321=>660, 322=>375, 323=>837, 324=>712, 325=>837, 326=>712, 327=>837, 328=>712, 329=>983, 330=>837, 331=>712, 332=>850, 333=>687, 334=>850, 335=>687, 336=>850, + 337=>687, 340=>770, 341=>493, 342=>770, 343=>493, 344=>770, 345=>493, 346=>720, 347=>595, 348=>720, 349=>595, 350=>720, 351=>595, 354=>682, 355=>478, 356=>682, + 357=>478, 358=>682, 359=>478, 360=>812, 361=>712, 362=>812, 363=>712, 364=>812, 365=>712, 366=>812, 367=>712, 368=>812, 369=>712, 370=>812, 371=>712, 372=>1103, + 373=>924, 374=>724, 375=>652, 377=>725, 378=>582, 379=>725, 380=>582, 383=>435, 384=>716, 385=>811, 386=>762, 387=>716, 388=>762, 389=>716, 390=>734, 391=>734, + 392=>593, 393=>845, 394=>879, 395=>762, 396=>716, 397=>687, 398=>683, 399=>850, 400=>696, 401=>683, 403=>821, 404=>793, 405=>1045, 406=>436, 407=>389, 408=>775, + 409=>665, 410=>360, 411=>592, 412=>1042, 413=>837, 414=>712, 415=>850, 416=>850, 417=>687, 418=>1114, 419=>962, 420=>782, 421=>716, 422=>770, 423=>720, 424=>595, + 425=>683, 426=>552, 427=>478, 428=>707, 429=>478, 430=>682, 431=>812, 432=>712, 433=>769, 434=>813, 435=>797, 436=>778, 437=>725, 438=>582, 439=>772, 440=>772, + 441=>641, 442=>582, 443=>696, 444=>772, 445=>641, 446=>573, 447=>716, 448=>372, 449=>659, 450=>544, 451=>372, 452=>1548, 453=>1450, 454=>1307, 455=>977, 456=>979, + 457=>670, 458=>1193, 459=>1213, 460=>1063, 461=>774, 462=>675, 463=>372, 464=>343, 465=>850, 466=>687, 467=>812, 468=>712, 469=>812, 470=>712, 471=>812, 472=>712, + 473=>812, 474=>712, 475=>812, 476=>712, 477=>678, 478=>774, 479=>675, 480=>774, 481=>675, 482=>1085, 483=>1048, 484=>821, 485=>716, 486=>821, 487=>716, 488=>775, + 489=>665, 490=>850, 491=>687, 492=>850, 493=>687, 494=>772, 495=>582, 496=>343, 497=>1548, 498=>1450, 499=>1307, 500=>821, 501=>716, 502=>1289, 503=>787, 504=>837, + 505=>712, 506=>774, 507=>675, 508=>1085, 509=>1048, 510=>850, 511=>687, 512=>774, 513=>675, 514=>774, 515=>675, 516=>683, 517=>678, 518=>683, 519=>678, 520=>372, + 521=>343, 522=>372, 523=>343, 524=>850, 525=>687, 526=>850, 527=>687, 528=>770, 529=>493, 530=>770, 531=>493, 532=>812, 533=>712, 534=>812, 535=>712, 536=>720, + 537=>595, 538=>682, 539=>478, 540=>690, 541=>607, 542=>837, 543=>712, 544=>837, 545=>865, 546=>809, 547=>659, 548=>725, 549=>582, 550=>774, 551=>675, 552=>683, + 553=>678, 554=>850, 555=>687, 556=>850, 557=>687, 558=>850, 559=>687, 560=>850, 561=>687, 562=>724, 563=>652, 564=>492, 565=>867, 566=>512, 567=>343, 568=>1088, + 569=>1088, 570=>774, 571=>734, 572=>593, 573=>637, 574=>682, 575=>595, 576=>582, 577=>782, 578=>614, 579=>762, 580=>812, 581=>774, 582=>683, 583=>678, 584=>372, + 585=>343, 586=>860, 587=>791, 588=>770, 589=>493, 590=>724, 591=>652, 592=>675, 593=>716, 594=>716, 595=>716, 596=>593, 597=>593, 598=>791, 599=>792, 600=>678, + 601=>678, 602=>876, 603=>557, 604=>545, 605=>774, 606=>731, 607=>343, 608=>792, 609=>716, 610=>627, 611=>735, 612=>635, 613=>712, 614=>712, 615=>712, 616=>545, + 617=>440, 618=>545, 619=>559, 620=>693, 621=>343, 622=>841, 623=>1042, 624=>1042, 625=>1042, 626=>712, 627=>793, 628=>642, 629=>687, 630=>909, 631=>682, 632=>796, + 633=>538, 634=>538, 635=>650, 636=>493, 637=>493, 638=>596, 639=>596, 640=>642, 641=>642, 642=>595, 643=>415, 644=>435, 645=>605, 646=>552, 647=>478, 648=>478, + 649=>920, 650=>769, 651=>670, 652=>652, 653=>924, 654=>652, 655=>724, 656=>694, 657=>684, 658=>641, 659=>641, 660=>573, 661=>573, 662=>573, 663=>573, 664=>850, + 665=>633, 666=>731, 667=>685, 668=>691, 669=>343, 670=>732, 671=>539, 672=>792, 673=>573, 674=>573, 675=>1156, 676=>1214, 677=>1155, 678=>974, 679=>769, 680=>929, + 681=>1026, 682=>792, 683=>780, 684=>591, 685=>415, 686=>677, 687=>789, 688=>456, 689=>456, 690=>219, 691=>315, 692=>315, 693=>315, 694=>411, 695=>591, 696=>417, + 697=>302, 698=>521, 699=>380, 700=>380, 701=>380, 702=>366, 703=>366, 704=>326, 705=>326, 706=>500, 707=>500, 708=>500, 709=>500, 711=>500, 712=>306, 713=>500, + 714=>500, 715=>500, 716=>306, 717=>500, 718=>500, 719=>500, 720=>337, 721=>337, 722=>366, 723=>366, 724=>500, 725=>500, 726=>500, 727=>500, 728=>500, 729=>500, + 730=>500, 731=>500, 733=>500, 734=>351, 735=>500, 736=>412, 737=>219, 738=>381, 739=>413, 740=>326, 741=>500, 742=>500, 743=>500, 744=>500, 745=>500, 748=>500, + 749=>500, 750=>500, 755=>500, 759=>500, 768=>0, 769=>0, 770=>0, 771=>0, 772=>0, 773=>0, 774=>0, 775=>0, 776=>0, 777=>0, 778=>0, 779=>0, + 780=>0, 781=>0, 782=>0, 783=>0, 784=>0, 785=>0, 786=>0, 787=>0, 788=>0, 789=>0, 790=>0, 791=>0, 792=>0, 793=>0, 794=>0, 795=>0, + 796=>0, 797=>0, 798=>0, 799=>0, 800=>0, 801=>0, 802=>0, 803=>0, 804=>0, 805=>0, 806=>0, 807=>0, 808=>0, 809=>0, 810=>0, 811=>0, + 812=>0, 813=>0, 814=>0, 815=>0, 816=>0, 817=>0, 818=>0, 819=>0, 820=>0, 821=>0, 822=>0, 823=>0, 824=>0, 825=>0, 826=>0, 827=>0, + 828=>0, 829=>0, 830=>0, 831=>0, 832=>0, 833=>0, 834=>0, 835=>0, 836=>0, 837=>0, 838=>0, 839=>0, 840=>0, 841=>0, 842=>0, 843=>0, + 844=>0, 845=>0, 846=>0, 847=>0, 849=>0, 850=>0, 855=>0, 856=>0, 860=>0, 861=>0, 862=>0, 863=>0, 864=>0, 865=>0, 866=>0, 884=>302, + 885=>302, 890=>500, 891=>593, 892=>550, 893=>549, 894=>337, 900=>441, 901=>500, 902=>797, 903=>380, 904=>846, 905=>1009, 906=>563, 908=>891, 910=>980, 911=>894, + 912=>390, 913=>774, 914=>762, 915=>637, 916=>774, 917=>683, 918=>725, 919=>837, 920=>850, 921=>372, 922=>775, 923=>774, 924=>995, 925=>837, 926=>632, 927=>850, + 928=>837, 929=>733, 931=>683, 932=>682, 933=>724, 934=>850, 935=>771, 936=>850, 937=>850, 938=>372, 939=>724, 940=>687, 941=>557, 942=>712, 943=>390, 944=>675, + 945=>687, 946=>716, 947=>681, 948=>687, 949=>557, 950=>591, 951=>712, 952=>687, 953=>390, 954=>710, 955=>633, 956=>736, 957=>681, 958=>591, 959=>687, 960=>791, + 961=>716, 962=>593, 963=>779, 964=>638, 965=>675, 966=>782, 967=>645, 968=>794, 969=>869, 970=>390, 971=>675, 972=>687, 973=>675, 974=>869, 976=>651, 977=>661, + 978=>746, 979=>981, 980=>746, 981=>796, 982=>869, 983=>744, 984=>850, 985=>687, 986=>734, 987=>593, 988=>683, 989=>494, 990=>702, 991=>660, 992=>919, 993=>627, + 994=>1093, 995=>837, 996=>832, 997=>716, 998=>928, 999=>744, 1000=>733, 1001=>650, 1002=>789, 1003=>671, 1004=>752, 1005=>716, 1006=>682, 1007=>590, 1008=>744, 1009=>716, + 1010=>593, 1011=>343, 1012=>850, 1013=>645, 1014=>645, 1015=>742, 1016=>716, 1017=>734, 1018=>995, 1019=>732, 1020=>716, 1021=>734, 1022=>734, 1023=>698, 1024=>683, 1025=>683, + 1026=>878, 1028=>734, 1029=>720, 1030=>372, 1031=>372, 1032=>372, 1033=>1154, 1034=>1130, 1035=>878, 1037=>837, 1038=>771, 1040=>774, 1041=>762, 1042=>762, 1043=>637, 1044=>891, + 1045=>683, 1046=>1224, 1047=>710, 1048=>837, 1049=>837, 1050=>817, 1051=>831, 1052=>995, 1053=>837, 1054=>850, 1055=>837, 1056=>733, 1057=>734, 1058=>682, 1059=>771, 1060=>992, + 1061=>771, 1062=>928, 1063=>808, 1064=>1235, 1065=>1326, 1066=>939, 1067=>1036, 1068=>762, 1069=>734, 1070=>1174, 1071=>770, 1072=>675, 1073=>698, 1074=>633, 1075=>522, 1076=>808, + 1077=>678, 1078=>995, 1079=>581, 1080=>701, 1081=>701, 1082=>679, 1083=>732, 1084=>817, 1085=>691, 1086=>687, 1087=>691, 1088=>716, 1089=>593, 1090=>580, 1091=>652, 1092=>992, + 1093=>645, 1094=>741, 1095=>687, 1096=>1062, 1097=>1105, 1098=>751, 1099=>904, 1100=>632, 1101=>593, 1102=>972, 1103=>642, 1104=>678, 1105=>678, 1106=>714, 1107=>522, 1108=>593, + 1109=>595, 1110=>343, 1111=>343, 1112=>343, 1113=>991, 1114=>956, 1115=>734, 1117=>701, 1118=>652, 1119=>691, 1120=>1093, 1121=>869, 1122=>840, 1123=>736, 1124=>1012, 1125=>839, + 1126=>992, 1127=>832, 1128=>1358, 1129=>1121, 1130=>850, 1131=>687, 1132=>1236, 1133=>1007, 1134=>696, 1135=>557, 1136=>1075, 1137=>1061, 1138=>850, 1139=>667, 1140=>850, 1141=>695, + 1142=>850, 1143=>695, 1144=>1148, 1145=>1043, 1146=>1074, 1147=>863, 1148=>1405, 1149=>1173, 1150=>1093, 1151=>869, 1152=>734, 1153=>593, 1154=>652, 1155=>0, 1156=>0, 1157=>0, + 1158=>0, 1160=>418, 1161=>418, 1162=>938, 1163=>806, 1164=>762, 1165=>611, 1166=>736, 1167=>718, 1168=>637, 1169=>522, 1170=>666, 1171=>543, 1172=>789, 1173=>522, 1174=>1224, + 1175=>995, 1176=>710, 1177=>581, 1178=>775, 1179=>679, 1180=>817, 1181=>679, 1182=>817, 1183=>679, 1184=>1015, 1185=>826, 1186=>837, 1187=>691, 1188=>1103, 1189=>871, 1190=>1254, + 1191=>979, 1192=>875, 1193=>710, 1194=>734, 1195=>593, 1196=>682, 1197=>580, 1198=>724, 1199=>652, 1200=>724, 1201=>652, 1202=>771, 1203=>645, 1204=>1104, 1205=>1001, 1206=>808, + 1207=>687, 1208=>808, 1209=>687, 1210=>808, 1211=>712, 1212=>1026, 1213=>810, 1214=>1026, 1215=>810, 1216=>372, 1217=>1224, 1218=>995, 1219=>778, 1220=>629, 1221=>933, 1222=>804, + 1223=>837, 1224=>691, 1225=>938, 1226=>806, 1227=>808, 1228=>687, 1229=>1096, 1230=>932, 1231=>343, 1232=>774, 1233=>675, 1234=>774, 1235=>675, 1236=>1085, 1237=>1048, 1238=>683, + 1239=>678, 1240=>850, 1241=>678, 1242=>850, 1243=>678, 1244=>1224, 1245=>995, 1246=>710, 1247=>581, 1248=>772, 1249=>641, 1250=>837, 1251=>701, 1252=>837, 1253=>701, 1254=>850, + 1255=>687, 1256=>850, 1257=>687, 1258=>850, 1259=>687, 1260=>734, 1261=>593, 1262=>771, 1263=>652, 1264=>771, 1265=>652, 1266=>771, 1267=>652, 1268=>808, 1269=>687, 1270=>637, + 1271=>522, 1272=>1036, 1273=>904, 1274=>666, 1275=>543, 1276=>771, 1277=>645, 1278=>771, 1279=>645, 1280=>762, 1281=>608, 1282=>1159, 1283=>893, 1284=>1119, 1285=>920, 1286=>828, + 1287=>693, 1288=>1242, 1289=>1017, 1290=>1248, 1291=>1013, 1292=>839, 1293=>638, 1294=>938, 1295=>803, 1296=>696, 1297=>557, 1298=>831, 1299=>732, 1329=>984, 1330=>812, 1331=>984, + 1332=>984, 1333=>812, 1334=>777, 1335=>812, 1336=>812, 1337=>975, 1338=>984, 1339=>812, 1340=>710, 1341=>1078, 1342=>1136, 1343=>812, 1344=>710, 1345=>757, 1346=>984, 1347=>876, + 1348=>984, 1349=>793, 1350=>984, 1351=>812, 1352=>812, 1353=>812, 1354=>958, 1355=>777, 1356=>984, 1357=>812, 1358=>984, 1359=>720, 1360=>812, 1361=>793, 1362=>895, 1363=>850, + 1364=>936, 1365=>850, 1366=>720, 1369=>366, 1370=>380, 1371=>550, 1372=>550, 1373=>380, 1374=>546, 1375=>521, 1377=>1042, 1378=>712, 1379=>866, 1380=>868, 1381=>712, 1382=>817, + 1383=>653, 1384=>712, 1385=>811, 1386=>817, 1387=>712, 1388=>498, 1389=>1018, 1390=>716, 1391=>712, 1392=>712, 1393=>716, 1394=>819, 1395=>712, 1396=>751, 1397=>343, 1398=>882, + 1399=>559, 1400=>712, 1401=>559, 1402=>1042, 1403=>559, 1404=>863, 1405=>712, 1406=>813, 1407=>1042, 1408=>712, 1409=>716, 1410=>571, 1411=>1042, 1412=>778, 1413=>687, 1414=>720, + 1415=>862, 1417=>400, 1418=>487, 1456=>0, 1457=>0, 1458=>0, 1459=>0, 1460=>0, 1461=>0, 1462=>0, 1463=>0, 1464=>0, 1465=>0, 1467=>0, 1468=>0, 1469=>0, + 1471=>0, 1472=>372, 1473=>0, 1474=>0, 1475=>372, 1478=>532, 1479=>0, 1488=>751, 1489=>731, 1490=>537, 1491=>684, 1492=>778, 1493=>372, 1494=>521, 1495=>778, 1496=>770, + 1497=>372, 1498=>778, 1499=>750, 1500=>718, 1501=>778, 1502=>856, 1503=>372, 1504=>532, 1505=>855, 1506=>720, 1507=>802, 1508=>777, 1509=>628, 1510=>751, 1511=>803, 1512=>778, + 1513=>963, 1514=>822, 1520=>692, 1521=>692, 1522=>692, 3647=>743, 3713=>815, 3714=>748, 3716=>749, 3719=>569, 3720=>742, 3722=>744, 3725=>761, 3732=>706, 3733=>704, 3734=>747, + 3735=>819, 3737=>730, 3738=>727, 3739=>727, 3740=>922, 3741=>827, 3742=>866, 3743=>866, 3745=>836, 3746=>761, 3747=>770, 3749=>769, 3751=>713, 3754=>827, 3755=>1031, 3757=>724, + 3758=>784, 3759=>934, 3760=>688, 3761=>0, 3762=>610, 3763=>610, 3764=>0, 3765=>0, 3766=>0, 3767=>0, 3768=>0, 3769=>0, 3771=>0, 3772=>0, 3773=>670, 3776=>516, + 3777=>860, 3778=>516, 3779=>650, 3780=>632, 3782=>759, 3784=>0, 3785=>0, 3786=>0, 3787=>0, 3788=>0, 3789=>0, 3804=>1363, 3805=>1363, 5121=>774, 5122=>774, 5123=>774, + 5124=>774, 5125=>905, 5126=>905, 5127=>905, 5129=>905, 5130=>905, 5131=>905, 5132=>1018, 5133=>1009, 5134=>1018, 5135=>1009, 5136=>1018, 5137=>1009, 5138=>1149, 5139=>1140, 5140=>1149, + 5141=>1140, 5142=>905, 5143=>1149, 5144=>1142, 5145=>1149, 5146=>1142, 5147=>905, 5149=>310, 5150=>529, 5151=>425, 5152=>425, 5153=>395, 5154=>395, 5155=>395, 5156=>395, 5157=>564, + 5158=>470, 5159=>310, 5160=>395, 5161=>395, 5162=>395, 5163=>1213, 5164=>986, 5165=>1216, 5166=>1297, 5167=>774, 5168=>774, 5169=>774, 5170=>774, 5171=>886, 5172=>886, 5173=>886, + 5175=>886, 5176=>886, 5177=>886, 5178=>1018, 5179=>1009, 5180=>1018, 5181=>1009, 5182=>1018, 5183=>1009, 5184=>1149, 5185=>1140, 5186=>1149, 5187=>1140, 5188=>1149, 5189=>1142, 5190=>1149, + 5191=>1142, 5192=>886, 5193=>576, 5194=>229, 5196=>812, 5197=>812, 5198=>812, 5199=>812, 5200=>815, 5201=>815, 5202=>815, 5204=>815, 5205=>815, 5206=>815, 5207=>1056, 5208=>1048, + 5209=>1056, 5210=>1048, 5211=>1056, 5212=>1048, 5213=>1060, 5214=>1054, 5215=>1060, 5216=>1054, 5217=>1060, 5218=>1052, 5219=>1060, 5220=>1052, 5221=>1060, 5222=>483, 5223=>1005, 5224=>1005, + 5225=>1023, 5226=>1017, 5227=>743, 5228=>743, 5229=>743, 5230=>743, 5231=>743, 5232=>743, 5233=>743, 5234=>743, 5235=>743, 5236=>1029, 5237=>975, 5238=>980, 5239=>975, 5240=>980, + 5241=>975, 5242=>1029, 5243=>975, 5244=>1029, 5245=>975, 5246=>980, 5247=>975, 5248=>980, 5249=>975, 5250=>980, 5251=>501, 5252=>501, 5253=>938, 5254=>938, 5255=>938, 5256=>938, + 5257=>743, 5258=>743, 5259=>743, 5260=>743, 5261=>743, 5262=>743, 5263=>743, 5264=>743, 5265=>743, 5266=>1029, 5267=>975, 5268=>1029, 5269=>975, 5270=>1029, 5271=>975, 5272=>1029, + 5273=>975, 5274=>1029, 5275=>975, 5276=>1029, 5277=>975, 5278=>1029, 5279=>975, 5280=>1029, 5281=>501, 5282=>501, 5283=>626, 5284=>626, 5285=>626, 5286=>626, 5287=>626, 5288=>626, + 5289=>626, 5290=>626, 5291=>626, 5292=>881, 5293=>854, 5294=>863, 5295=>874, 5296=>863, 5297=>874, 5298=>881, 5299=>874, 5300=>881, 5301=>874, 5302=>863, 5303=>874, 5304=>863, + 5305=>874, 5306=>863, 5307=>436, 5308=>548, 5309=>436, 5312=>988, 5313=>988, 5314=>988, 5315=>988, 5316=>931, 5317=>931, 5318=>931, 5319=>931, 5320=>931, 5321=>1238, 5322=>1247, + 5323=>1200, 5324=>1228, 5325=>1200, 5326=>1228, 5327=>931, 5328=>660, 5329=>497, 5330=>660, 5331=>988, 5332=>988, 5333=>988, 5334=>988, 5335=>931, 5336=>931, 5337=>931, 5338=>931, + 5339=>931, 5340=>1231, 5341=>1247, 5342=>1283, 5343=>1228, 5344=>1283, 5345=>1228, 5346=>1228, 5347=>1214, 5348=>1228, 5349=>1214, 5350=>1283, 5351=>1228, 5352=>1283, 5353=>1228, 5354=>660, + 5356=>886, 5357=>730, 5358=>730, 5359=>730, 5360=>730, 5361=>730, 5362=>730, 5363=>730, 5364=>730, 5365=>730, 5366=>998, 5367=>958, 5368=>967, 5369=>989, 5370=>967, 5371=>989, + 5372=>998, 5373=>958, 5374=>998, 5375=>958, 5376=>967, 5377=>989, 5378=>967, 5379=>989, 5380=>967, 5381=>493, 5382=>460, 5383=>493, 5392=>923, 5393=>923, 5394=>923, 5395=>1136, + 5396=>1136, 5397=>1136, 5398=>1136, 5399=>1209, 5400=>1202, 5401=>1209, 5402=>1202, 5403=>1209, 5404=>1202, 5405=>1431, 5406=>1420, 5407=>1431, 5408=>1420, 5409=>1431, 5410=>1420, 5411=>1431, + 5412=>1420, 5413=>746, 5414=>776, 5415=>776, 5416=>776, 5417=>776, 5418=>776, 5419=>776, 5420=>776, 5421=>776, 5422=>776, 5423=>1003, 5424=>1003, 5425=>1013, 5426=>996, 5427=>1013, + 5428=>996, 5429=>1003, 5430=>1003, 5431=>1003, 5432=>1003, 5433=>1013, 5434=>996, 5435=>1013, 5436=>996, 5437=>1013, 5438=>495, 5440=>395, 5441=>510, 5442=>1033, 5443=>1033, 5444=>976, + 5445=>976, 5446=>976, 5447=>976, 5448=>733, 5449=>733, 5450=>733, 5451=>733, 5452=>733, 5453=>733, 5454=>1003, 5455=>959, 5456=>495, 5458=>886, 5459=>774, 5460=>774, 5461=>774, + 5462=>774, 5463=>928, 5464=>928, 5465=>928, 5466=>928, 5467=>1172, 5468=>1142, 5469=>602, 5470=>812, 5471=>812, 5472=>812, 5473=>812, 5474=>812, 5475=>812, 5476=>815, 5477=>815, + 5478=>815, 5479=>815, 5480=>1060, 5481=>1052, 5482=>548, 5492=>977, 5493=>977, 5494=>977, 5495=>977, 5496=>977, 5497=>977, 5498=>977, 5499=>618, 5500=>837, 5501=>510, 5502=>1238, + 5503=>1238, 5504=>1238, 5505=>1238, 5506=>1238, 5507=>1238, 5508=>1238, 5509=>989, 5514=>977, 5515=>977, 5516=>977, 5517=>977, 5518=>1591, 5519=>1591, 5520=>1591, 5521=>1295, 5522=>1295, + 5523=>1591, 5524=>1591, 5525=>848, 5526=>1273, 5536=>988, 5537=>988, 5538=>931, 5539=>931, 5540=>931, 5541=>931, 5542=>660, 5543=>776, 5544=>776, 5545=>776, 5546=>776, 5547=>776, + 5548=>776, 5549=>776, 5550=>495, 5551=>743, 5598=>830, 5601=>830, 5702=>496, 5703=>496, 5742=>413, 5743=>1238, 5744=>1591, 5745=>2016, 5746=>2016, 5747=>1720, 5748=>1678, 5749=>2016, + 5750=>2016, 7424=>652, 7425=>833, 7426=>1048, 7427=>608, 7428=>593, 7429=>676, 7430=>676, 7431=>559, 7432=>557, 7433=>343, 7434=>494, 7435=>665, 7436=>539, 7437=>817, 7438=>701, + 7439=>687, 7440=>593, 7441=>660, 7442=>660, 7443=>660, 7444=>1094, 7446=>687, 7447=>687, 7448=>556, 7449=>642, 7450=>642, 7451=>580, 7452=>634, 7453=>737, 7454=>948, 7455=>695, + 7456=>652, 7457=>924, 7458=>582, 7459=>646, 7462=>539, 7463=>652, 7464=>691, 7465=>556, 7466=>781, 7467=>732, 7468=>487, 7469=>683, 7470=>480, 7472=>523, 7473=>430, 7474=>430, + 7475=>517, 7476=>527, 7477=>234, 7478=>234, 7479=>488, 7480=>401, 7481=>626, 7482=>527, 7483=>527, 7484=>535, 7485=>509, 7486=>461, 7487=>485, 7488=>430, 7489=>511, 7490=>695, + 7491=>458, 7492=>458, 7493=>479, 7494=>712, 7495=>479, 7496=>479, 7497=>479, 7498=>479, 7499=>386, 7500=>386, 7501=>479, 7502=>219, 7503=>487, 7504=>664, 7505=>456, 7506=>488, + 7507=>414, 7508=>488, 7509=>488, 7510=>479, 7511=>388, 7512=>456, 7513=>462, 7514=>664, 7515=>501, 7517=>451, 7518=>429, 7519=>433, 7520=>493, 7521=>406, 7522=>219, 7523=>315, + 7524=>456, 7525=>501, 7526=>451, 7527=>429, 7528=>433, 7529=>493, 7530=>406, 7543=>716, 7544=>527, 7547=>545, 7557=>514, 7579=>479, 7580=>414, 7581=>414, 7582=>488, 7583=>386, + 7584=>377, 7585=>348, 7586=>479, 7587=>456, 7588=>347, 7589=>281, 7590=>347, 7591=>347, 7592=>431, 7593=>326, 7594=>330, 7595=>370, 7596=>664, 7597=>664, 7598=>562, 7599=>562, + 7600=>448, 7601=>488, 7602=>542, 7603=>422, 7604=>396, 7605=>388, 7606=>583, 7607=>494, 7608=>399, 7609=>451, 7610=>501, 7611=>417, 7612=>523, 7613=>470, 7614=>455, 7615=>425, + 7620=>0, 7621=>0, 7622=>0, 7623=>0, 7624=>0, 7625=>0, 7680=>774, 7681=>675, 7682=>762, 7683=>716, 7684=>762, 7685=>716, 7686=>762, 7687=>716, 7688=>734, 7689=>593, + 7690=>830, 7691=>716, 7692=>830, 7693=>716, 7694=>830, 7695=>716, 7696=>830, 7697=>716, 7698=>830, 7699=>716, 7700=>683, 7701=>678, 7702=>683, 7703=>678, 7704=>683, 7705=>678, + 7706=>683, 7707=>678, 7708=>683, 7709=>678, 7710=>683, 7711=>435, 7712=>821, 7713=>716, 7714=>837, 7715=>712, 7716=>837, 7717=>712, 7718=>837, 7719=>712, 7720=>837, 7721=>712, + 7722=>837, 7723=>712, 7724=>372, 7725=>343, 7726=>372, 7727=>343, 7728=>775, 7729=>665, 7730=>775, 7731=>665, 7732=>775, 7733=>665, 7734=>637, 7735=>343, 7736=>637, 7737=>343, + 7738=>637, 7739=>343, 7740=>637, 7741=>343, 7742=>995, 7743=>1042, 7744=>995, 7745=>1042, 7746=>995, 7747=>1042, 7748=>837, 7749=>712, 7750=>837, 7751=>712, 7752=>837, 7753=>712, + 7754=>837, 7755=>712, 7756=>850, 7757=>687, 7758=>850, 7759=>687, 7760=>850, 7761=>687, 7762=>850, 7763=>687, 7764=>733, 7765=>716, 7766=>733, 7767=>716, 7768=>770, 7769=>493, + 7770=>770, 7771=>493, 7772=>770, 7773=>493, 7774=>770, 7775=>493, 7776=>720, 7777=>595, 7778=>720, 7779=>595, 7780=>720, 7781=>595, 7782=>720, 7783=>595, 7784=>720, 7785=>595, + 7786=>682, 7787=>478, 7788=>682, 7789=>478, 7790=>682, 7791=>478, 7792=>682, 7793=>478, 7794=>812, 7795=>712, 7796=>812, 7797=>712, 7798=>812, 7799=>712, 7800=>812, 7801=>712, + 7802=>812, 7803=>712, 7804=>774, 7805=>652, 7806=>774, 7807=>652, 7808=>1103, 7809=>924, 7810=>1103, 7811=>924, 7812=>1103, 7813=>924, 7814=>1103, 7815=>924, 7816=>1103, 7817=>924, + 7818=>771, 7819=>645, 7820=>771, 7821=>645, 7822=>724, 7823=>652, 7824=>725, 7825=>582, 7826=>725, 7827=>582, 7828=>725, 7829=>582, 7830=>712, 7831=>478, 7832=>924, 7833=>652, + 7834=>675, 7835=>435, 7840=>774, 7841=>675, 7842=>774, 7843=>675, 7844=>774, 7845=>675, 7846=>774, 7847=>675, 7848=>774, 7849=>675, 7850=>774, 7851=>675, 7852=>774, 7853=>675, + 7854=>774, 7855=>675, 7856=>774, 7857=>675, 7858=>774, 7859=>675, 7860=>774, 7861=>675, 7862=>774, 7863=>675, 7864=>683, 7865=>678, 7866=>683, 7867=>678, 7868=>683, 7869=>678, + 7870=>683, 7871=>678, 7872=>683, 7873=>678, 7874=>683, 7875=>678, 7876=>683, 7877=>678, 7878=>683, 7879=>678, 7880=>372, 7881=>343, 7882=>372, 7883=>343, 7884=>850, 7885=>687, + 7886=>850, 7887=>687, 7888=>850, 7889=>687, 7890=>850, 7891=>687, 7892=>850, 7893=>687, 7894=>850, 7895=>687, 7896=>850, 7897=>687, 7898=>850, 7899=>687, 7900=>850, 7901=>687, + 7902=>850, 7903=>687, 7904=>850, 7905=>687, 7906=>850, 7907=>687, 7908=>812, 7909=>712, 7910=>812, 7911=>712, 7912=>812, 7913=>712, 7914=>812, 7915=>712, 7916=>812, 7917=>712, + 7918=>812, 7919=>712, 7920=>812, 7921=>712, 7922=>724, 7923=>652, 7924=>724, 7925=>652, 7926=>724, 7927=>652, 7928=>724, 7929=>652, 7936=>687, 7937=>687, 7938=>687, 7939=>687, + 7940=>687, 7941=>687, 7942=>687, 7943=>687, 7944=>774, 7945=>774, 7946=>1041, 7947=>1043, 7948=>935, 7949=>963, 7950=>835, 7951=>859, 7952=>557, 7953=>557, 7954=>557, 7955=>557, + 7956=>557, 7957=>557, 7960=>792, 7961=>794, 7962=>1100, 7963=>1096, 7964=>1023, 7965=>1052, 7968=>712, 7969=>712, 7970=>712, 7971=>712, 7972=>712, 7973=>712, 7974=>712, 7975=>712, + 7976=>945, 7977=>951, 7978=>1250, 7979=>1250, 7980=>1180, 7981=>1206, 7982=>1054, 7983=>1063, 7984=>390, 7985=>390, 7986=>390, 7987=>390, 7988=>390, 7989=>390, 7990=>390, 7991=>390, + 7992=>483, 7993=>489, 7994=>777, 7995=>785, 7996=>712, 7997=>738, 7998=>604, 7999=>604, 8000=>687, 8001=>687, 8002=>687, 8003=>687, 8004=>687, 8005=>687, 8008=>892, 8009=>933, + 8010=>1221, 8011=>1224, 8012=>1053, 8013=>1082, 8016=>675, 8017=>675, 8018=>675, 8019=>675, 8020=>675, 8021=>675, 8022=>675, 8023=>675, 8025=>930, 8027=>1184, 8029=>1199, 8031=>1049, + 8032=>869, 8033=>869, 8034=>869, 8035=>869, 8036=>869, 8037=>869, 8038=>869, 8039=>869, 8040=>909, 8041=>958, 8042=>1246, 8043=>1251, 8044=>1076, 8045=>1105, 8046=>1028, 8047=>1076, + 8048=>687, 8049=>687, 8050=>557, 8051=>557, 8052=>712, 8053=>712, 8054=>390, 8055=>390, 8056=>687, 8057=>687, 8058=>675, 8059=>675, 8060=>869, 8061=>869, 8064=>687, 8065=>687, + 8066=>687, 8067=>687, 8068=>687, 8069=>687, 8070=>687, 8071=>687, 8072=>774, 8073=>774, 8074=>1041, 8075=>1043, 8076=>935, 8077=>963, 8078=>835, 8079=>859, 8080=>712, 8081=>712, + 8082=>712, 8083=>712, 8084=>712, 8085=>712, 8086=>712, 8087=>712, 8088=>945, 8089=>951, 8090=>1250, 8091=>1250, 8092=>1180, 8093=>1206, 8094=>1054, 8095=>1063, 8096=>869, 8097=>869, + 8098=>869, 8099=>869, 8100=>869, 8101=>869, 8102=>869, 8103=>869, 8104=>909, 8105=>958, 8106=>1246, 8107=>1251, 8108=>1076, 8109=>1105, 8110=>1028, 8111=>1076, 8112=>687, 8113=>687, + 8114=>687, 8115=>687, 8116=>687, 8118=>687, 8119=>687, 8120=>774, 8121=>774, 8122=>876, 8123=>797, 8124=>774, 8125=>500, 8126=>500, 8127=>500, 8128=>500, 8129=>500, 8130=>712, + 8131=>712, 8132=>712, 8134=>712, 8135=>712, 8136=>929, 8137=>846, 8138=>1080, 8139=>1009, 8140=>837, 8141=>500, 8142=>500, 8143=>500, 8144=>390, 8145=>390, 8146=>390, 8147=>390, + 8150=>390, 8151=>390, 8152=>372, 8153=>372, 8154=>621, 8155=>563, 8157=>500, 8158=>500, 8159=>500, 8160=>675, 8161=>675, 8162=>675, 8163=>675, 8164=>716, 8165=>716, 8166=>675, + 8167=>675, 8168=>724, 8169=>724, 8170=>1020, 8171=>980, 8172=>838, 8173=>500, 8174=>500, 8175=>500, 8178=>869, 8179=>869, 8180=>869, 8182=>869, 8183=>869, 8184=>1065, 8185=>891, + 8186=>1084, 8187=>894, 8188=>850, 8189=>500, 8190=>500, 8192=>500, 8193=>1000, 8194=>500, 8195=>1000, 8196=>330, 8197=>250, 8198=>167, 8199=>696, 8200=>380, 8201=>200, 8202=>100, + 8203=>0, 8204=>0, 8205=>0, 8206=>0, 8207=>0, 8208=>415, 8209=>415, 8210=>696, 8213=>1000, 8214=>500, 8215=>500, 8219=>380, 8223=>657, 8227=>639, 8228=>380, 8229=>685, + 8231=>348, 8234=>0, 8235=>0, 8236=>0, 8237=>0, 8238=>0, 8239=>200, 8241=>1908, 8242=>264, 8243=>447, 8244=>630, 8245=>264, 8246=>447, 8247=>630, 8248=>733, 8251=>972, + 8252=>627, 8253=>580, 8254=>500, 8255=>828, 8256=>828, 8257=>329, 8258=>1023, 8259=>500, 8260=>167, 8261=>457, 8262=>457, 8263=>1030, 8264=>829, 8265=>829, 8266=>513, 8267=>687, + 8268=>500, 8269=>500, 8270=>523, 8271=>400, 8272=>828, 8273=>523, 8274=>556, 8275=>838, 8276=>829, 8277=>838, 8278=>684, 8279=>813, 8280=>838, 8281=>838, 8282=>380, 8283=>872, + 8284=>838, 8285=>380, 8286=>380, 8287=>222, 8288=>0, 8289=>0, 8290=>0, 8291=>0, 8298=>0, 8299=>0, 8300=>0, 8301=>0, 8302=>0, 8303=>0, 8304=>438, 8305=>219, + 8308=>438, 8309=>438, 8310=>438, 8311=>438, 8312=>438, 8313=>438, 8314=>528, 8315=>528, 8316=>528, 8317=>288, 8318=>288, 8319=>456, 8320=>438, 8321=>438, 8322=>438, 8323=>438, + 8324=>438, 8325=>438, 8326=>438, 8327=>438, 8328=>438, 8329=>438, 8330=>528, 8331=>528, 8332=>528, 8333=>288, 8334=>288, 8336=>458, 8337=>479, 8338=>488, 8339=>413, 8340=>479, + 8352=>929, 8353=>696, 8354=>696, 8355=>696, 8356=>696, 8357=>1042, 8358=>837, 8359=>1488, 8360=>1205, 8361=>1103, 8362=>854, 8363=>714, 8365=>696, 8366=>682, 8367=>1392, 8368=>696, + 8369=>696, 8370=>696, 8371=>696, 8372=>859, 8373=>696, 8400=>0, 8401=>0, 8406=>0, 8407=>0, 8448=>1106, 8449=>1106, 8450=>734, 8451=>1211, 8452=>896, 8453=>1114, 8454=>1148, + 8455=>696, 8456=>698, 8457=>952, 8459=>1073, 8460=>913, 8461=>850, 8462=>712, 8463=>712, 8464=>604, 8465=>697, 8466=>868, 8467=>472, 8468=>974, 8469=>837, 8470=>1203, 8471=>1000, + 8472=>697, 8473=>702, 8474=>850, 8475=>876, 8476=>814, 8477=>792, 8478=>896, 8479=>710, 8480=>1020, 8481=>1239, 8483=>834, 8484=>725, 8485=>622, 8486=>850, 8487=>769, 8488=>763, + 8489=>303, 8490=>775, 8491=>774, 8492=>928, 8493=>776, 8494=>854, 8495=>636, 8496=>738, 8497=>811, 8498=>683, 8499=>1193, 8500=>465, 8501=>794, 8502=>736, 8503=>503, 8504=>695, + 8505=>380, 8506=>945, 8507=>1370, 8508=>790, 8509=>737, 8510=>652, 8511=>845, 8512=>840, 8513=>786, 8514=>576, 8515=>637, 8516=>760, 8517=>830, 8518=>716, 8519=>678, 8520=>343, + 8521=>343, 8523=>872, 8526=>547, 8531=>1035, 8532=>1035, 8533=>1035, 8534=>1035, 8535=>1035, 8536=>1035, 8537=>1035, 8538=>1035, 8539=>1035, 8540=>1035, 8541=>1035, 8542=>1035, 8543=>615, + 8544=>372, 8545=>659, 8546=>945, 8547=>1099, 8548=>774, 8549=>1099, 8550=>1386, 8551=>1672, 8552=>1121, 8553=>771, 8554=>1120, 8555=>1407, 8556=>637, 8557=>734, 8558=>830, 8559=>995, + 8560=>343, 8561=>607, 8562=>872, 8563=>984, 8564=>652, 8565=>962, 8566=>1227, 8567=>1491, 8568=>969, 8569=>645, 8570=>969, 8571=>1233, 8572=>343, 8573=>593, 8574=>716, 8575=>1042, + 8576=>1289, 8577=>830, 8578=>1289, 8579=>734, 8580=>593, 8592=>838, 8593=>838, 8594=>838, 8595=>838, 8596=>838, 8597=>838, 8598=>838, 8599=>838, 8600=>838, 8601=>838, 8602=>838, + 8603=>838, 8604=>838, 8605=>838, 8606=>838, 8607=>838, 8608=>838, 8609=>838, 8610=>838, 8611=>838, 8612=>838, 8613=>838, 8614=>838, 8615=>838, 8616=>838, 8617=>838, 8618=>838, + 8619=>838, 8620=>838, 8621=>838, 8622=>838, 8623=>838, 8624=>838, 8625=>838, 8626=>838, 8627=>838, 8628=>838, 8629=>838, 8630=>838, 8631=>838, 8632=>838, 8633=>838, 8634=>838, + 8635=>838, 8636=>838, 8637=>838, 8638=>838, 8639=>838, 8640=>838, 8641=>838, 8642=>838, 8643=>838, 8644=>838, 8645=>838, 8646=>838, 8647=>838, 8648=>838, 8649=>838, 8650=>838, + 8651=>838, 8652=>838, 8653=>838, 8654=>838, 8655=>838, 8656=>838, 8657=>838, 8658=>838, 8659=>838, 8660=>838, 8661=>838, 8662=>838, 8663=>838, 8664=>838, 8665=>838, 8666=>838, + 8667=>838, 8668=>838, 8669=>838, 8670=>838, 8671=>838, 8672=>838, 8673=>838, 8674=>838, 8675=>838, 8676=>838, 8677=>838, 8678=>838, 8679=>838, 8680=>838, 8681=>838, 8682=>838, + 8683=>838, 8684=>838, 8685=>838, 8686=>838, 8687=>838, 8688=>838, 8689=>838, 8690=>838, 8691=>838, 8692=>838, 8693=>838, 8694=>838, 8695=>838, 8696=>838, 8697=>838, 8698=>838, + 8699=>838, 8700=>838, 8701=>838, 8702=>838, 8703=>838, 8704=>774, 8705=>696, 8706=>544, 8707=>683, 8708=>683, 8709=>856, 8710=>697, 8711=>697, 8712=>896, 8713=>896, 8714=>750, + 8715=>896, 8716=>896, 8717=>750, 8718=>636, 8719=>787, 8720=>787, 8721=>718, 8722=>838, 8723=>838, 8724=>696, 8725=>167, 8726=>696, 8727=>838, 8728=>626, 8729=>380, 8730=>667, + 8731=>667, 8732=>667, 8733=>669, 8734=>833, 8735=>838, 8736=>896, 8737=>896, 8738=>838, 8739=>500, 8740=>500, 8741=>500, 8742=>500, 8743=>812, 8744=>812, 8745=>812, 8746=>812, + 8747=>610, 8748=>929, 8749=>1295, 8750=>563, 8751=>977, 8752=>1313, 8753=>563, 8754=>563, 8755=>563, 8756=>696, 8757=>696, 8758=>294, 8759=>696, 8760=>838, 8761=>838, 8762=>838, + 8763=>838, 8764=>838, 8765=>838, 8766=>838, 8767=>838, 8768=>375, 8769=>838, 8770=>838, 8771=>838, 8772=>838, 8773=>838, 8774=>838, 8775=>838, 8776=>838, 8777=>838, 8778=>838, + 8779=>838, 8780=>838, 8781=>838, 8782=>838, 8783=>838, 8784=>838, 8785=>838, 8786=>838, 8787=>838, 8788=>1063, 8789=>1063, 8790=>838, 8791=>838, 8792=>838, 8793=>838, 8794=>838, + 8795=>838, 8796=>838, 8797=>838, 8798=>838, 8799=>838, 8800=>838, 8801=>838, 8802=>838, 8803=>838, 8804=>838, 8805=>838, 8806=>838, 8807=>838, 8808=>841, 8809=>841, 8810=>1047, + 8811=>1047, 8812=>500, 8813=>838, 8814=>838, 8815=>838, 8816=>838, 8817=>838, 8818=>838, 8819=>838, 8820=>838, 8821=>838, 8822=>838, 8823=>838, 8824=>838, 8825=>838, 8826=>838, + 8827=>838, 8828=>838, 8829=>838, 8830=>838, 8831=>838, 8832=>838, 8833=>838, 8834=>838, 8835=>838, 8836=>838, 8837=>838, 8838=>838, 8839=>838, 8840=>838, 8841=>838, 8842=>838, + 8843=>838, 8844=>812, 8845=>812, 8846=>812, 8847=>838, 8848=>838, 8849=>838, 8850=>838, 8851=>754, 8852=>754, 8853=>838, 8854=>838, 8855=>838, 8856=>838, 8857=>838, 8858=>838, + 8859=>838, 8860=>838, 8861=>838, 8862=>838, 8863=>838, 8864=>838, 8865=>838, 8866=>914, 8867=>914, 8868=>914, 8869=>914, 8870=>542, 8871=>542, 8872=>914, 8873=>914, 8874=>914, + 8875=>914, 8876=>914, 8877=>914, 8878=>914, 8879=>914, 8882=>838, 8883=>838, 8884=>838, 8885=>838, 8886=>1000, 8887=>1000, 8888=>838, 8889=>838, 8890=>542, 8891=>812, 8892=>812, + 8893=>812, 8896=>843, 8897=>843, 8898=>843, 8899=>843, 8900=>494, 8901=>380, 8902=>626, 8904=>1000, 8905=>1000, 8906=>1000, 8907=>1000, 8908=>1000, 8909=>838, 8918=>838, 8919=>838, + 8920=>1422, 8921=>1422, 8922=>838, 8923=>838, 8924=>838, 8925=>838, 8926=>838, 8927=>838, 8928=>838, 8929=>838, 8930=>838, 8931=>838, 8932=>838, 8933=>838, 8934=>838, 8935=>838, + 8936=>838, 8937=>838, 8938=>838, 8939=>838, 8940=>838, 8941=>838, 8946=>1158, 8947=>896, 8948=>750, 8949=>896, 8950=>896, 8951=>750, 8952=>896, 8953=>896, 8954=>1158, 8955=>896, + 8956=>750, 8957=>896, 8958=>750, 8959=>896, 8962=>716, 8966=>917, 8968=>457, 8969=>457, 8970=>457, 8971=>457, 8976=>838, 8977=>539, 8984=>928, 8985=>838, 8992=>610, 8993=>610, + 8997=>1000, 9000=>1443, 9085=>863, 9115=>500, 9116=>500, 9117=>500, 9118=>500, 9119=>500, 9120=>500, 9121=>500, 9122=>500, 9123=>500, 9124=>500, 9125=>500, 9126=>500, 9127=>750, + 9128=>750, 9129=>750, 9130=>750, 9131=>750, 9132=>750, 9133=>750, 9134=>610, 9166=>838, 9167=>945, 9250=>716, 9251=>716, 9312=>847, 9313=>847, 9314=>847, 9315=>847, 9316=>847, + 9317=>847, 9318=>847, 9319=>847, 9320=>847, 9321=>847, 9600=>769, 9601=>769, 9602=>769, 9603=>769, 9604=>769, 9605=>769, 9606=>769, 9607=>769, 9608=>769, 9609=>769, 9610=>769, + 9611=>769, 9612=>769, 9613=>769, 9614=>769, 9615=>769, 9616=>769, 9617=>769, 9618=>769, 9619=>769, 9620=>769, 9621=>769, 9622=>769, 9623=>769, 9624=>769, 9625=>769, 9626=>769, + 9627=>769, 9628=>769, 9629=>769, 9630=>769, 9631=>769, 9632=>945, 9633=>945, 9634=>945, 9635=>945, 9636=>945, 9637=>945, 9638=>945, 9639=>945, 9640=>945, 9641=>945, 9642=>678, + 9643=>678, 9644=>945, 9645=>945, 9646=>550, 9647=>550, 9648=>769, 9649=>769, 9650=>769, 9651=>769, 9652=>502, 9653=>502, 9654=>769, 9655=>769, 9656=>502, 9657=>502, 9658=>769, + 9659=>769, 9660=>769, 9661=>769, 9662=>502, 9663=>502, 9664=>769, 9665=>769, 9666=>502, 9667=>502, 9668=>769, 9669=>769, 9670=>769, 9671=>769, 9672=>769, 9673=>873, 9674=>494, + 9675=>873, 9676=>873, 9677=>873, 9678=>873, 9679=>873, 9680=>873, 9681=>873, 9682=>873, 9683=>873, 9684=>873, 9685=>873, 9686=>527, 9687=>527, 9688=>840, 9689=>970, 9690=>970, + 9691=>970, 9692=>387, 9693=>387, 9694=>387, 9695=>387, 9696=>769, 9697=>769, 9698=>769, 9699=>769, 9700=>769, 9701=>769, 9702=>639, 9703=>945, 9704=>945, 9705=>945, 9706=>945, + 9707=>945, 9708=>769, 9709=>769, 9710=>769, 9711=>1119, 9712=>945, 9713=>945, 9714=>945, 9715=>945, 9716=>873, 9717=>873, 9718=>873, 9719=>873, 9720=>769, 9721=>769, 9722=>769, + 9723=>830, 9724=>830, 9725=>732, 9726=>732, 9727=>769, 9728=>896, 9729=>1000, 9730=>896, 9731=>896, 9732=>896, 9733=>896, 9734=>896, 9735=>573, 9736=>896, 9737=>896, 9738=>888, + 9739=>888, 9740=>671, 9741=>1013, 9742=>1246, 9743=>1250, 9744=>896, 9745=>896, 9746=>896, 9747=>532, 9748=>896, 9749=>896, 9750=>896, 9751=>896, 9752=>896, 9753=>896, 9754=>896, + 9755=>896, 9756=>896, 9757=>609, 9758=>896, 9759=>609, 9760=>896, 9761=>896, 9762=>896, 9763=>896, 9764=>669, 9765=>746, 9766=>649, 9767=>784, 9768=>545, 9769=>896, 9770=>896, + 9771=>896, 9772=>710, 9773=>896, 9774=>896, 9775=>896, 9776=>896, 9777=>896, 9778=>896, 9779=>896, 9780=>896, 9781=>896, 9782=>896, 9783=>896, 9784=>896, 9785=>896, 9786=>896, + 9787=>896, 9788=>896, 9789=>896, 9790=>896, 9791=>614, 9792=>731, 9793=>731, 9794=>896, 9795=>896, 9796=>896, 9797=>896, 9798=>896, 9799=>896, 9800=>896, 9801=>896, 9802=>896, + 9803=>896, 9804=>896, 9805=>896, 9806=>896, 9807=>896, 9808=>896, 9809=>896, 9810=>896, 9811=>896, 9812=>896, 9813=>896, 9814=>896, 9815=>896, 9816=>896, 9817=>896, 9818=>896, + 9819=>896, 9820=>896, 9821=>896, 9822=>896, 9823=>896, 9824=>896, 9825=>896, 9826=>896, 9827=>896, 9828=>896, 9829=>896, 9830=>896, 9831=>896, 9832=>896, 9833=>472, 9834=>638, + 9835=>896, 9836=>896, 9837=>472, 9838=>357, 9839=>484, 9840=>748, 9841=>766, 9842=>896, 9843=>896, 9844=>896, 9845=>896, 9846=>896, 9847=>896, 9848=>896, 9849=>896, 9850=>896, + 9851=>896, 9852=>896, 9853=>896, 9854=>896, 9855=>896, 9856=>869, 9857=>869, 9858=>869, 9859=>869, 9860=>869, 9861=>869, 9862=>896, 9863=>896, 9864=>896, 9865=>896, 9866=>896, + 9867=>896, 9868=>896, 9869=>896, 9870=>896, 9871=>896, 9872=>896, 9873=>896, 9874=>896, 9875=>896, 9876=>896, 9877=>541, 9878=>896, 9879=>896, 9880=>896, 9881=>896, 9882=>896, + 9883=>896, 9884=>896, 9888=>896, 9889=>702, 9890=>838, 9891=>838, 9892=>838, 9893=>838, 9894=>838, 9895=>838, 9896=>838, 9897=>838, 9898=>838, 9899=>838, 9900=>838, 9901=>838, + 9902=>838, 9903=>838, 9904=>844, 9905=>838, 9906=>731, 9985=>838, 9986=>838, 9987=>838, 9988=>838, 9990=>838, 9991=>838, 9992=>838, 9993=>838, 9996=>838, 9997=>838, 9998=>838, + 9999=>838, 10000=>838, 10001=>838, 10002=>838, 10003=>838, 10004=>838, 10005=>838, 10006=>838, 10007=>838, 10008=>838, 10009=>838, 10010=>838, 10011=>838, 10012=>838, 10013=>838, 10014=>838, + 10015=>838, 10016=>838, 10017=>838, 10018=>838, 10019=>838, 10020=>838, 10021=>838, 10022=>838, 10023=>838, 10025=>838, 10026=>838, 10027=>838, 10028=>838, 10029=>838, 10030=>838, 10031=>838, + 10032=>838, 10033=>838, 10034=>838, 10035=>838, 10036=>838, 10037=>838, 10038=>838, 10039=>838, 10040=>838, 10041=>838, 10042=>838, 10043=>838, 10044=>838, 10045=>838, 10046=>838, 10047=>838, + 10048=>838, 10049=>838, 10050=>838, 10051=>838, 10052=>838, 10053=>838, 10054=>838, 10055=>838, 10056=>838, 10057=>838, 10058=>838, 10059=>838, 10061=>896, 10063=>896, 10064=>896, 10065=>896, + 10066=>896, 10070=>896, 10072=>838, 10073=>838, 10074=>838, 10075=>322, 10076=>322, 10077=>538, 10078=>538, 10081=>838, 10082=>838, 10083=>838, 10084=>838, 10085=>838, 10086=>838, 10087=>838, + 10088=>838, 10089=>838, 10090=>838, 10091=>838, 10092=>838, 10093=>838, 10094=>838, 10095=>838, 10096=>838, 10097=>838, 10098=>838, 10099=>838, 10100=>838, 10101=>838, 10102=>847, 10103=>847, + 10104=>847, 10105=>847, 10106=>847, 10107=>847, 10108=>847, 10109=>847, 10110=>847, 10111=>847, 10112=>838, 10113=>838, 10114=>838, 10115=>838, 10116=>838, 10117=>838, 10118=>838, 10119=>838, + 10120=>838, 10121=>838, 10122=>838, 10123=>838, 10124=>838, 10125=>838, 10126=>838, 10127=>838, 10128=>838, 10129=>838, 10130=>838, 10131=>838, 10132=>838, 10136=>838, 10137=>838, 10138=>838, + 10139=>838, 10140=>838, 10141=>838, 10142=>838, 10143=>838, 10144=>838, 10145=>838, 10146=>838, 10147=>838, 10148=>838, 10149=>838, 10150=>838, 10151=>838, 10152=>838, 10153=>838, 10154=>838, + 10155=>838, 10156=>838, 10157=>838, 10158=>838, 10159=>838, 10161=>838, 10162=>838, 10163=>838, 10164=>838, 10165=>838, 10166=>838, 10167=>838, 10168=>838, 10169=>838, 10170=>838, 10171=>838, + 10172=>838, 10173=>838, 10174=>838, 10208=>494, 10214=>487, 10215=>487, 10216=>457, 10217=>457, 10218=>721, 10219=>721, 10224=>838, 10225=>838, 10226=>838, 10227=>838, 10228=>1157, 10229=>1434, + 10230=>1434, 10231=>1434, 10232=>1434, 10233=>1434, 10234=>1434, 10235=>1434, 10236=>1434, 10237=>1434, 10238=>1434, 10239=>1434, 10240=>781, 10241=>781, 10242=>781, 10243=>781, 10244=>781, 10245=>781, + 10246=>781, 10247=>781, 10248=>781, 10249=>781, 10250=>781, 10251=>781, 10252=>781, 10253=>781, 10254=>781, 10255=>781, 10256=>781, 10257=>781, 10258=>781, 10259=>781, 10260=>781, 10261=>781, + 10262=>781, 10263=>781, 10264=>781, 10265=>781, 10266=>781, 10267=>781, 10268=>781, 10269=>781, 10270=>781, 10271=>781, 10272=>781, 10273=>781, 10274=>781, 10275=>781, 10276=>781, 10277=>781, + 10278=>781, 10279=>781, 10280=>781, 10281=>781, 10282=>781, 10283=>781, 10284=>781, 10285=>781, 10286=>781, 10287=>781, 10288=>781, 10289=>781, 10290=>781, 10291=>781, 10292=>781, 10293=>781, + 10294=>781, 10295=>781, 10296=>781, 10297=>781, 10298=>781, 10299=>781, 10300=>781, 10301=>781, 10302=>781, 10303=>781, 10304=>781, 10305=>781, 10306=>781, 10307=>781, 10308=>781, 10309=>781, + 10310=>781, 10311=>781, 10312=>781, 10313=>781, 10314=>781, 10315=>781, 10316=>781, 10317=>781, 10318=>781, 10319=>781, 10320=>781, 10321=>781, 10322=>781, 10323=>781, 10324=>781, 10325=>781, + 10326=>781, 10327=>781, 10328=>781, 10329=>781, 10330=>781, 10331=>781, 10332=>781, 10333=>781, 10334=>781, 10335=>781, 10336=>781, 10337=>781, 10338=>781, 10339=>781, 10340=>781, 10341=>781, + 10342=>781, 10343=>781, 10344=>781, 10345=>781, 10346=>781, 10347=>781, 10348=>781, 10349=>781, 10350=>781, 10351=>781, 10352=>781, 10353=>781, 10354=>781, 10355=>781, 10356=>781, 10357=>781, + 10358=>781, 10359=>781, 10360=>781, 10361=>781, 10362=>781, 10363=>781, 10364=>781, 10365=>781, 10366=>781, 10367=>781, 10368=>781, 10369=>781, 10370=>781, 10371=>781, 10372=>781, 10373=>781, + 10374=>781, 10375=>781, 10376=>781, 10377=>781, 10378=>781, 10379=>781, 10380=>781, 10381=>781, 10382=>781, 10383=>781, 10384=>781, 10385=>781, 10386=>781, 10387=>781, 10388=>781, 10389=>781, + 10390=>781, 10391=>781, 10392=>781, 10393=>781, 10394=>781, 10395=>781, 10396=>781, 10397=>781, 10398=>781, 10399=>781, 10400=>781, 10401=>781, 10402=>781, 10403=>781, 10404=>781, 10405=>781, + 10406=>781, 10407=>781, 10408=>781, 10409=>781, 10410=>781, 10411=>781, 10412=>781, 10413=>781, 10414=>781, 10415=>781, 10416=>781, 10417=>781, 10418=>781, 10419=>781, 10420=>781, 10421=>781, + 10422=>781, 10423=>781, 10424=>781, 10425=>781, 10426=>781, 10427=>781, 10428=>781, 10429=>781, 10430=>781, 10431=>781, 10432=>781, 10433=>781, 10434=>781, 10435=>781, 10436=>781, 10437=>781, + 10438=>781, 10439=>781, 10440=>781, 10441=>781, 10442=>781, 10443=>781, 10444=>781, 10445=>781, 10446=>781, 10447=>781, 10448=>781, 10449=>781, 10450=>781, 10451=>781, 10452=>781, 10453=>781, + 10454=>781, 10455=>781, 10456=>781, 10457=>781, 10458=>781, 10459=>781, 10460=>781, 10461=>781, 10462=>781, 10463=>781, 10464=>781, 10465=>781, 10466=>781, 10467=>781, 10468=>781, 10469=>781, + 10470=>781, 10471=>781, 10472=>781, 10473=>781, 10474=>781, 10475=>781, 10476=>781, 10477=>781, 10478=>781, 10479=>781, 10480=>781, 10481=>781, 10482=>781, 10483=>781, 10484=>781, 10485=>781, + 10486=>781, 10487=>781, 10488=>781, 10489=>781, 10490=>781, 10491=>781, 10492=>781, 10493=>781, 10494=>781, 10495=>781, 10502=>838, 10503=>838, 10506=>838, 10507=>838, 10560=>838, 10561=>838, + 10702=>838, 10703=>1046, 10704=>1046, 10705=>1000, 10706=>1000, 10707=>1000, 10708=>1000, 10709=>1000, 10731=>494, 10752=>1000, 10753=>1000, 10754=>1000, 10764=>1661, 10765=>563, 10766=>563, 10767=>563, + 10768=>563, 10769=>563, 10770=>563, 10771=>563, 10772=>563, 10773=>563, 10774=>563, 10775=>563, 10776=>563, 10777=>563, 10778=>563, 10779=>563, 10780=>563, 10877=>838, 10878=>838, 10879=>838, + 10880=>838, 10881=>838, 10882=>838, 10883=>838, 10884=>838, 10885=>838, 10886=>838, 10887=>838, 10888=>838, 10889=>838, 10890=>838, 10891=>838, 10892=>838, 10893=>838, 10894=>838, 10895=>838, + 10896=>838, 10897=>838, 10898=>838, 10899=>838, 10900=>838, 10901=>838, 10902=>838, 10903=>838, 10904=>838, 10905=>838, 10906=>838, 10907=>838, 10908=>838, 10909=>838, 10910=>838, 10911=>838, + 10912=>838, 10926=>838, 10927=>838, 10928=>838, 10929=>838, 10930=>838, 10931=>838, 10932=>838, 10933=>838, 10934=>838, 10935=>838, 10936=>838, 10937=>838, 10938=>838, 11001=>838, 11002=>838, + 11008=>838, 11009=>838, 11010=>838, 11011=>838, 11012=>838, 11013=>838, 11014=>838, 11015=>838, 11016=>838, 11017=>838, 11018=>838, 11019=>838, 11020=>838, 11021=>838, 11022=>838, 11023=>838, + 11024=>838, 11025=>838, 11026=>945, 11027=>945, 11028=>945, 11029=>945, 11030=>769, 11031=>769, 11032=>769, 11033=>769, 11034=>945, 11040=>869, 11041=>873, 11042=>873, 11043=>873, 11360=>637, + 11361=>360, 11362=>637, 11363=>733, 11364=>770, 11365=>675, 11366=>478, 11367=>956, 11368=>712, 11369=>775, 11370=>665, 11371=>725, 11372=>582, 11380=>652, 11381=>649, 11382=>516, 11383=>782, + 61960=>860, 62047=>720, 62917=>687, 64256=>833, 64257=>787, 64258=>787, 64259=>1138, 64260=>1139, 64261=>808, 64262=>1020, 64275=>1388, 64276=>1384, 64277=>1378, 64278=>1384, 64279=>1713, 64285=>372, + 64287=>692, 64288=>720, 64297=>838, 64298=>975, 64299=>975, 64300=>975, 64301=>975, 64302=>751, 64303=>751, 64304=>751, 64305=>731, 64306=>502, 64307=>684, 64308=>778, 64309=>467, 64310=>521, + 64312=>830, 64313=>467, 64314=>778, 64315=>754, 64316=>723, 64318=>868, 64320=>532, 64321=>830, 64323=>827, 64324=>866, 64326=>727, 64327=>814, 64328=>778, 64329=>975, 64330=>822, 64331=>372, + 64332=>731, 64333=>754, 64334=>866, 65024=>0, 65025=>0, 65026=>0, 65027=>0, 65028=>0, 65029=>0, 65030=>0, 65031=>0, 65032=>0, 65033=>0, 65034=>0, 65035=>0, 65036=>0, + 65037=>0, 65038=>0, 65039=>0, 65533=>1113}; + font[:enc]=''; + font[:diff]=''; + font[:file]='DejaVuSans-BoldOblique.z'; + font[:ctg]='DejaVuSans-BoldOblique.ctg.z'; + font[:originalsize]=468340; +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSerif-Bold.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSerif-Bold.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSerif-Bold.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSerif-Bold.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSerif-BoldOblique.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSerif-BoldOblique.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSerif-BoldOblique.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSerif-BoldOblique.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSerif-Oblique.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSerif-Oblique.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSerif-Oblique.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSerif-Oblique.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSerif.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSerif.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSerif.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/DejaVuSerif.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,130 @@ +TCPDFFontDescriptor.define('DejaVuSerif') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='DejaVuSerif'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>32,'FontBBox'=>'[-770 -401 1679 1242]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600}; + font[:up]=-42; + font[:ut]=44; + font[:cw]={ + 0=>600, 32=>318, 33=>402, 34=>460, 35=>838, 36=>636, 37=>950, 38=>890, 39=>275, 40=>390, 41=>390, 42=>500, 43=>838, 44=>318, 45=>338, 46=>318, + 47=>337, 48=>636, 49=>636, 50=>636, 51=>636, 52=>636, 53=>636, 54=>636, 55=>636, 56=>636, 57=>636, 58=>337, 59=>337, 60=>838, 61=>838, 62=>838, + 63=>536, 64=>1000, 65=>722, 66=>735, 67=>765, 68=>802, 69=>730, 70=>694, 71=>799, 72=>872, 73=>395, 74=>401, 75=>747, 76=>664, 77=>1024, 78=>875, + 79=>820, 80=>673, 81=>820, 82=>753, 83=>685, 84=>667, 85=>843, 86=>722, 87=>1028, 88=>712, 89=>660, 90=>695, 91=>390, 92=>337, 93=>390, 94=>838, + 95=>500, 96=>500, 97=>596, 98=>640, 99=>560, 100=>640, 101=>592, 102=>370, 103=>640, 104=>644, 105=>320, 106=>310, 107=>606, 108=>320, 109=>948, 110=>644, + 111=>602, 112=>640, 113=>640, 114=>478, 115=>513, 116=>402, 117=>644, 118=>565, 119=>856, 120=>564, 121=>565, 122=>527, 123=>636, 124=>337, 125=>636, 126=>838, + 8364=>636, 1027=>719, 8218=>318, 402=>370, 8222=>518, 8230=>1000, 8224=>500, 8225=>500, 710=>500, 8240=>1342, 352=>685, 8249=>400, 338=>1137, 1036=>774, 381=>695, 1039=>872, + 8216=>318, 8217=>318, 8220=>511, 8221=>511, 8226=>590, 8211=>500, 8212=>1000, 732=>500, 8482=>1000, 353=>513, 8250=>400, 339=>989, 1116=>625, 382=>527, 376=>660, 160=>318, + 161=>402, 162=>636, 163=>636, 164=>636, 165=>636, 166=>337, 167=>500, 168=>500, 169=>1000, 170=>475, 171=>612, 172=>838, 173=>338, 174=>1000, 175=>500, 176=>500, + 177=>838, 178=>401, 179=>401, 180=>500, 181=>650, 182=>636, 183=>318, 184=>500, 185=>401, 186=>470, 187=>612, 188=>969, 189=>969, 190=>969, 191=>536, 192=>722, + 193=>722, 194=>722, 195=>722, 196=>722, 197=>722, 198=>1001, 199=>765, 200=>730, 201=>730, 202=>730, 203=>730, 204=>395, 205=>395, 206=>395, 207=>395, 208=>807, + 209=>875, 210=>820, 211=>820, 212=>820, 213=>820, 214=>820, 215=>838, 216=>820, 217=>843, 218=>843, 219=>843, 220=>843, 221=>660, 222=>676, 223=>668, 224=>596, + 225=>596, 226=>596, 227=>596, 228=>596, 229=>596, 230=>940, 231=>560, 232=>592, 233=>592, 234=>592, 235=>592, 236=>320, 237=>320, 238=>320, 239=>320, 240=>602, + 241=>644, 242=>602, 243=>602, 244=>602, 245=>602, 246=>602, 247=>838, 248=>602, 249=>644, 250=>644, 251=>644, 252=>644, 253=>565, 254=>640, 255=>565, 256=>722, + 257=>596, 258=>722, 259=>596, 260=>722, 261=>596, 262=>765, 263=>560, 264=>765, 265=>560, 266=>765, 267=>560, 268=>765, 269=>560, 270=>802, 271=>640, 272=>807, + 273=>640, 274=>730, 275=>592, 276=>730, 277=>592, 278=>730, 279=>592, 280=>730, 281=>592, 282=>730, 283=>592, 284=>799, 285=>640, 286=>799, 287=>640, 288=>799, + 289=>640, 290=>799, 291=>640, 292=>872, 293=>644, 294=>872, 295=>644, 296=>395, 297=>320, 298=>395, 299=>320, 300=>395, 301=>320, 302=>395, 303=>320, 304=>395, + 305=>320, 306=>801, 307=>533, 308=>401, 309=>310, 310=>747, 311=>606, 312=>606, 313=>664, 314=>320, 315=>664, 316=>320, 317=>664, 318=>400, 319=>671, 320=>465, + 321=>669, 322=>324, 323=>875, 324=>644, 325=>875, 326=>644, 327=>875, 328=>644, 329=>866, 330=>875, 331=>644, 332=>820, 333=>602, 334=>820, 335=>602, 336=>820, + 337=>602, 340=>753, 341=>478, 342=>753, 343=>478, 344=>753, 345=>478, 346=>685, 347=>513, 348=>685, 349=>513, 350=>685, 351=>513, 354=>667, 355=>402, 356=>667, + 357=>402, 358=>667, 359=>402, 360=>843, 361=>644, 362=>843, 363=>644, 364=>843, 365=>644, 366=>843, 367=>644, 368=>843, 369=>644, 370=>843, 371=>644, 372=>1028, + 373=>856, 374=>660, 375=>565, 377=>695, 378=>527, 379=>695, 380=>527, 383=>370, 384=>640, 385=>735, 386=>735, 387=>640, 388=>735, 389=>640, 390=>765, 391=>765, + 392=>560, 393=>807, 394=>802, 395=>735, 396=>640, 397=>602, 398=>730, 399=>820, 400=>636, 401=>694, 403=>799, 404=>712, 405=>932, 406=>395, 407=>395, 408=>747, + 409=>606, 410=>320, 411=>634, 412=>948, 413=>875, 414=>644, 415=>820, 416=>820, 417=>602, 418=>1040, 419=>807, 420=>673, 421=>640, 422=>753, 423=>685, 424=>513, + 425=>707, 426=>324, 427=>402, 428=>667, 429=>402, 430=>667, 431=>843, 432=>644, 433=>829, 434=>760, 435=>738, 436=>663, 437=>695, 438=>527, 439=>564, 440=>564, + 441=>564, 443=>636, 444=>687, 445=>564, 446=>536, 448=>295, 449=>492, 450=>459, 451=>295, 452=>1497, 453=>1329, 454=>1167, 455=>1065, 456=>974, 457=>630, 458=>1276, + 459=>1185, 460=>954, 461=>722, 462=>596, 463=>395, 464=>320, 465=>820, 466=>602, 467=>843, 468=>644, 469=>843, 470=>644, 471=>843, 472=>644, 473=>843, 474=>644, + 475=>843, 476=>644, 477=>592, 478=>722, 479=>596, 480=>722, 481=>596, 482=>1001, 483=>940, 484=>848, 485=>640, 486=>799, 487=>640, 488=>747, 489=>606, 490=>820, + 491=>602, 492=>820, 493=>602, 494=>564, 495=>564, 496=>320, 497=>1497, 498=>1329, 499=>1167, 500=>799, 501=>640, 502=>1154, 504=>875, 505=>644, 506=>722, 507=>596, + 508=>1001, 509=>940, 510=>820, 511=>602, 512=>722, 513=>596, 514=>722, 515=>596, 516=>730, 517=>592, 518=>730, 519=>592, 520=>395, 521=>320, 522=>395, 523=>320, + 524=>820, 525=>602, 526=>820, 527=>602, 528=>753, 529=>478, 530=>753, 531=>478, 532=>843, 533=>644, 534=>843, 535=>644, 536=>685, 537=>513, 538=>667, 539=>402, + 542=>872, 543=>644, 545=>814, 548=>695, 549=>527, 550=>722, 551=>596, 552=>730, 553=>592, 554=>820, 555=>602, 556=>820, 557=>602, 558=>820, 559=>602, 560=>820, + 561=>602, 562=>660, 563=>565, 564=>500, 565=>832, 566=>494, 567=>310, 568=>960, 569=>960, 570=>722, 571=>765, 572=>560, 573=>664, 574=>667, 575=>513, 576=>527, + 577=>583, 578=>464, 581=>722, 592=>596, 593=>640, 594=>640, 595=>640, 596=>560, 597=>560, 598=>647, 599=>683, 600=>592, 601=>592, 602=>843, 603=>518, 604=>509, + 605=>773, 606=>613, 607=>315, 608=>683, 609=>640, 610=>544, 611=>712, 612=>564, 613=>644, 614=>644, 615=>644, 616=>320, 617=>392, 618=>320, 619=>380, 620=>454, + 621=>363, 622=>704, 623=>948, 624=>948, 625=>948, 626=>644, 627=>694, 628=>646, 629=>602, 630=>790, 631=>647, 632=>602, 633=>501, 634=>501, 635=>551, 636=>478, + 637=>478, 638=>453, 639=>453, 640=>594, 641=>594, 642=>513, 643=>271, 644=>370, 645=>487, 646=>324, 647=>402, 648=>402, 649=>644, 650=>620, 651=>608, 652=>565, + 653=>856, 654=>565, 655=>655, 656=>597, 657=>560, 658=>564, 659=>560, 660=>536, 661=>536, 662=>536, 663=>513, 664=>820, 665=>563, 666=>613, 667=>654, 668=>667, + 669=>366, 670=>606, 671=>646, 672=>683, 673=>536, 674=>536, 675=>996, 676=>1033, 677=>998, 678=>809, 679=>598, 680=>782, 681=>894, 682=>646, 683=>676, 684=>598, + 685=>443, 686=>781, 687=>767, 688=>433, 689=>430, 690=>264, 691=>347, 692=>347, 693=>430, 694=>392, 695=>585, 696=>423, 697=>278, 699=>318, 700=>318, 701=>318, + 702=>307, 703=>307, 704=>280, 705=>281, 711=>500, 712=>275, 713=>500, 716=>275, 720=>337, 721=>337, 722=>307, 723=>307, 726=>329, 728=>500, 729=>500, 730=>500, + 731=>500, 733=>500, 734=>417, 736=>447, 737=>243, 738=>337, 739=>424, 740=>281, 741=>602, 742=>602, 743=>602, 744=>602, 745=>602, 750=>484, 768=>0, 769=>0, + 770=>0, 771=>0, 772=>0, 773=>0, 774=>0, 775=>0, 776=>0, 777=>0, 778=>0, 779=>0, 780=>0, 781=>0, 782=>0, 783=>0, 784=>0, 785=>0, + 786=>0, 787=>0, 788=>0, 789=>0, 790=>0, 791=>0, 792=>0, 793=>0, 794=>0, 795=>0, 796=>0, 797=>0, 798=>0, 799=>0, 800=>0, 801=>0, + 802=>0, 803=>0, 804=>0, 805=>0, 806=>0, 807=>0, 808=>0, 809=>0, 810=>0, 811=>0, 812=>0, 813=>0, 814=>0, 815=>0, 816=>0, 817=>0, + 818=>0, 819=>0, 820=>0, 821=>0, 822=>0, 823=>0, 824=>0, 825=>0, 826=>0, 827=>0, 828=>0, 829=>0, 830=>0, 831=>0, 835=>0, 847=>0, + 856=>0, 865=>0, 884=>278, 885=>278, 890=>500, 894=>337, 900=>500, 901=>500, 902=>722, 903=>318, 904=>900, 905=>1039, 906=>562, 908=>835, 910=>897, 911=>853, + 912=>392, 913=>722, 914=>735, 915=>694, 916=>722, 917=>730, 918=>695, 919=>872, 920=>820, 921=>395, 922=>747, 923=>722, 924=>1024, 925=>875, 926=>704, 927=>820, + 928=>872, 929=>673, 931=>707, 932=>667, 933=>660, 934=>820, 935=>712, 936=>877, 937=>829, 938=>395, 939=>660, 940=>675, 941=>518, 942=>599, 943=>392, 944=>608, + 945=>675, 946=>578, 947=>598, 948=>602, 949=>518, 950=>542, 951=>599, 952=>602, 953=>392, 954=>625, 955=>634, 956=>650, 957=>608, 958=>551, 959=>602, 960=>657, + 961=>588, 962=>560, 963=>683, 964=>553, 965=>608, 966=>700, 967=>606, 968=>784, 969=>815, 970=>392, 971=>608, 972=>602, 973=>608, 974=>815, 976=>583, 977=>715, + 978=>687, 979=>874, 980=>687, 981=>682, 982=>815, 983=>624, 984=>820, 985=>602, 986=>765, 987=>560, 988=>694, 989=>463, 990=>590, 991=>660, 992=>782, 993=>577, + 1008=>624, 1009=>588, 1010=>560, 1011=>310, 1012=>820, 1013=>560, 1014=>560, 1015=>676, 1016=>640, 1017=>765, 1018=>1024, 1019=>708, 1020=>588, 1021=>765, 1022=>765, 1023=>765, + 1024=>754, 1025=>709, 1026=>799, 1028=>765, 1029=>685, 1030=>395, 1031=>395, 1032=>401, 1033=>1084, 1034=>1118, 1035=>872, 1037=>903, 1038=>723, 1040=>757, 1041=>735, 1042=>735, + 1043=>662, 1044=>813, 1045=>730, 1046=>1124, 1047=>623, 1048=>872, 1049=>872, 1050=>774, 1051=>834, 1052=>1024, 1053=>872, 1054=>820, 1055=>872, 1056=>673, 1057=>765, 1058=>667, + 1059=>723, 1060=>830, 1061=>712, 1062=>872, 1063=>773, 1064=>1141, 1065=>1141, 1066=>794, 1067=>984, 1068=>674, 1069=>765, 1070=>1193, 1071=>808, 1072=>596, 1073=>602, 1074=>563, + 1075=>524, 1076=>616, 1077=>592, 1078=>920, 1079=>545, 1080=>667, 1081=>667, 1082=>625, 1083=>635, 1084=>778, 1085=>667, 1086=>602, 1087=>667, 1088=>640, 1089=>560, 1090=>553, + 1091=>588, 1092=>783, 1093=>564, 1094=>643, 1095=>661, 1096=>930, 1097=>930, 1098=>636, 1099=>796, 1100=>544, 1101=>560, 1102=>871, 1103=>631, 1104=>592, 1105=>592, 1106=>624, + 1107=>524, 1108=>560, 1109=>513, 1110=>320, 1111=>320, 1112=>310, 1113=>843, 1114=>860, 1115=>644, 1117=>667, 1118=>588, 1119=>656, 1122=>762, 1123=>603, 1138=>820, 1139=>552, + 1140=>859, 1141=>678, 1164=>690, 1165=>492, 1168=>672, 1169=>529, 1170=>694, 1171=>538, 1172=>728, 1173=>614, 1174=>1124, 1175=>920, 1176=>636, 1177=>537, 1178=>774, 1179=>606, + 1182=>774, 1183=>606, 1184=>891, 1185=>668, 1186=>872, 1187=>690, 1188=>1139, 1189=>852, 1190=>1205, 1191=>941, 1194=>765, 1195=>560, 1196=>667, 1197=>553, 1198=>660, 1199=>565, + 1202=>712, 1203=>564, 1204=>1079, 1205=>899, 1206=>749, 1207=>690, 1210=>749, 1211=>644, 1216=>395, 1217=>1124, 1218=>920, 1219=>747, 1220=>606, 1223=>872, 1224=>667, 1227=>749, + 1228=>667, 1231=>320, 1232=>757, 1233=>596, 1234=>757, 1235=>596, 1236=>1001, 1237=>940, 1238=>730, 1239=>592, 1240=>820, 1241=>592, 1242=>820, 1243=>592, 1244=>1124, 1245=>920, + 1246=>623, 1247=>545, 1248=>564, 1249=>564, 1250=>872, 1251=>667, 1252=>872, 1253=>667, 1254=>820, 1255=>602, 1256=>820, 1257=>602, 1258=>820, 1259=>602, 1260=>765, 1261=>560, + 1262=>723, 1263=>588, 1264=>723, 1265=>588, 1266=>723, 1267=>588, 1268=>773, 1269=>661, 1270=>662, 1271=>524, 1272=>984, 1273=>796, 7426=>940, 7432=>509, 7433=>320, 7444=>989, + 7446=>602, 7447=>602, 7453=>737, 7454=>948, 7455=>948, 7491=>386, 7492=>247, 7493=>400, 7494=>618, 7495=>400, 7496=>400, 7497=>387, 7498=>387, 7499=>340, 7500=>340, 7501=>400, + 7502=>175, 7503=>365, 7504=>613, 7505=>399, 7506=>385, 7507=>346, 7508=>385, 7509=>385, 7510=>400, 7511=>247, 7512=>399, 7513=>464, 7514=>613, 7515=>373, 7543=>640, 7547=>372, + 7557=>320, 7579=>400, 7580=>346, 7581=>346, 7582=>385, 7583=>340, 7584=>222, 7585=>229, 7586=>400, 7587=>399, 7588=>234, 7589=>244, 7590=>234, 7591=>234, 7592=>230, 7593=>175, + 7594=>175, 7595=>367, 7596=>613, 7597=>613, 7598=>407, 7599=>404, 7600=>399, 7601=>385, 7602=>385, 7603=>328, 7604=>211, 7605=>247, 7606=>399, 7607=>389, 7609=>376, 7610=>373, + 7611=>331, 7612=>331, 7613=>331, 7614=>364, 7615=>385, 7680=>722, 7681=>596, 7682=>735, 7683=>640, 7684=>735, 7685=>640, 7686=>735, 7687=>640, 7688=>765, 7689=>560, 7690=>802, + 7691=>640, 7692=>802, 7693=>640, 7694=>802, 7695=>640, 7696=>802, 7697=>640, 7698=>802, 7699=>640, 7700=>730, 7701=>592, 7702=>730, 7703=>592, 7704=>730, 7705=>592, 7706=>730, + 7707=>592, 7710=>694, 7711=>370, 7712=>799, 7713=>640, 7714=>872, 7715=>644, 7716=>872, 7717=>644, 7718=>872, 7719=>644, 7720=>872, 7721=>644, 7722=>872, 7723=>644, 7724=>395, + 7725=>320, 7728=>747, 7729=>606, 7730=>747, 7731=>606, 7732=>747, 7733=>606, 7734=>664, 7735=>320, 7736=>664, 7737=>320, 7738=>664, 7739=>320, 7740=>664, 7741=>320, 7742=>1024, + 7743=>948, 7744=>1024, 7745=>948, 7746=>1024, 7747=>948, 7748=>875, 7749=>644, 7750=>875, 7751=>644, 7752=>875, 7753=>644, 7754=>875, 7755=>644, 7760=>820, 7761=>602, 7762=>820, + 7763=>602, 7764=>673, 7765=>640, 7766=>673, 7767=>640, 7768=>753, 7769=>478, 7770=>753, 7771=>478, 7772=>753, 7773=>478, 7774=>753, 7775=>478, 7776=>685, 7777=>513, 7778=>685, + 7779=>513, 7784=>685, 7785=>513, 7786=>667, 7787=>402, 7788=>667, 7789=>402, 7790=>667, 7791=>402, 7792=>667, 7793=>402, 7794=>843, 7795=>644, 7796=>843, 7797=>644, 7798=>843, + 7799=>644, 7800=>843, 7801=>644, 7802=>843, 7803=>644, 7804=>722, 7805=>565, 7806=>722, 7807=>565, 7808=>1028, 7809=>856, 7810=>1028, 7811=>856, 7812=>1028, 7813=>856, 7814=>1028, + 7815=>856, 7816=>1028, 7817=>856, 7818=>712, 7819=>564, 7820=>712, 7821=>564, 7822=>660, 7823=>565, 7824=>695, 7825=>527, 7826=>695, 7827=>527, 7828=>695, 7829=>527, 7830=>644, + 7831=>402, 7832=>856, 7833=>565, 7834=>903, 7835=>513, 7840=>722, 7841=>596, 7842=>722, 7843=>596, 7852=>722, 7853=>596, 7854=>722, 7855=>596, 7856=>722, 7857=>596, 7858=>722, + 7859=>596, 7860=>722, 7861=>596, 7862=>722, 7863=>596, 7864=>730, 7865=>592, 7866=>730, 7867=>592, 7868=>730, 7869=>592, 7878=>730, 7879=>592, 7880=>395, 7881=>320, 7882=>395, + 7883=>320, 7884=>820, 7885=>602, 7886=>820, 7887=>602, 7896=>820, 7897=>602, 7908=>843, 7909=>644, 7910=>843, 7911=>644, 7922=>660, 7923=>565, 7924=>660, 7925=>565, 7926=>660, + 7927=>565, 7928=>660, 7929=>565, 7936=>675, 7937=>675, 7938=>675, 7939=>675, 7940=>675, 7941=>675, 7942=>675, 7943=>675, 7944=>722, 7945=>722, 7946=>869, 7947=>869, 7948=>734, + 7949=>763, 7950=>722, 7951=>722, 7952=>537, 7953=>537, 7954=>537, 7955=>537, 7956=>537, 7957=>537, 7960=>853, 7961=>841, 7962=>1067, 7963=>1077, 7964=>1008, 7965=>1035, 7968=>599, + 7969=>599, 7970=>599, 7971=>599, 7972=>599, 7973=>599, 7974=>599, 7975=>599, 7976=>998, 7977=>992, 7978=>1212, 7979=>1224, 7980=>1159, 7981=>1183, 7982=>1098, 7983=>1095, 7984=>392, + 7985=>392, 7986=>392, 7987=>392, 7988=>392, 7989=>392, 7990=>392, 7991=>392, 7992=>521, 7993=>512, 7994=>735, 7995=>738, 7996=>679, 7997=>706, 7998=>624, 7999=>615, 8000=>602, + 8001=>602, 8002=>602, 8003=>602, 8004=>602, 8005=>602, 8008=>820, 8009=>859, 8010=>1120, 8011=>1127, 8012=>937, 8013=>964, 8016=>608, 8017=>608, 8018=>608, 8019=>608, 8020=>608, + 8021=>608, 8022=>608, 8023=>608, 8025=>851, 8027=>1079, 8029=>1044, 8031=>953, 8032=>815, 8033=>815, 8034=>815, 8035=>815, 8036=>815, 8037=>815, 8038=>815, 8039=>815, 8040=>829, + 8041=>870, 8042=>1131, 8043=>1137, 8044=>946, 8045=>976, 8046=>938, 8047=>970, 8048=>675, 8049=>675, 8050=>537, 8051=>537, 8052=>599, 8053=>599, 8054=>392, 8055=>392, 8056=>602, + 8057=>602, 8058=>608, 8059=>608, 8060=>815, 8061=>815, 8064=>675, 8065=>675, 8066=>675, 8067=>675, 8068=>675, 8069=>675, 8070=>675, 8071=>675, 8072=>722, 8073=>722, 8074=>869, + 8075=>869, 8076=>734, 8077=>763, 8078=>722, 8079=>722, 8080=>599, 8081=>599, 8082=>599, 8083=>599, 8084=>599, 8085=>599, 8086=>599, 8087=>599, 8088=>998, 8089=>992, 8090=>1212, + 8091=>1224, 8092=>1159, 8093=>1183, 8094=>1098, 8095=>1095, 8096=>815, 8097=>815, 8098=>815, 8099=>815, 8100=>815, 8101=>815, 8102=>815, 8103=>815, 8104=>829, 8105=>870, 8106=>1131, + 8107=>1137, 8108=>946, 8109=>976, 8110=>938, 8111=>970, 8112=>675, 8113=>675, 8114=>675, 8115=>675, 8116=>675, 8118=>675, 8119=>675, 8120=>722, 8121=>722, 8122=>722, 8123=>722, + 8124=>722, 8125=>500, 8126=>500, 8127=>500, 8128=>500, 8129=>500, 8130=>599, 8131=>599, 8132=>599, 8134=>599, 8135=>599, 8136=>912, 8137=>900, 8138=>1063, 8139=>1039, 8140=>872, + 8141=>500, 8142=>500, 8143=>500, 8144=>392, 8145=>392, 8146=>392, 8147=>392, 8150=>392, 8151=>392, 8152=>395, 8153=>395, 8154=>588, 8155=>562, 8157=>500, 8158=>500, 8159=>500, + 8160=>608, 8161=>608, 8162=>608, 8163=>608, 8164=>588, 8165=>588, 8166=>608, 8167=>608, 8168=>660, 8169=>660, 8170=>921, 8171=>897, 8172=>790, 8173=>500, 8174=>500, 8175=>500, + 8178=>815, 8179=>815, 8180=>815, 8182=>815, 8183=>815, 8184=>961, 8185=>835, 8186=>984, 8187=>853, 8188=>829, 8189=>500, 8190=>500, 8192=>500, 8193=>1000, 8194=>500, 8195=>1000, + 8196=>330, 8197=>250, 8198=>167, 8199=>636, 8200=>318, 8201=>200, 8202=>100, 8203=>0, 8204=>0, 8205=>0, 8206=>0, 8207=>0, 8208=>338, 8209=>338, 8210=>636, 8213=>1000, + 8215=>500, 8219=>318, 8223=>511, 8227=>590, 8228=>334, 8229=>667, 8234=>0, 8235=>0, 8236=>0, 8237=>0, 8238=>0, 8239=>200, 8241=>1734, 8252=>527, 8253=>536, 8254=>500, + 8263=>976, 8264=>753, 8265=>753, 8287=>222, 8288=>0, 8289=>0, 8290=>0, 8291=>0, 8298=>0, 8299=>0, 8300=>0, 8301=>0, 8302=>0, 8303=>0, 8304=>401, 8308=>401, + 8309=>401, 8310=>401, 8311=>401, 8312=>401, 8313=>401, 8319=>433, 8320=>401, 8321=>401, 8322=>401, 8323=>401, 8324=>401, 8325=>401, 8326=>401, 8327=>401, 8328=>401, 8329=>401, + 8358=>660, 8367=>1057, 8369=>706, 8372=>780, 8373=>636, 8462=>644, 8470=>946, 8486=>829, 8490=>747, 8491=>722, 8531=>969, 8532=>969, 8533=>969, 8534=>969, 8535=>969, 8536=>969, + 8537=>969, 8538=>969, 8539=>969, 8540=>969, 8541=>969, 8542=>969, 8543=>568, 8592=>838, 8593=>838, 8594=>838, 8595=>838, 8706=>517, 8710=>698, 8711=>698, 8719=>796, 8721=>714, + 8722=>838, 8725=>167, 8729=>318, 8730=>637, 8733=>677, 8734=>833, 8735=>838, 8736=>838, 8743=>732, 8744=>732, 8745=>732, 8746=>732, 8747=>521, 8748=>852, 8749=>1182, 8770=>838, + 8771=>838, 8776=>838, 8800=>838, 8801=>838, 8804=>838, 8805=>838, 8962=>764, 8968=>390, 8969=>390, 8970=>390, 8971=>390, 8976=>838, 8977=>513, 8984=>1000, 8985=>838, 8992=>521, + 8993=>521, 8997=>1000, 9000=>1443, 9085=>919, 9134=>521, 9167=>945, 9251=>764, 9600=>769, 9601=>769, 9602=>769, 9603=>769, 9604=>769, 9605=>769, 9606=>769, 9607=>769, 9608=>769, + 9609=>769, 9610=>769, 9611=>769, 9612=>769, 9613=>769, 9614=>769, 9615=>769, 9616=>769, 9617=>769, 9618=>769, 9619=>769, 9620=>769, 9621=>769, 9622=>769, 9623=>769, 9624=>769, + 9625=>769, 9626=>769, 9627=>769, 9628=>769, 9629=>769, 9630=>769, 9631=>769, 9632=>945, 9633=>945, 9634=>945, 9635=>945, 9636=>945, 9637=>945, 9638=>945, 9639=>945, 9640=>945, + 9641=>945, 9642=>678, 9643=>678, 9644=>945, 9645=>945, 9646=>550, 9647=>550, 9648=>769, 9649=>769, 9650=>769, 9651=>769, 9652=>502, 9653=>502, 9654=>769, 9655=>769, 9656=>502, + 9657=>502, 9658=>769, 9659=>769, 9660=>769, 9661=>769, 9662=>502, 9663=>502, 9664=>769, 9665=>769, 9666=>502, 9667=>502, 9668=>769, 9669=>769, 9670=>769, 9671=>769, 9672=>769, + 9673=>873, 9674=>494, 9675=>873, 9676=>873, 9677=>873, 9678=>873, 9679=>873, 9680=>873, 9681=>873, 9682=>873, 9683=>873, 9684=>873, 9685=>873, 9686=>527, 9687=>527, 9688=>791, + 9689=>970, 9690=>970, 9691=>970, 9692=>387, 9693=>387, 9694=>387, 9695=>387, 9696=>873, 9697=>873, 9698=>769, 9699=>769, 9700=>769, 9701=>769, 9702=>590, 9703=>945, 9704=>945, + 9705=>945, 9706=>945, 9707=>945, 9708=>769, 9709=>769, 9710=>769, 9711=>1119, 9712=>945, 9713=>945, 9714=>945, 9715=>945, 9716=>873, 9717=>873, 9718=>873, 9719=>873, 9720=>769, + 9721=>769, 9722=>769, 9723=>830, 9724=>830, 9725=>732, 9726=>732, 9727=>769, 9728=>896, 9784=>896, 9785=>896, 9786=>896, 9787=>896, 9788=>896, 9791=>614, 9792=>731, 9793=>731, + 9794=>896, 9795=>896, 9796=>896, 9797=>896, 9798=>896, 9799=>896, 9824=>896, 9825=>896, 9826=>896, 9827=>896, 9828=>896, 9829=>896, 9830=>896, 9831=>896, 9833=>472, 9834=>638, + 9835=>896, 9836=>896, 9837=>472, 9838=>357, 9839=>484, 10208=>494, 10216=>390, 10217=>390, 10731=>494, 10764=>1513, 10765=>521, 10766=>521, 11026=>945, 11027=>945, 11028=>945, 11029=>945, + 11030=>769, 11031=>769, 11032=>769, 11033=>769, 11034=>945, 63173=>602, 63185=>500, 63188=>500, 64256=>811, 64257=>667, 64258=>667, 64259=>1040, 64260=>1030, 64261=>771, 64262=>933, 65024=>0, + 65025=>0, 65026=>0, 65027=>0, 65028=>0, 65029=>0, 65030=>0, 65031=>0, 65032=>0, 65033=>0, 65034=>0, 65035=>0, 65036=>0, 65037=>0, 65038=>0, 65039=>0, 65533=>1025}; + font[:enc]=''; + font[:diff]=''; + font[:file]='DejaVuSerif.z'; + font[:ctg]='DejaVuSerif.ctg.z'; + font[:originalsize]=212332; +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSerif.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSerif.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSerifCondensed-Bold.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSerifCondensed-Bold.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSerifCondensed-Bold.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSerifCondensed-Bold.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSerifCondensed-BoldOblique.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSerifCondensed-BoldOblique.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSerifCondensed-BoldOblique.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSerifCondensed-BoldOblique.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSerifCondensed-Oblique.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSerifCondensed-Oblique.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSerifCondensed-Oblique.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSerifCondensed-Oblique.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSerifCondensed.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSerifCondensed.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSerifCondensed.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/DejaVuSerifCondensed.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,130 @@ +TCPDFFontDescriptor.define('DejaVuSerifCondensed') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='DejaVuSerifCondensed'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>32,'FontBBox'=>'[-692 -401 1511 1242]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>540} + font[:up]=-42; + font[:ut]=44; + font[:cw]={ + 0=>540, 32=>286, 33=>361, 34=>414, 35=>754, 36=>572, 37=>855, 38=>801, 39=>247, 40=>351, 41=>351, 42=>450, 43=>754, 44=>286, 45=>304, 46=>286, + 47=>303, 48=>572, 49=>572, 50=>572, 51=>572, 52=>572, 53=>572, 54=>572, 55=>572, 56=>572, 57=>572, 58=>303, 59=>303, 60=>754, 61=>754, 62=>754, + 63=>482, 64=>900, 65=>650, 66=>661, 67=>688, 68=>721, 69=>657, 70=>624, 71=>719, 72=>785, 73=>355, 74=>360, 75=>672, 76=>598, 77=>921, 78=>787, + 79=>738, 80=>605, 81=>738, 82=>677, 83=>616, 84=>600, 85=>758, 86=>650, 87=>925, 88=>641, 89=>594, 90=>625, 91=>351, 92=>303, 93=>351, 94=>754, + 95=>450, 96=>450, 97=>536, 98=>576, 99=>504, 100=>576, 101=>532, 102=>333, 103=>576, 104=>580, 105=>288, 106=>279, 107=>545, 108=>288, 109=>853, 110=>580, + 111=>542, 112=>576, 113=>576, 114=>430, 115=>461, 116=>361, 117=>580, 118=>508, 119=>770, 120=>507, 121=>508, 122=>474, 123=>572, 124=>303, 125=>572, 126=>754, + 8364=>572, 1027=>647, 8218=>286, 402=>333, 8222=>466, 8230=>900, 8224=>450, 8225=>450, 710=>450, 8240=>1208, 352=>616, 8249=>360, 338=>1023, 1036=>696, 381=>625, 1039=>785, + 8216=>286, 8217=>286, 8220=>460, 8221=>460, 8226=>531, 8211=>450, 8212=>900, 732=>450, 8482=>900, 353=>461, 8250=>360, 339=>890, 1116=>563, 382=>474, 376=>594, 160=>286, + 161=>361, 162=>572, 163=>572, 164=>572, 165=>572, 166=>303, 167=>450, 168=>450, 169=>900, 170=>427, 171=>550, 172=>754, 173=>304, 174=>900, 175=>450, 176=>450, + 177=>754, 178=>360, 179=>360, 180=>450, 181=>584, 182=>572, 183=>286, 184=>450, 185=>360, 186=>423, 187=>550, 188=>872, 189=>872, 190=>872, 191=>482, 192=>650, + 193=>650, 194=>650, 195=>650, 196=>650, 197=>650, 198=>901, 199=>688, 200=>657, 201=>657, 202=>657, 203=>657, 204=>355, 205=>355, 206=>355, 207=>355, 208=>726, + 209=>787, 210=>738, 211=>738, 212=>738, 213=>738, 214=>738, 215=>754, 216=>738, 217=>758, 218=>758, 219=>758, 220=>758, 221=>594, 222=>608, 223=>601, 224=>536, + 225=>536, 226=>536, 227=>536, 228=>536, 229=>536, 230=>846, 231=>504, 232=>532, 233=>532, 234=>532, 235=>532, 236=>288, 237=>288, 238=>288, 239=>288, 240=>542, + 241=>580, 242=>542, 243=>542, 244=>542, 245=>542, 246=>542, 247=>754, 248=>542, 249=>580, 250=>580, 251=>580, 252=>580, 253=>508, 254=>576, 255=>508, 256=>650, + 257=>536, 258=>650, 259=>536, 260=>650, 261=>536, 262=>688, 263=>504, 264=>688, 265=>504, 266=>688, 267=>504, 268=>688, 269=>504, 270=>721, 271=>576, 272=>726, + 273=>576, 274=>657, 275=>532, 276=>657, 277=>532, 278=>657, 279=>532, 280=>657, 281=>532, 282=>657, 283=>532, 284=>719, 285=>576, 286=>719, 287=>576, 288=>719, + 289=>576, 290=>719, 291=>576, 292=>785, 293=>580, 294=>785, 295=>580, 296=>355, 297=>288, 298=>355, 299=>288, 300=>355, 301=>288, 302=>355, 303=>288, 304=>355, + 305=>288, 306=>721, 307=>479, 308=>360, 309=>279, 310=>672, 311=>545, 312=>545, 313=>598, 314=>288, 315=>598, 316=>288, 317=>598, 318=>360, 319=>604, 320=>418, + 321=>602, 322=>292, 323=>787, 324=>580, 325=>787, 326=>580, 327=>787, 328=>580, 329=>779, 330=>787, 331=>580, 332=>738, 333=>542, 334=>738, 335=>542, 336=>738, + 337=>542, 340=>677, 341=>430, 342=>677, 343=>430, 344=>677, 345=>430, 346=>616, 347=>461, 348=>616, 349=>461, 350=>616, 351=>461, 354=>600, 355=>361, 356=>600, + 357=>361, 358=>600, 359=>361, 360=>758, 361=>580, 362=>758, 363=>580, 364=>758, 365=>580, 366=>758, 367=>580, 368=>758, 369=>580, 370=>758, 371=>580, 372=>925, + 373=>770, 374=>594, 375=>508, 377=>625, 378=>474, 379=>625, 380=>474, 383=>333, 384=>576, 385=>661, 386=>661, 387=>576, 388=>661, 389=>576, 390=>688, 391=>688, + 392=>504, 393=>726, 394=>721, 395=>661, 396=>576, 397=>542, 398=>657, 399=>738, 400=>572, 401=>624, 403=>719, 404=>641, 405=>839, 406=>355, 407=>355, 408=>672, + 409=>545, 410=>288, 411=>570, 412=>853, 413=>787, 414=>580, 415=>738, 416=>738, 417=>542, 418=>936, 419=>726, 420=>605, 421=>576, 422=>677, 423=>616, 424=>461, + 425=>636, 426=>292, 427=>361, 428=>600, 429=>361, 430=>600, 431=>758, 432=>580, 433=>746, 434=>684, 435=>664, 436=>596, 437=>625, 438=>474, 439=>508, 440=>508, + 441=>508, 443=>572, 444=>618, 445=>508, 446=>482, 448=>265, 449=>443, 450=>413, 451=>265, 452=>1347, 453=>1195, 454=>1050, 455=>958, 456=>876, 457=>567, 458=>1148, + 459=>1066, 460=>858, 461=>650, 462=>536, 463=>355, 464=>288, 465=>738, 466=>542, 467=>758, 468=>580, 469=>758, 470=>580, 471=>758, 472=>580, 473=>758, 474=>580, + 475=>758, 476=>580, 477=>532, 478=>650, 479=>536, 480=>650, 481=>536, 482=>901, 483=>846, 484=>763, 485=>576, 486=>719, 487=>576, 488=>672, 489=>545, 490=>738, + 491=>542, 492=>738, 493=>542, 494=>508, 495=>508, 496=>288, 497=>1347, 498=>1195, 499=>1050, 500=>719, 501=>576, 502=>1038, 504=>787, 505=>580, 506=>650, 507=>536, + 508=>901, 509=>846, 510=>738, 511=>542, 512=>650, 513=>536, 514=>650, 515=>536, 516=>657, 517=>532, 518=>657, 519=>532, 520=>355, 521=>288, 522=>355, 523=>288, + 524=>738, 525=>542, 526=>738, 527=>542, 528=>677, 529=>430, 530=>677, 531=>430, 532=>758, 533=>580, 534=>758, 535=>580, 536=>616, 537=>461, 538=>600, 539=>361, + 542=>785, 543=>580, 545=>732, 548=>625, 549=>474, 550=>650, 551=>536, 552=>657, 553=>532, 554=>738, 555=>542, 556=>738, 557=>542, 558=>738, 559=>542, 560=>738, + 561=>542, 562=>594, 563=>508, 564=>450, 565=>748, 566=>444, 567=>279, 568=>864, 569=>864, 570=>650, 571=>688, 572=>504, 573=>598, 574=>600, 575=>461, 576=>474, + 577=>525, 578=>417, 581=>650, 592=>536, 593=>576, 594=>576, 595=>576, 596=>504, 597=>504, 598=>582, 599=>614, 600=>532, 601=>532, 602=>759, 603=>466, 604=>458, + 605=>695, 606=>552, 607=>283, 608=>615, 609=>576, 610=>489, 611=>641, 612=>507, 613=>580, 614=>580, 615=>580, 616=>288, 617=>353, 618=>288, 619=>342, 620=>409, + 621=>326, 622=>633, 623=>853, 624=>853, 625=>853, 626=>579, 627=>624, 628=>581, 629=>542, 630=>711, 631=>583, 632=>542, 633=>451, 634=>451, 635=>496, 636=>430, + 637=>430, 638=>407, 639=>407, 640=>534, 641=>534, 642=>461, 643=>244, 644=>333, 645=>438, 646=>292, 647=>361, 648=>361, 649=>580, 650=>558, 651=>547, 652=>508, + 653=>770, 654=>508, 655=>589, 656=>537, 657=>504, 658=>508, 659=>504, 660=>482, 661=>482, 662=>482, 663=>461, 664=>738, 665=>506, 666=>552, 667=>588, 668=>600, + 669=>329, 670=>545, 671=>581, 672=>615, 673=>482, 674=>482, 675=>896, 676=>930, 677=>898, 678=>728, 679=>538, 680=>704, 681=>804, 682=>582, 683=>608, 684=>538, + 685=>398, 686=>703, 687=>690, 688=>389, 689=>387, 690=>237, 691=>312, 692=>312, 693=>387, 694=>352, 695=>527, 696=>381, 697=>250, 699=>286, 700=>286, 701=>286, + 702=>276, 703=>276, 704=>252, 705=>252, 711=>450, 712=>247, 713=>450, 716=>247, 720=>303, 721=>303, 722=>276, 723=>276, 726=>295, 728=>450, 729=>450, 730=>450, + 731=>450, 733=>450, 734=>375, 736=>402, 737=>218, 738=>303, 739=>381, 740=>252, 741=>542, 742=>542, 743=>542, 744=>542, 745=>542, 750=>435, 768=>0, 769=>0, + 770=>0, 771=>0, 772=>0, 773=>0, 774=>0, 775=>0, 776=>0, 777=>0, 778=>0, 779=>0, 780=>0, 781=>0, 782=>0, 783=>0, 784=>0, 785=>0, + 786=>0, 787=>0, 788=>0, 789=>0, 790=>0, 791=>0, 792=>0, 793=>0, 794=>0, 795=>0, 796=>0, 797=>0, 798=>0, 799=>0, 800=>0, 801=>0, + 802=>0, 803=>0, 804=>0, 805=>0, 806=>0, 807=>0, 808=>0, 809=>0, 810=>0, 811=>0, 812=>0, 813=>0, 814=>0, 815=>0, 816=>0, 817=>0, + 818=>0, 819=>0, 820=>0, 821=>0, 822=>0, 823=>0, 824=>0, 825=>0, 826=>0, 827=>0, 828=>0, 829=>0, 830=>0, 831=>0, 835=>0, 847=>0, + 856=>0, 865=>0, 884=>250, 885=>250, 890=>450, 894=>303, 900=>450, 901=>450, 902=>650, 903=>286, 904=>810, 905=>935, 906=>505, 908=>751, 910=>808, 911=>767, + 912=>353, 913=>650, 914=>661, 915=>624, 916=>650, 917=>657, 918=>625, 919=>785, 920=>738, 921=>355, 922=>672, 923=>650, 924=>921, 925=>787, 926=>633, 927=>738, + 928=>785, 929=>605, 931=>636, 932=>600, 933=>594, 934=>738, 935=>641, 936=>789, 937=>746, 938=>355, 939=>594, 940=>607, 941=>466, 942=>539, 943=>353, 944=>547, + 945=>607, 946=>520, 947=>538, 948=>542, 949=>466, 950=>488, 951=>539, 952=>542, 953=>353, 954=>563, 955=>570, 956=>584, 957=>547, 958=>496, 959=>542, 960=>591, + 961=>529, 962=>504, 963=>614, 964=>498, 965=>547, 966=>630, 967=>545, 968=>706, 969=>734, 970=>353, 971=>547, 972=>542, 973=>547, 974=>734, 976=>524, 977=>643, + 978=>618, 979=>787, 980=>618, 981=>613, 982=>734, 983=>561, 984=>738, 985=>542, 986=>688, 987=>504, 988=>624, 989=>417, 990=>531, 991=>593, 992=>704, 993=>519, + 1008=>561, 1009=>529, 1010=>504, 1011=>279, 1012=>738, 1013=>504, 1014=>504, 1015=>608, 1016=>576, 1017=>688, 1018=>921, 1019=>637, 1020=>529, 1021=>688, 1022=>688, 1023=>688, + 1024=>678, 1025=>638, 1026=>719, 1028=>688, 1029=>616, 1030=>355, 1031=>355, 1032=>360, 1033=>976, 1034=>1006, 1035=>785, 1037=>813, 1038=>650, 1040=>681, 1041=>661, 1042=>661, + 1043=>596, 1044=>731, 1045=>657, 1046=>1011, 1047=>561, 1048=>785, 1049=>785, 1050=>696, 1051=>751, 1052=>921, 1053=>785, 1054=>738, 1055=>785, 1056=>605, 1057=>688, 1058=>600, + 1059=>650, 1060=>747, 1061=>641, 1062=>785, 1063=>695, 1064=>1027, 1065=>1027, 1066=>715, 1067=>885, 1068=>606, 1069=>688, 1070=>1074, 1071=>727, 1072=>536, 1073=>542, 1074=>506, + 1075=>471, 1076=>554, 1077=>532, 1078=>828, 1079=>491, 1080=>600, 1081=>600, 1082=>563, 1083=>571, 1084=>700, 1085=>600, 1086=>542, 1087=>600, 1088=>576, 1089=>504, 1090=>498, + 1091=>529, 1092=>704, 1093=>507, 1094=>579, 1095=>595, 1096=>836, 1097=>836, 1098=>572, 1099=>716, 1100=>490, 1101=>504, 1102=>783, 1103=>567, 1104=>532, 1105=>532, 1106=>561, + 1107=>471, 1108=>504, 1109=>461, 1110=>288, 1111=>288, 1112=>279, 1113=>759, 1114=>774, 1115=>580, 1117=>600, 1118=>529, 1119=>590, 1122=>686, 1123=>542, 1138=>738, 1139=>497, + 1140=>773, 1141=>610, 1164=>621, 1165=>442, 1168=>604, 1169=>476, 1170=>624, 1171=>483, 1172=>655, 1173=>552, 1174=>1011, 1175=>828, 1176=>572, 1177=>483, 1178=>696, 1179=>545, + 1182=>696, 1183=>545, 1184=>801, 1185=>602, 1186=>785, 1187=>621, 1188=>1025, 1189=>767, 1190=>1084, 1191=>847, 1194=>688, 1195=>504, 1196=>600, 1197=>498, 1198=>594, 1199=>508, + 1202=>641, 1203=>507, 1204=>971, 1205=>809, 1206=>674, 1207=>621, 1210=>674, 1211=>580, 1216=>355, 1217=>1011, 1218=>828, 1219=>672, 1220=>545, 1223=>785, 1224=>600, 1227=>674, + 1228=>600, 1231=>288, 1232=>681, 1233=>536, 1234=>681, 1235=>536, 1236=>901, 1237=>846, 1238=>657, 1239=>532, 1240=>738, 1241=>532, 1242=>738, 1243=>532, 1244=>1011, 1245=>828, + 1246=>561, 1247=>491, 1248=>508, 1249=>508, 1250=>785, 1251=>600, 1252=>785, 1253=>600, 1254=>738, 1255=>542, 1256=>738, 1257=>542, 1258=>738, 1259=>542, 1260=>688, 1261=>504, + 1262=>650, 1263=>529, 1264=>650, 1265=>529, 1266=>650, 1267=>529, 1268=>695, 1269=>595, 1270=>596, 1271=>471, 1272=>885, 1273=>716, 7426=>846, 7432=>458, 7433=>288, 7444=>890, + 7446=>542, 7447=>542, 7453=>663, 7454=>853, 7455=>853, 7491=>347, 7492=>222, 7493=>360, 7494=>556, 7495=>360, 7496=>360, 7497=>348, 7498=>348, 7499=>306, 7500=>306, 7501=>360, + 7502=>157, 7503=>328, 7504=>552, 7505=>359, 7506=>347, 7507=>312, 7508=>347, 7509=>347, 7510=>360, 7511=>222, 7512=>359, 7513=>417, 7514=>552, 7515=>335, 7543=>576, 7547=>334, + 7557=>288, 7579=>360, 7580=>312, 7581=>312, 7582=>347, 7583=>306, 7584=>199, 7585=>206, 7586=>360, 7587=>359, 7588=>210, 7589=>219, 7590=>210, 7591=>210, 7592=>207, 7593=>158, + 7594=>157, 7595=>330, 7596=>552, 7597=>552, 7598=>366, 7599=>364, 7600=>359, 7601=>347, 7602=>347, 7603=>295, 7604=>190, 7605=>222, 7606=>359, 7607=>350, 7609=>338, 7610=>335, + 7611=>297, 7612=>297, 7613=>297, 7614=>327, 7615=>347, 7680=>650, 7681=>536, 7682=>661, 7683=>576, 7684=>661, 7685=>576, 7686=>661, 7687=>576, 7688=>688, 7689=>504, 7690=>721, + 7691=>576, 7692=>721, 7693=>576, 7694=>721, 7695=>576, 7696=>721, 7697=>576, 7698=>721, 7699=>576, 7700=>657, 7701=>532, 7702=>657, 7703=>532, 7704=>657, 7705=>532, 7706=>657, + 7707=>532, 7710=>624, 7711=>333, 7712=>719, 7713=>576, 7714=>785, 7715=>580, 7716=>785, 7717=>580, 7718=>785, 7719=>580, 7720=>785, 7721=>580, 7722=>785, 7723=>580, 7724=>355, + 7725=>288, 7728=>672, 7729=>545, 7730=>672, 7731=>545, 7732=>672, 7733=>545, 7734=>598, 7735=>288, 7736=>598, 7737=>288, 7738=>598, 7739=>288, 7740=>598, 7741=>288, 7742=>921, + 7743=>853, 7744=>921, 7745=>853, 7746=>921, 7747=>853, 7748=>787, 7749=>580, 7750=>787, 7751=>580, 7752=>787, 7753=>580, 7754=>787, 7755=>580, 7760=>738, 7761=>542, 7762=>738, + 7763=>542, 7764=>605, 7765=>576, 7766=>605, 7767=>576, 7768=>677, 7769=>430, 7770=>677, 7771=>430, 7772=>677, 7773=>430, 7774=>677, 7775=>430, 7776=>616, 7777=>461, 7778=>616, + 7779=>461, 7784=>616, 7785=>461, 7786=>600, 7787=>361, 7788=>600, 7789=>361, 7790=>600, 7791=>361, 7792=>600, 7793=>361, 7794=>758, 7795=>580, 7796=>758, 7797=>580, 7798=>758, + 7799=>580, 7800=>758, 7801=>580, 7802=>758, 7803=>580, 7804=>650, 7805=>508, 7806=>650, 7807=>508, 7808=>925, 7809=>770, 7810=>925, 7811=>770, 7812=>925, 7813=>770, 7814=>925, + 7815=>770, 7816=>925, 7817=>770, 7818=>641, 7819=>507, 7820=>641, 7821=>507, 7822=>594, 7823=>508, 7824=>625, 7825=>474, 7826=>625, 7827=>474, 7828=>625, 7829=>474, 7830=>580, + 7831=>361, 7832=>770, 7833=>508, 7834=>813, 7835=>461, 7840=>650, 7841=>536, 7842=>650, 7843=>536, 7852=>650, 7853=>536, 7854=>650, 7855=>536, 7856=>650, 7857=>536, 7858=>650, + 7859=>536, 7860=>650, 7861=>536, 7862=>650, 7863=>536, 7864=>657, 7865=>532, 7866=>657, 7867=>532, 7868=>657, 7869=>532, 7878=>657, 7879=>532, 7880=>355, 7881=>288, 7882=>355, + 7883=>288, 7884=>738, 7885=>542, 7886=>738, 7887=>542, 7896=>738, 7897=>542, 7908=>758, 7909=>580, 7910=>758, 7911=>580, 7922=>594, 7923=>508, 7924=>594, 7925=>508, 7926=>594, + 7927=>508, 7928=>594, 7929=>508, 7936=>607, 7937=>607, 7938=>607, 7939=>607, 7940=>607, 7941=>607, 7942=>607, 7943=>607, 7944=>650, 7945=>650, 7946=>782, 7947=>782, 7948=>660, + 7949=>687, 7950=>650, 7951=>650, 7952=>483, 7953=>483, 7954=>483, 7955=>483, 7956=>483, 7957=>483, 7960=>768, 7961=>757, 7962=>960, 7963=>969, 7964=>907, 7965=>931, 7968=>539, + 7969=>539, 7970=>539, 7971=>539, 7972=>539, 7973=>539, 7974=>539, 7975=>539, 7976=>898, 7977=>893, 7978=>1090, 7979=>1101, 7980=>1043, 7981=>1064, 7982=>988, 7983=>985, 7984=>353, + 7985=>353, 7986=>353, 7987=>353, 7988=>353, 7989=>353, 7990=>353, 7991=>353, 7992=>469, 7993=>461, 7994=>661, 7995=>664, 7996=>611, 7997=>635, 7998=>561, 7999=>553, 8000=>542, + 8001=>542, 8002=>542, 8003=>542, 8004=>542, 8005=>542, 8008=>738, 8009=>773, 8010=>1008, 8011=>1015, 8012=>843, 8013=>867, 8016=>547, 8017=>547, 8018=>547, 8019=>547, 8020=>547, + 8021=>547, 8022=>547, 8023=>547, 8025=>765, 8027=>971, 8029=>939, 8031=>857, 8032=>734, 8033=>734, 8034=>734, 8035=>734, 8036=>734, 8037=>734, 8038=>734, 8039=>734, 8040=>746, + 8041=>783, 8042=>1018, 8043=>1023, 8044=>852, 8045=>878, 8046=>844, 8047=>873, 8048=>607, 8049=>607, 8050=>483, 8051=>483, 8052=>539, 8053=>539, 8054=>353, 8055=>353, 8056=>542, + 8057=>542, 8058=>547, 8059=>547, 8060=>734, 8061=>734, 8064=>607, 8065=>607, 8066=>607, 8067=>607, 8068=>607, 8069=>607, 8070=>607, 8071=>607, 8072=>650, 8073=>650, 8074=>782, + 8075=>782, 8076=>660, 8077=>687, 8078=>650, 8079=>650, 8080=>539, 8081=>539, 8082=>539, 8083=>539, 8084=>539, 8085=>539, 8086=>539, 8087=>539, 8088=>898, 8089=>893, 8090=>1090, + 8091=>1101, 8092=>1043, 8093=>1064, 8094=>988, 8095=>985, 8096=>734, 8097=>734, 8098=>734, 8099=>734, 8100=>734, 8101=>734, 8102=>734, 8103=>734, 8104=>746, 8105=>783, 8106=>1018, + 8107=>1023, 8108=>852, 8109=>878, 8110=>844, 8111=>873, 8112=>607, 8113=>607, 8114=>607, 8115=>607, 8116=>607, 8118=>607, 8119=>607, 8120=>650, 8121=>650, 8122=>650, 8123=>650, + 8124=>650, 8125=>450, 8126=>450, 8127=>450, 8128=>450, 8129=>450, 8130=>539, 8131=>539, 8132=>539, 8134=>539, 8135=>539, 8136=>820, 8137=>810, 8138=>956, 8139=>935, 8140=>785, + 8141=>450, 8142=>450, 8143=>450, 8144=>353, 8145=>353, 8146=>353, 8147=>353, 8150=>353, 8151=>353, 8152=>355, 8153=>355, 8154=>529, 8155=>505, 8157=>450, 8158=>450, 8159=>450, + 8160=>547, 8161=>547, 8162=>547, 8163=>547, 8164=>529, 8165=>529, 8166=>547, 8167=>547, 8168=>594, 8169=>594, 8170=>829, 8171=>808, 8172=>711, 8173=>450, 8174=>450, 8175=>450, + 8178=>734, 8179=>734, 8180=>734, 8182=>734, 8183=>734, 8184=>865, 8185=>751, 8186=>886, 8187=>767, 8188=>746, 8189=>450, 8190=>450, 8192=>450, 8193=>900, 8194=>450, 8195=>900, + 8196=>296, 8197=>225, 8198=>150, 8199=>572, 8200=>286, 8201=>180, 8202=>89, 8203=>0, 8204=>0, 8205=>0, 8206=>0, 8207=>0, 8208=>304, 8209=>304, 8210=>572, 8213=>900, + 8215=>450, 8219=>286, 8223=>460, 8227=>531, 8228=>300, 8229=>600, 8234=>0, 8235=>0, 8236=>0, 8237=>0, 8238=>0, 8239=>180, 8241=>1560, 8252=>475, 8253=>482, 8254=>450, + 8263=>878, 8264=>678, 8265=>678, 8287=>200, 8288=>0, 8289=>0, 8290=>0, 8291=>0, 8298=>0, 8299=>0, 8300=>0, 8301=>0, 8302=>0, 8303=>0, 8304=>360, 8308=>360, + 8309=>360, 8310=>360, 8311=>360, 8312=>360, 8313=>360, 8319=>389, 8320=>360, 8321=>360, 8322=>360, 8323=>360, 8324=>360, 8325=>360, 8326=>360, 8327=>360, 8328=>360, 8329=>360, + 8358=>594, 8367=>951, 8369=>635, 8372=>702, 8373=>572, 8462=>580, 8470=>852, 8486=>746, 8490=>672, 8491=>650, 8531=>872, 8532=>872, 8533=>872, 8534=>872, 8535=>872, 8536=>872, + 8537=>872, 8538=>872, 8539=>872, 8540=>872, 8541=>872, 8542=>872, 8543=>511, 8592=>754, 8593=>754, 8594=>754, 8595=>754, 8706=>465, 8710=>628, 8711=>628, 8719=>716, 8721=>642, + 8722=>754, 8725=>150, 8729=>286, 8730=>573, 8733=>609, 8734=>750, 8735=>754, 8736=>754, 8743=>659, 8744=>659, 8745=>659, 8746=>659, 8747=>469, 8748=>766, 8749=>1063, 8770=>754, + 8771=>754, 8776=>754, 8800=>754, 8801=>754, 8804=>754, 8805=>754, 8962=>687, 8968=>351, 8969=>351, 8970=>351, 8971=>351, 8976=>754, 8977=>461, 8984=>900, 8985=>754, 8992=>469, + 8993=>469, 8997=>900, 9000=>1299, 9085=>827, 9134=>469, 9167=>850, 9251=>687, 9600=>692, 9601=>692, 9602=>692, 9603=>692, 9604=>692, 9605=>692, 9606=>692, 9607=>692, 9608=>692, + 9609=>692, 9610=>692, 9611=>692, 9612=>692, 9613=>692, 9614=>692, 9615=>692, 9616=>692, 9617=>692, 9618=>692, 9619=>692, 9620=>692, 9621=>692, 9622=>692, 9623=>692, 9624=>692, + 9625=>692, 9626=>692, 9627=>692, 9628=>692, 9629=>692, 9630=>692, 9631=>692, 9632=>850, 9633=>850, 9634=>850, 9635=>850, 9636=>850, 9637=>850, 9638=>850, 9639=>850, 9640=>850, + 9641=>850, 9642=>610, 9643=>610, 9644=>850, 9645=>850, 9646=>495, 9647=>495, 9648=>692, 9649=>692, 9650=>692, 9651=>692, 9652=>452, 9653=>452, 9654=>692, 9655=>692, 9656=>452, + 9657=>452, 9658=>692, 9659=>692, 9660=>692, 9661=>692, 9662=>452, 9663=>452, 9664=>692, 9665=>692, 9666=>452, 9667=>452, 9668=>692, 9669=>692, 9670=>692, 9671=>692, 9672=>692, + 9673=>785, 9674=>444, 9675=>785, 9676=>785, 9677=>785, 9678=>785, 9679=>785, 9680=>785, 9681=>785, 9682=>785, 9683=>785, 9684=>785, 9685=>785, 9686=>474, 9687=>474, 9688=>712, + 9689=>873, 9690=>873, 9691=>873, 9692=>348, 9693=>348, 9694=>348, 9695=>348, 9696=>785, 9697=>785, 9698=>692, 9699=>692, 9700=>692, 9701=>692, 9702=>531, 9703=>850, 9704=>850, + 9705=>850, 9706=>850, 9707=>850, 9708=>692, 9709=>692, 9710=>692, 9711=>1007, 9712=>850, 9713=>850, 9714=>850, 9715=>850, 9716=>785, 9717=>785, 9718=>785, 9719=>785, 9720=>692, + 9721=>692, 9722=>692, 9723=>747, 9724=>747, 9725=>659, 9726=>659, 9727=>692, 9728=>807, 9784=>807, 9785=>807, 9786=>807, 9787=>807, 9788=>807, 9791=>552, 9792=>658, 9793=>658, + 9794=>807, 9795=>807, 9796=>807, 9797=>807, 9798=>807, 9799=>807, 9824=>807, 9825=>807, 9826=>807, 9827=>807, 9828=>807, 9829=>807, 9830=>807, 9831=>807, 9833=>424, 9834=>574, + 9835=>807, 9836=>807, 9837=>424, 9838=>321, 9839=>435, 10208=>444, 10216=>351, 10217=>351, 10731=>444, 10764=>1361, 10765=>469, 10766=>469, 11026=>850, 11027=>850, 11028=>850, 11029=>850, + 11030=>692, 11031=>692, 11032=>692, 11033=>692, 11034=>850, 63173=>542, 63185=>450, 63188=>450, 64256=>729, 64257=>600, 64258=>600, 64259=>936, 64260=>927, 64261=>694, 64262=>839, 65024=>0, + 65025=>0, 65026=>0, 65027=>0, 65028=>0, 65029=>0, 65030=>0, 65031=>0, 65032=>0, 65033=>0, 65034=>0, 65035=>0, 65036=>0, 65037=>0, 65038=>0, 65039=>0, 65533=>923} + font[:enc]=''; + font[:diff]=''; + font[:file]='DejaVuSerifCondensed.z'; + font[:ctg]='DejaVuSerifCondensed.ctg.z'; + font[:originalsize]=176080; +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSerifCondensed.z Binary file vendor/plugins/rfpdf/lib/fonts/DejaVuSerifCondensed.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSerifCondensedb.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/DejaVuSerifCondensedb.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,130 @@ +TCPDFFontDescriptor.define('DejaVuSerifCondensedb') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='DejaVuSerifCondensed-Bold'; + font[:desc]={'Ascent'=>939,'Descent'=>-236,'CapHeight'=>939,'Flags'=>32,'FontBBox'=>'[-752 -423 1616 1235]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>540} + font[:up]=-42; + font[:ut]=44; + font[:cw]={ + 0=>540, 32=>313, 33=>395, 34=>469, 35=>754, 36=>626, 37=>855, 38=>813, 39=>275, 40=>426, 41=>426, 42=>470, 43=>754, 44=>313, 45=>374, 46=>313, + 47=>329, 48=>626, 49=>626, 50=>626, 51=>626, 52=>626, 53=>626, 54=>626, 55=>626, 56=>626, 57=>626, 58=>332, 59=>332, 60=>754, 61=>754, 62=>754, + 63=>527, 64=>900, 65=>698, 66=>760, 67=>716, 68=>780, 69=>686, 70=>639, 71=>769, 72=>850, 73=>421, 74=>426, 75=>782, 76=>633, 77=>996, 78=>822, + 79=>784, 80=>677, 81=>784, 82=>748, 83=>650, 84=>669, 85=>785, 86=>698, 87=>1011, 88=>698, 89=>642, 90=>657, 91=>426, 92=>329, 93=>426, 94=>754, + 95=>450, 96=>450, 97=>583, 98=>629, 99=>548, 100=>629, 101=>572, 102=>387, 103=>629, 104=>654, 105=>342, 106=>325, 107=>624, 108=>342, 109=>952, 110=>654, + 111=>600, 112=>629, 113=>629, 114=>474, 115=>506, 116=>416, 117=>654, 118=>523, 119=>774, 120=>536, 121=>523, 122=>511, 123=>579, 124=>327, 125=>579, 126=>754, + 8364=>626, 1027=>621, 8218=>313, 402=>387, 8222=>518, 8230=>900, 8224=>470, 8225=>470, 710=>450, 8240=>1246, 352=>650, 8249=>360, 338=>1062, 1036=>818, 381=>657, 1039=>850, + 8216=>313, 8217=>313, 8220=>518, 8221=>518, 8226=>575, 8211=>450, 8212=>900, 732=>450, 8482=>900, 353=>506, 8250=>360, 339=>925, 1116=>650, 382=>511, 376=>642, 160=>313, + 161=>395, 162=>626, 163=>626, 164=>572, 165=>626, 166=>327, 167=>470, 168=>450, 169=>900, 170=>438, 171=>563, 172=>754, 173=>374, 174=>900, 175=>450, 176=>450, + 177=>754, 178=>394, 179=>394, 180=>450, 181=>659, 182=>572, 183=>313, 184=>450, 185=>394, 186=>450, 187=>563, 188=>938, 189=>938, 190=>938, 191=>527, 192=>698, + 193=>698, 194=>698, 195=>698, 196=>698, 197=>698, 198=>931, 199=>716, 200=>686, 201=>686, 202=>686, 203=>686, 204=>421, 205=>421, 206=>421, 207=>421, 208=>787, + 209=>822, 210=>784, 211=>784, 212=>784, 213=>784, 214=>784, 215=>754, 216=>784, 217=>785, 218=>785, 219=>785, 220=>785, 221=>642, 222=>681, 223=>684, 224=>583, + 225=>583, 226=>583, 227=>583, 228=>583, 229=>583, 230=>877, 231=>548, 232=>572, 233=>572, 234=>572, 235=>572, 236=>342, 237=>342, 238=>342, 239=>342, 240=>600, + 241=>654, 242=>600, 243=>600, 244=>600, 245=>600, 246=>600, 247=>754, 248=>600, 249=>654, 250=>654, 251=>654, 252=>654, 253=>523, 254=>629, 255=>523, 256=>698, + 257=>583, 258=>698, 259=>583, 260=>698, 261=>583, 262=>716, 263=>548, 264=>716, 265=>548, 266=>716, 267=>548, 268=>716, 269=>548, 270=>780, 271=>629, 272=>787, + 273=>629, 274=>686, 275=>572, 276=>686, 277=>572, 278=>686, 279=>572, 280=>686, 281=>572, 282=>686, 283=>572, 284=>769, 285=>629, 286=>769, 287=>629, 288=>769, + 289=>629, 290=>769, 291=>629, 292=>850, 293=>654, 294=>850, 295=>654, 296=>421, 297=>342, 298=>421, 299=>342, 300=>421, 301=>342, 302=>421, 303=>342, 304=>421, + 305=>342, 306=>848, 307=>676, 308=>426, 309=>325, 310=>782, 311=>624, 312=>624, 313=>633, 314=>342, 315=>633, 316=>342, 317=>633, 318=>457, 319=>633, 320=>501, + 321=>639, 322=>346, 323=>822, 324=>654, 325=>822, 326=>654, 327=>822, 328=>654, 329=>907, 330=>822, 331=>654, 332=>784, 333=>600, 334=>784, 335=>600, 336=>784, + 337=>600, 340=>748, 341=>474, 342=>748, 343=>474, 344=>748, 345=>474, 346=>650, 347=>506, 348=>650, 349=>506, 350=>650, 351=>506, 354=>669, 355=>416, 356=>669, + 357=>416, 358=>669, 359=>416, 360=>785, 361=>654, 362=>785, 363=>654, 364=>785, 365=>654, 366=>785, 367=>654, 368=>785, 369=>654, 370=>785, 371=>654, 372=>1011, + 373=>774, 374=>642, 375=>523, 377=>657, 378=>511, 379=>657, 380=>511, 383=>387, 384=>629, 385=>760, 386=>769, 387=>629, 388=>769, 389=>629, 390=>716, 391=>716, + 392=>548, 393=>787, 394=>780, 395=>769, 396=>629, 397=>600, 398=>686, 399=>784, 400=>626, 401=>639, 403=>769, 404=>693, 405=>938, 406=>421, 407=>421, 408=>782, + 409=>624, 410=>342, 411=>631, 412=>952, 413=>822, 414=>654, 415=>784, 416=>784, 417=>600, 418=>1080, 419=>849, 420=>677, 421=>629, 422=>748, 423=>650, 424=>506, + 425=>636, 426=>298, 427=>416, 428=>669, 429=>416, 430=>669, 431=>785, 432=>654, 433=>801, 434=>801, 435=>642, 436=>637, 437=>657, 438=>511, 439=>511, 440=>511, + 441=>511, 443=>626, 444=>678, 445=>511, 446=>482, 448=>265, 449=>443, 450=>413, 451=>265, 452=>1437, 453=>1292, 454=>1140, 455=>1059, 456=>958, 457=>667, 458=>1248, + 459=>1148, 460=>980, 461=>698, 462=>583, 463=>421, 464=>342, 465=>784, 466=>600, 467=>785, 468=>654, 469=>785, 470=>654, 471=>785, 472=>654, 473=>785, 474=>654, + 475=>785, 476=>654, 477=>572, 478=>698, 479=>583, 480=>698, 481=>583, 482=>931, 483=>877, 484=>806, 485=>629, 486=>769, 487=>629, 488=>782, 489=>624, 490=>784, + 491=>600, 492=>784, 493=>600, 494=>511, 495=>511, 496=>342, 497=>1437, 498=>1292, 499=>1140, 500=>769, 501=>629, 502=>1099, 504=>822, 505=>654, 506=>698, 507=>583, + 508=>931, 509=>877, 510=>784, 511=>600, 512=>698, 513=>583, 514=>698, 515=>583, 516=>686, 517=>572, 518=>686, 519=>572, 520=>421, 521=>342, 522=>421, 523=>342, + 524=>784, 525=>600, 526=>784, 527=>600, 528=>748, 529=>474, 530=>748, 531=>474, 532=>785, 533=>654, 534=>785, 535=>654, 536=>650, 537=>506, 538=>669, 539=>416, + 542=>850, 543=>654, 545=>711, 548=>657, 549=>511, 550=>698, 551=>583, 552=>686, 553=>572, 554=>784, 555=>600, 556=>784, 557=>600, 558=>784, 559=>600, 560=>784, + 561=>600, 562=>642, 563=>523, 564=>516, 565=>830, 566=>508, 567=>325, 568=>928, 569=>928, 570=>698, 571=>716, 572=>548, 573=>633, 574=>669, 575=>506, 576=>511, + 577=>594, 578=>492, 581=>698, 592=>583, 593=>629, 594=>629, 595=>629, 596=>548, 597=>548, 598=>629, 599=>657, 600=>572, 601=>572, 602=>816, 603=>547, 604=>505, + 605=>816, 606=>647, 607=>348, 608=>629, 609=>629, 610=>563, 611=>641, 612=>564, 613=>654, 614=>654, 615=>654, 616=>342, 617=>342, 618=>342, 619=>368, 620=>462, + 621=>342, 622=>716, 623=>952, 624=>952, 625=>952, 626=>654, 627=>654, 628=>641, 629=>600, 630=>955, 631=>674, 632=>600, 633=>514, 634=>514, 635=>514, 636=>474, + 637=>474, 638=>406, 639=>438, 640=>721, 641=>721, 642=>506, 643=>298, 644=>387, 645=>486, 646=>298, 647=>443, 648=>416, 649=>654, 650=>611, 651=>624, 652=>577, + 653=>816, 654=>571, 655=>654, 656=>511, 657=>511, 658=>511, 659=>511, 660=>482, 661=>482, 662=>482, 663=>490, 664=>784, 665=>625, 666=>647, 667=>563, 668=>659, + 669=>345, 670=>666, 671=>581, 672=>629, 673=>482, 674=>482, 675=>1005, 676=>1061, 677=>1005, 678=>819, 679=>643, 680=>817, 681=>935, 682=>711, 683=>716, 684=>596, + 685=>398, 686=>552, 687=>646, 688=>469, 689=>466, 690=>282, 691=>372, 692=>372, 693=>432, 694=>474, 695=>595, 696=>436, 697=>271, 699=>313, 700=>313, 701=>313, + 702=>330, 703=>330, 704=>282, 705=>282, 711=>450, 712=>254, 713=>450, 716=>254, 720=>332, 721=>332, 722=>330, 723=>330, 726=>353, 728=>450, 729=>450, 730=>450, + 731=>450, 733=>450, 734=>375, 736=>412, 737=>263, 738=>355, 739=>427, 740=>282, 741=>436, 742=>436, 743=>436, 744=>436, 745=>436, 750=>498, 768=>0, 769=>0, + 770=>0, 771=>0, 772=>0, 773=>0, 774=>0, 775=>0, 776=>0, 777=>0, 778=>0, 779=>0, 780=>0, 781=>0, 782=>0, 783=>0, 784=>0, 785=>0, + 786=>0, 787=>0, 788=>0, 789=>0, 790=>0, 791=>0, 792=>0, 793=>0, 794=>0, 795=>0, 796=>0, 797=>0, 798=>0, 799=>0, 800=>0, 801=>0, + 802=>0, 803=>0, 804=>0, 805=>0, 806=>0, 807=>0, 808=>0, 809=>0, 810=>0, 811=>0, 812=>0, 813=>0, 814=>0, 815=>0, 816=>0, 817=>0, + 818=>0, 819=>0, 820=>0, 821=>0, 822=>0, 823=>0, 824=>0, 825=>0, 826=>0, 827=>0, 828=>0, 829=>0, 830=>0, 831=>0, 835=>0, 847=>0, + 856=>0, 865=>0, 884=>271, 885=>271, 890=>450, 894=>332, 900=>450, 901=>450, 902=>698, 903=>313, 904=>852, 905=>1006, 906=>595, 908=>798, 910=>857, 911=>820, + 912=>435, 913=>698, 914=>760, 915=>639, 916=>698, 917=>686, 918=>657, 919=>850, 920=>784, 921=>421, 922=>782, 923=>698, 924=>996, 925=>822, 926=>633, 927=>784, + 928=>850, 929=>677, 931=>636, 932=>669, 933=>642, 934=>784, 935=>698, 936=>822, 937=>801, 938=>421, 939=>642, 940=>692, 941=>547, 942=>654, 943=>435, 944=>624, + 945=>692, 946=>598, 947=>594, 948=>600, 949=>547, 950=>533, 951=>654, 952=>600, 953=>435, 954=>674, 955=>631, 956=>659, 957=>624, 958=>533, 959=>600, 960=>659, + 961=>598, 962=>548, 963=>664, 964=>605, 965=>624, 966=>814, 967=>592, 968=>847, 969=>857, 970=>435, 971=>624, 972=>600, 973=>624, 974=>857, 976=>600, 977=>764, + 978=>687, 979=>872, 980=>687, 981=>847, 982=>857, 983=>589, 984=>784, 985=>600, 986=>716, 987=>548, 988=>639, 989=>475, 990=>531, 991=>593, 992=>716, 993=>600, + 1008=>589, 1009=>598, 1010=>548, 1011=>325, 1012=>784, 1013=>548, 1014=>548, 1015=>681, 1016=>629, 1017=>716, 1018=>996, 1019=>774, 1020=>623, 1021=>716, 1022=>716, 1023=>716, + 1024=>686, 1025=>686, 1026=>811, 1028=>716, 1029=>650, 1030=>421, 1031=>421, 1032=>426, 1033=>1081, 1034=>1135, 1035=>866, 1037=>850, 1038=>730, 1040=>733, 1041=>769, 1042=>760, + 1043=>621, 1044=>800, 1045=>686, 1046=>1181, 1047=>649, 1048=>850, 1049=>850, 1050=>818, 1051=>795, 1052=>996, 1053=>850, 1054=>784, 1055=>850, 1056=>677, 1057=>716, 1058=>669, + 1059=>730, 1060=>854, 1061=>698, 1062=>870, 1063=>822, 1064=>1141, 1065=>1164, 1066=>861, 1067=>1081, 1068=>743, 1069=>716, 1070=>1158, 1071=>793, 1072=>583, 1073=>600, 1074=>625, + 1075=>551, 1076=>600, 1077=>572, 1078=>909, 1079=>574, 1080=>667, 1081=>667, 1082=>650, 1083=>634, 1084=>782, 1085=>659, 1086=>600, 1087=>659, 1088=>629, 1089=>548, 1090=>558, + 1091=>576, 1092=>812, 1093=>536, 1094=>665, 1095=>659, 1096=>967, 1097=>974, 1098=>690, 1099=>902, 1100=>611, 1101=>548, 1102=>923, 1103=>665, 1104=>572, 1105=>572, 1106=>646, + 1107=>551, 1108=>548, 1109=>506, 1110=>342, 1111=>342, 1112=>325, 1113=>871, 1114=>896, 1115=>654, 1117=>667, 1118=>576, 1119=>659, 1122=>792, 1123=>633, 1138=>784, 1139=>587, + 1140=>824, 1141=>673, 1164=>712, 1165=>598, 1168=>630, 1169=>556, 1170=>639, 1171=>573, 1172=>781, 1173=>645, 1174=>1181, 1175=>909, 1176=>649, 1177=>574, 1178=>852, 1179=>669, + 1182=>818, 1183=>624, 1184=>899, 1185=>660, 1186=>870, 1187=>665, 1188=>1068, 1189=>882, 1190=>1210, 1191=>953, 1194=>716, 1195=>548, 1196=>669, 1197=>558, 1198=>642, 1199=>523, + 1202=>779, 1203=>584, 1204=>1125, 1205=>896, 1206=>835, 1207=>665, 1210=>819, 1211=>654, 1216=>421, 1217=>1181, 1218=>909, 1219=>782, 1220=>624, 1223=>850, 1224=>659, 1227=>822, + 1228=>659, 1231=>342, 1232=>733, 1233=>583, 1234=>733, 1235=>583, 1236=>931, 1237=>877, 1238=>686, 1239=>572, 1240=>784, 1241=>572, 1242=>784, 1243=>572, 1244=>1181, 1245=>909, + 1246=>649, 1247=>574, 1248=>511, 1249=>511, 1250=>850, 1251=>667, 1252=>850, 1253=>667, 1254=>784, 1255=>600, 1256=>784, 1257=>600, 1258=>784, 1259=>600, 1260=>716, 1261=>548, + 1262=>730, 1263=>576, 1264=>730, 1265=>576, 1266=>730, 1267=>576, 1268=>822, 1269=>659, 1270=>621, 1271=>551, 1272=>1081, 1273=>902, 7426=>846, 7432=>458, 7433=>288, 7444=>890, + 7446=>600, 7447=>600, 7453=>663, 7454=>853, 7455=>853, 7491=>419, 7492=>419, 7493=>448, 7494=>591, 7495=>448, 7496=>448, 7497=>400, 7498=>400, 7499=>370, 7500=>370, 7501=>448, + 7502=>270, 7503=>471, 7504=>655, 7505=>426, 7506=>420, 7507=>384, 7508=>420, 7509=>420, 7510=>448, 7511=>333, 7512=>468, 7513=>390, 7514=>655, 7515=>442, 7543=>576, 7547=>342, + 7557=>342, 7579=>448, 7580=>384, 7581=>384, 7582=>420, 7583=>370, 7584=>345, 7585=>335, 7586=>448, 7587=>470, 7588=>270, 7589=>276, 7590=>270, 7591=>270, 7592=>333, 7593=>331, + 7594=>289, 7595=>387, 7596=>613, 7597=>655, 7598=>529, 7599=>528, 7600=>425, 7601=>420, 7602=>470, 7603=>360, 7604=>348, 7605=>333, 7606=>468, 7607=>427, 7609=>439, 7610=>442, + 7611=>371, 7612=>474, 7613=>371, 7614=>407, 7615=>420, 7680=>698, 7681=>583, 7682=>760, 7683=>629, 7684=>760, 7685=>629, 7686=>760, 7687=>629, 7688=>716, 7689=>548, 7690=>780, + 7691=>629, 7692=>780, 7693=>629, 7694=>780, 7695=>629, 7696=>780, 7697=>629, 7698=>780, 7699=>629, 7700=>686, 7701=>572, 7702=>686, 7703=>572, 7704=>686, 7705=>572, 7706=>686, + 7707=>572, 7710=>639, 7711=>387, 7712=>769, 7713=>629, 7714=>850, 7715=>654, 7716=>850, 7717=>654, 7718=>850, 7719=>654, 7720=>850, 7721=>654, 7722=>850, 7723=>654, 7724=>421, + 7725=>342, 7728=>782, 7729=>624, 7730=>782, 7731=>624, 7732=>782, 7733=>624, 7734=>633, 7735=>342, 7736=>633, 7737=>342, 7738=>633, 7739=>342, 7740=>633, 7741=>342, 7742=>996, + 7743=>952, 7744=>996, 7745=>952, 7746=>996, 7747=>952, 7748=>822, 7749=>654, 7750=>822, 7751=>654, 7752=>822, 7753=>654, 7754=>822, 7755=>654, 7760=>784, 7761=>600, 7762=>784, + 7763=>600, 7764=>677, 7765=>629, 7766=>677, 7767=>629, 7768=>748, 7769=>474, 7770=>748, 7771=>474, 7772=>748, 7773=>474, 7774=>748, 7775=>474, 7776=>650, 7777=>506, 7778=>650, + 7779=>506, 7784=>650, 7785=>506, 7786=>669, 7787=>416, 7788=>669, 7789=>416, 7790=>669, 7791=>416, 7792=>669, 7793=>416, 7794=>785, 7795=>654, 7796=>785, 7797=>654, 7798=>785, + 7799=>654, 7800=>785, 7801=>654, 7802=>785, 7803=>654, 7804=>698, 7805=>523, 7806=>698, 7807=>523, 7808=>1011, 7809=>774, 7810=>1011, 7811=>774, 7812=>1011, 7813=>774, 7814=>1011, + 7815=>774, 7816=>1011, 7817=>774, 7818=>698, 7819=>536, 7820=>698, 7821=>536, 7822=>642, 7823=>523, 7824=>657, 7825=>511, 7826=>657, 7827=>511, 7828=>657, 7829=>511, 7830=>654, + 7831=>416, 7832=>774, 7833=>523, 7834=>913, 7835=>506, 7840=>698, 7841=>583, 7842=>698, 7843=>583, 7852=>698, 7853=>583, 7854=>698, 7855=>583, 7856=>698, 7857=>583, 7858=>698, + 7859=>583, 7860=>698, 7861=>583, 7862=>698, 7863=>583, 7864=>686, 7865=>572, 7866=>686, 7867=>572, 7868=>686, 7869=>572, 7878=>686, 7879=>572, 7880=>421, 7881=>342, 7882=>421, + 7883=>342, 7884=>784, 7885=>600, 7886=>784, 7887=>600, 7896=>784, 7897=>600, 7908=>785, 7909=>654, 7910=>785, 7911=>654, 7922=>642, 7923=>523, 7924=>642, 7925=>523, 7926=>642, + 7927=>523, 7928=>642, 7929=>523, 7936=>692, 7937=>692, 7938=>692, 7939=>692, 7940=>692, 7941=>692, 7942=>692, 7943=>692, 7944=>698, 7945=>698, 7946=>880, 7947=>880, 7948=>748, + 7949=>764, 7950=>698, 7951=>698, 7952=>547, 7953=>547, 7954=>547, 7955=>547, 7956=>547, 7957=>547, 7960=>826, 7961=>817, 7962=>1052, 7963=>1052, 7964=>984, 7965=>1007, 7968=>654, + 7969=>654, 7970=>654, 7971=>654, 7972=>654, 7973=>654, 7974=>654, 7975=>654, 7976=>990, 7977=>984, 7978=>1222, 7979=>1225, 7980=>1151, 7981=>1177, 7982=>1077, 7983=>1074, 7984=>435, + 7985=>435, 7986=>435, 7987=>435, 7988=>435, 7989=>435, 7990=>435, 7991=>435, 7992=>566, 7993=>555, 7994=>790, 7995=>792, 7996=>719, 7997=>748, 7998=>650, 7999=>642, 8000=>600, + 8001=>600, 8002=>600, 8003=>600, 8004=>600, 8005=>600, 8008=>810, 8009=>841, 8010=>1116, 8011=>1113, 8012=>931, 8013=>959, 8016=>624, 8017=>624, 8018=>624, 8019=>624, 8020=>624, + 8021=>624, 8022=>624, 8023=>624, 8025=>830, 8027=>1067, 8029=>1020, 8031=>917, 8032=>857, 8033=>857, 8034=>857, 8035=>857, 8036=>857, 8037=>857, 8038=>857, 8039=>857, 8040=>838, + 8041=>867, 8042=>1141, 8043=>1146, 8044=>949, 8045=>979, 8046=>920, 8047=>954, 8048=>692, 8049=>692, 8050=>547, 8051=>547, 8052=>654, 8053=>654, 8054=>435, 8055=>435, 8056=>600, + 8057=>600, 8058=>624, 8059=>624, 8060=>857, 8061=>857, 8064=>692, 8065=>692, 8066=>692, 8067=>692, 8068=>692, 8069=>692, 8070=>692, 8071=>692, 8072=>698, 8073=>698, 8074=>880, + 8075=>880, 8076=>748, 8077=>764, 8078=>698, 8079=>698, 8080=>654, 8081=>654, 8082=>654, 8083=>654, 8084=>654, 8085=>654, 8086=>654, 8087=>654, 8088=>990, 8089=>984, 8090=>1222, + 8091=>1225, 8092=>1151, 8093=>1177, 8094=>1077, 8095=>1074, 8096=>857, 8097=>857, 8098=>857, 8099=>857, 8100=>857, 8101=>857, 8102=>857, 8103=>857, 8104=>838, 8105=>867, 8106=>1141, + 8107=>1146, 8108=>949, 8109=>979, 8110=>920, 8111=>954, 8112=>692, 8113=>692, 8114=>692, 8115=>692, 8116=>692, 8118=>692, 8119=>692, 8120=>698, 8121=>698, 8122=>729, 8123=>698, + 8124=>698, 8125=>450, 8126=>450, 8127=>450, 8128=>450, 8129=>450, 8130=>654, 8131=>654, 8132=>654, 8134=>654, 8135=>654, 8136=>899, 8137=>852, 8138=>1072, 8139=>1006, 8140=>850, + 8141=>450, 8142=>450, 8143=>450, 8144=>435, 8145=>435, 8146=>435, 8147=>435, 8150=>435, 8151=>435, 8152=>421, 8153=>421, 8154=>642, 8155=>595, 8157=>450, 8158=>450, 8159=>450, + 8160=>624, 8161=>624, 8162=>624, 8163=>624, 8164=>598, 8165=>598, 8166=>624, 8167=>624, 8168=>642, 8169=>642, 8170=>917, 8171=>857, 8172=>819, 8173=>450, 8174=>450, 8175=>450, + 8178=>857, 8179=>857, 8180=>857, 8182=>857, 8183=>857, 8184=>962, 8185=>798, 8186=>991, 8187=>820, 8188=>801, 8189=>450, 8190=>450, 8192=>450, 8193=>900, 8194=>450, 8195=>900, + 8196=>296, 8197=>225, 8198=>150, 8199=>626, 8200=>313, 8201=>180, 8202=>89, 8203=>0, 8204=>0, 8205=>0, 8206=>0, 8207=>0, 8208=>374, 8209=>374, 8210=>626, 8213=>900, + 8215=>450, 8219=>313, 8223=>518, 8227=>575, 8228=>313, 8229=>606, 8234=>0, 8235=>0, 8236=>0, 8237=>0, 8238=>0, 8239=>180, 8241=>1638, 8252=>566, 8253=>527, 8254=>450, + 8263=>974, 8264=>770, 8265=>770, 8287=>200, 8288=>0, 8289=>0, 8290=>0, 8291=>0, 8298=>0, 8299=>0, 8300=>0, 8301=>0, 8302=>0, 8303=>0, 8304=>394, 8308=>394, + 8309=>394, 8310=>394, 8311=>394, 8312=>394, 8313=>394, 8319=>467, 8320=>394, 8321=>394, 8322=>394, 8323=>394, 8324=>394, 8325=>394, 8326=>394, 8327=>394, 8328=>394, 8329=>394, + 8358=>626, 8367=>1039, 8369=>710, 8372=>788, 8373=>626, 8462=>654, 8470=>978, 8486=>801, 8490=>782, 8491=>698, 8531=>932, 8532=>932, 8533=>932, 8534=>932, 8535=>932, 8536=>932, + 8537=>932, 8538=>932, 8539=>932, 8540=>932, 8541=>932, 8542=>932, 8543=>554, 8592=>754, 8593=>754, 8594=>754, 8595=>754, 8706=>480, 8710=>677, 8711=>677, 8719=>757, 8721=>677, + 8722=>754, 8725=>150, 8729=>313, 8730=>591, 8733=>604, 8734=>750, 8735=>754, 8736=>754, 8743=>730, 8744=>730, 8745=>730, 8746=>730, 8747=>521, 8748=>900, 8749=>1252, 8770=>754, + 8771=>754, 8776=>754, 8800=>754, 8801=>754, 8804=>754, 8805=>754, 8962=>751, 8968=>426, 8969=>426, 8970=>426, 8971=>426, 8976=>754, 8977=>484, 8984=>835, 8985=>754, 8992=>521, + 8993=>521, 8997=>900, 9000=>1299, 9085=>907, 9134=>521, 9167=>850, 9251=>751, 9600=>692, 9601=>692, 9602=>692, 9603=>692, 9604=>692, 9605=>692, 9606=>692, 9607=>692, 9608=>692, + 9609=>692, 9610=>692, 9611=>692, 9612=>692, 9613=>692, 9614=>692, 9615=>692, 9616=>692, 9617=>692, 9618=>692, 9619=>692, 9620=>692, 9621=>692, 9622=>692, 9623=>692, 9624=>692, + 9625=>692, 9626=>692, 9627=>692, 9628=>692, 9629=>692, 9630=>692, 9631=>692, 9632=>850, 9633=>850, 9634=>850, 9635=>850, 9636=>850, 9637=>850, 9638=>850, 9639=>850, 9640=>850, + 9641=>850, 9642=>610, 9643=>610, 9644=>850, 9645=>850, 9646=>495, 9647=>495, 9648=>692, 9649=>692, 9650=>692, 9651=>692, 9652=>452, 9653=>452, 9654=>692, 9655=>692, 9656=>452, + 9657=>452, 9658=>692, 9659=>692, 9660=>692, 9661=>692, 9662=>452, 9663=>452, 9664=>692, 9665=>692, 9666=>452, 9667=>452, 9668=>692, 9669=>692, 9670=>692, 9671=>692, 9672=>692, + 9673=>785, 9674=>444, 9675=>785, 9676=>785, 9677=>785, 9678=>785, 9679=>785, 9680=>785, 9681=>785, 9682=>785, 9683=>785, 9684=>785, 9685=>785, 9686=>474, 9687=>474, 9688=>712, + 9689=>873, 9690=>873, 9691=>873, 9692=>348, 9693=>348, 9694=>348, 9695=>348, 9696=>785, 9697=>785, 9698=>692, 9699=>692, 9700=>692, 9701=>692, 9702=>531, 9703=>850, 9704=>850, + 9705=>850, 9706=>850, 9707=>850, 9708=>692, 9709=>692, 9710=>692, 9711=>1007, 9712=>850, 9713=>850, 9714=>850, 9715=>850, 9716=>785, 9717=>785, 9718=>785, 9719=>785, 9720=>692, + 9721=>692, 9722=>692, 9723=>747, 9724=>747, 9725=>659, 9726=>659, 9727=>692, 9728=>807, 9784=>807, 9785=>807, 9786=>807, 9787=>807, 9788=>807, 9791=>552, 9792=>658, 9793=>658, + 9794=>807, 9795=>807, 9796=>807, 9797=>807, 9798=>807, 9799=>807, 9824=>807, 9825=>807, 9826=>807, 9827=>807, 9828=>807, 9829=>807, 9830=>807, 9831=>807, 9833=>424, 9834=>574, + 9835=>807, 9836=>807, 9837=>424, 9838=>321, 9839=>435, 10208=>444, 10216=>411, 10217=>411, 10731=>444, 10764=>1604, 10765=>549, 10766=>549, 11026=>850, 11027=>850, 11028=>850, 11029=>850, + 11030=>692, 11031=>692, 11032=>692, 11033=>692, 11034=>850, 63173=>600, 63185=>450, 63188=>450, 64256=>837, 64257=>654, 64258=>654, 64259=>1013, 64260=>1011, 64261=>784, 64262=>908, 65024=>0, + 65025=>0, 65026=>0, 65027=>0, 65028=>0, 65029=>0, 65030=>0, 65031=>0, 65032=>0, 65033=>0, 65034=>0, 65035=>0, 65036=>0, 65037=>0, 65038=>0, 65039=>0, 65533=>1002} + font[:enc]=''; + font[:diff]=''; + font[:file]='DejaVuSerifCondensed-Bold.z'; + font[:ctg]='DejaVuSerifCondensed-Bold.ctg.z'; + font[:originalsize]=177248; +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSerifCondensedbi.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/DejaVuSerifCondensedbi.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,131 @@ +TCPDFFontDescriptor.define('DejaVuSerifCondensedbi') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='DejaVuSerifCondensed-BoldOblique'; + font[:desc]={'Ascent'=>939,'Descent'=>-236,'CapHeight'=>939,'Flags'=>96,'FontBBox'=>'[-815 -423 1584 1235]','ItalicAngle'=>-11,'StemV'=>120,'MissingWidth'=>540} + font[:up]=-42; + font[:ut]=44; + font[:cw]={ + 0=>540, 32=>313, 33=>395, 34=>469, 35=>754, 36=>626, 37=>855, 38=>813, 39=>275, 40=>426, 41=>426, 42=>470, 43=>754, 44=>313, 45=>374, 46=>313, + 47=>329, 48=>626, 49=>626, 50=>626, 51=>626, 52=>626, 53=>626, 54=>626, 55=>626, 56=>626, 57=>626, 58=>332, 59=>332, 60=>754, 61=>754, 62=>754, + 63=>527, 64=>900, 65=>698, 66=>760, 67=>716, 68=>780, 69=>686, 70=>639, 71=>769, 72=>850, 73=>421, 74=>426, 75=>782, 76=>633, 77=>996, 78=>822, + 79=>784, 80=>677, 81=>784, 82=>748, 83=>650, 84=>669, 85=>785, 86=>698, 87=>1011, 88=>698, 89=>642, 90=>657, 91=>426, 92=>329, 93=>426, 94=>754, + 95=>450, 96=>450, 97=>583, 98=>629, 99=>548, 100=>629, 101=>572, 102=>387, 103=>629, 104=>654, 105=>342, 106=>325, 107=>624, 108=>342, 109=>952, 110=>654, + 111=>600, 112=>629, 113=>629, 114=>474, 115=>506, 116=>416, 117=>654, 118=>523, 119=>774, 120=>536, 121=>523, 122=>511, 123=>579, 124=>327, 125=>579, 126=>754, + 8364=>626, 1027=>621, 8218=>313, 402=>387, 8222=>518, 8230=>900, 8224=>470, 8225=>470, 710=>450, 8240=>1246, 352=>650, 8249=>360, 338=>1062, 1036=>818, 381=>657, 1039=>850, + 8216=>313, 8217=>313, 8220=>518, 8221=>518, 8226=>575, 8211=>450, 8212=>900, 732=>450, 8482=>900, 353=>506, 8250=>360, 339=>925, 1116=>609, 382=>511, 376=>642, 160=>313, + 161=>395, 162=>626, 163=>626, 164=>572, 165=>626, 166=>327, 167=>470, 168=>450, 169=>900, 170=>438, 171=>563, 172=>754, 173=>374, 174=>900, 175=>450, 176=>450, + 177=>754, 178=>394, 179=>394, 180=>450, 181=>659, 182=>572, 183=>313, 184=>450, 185=>394, 186=>450, 187=>563, 188=>938, 189=>938, 190=>938, 191=>527, 192=>698, + 193=>698, 194=>698, 195=>698, 196=>698, 197=>698, 198=>931, 199=>716, 200=>686, 201=>686, 202=>686, 203=>686, 204=>421, 205=>421, 206=>421, 207=>421, 208=>787, + 209=>822, 210=>784, 211=>784, 212=>784, 213=>784, 214=>784, 215=>754, 216=>784, 217=>785, 218=>785, 219=>785, 220=>785, 221=>642, 222=>681, 223=>684, 224=>583, + 225=>583, 226=>583, 227=>583, 228=>583, 229=>583, 230=>877, 231=>548, 232=>572, 233=>572, 234=>572, 235=>572, 236=>342, 237=>342, 238=>342, 239=>342, 240=>600, + 241=>654, 242=>600, 243=>600, 244=>600, 245=>600, 246=>600, 247=>754, 248=>600, 249=>654, 250=>654, 251=>654, 252=>654, 253=>523, 254=>629, 255=>523, 256=>698, + 257=>583, 258=>698, 259=>583, 260=>698, 261=>583, 262=>716, 263=>548, 264=>716, 265=>548, 266=>716, 267=>548, 268=>716, 269=>548, 270=>780, 271=>629, 272=>787, + 273=>629, 274=>686, 275=>572, 276=>686, 277=>572, 278=>686, 279=>572, 280=>686, 281=>572, 282=>686, 283=>572, 284=>769, 285=>629, 286=>769, 287=>629, 288=>769, + 289=>629, 290=>769, 291=>629, 292=>850, 293=>654, 294=>850, 295=>654, 296=>421, 297=>342, 298=>421, 299=>342, 300=>421, 301=>342, 302=>421, 303=>342, 304=>421, + 305=>342, 306=>848, 307=>676, 308=>426, 309=>325, 310=>782, 311=>624, 312=>624, 313=>633, 314=>342, 315=>633, 316=>342, 317=>633, 318=>457, 319=>633, 320=>501, + 321=>639, 322=>346, 323=>822, 324=>654, 325=>822, 326=>654, 327=>822, 328=>654, 329=>907, 330=>822, 331=>654, 332=>784, 333=>600, 334=>784, 335=>600, 336=>784, + 337=>600, 340=>748, 341=>474, 342=>748, 343=>474, 344=>748, 345=>474, 346=>650, 347=>506, 348=>650, 349=>506, 350=>650, 351=>506, 354=>669, 355=>416, 356=>669, + 357=>416, 358=>669, 359=>416, 360=>785, 361=>654, 362=>785, 363=>654, 364=>785, 365=>654, 366=>785, 367=>654, 368=>785, 369=>654, 370=>785, 371=>654, 372=>1011, + 373=>774, 374=>642, 375=>523, 377=>657, 378=>511, 379=>657, 380=>511, 383=>387, 384=>629, 385=>760, 386=>769, 387=>629, 388=>769, 389=>629, 390=>716, 391=>716, + 392=>548, 393=>787, 394=>780, 395=>769, 396=>629, 397=>600, 398=>686, 399=>784, 400=>626, 401=>639, 403=>769, 404=>693, 405=>938, 406=>421, 407=>421, 408=>782, + 409=>624, 410=>342, 411=>631, 412=>952, 413=>822, 414=>654, 415=>784, 416=>784, 417=>600, 418=>1080, 419=>849, 420=>677, 421=>629, 422=>748, 423=>650, 424=>506, + 425=>636, 426=>298, 427=>416, 428=>669, 429=>416, 430=>669, 431=>785, 432=>654, 433=>801, 434=>801, 435=>642, 436=>628, 437=>657, 438=>511, 439=>511, 440=>511, + 441=>511, 443=>626, 444=>678, 445=>511, 446=>482, 448=>265, 449=>443, 450=>413, 451=>265, 452=>1437, 453=>1292, 454=>1140, 455=>1059, 456=>958, 457=>667, 458=>1248, + 459=>1148, 460=>980, 461=>698, 462=>583, 463=>421, 464=>342, 465=>784, 466=>600, 467=>785, 468=>654, 469=>785, 470=>654, 471=>785, 472=>654, 473=>785, 474=>654, + 475=>785, 476=>654, 477=>572, 478=>698, 479=>583, 480=>698, 481=>583, 482=>931, 483=>877, 484=>806, 485=>629, 486=>769, 487=>629, 488=>782, 489=>624, 490=>784, + 491=>600, 492=>784, 493=>600, 494=>511, 495=>511, 496=>325, 497=>1437, 498=>1292, 499=>1140, 500=>769, 501=>629, 502=>1099, 504=>822, 505=>654, 506=>698, 507=>583, + 508=>931, 509=>877, 510=>784, 511=>600, 512=>698, 513=>583, 514=>698, 515=>583, 516=>686, 517=>572, 518=>686, 519=>572, 520=>421, 521=>342, 522=>421, 523=>342, + 524=>784, 525=>600, 526=>784, 527=>600, 528=>748, 529=>474, 530=>748, 531=>474, 532=>785, 533=>654, 534=>785, 535=>654, 536=>650, 537=>506, 538=>669, 539=>416, + 542=>850, 543=>654, 545=>711, 548=>657, 549=>511, 550=>698, 551=>583, 552=>686, 553=>572, 554=>784, 555=>600, 556=>784, 557=>600, 558=>784, 559=>600, 560=>784, + 561=>600, 562=>642, 563=>523, 564=>516, 565=>830, 566=>508, 567=>325, 568=>928, 569=>928, 570=>698, 571=>716, 572=>548, 573=>633, 574=>669, 575=>506, 576=>511, + 577=>594, 578=>492, 581=>698, 592=>583, 593=>629, 594=>629, 595=>629, 596=>548, 597=>548, 598=>629, 599=>657, 600=>572, 601=>572, 602=>816, 603=>547, 604=>505, + 605=>816, 606=>647, 607=>348, 608=>629, 609=>629, 610=>563, 611=>641, 612=>564, 613=>654, 614=>654, 615=>654, 616=>342, 617=>342, 618=>342, 619=>368, 620=>462, + 621=>342, 622=>716, 623=>952, 624=>952, 625=>952, 626=>654, 627=>654, 628=>641, 629=>600, 630=>955, 631=>674, 632=>600, 633=>514, 634=>514, 635=>514, 636=>474, + 637=>474, 638=>406, 639=>438, 640=>721, 641=>721, 642=>506, 643=>298, 644=>387, 645=>486, 646=>298, 647=>443, 648=>416, 649=>654, 650=>611, 651=>624, 652=>577, + 653=>816, 654=>571, 655=>654, 656=>511, 657=>511, 658=>511, 659=>511, 660=>482, 661=>482, 662=>482, 663=>490, 664=>784, 665=>625, 666=>647, 667=>563, 668=>659, + 669=>345, 670=>666, 671=>581, 672=>629, 673=>482, 674=>482, 675=>1005, 676=>1061, 677=>1005, 678=>819, 679=>643, 680=>817, 681=>935, 682=>711, 683=>716, 684=>596, + 685=>398, 686=>552, 687=>646, 688=>469, 689=>466, 690=>282, 691=>372, 692=>372, 693=>432, 694=>474, 695=>595, 696=>436, 697=>271, 699=>313, 700=>313, 701=>313, + 702=>330, 703=>330, 704=>282, 705=>282, 711=>450, 712=>254, 713=>450, 716=>254, 720=>332, 721=>332, 722=>330, 723=>330, 726=>353, 728=>450, 729=>450, 730=>450, + 731=>450, 733=>450, 734=>375, 736=>412, 737=>263, 738=>355, 739=>427, 740=>282, 741=>436, 742=>436, 743=>436, 744=>436, 745=>436, 750=>498, 768=>0, 769=>0, + 770=>0, 771=>0, 772=>0, 773=>0, 774=>0, 775=>0, 776=>0, 777=>0, 778=>0, 779=>0, 780=>0, 781=>0, 782=>0, 783=>0, 784=>0, 785=>0, + 786=>0, 787=>0, 788=>0, 789=>0, 790=>0, 791=>0, 792=>0, 793=>0, 794=>0, 795=>0, 796=>0, 797=>0, 798=>0, 799=>0, 800=>0, 801=>0, + 802=>0, 803=>0, 804=>0, 805=>0, 806=>0, 807=>0, 808=>0, 809=>0, 810=>0, 811=>0, 812=>0, 813=>0, 814=>0, 815=>0, 816=>0, 817=>0, + 818=>0, 819=>0, 820=>0, 821=>0, 822=>0, 823=>0, 824=>0, 825=>0, 826=>0, 827=>0, 828=>0, 829=>0, 830=>0, 831=>0, 835=>0, 847=>0, + 856=>0, 865=>0, 884=>271, 885=>271, 890=>450, 894=>332, 900=>450, 901=>450, 902=>698, 903=>313, 904=>852, 905=>1022, 906=>595, 908=>798, 910=>857, 911=>820, + 912=>435, 913=>698, 914=>760, 915=>639, 916=>698, 917=>686, 918=>657, 919=>850, 920=>784, 921=>421, 922=>782, 923=>698, 924=>996, 925=>822, 926=>633, 927=>784, + 928=>850, 929=>677, 931=>636, 932=>669, 933=>642, 934=>784, 935=>698, 936=>822, 937=>801, 938=>421, 939=>642, 940=>692, 941=>547, 942=>654, 943=>435, 944=>624, + 945=>692, 946=>598, 947=>594, 948=>600, 949=>547, 950=>533, 951=>654, 952=>600, 953=>435, 954=>674, 955=>631, 956=>659, 957=>624, 958=>533, 959=>600, 960=>659, + 961=>598, 962=>548, 963=>664, 964=>605, 965=>624, 966=>814, 967=>592, 968=>847, 969=>857, 970=>435, 971=>624, 972=>600, 973=>624, 974=>857, 976=>600, 977=>764, + 978=>687, 979=>872, 980=>687, 981=>847, 982=>857, 983=>589, 984=>784, 985=>600, 986=>716, 987=>548, 988=>639, 989=>475, 990=>531, 991=>593, 992=>716, 993=>600, + 1008=>589, 1009=>598, 1010=>548, 1011=>325, 1012=>784, 1013=>548, 1014=>548, 1015=>681, 1016=>629, 1017=>716, 1018=>996, 1019=>774, 1020=>623, 1021=>716, 1022=>716, 1023=>716, + 1024=>686, 1025=>686, 1026=>811, 1028=>716, 1029=>650, 1030=>421, 1031=>421, 1032=>426, 1033=>1081, 1034=>1135, 1035=>866, 1037=>850, 1038=>730, 1040=>733, 1041=>769, 1042=>760, + 1043=>621, 1044=>800, 1045=>686, 1046=>1181, 1047=>649, 1048=>850, 1049=>850, 1050=>818, 1051=>795, 1052=>996, 1053=>850, 1054=>784, 1055=>850, 1056=>677, 1057=>716, 1058=>669, + 1059=>730, 1060=>854, 1061=>698, 1062=>870, 1063=>822, 1064=>1141, 1065=>1164, 1066=>861, 1067=>1081, 1068=>743, 1069=>716, 1070=>1158, 1071=>793, 1072=>583, 1073=>650, 1074=>591, + 1075=>506, 1076=>625, 1077=>572, 1078=>1175, 1079=>574, 1080=>654, 1081=>654, 1082=>609, 1083=>659, 1084=>873, 1085=>656, 1086=>600, 1087=>654, 1088=>629, 1089=>548, 1090=>952, + 1091=>538, 1092=>812, 1093=>536, 1094=>723, 1095=>643, 1096=>952, 1097=>1021, 1098=>654, 1099=>916, 1100=>593, 1101=>580, 1102=>901, 1103=>716, 1104=>572, 1105=>572, 1106=>646, + 1107=>506, 1108=>548, 1109=>506, 1110=>342, 1111=>342, 1112=>325, 1113=>913, 1114=>910, 1115=>654, 1117=>654, 1118=>538, 1119=>654, 1122=>792, 1123=>945, 1138=>784, 1139=>587, + 1140=>824, 1141=>673, 1164=>712, 1165=>598, 1168=>630, 1169=>556, 1170=>639, 1171=>573, 1172=>768, 1173=>634, 1174=>1181, 1175=>1175, 1176=>649, 1177=>574, 1178=>812, 1179=>624, + 1182=>818, 1183=>624, 1184=>899, 1185=>659, 1186=>856, 1187=>725, 1188=>1068, 1189=>882, 1190=>1191, 1191=>911, 1194=>716, 1195=>548, 1196=>669, 1197=>1028, 1198=>642, 1199=>523, + 1202=>709, 1203=>536, 1204=>1112, 1205=>876, 1206=>822, 1207=>644, 1210=>819, 1211=>654, 1216=>421, 1217=>1181, 1218=>1175, 1219=>782, 1220=>624, 1223=>850, 1224=>659, 1227=>885, + 1228=>659, 1231=>342, 1232=>733, 1233=>583, 1234=>733, 1235=>583, 1236=>931, 1237=>877, 1238=>686, 1239=>572, 1240=>784, 1241=>572, 1242=>784, 1243=>572, 1244=>1181, 1245=>1175, + 1246=>649, 1247=>574, 1248=>511, 1249=>511, 1250=>850, 1251=>654, 1252=>850, 1253=>654, 1254=>784, 1255=>600, 1256=>784, 1257=>600, 1258=>784, 1259=>600, 1260=>716, 1261=>580, + 1262=>730, 1263=>538, 1264=>730, 1265=>538, 1266=>730, 1267=>538, 1268=>822, 1269=>643, 1270=>621, 1271=>573, 1272=>1081, 1273=>916, 7426=>846, 7432=>458, 7433=>288, 7444=>890, + 7446=>600, 7447=>600, 7453=>663, 7454=>853, 7455=>853, 7491=>419, 7492=>419, 7493=>448, 7494=>591, 7495=>448, 7496=>448, 7497=>400, 7498=>400, 7499=>370, 7500=>370, 7501=>448, + 7502=>270, 7503=>471, 7504=>655, 7505=>426, 7506=>420, 7507=>384, 7508=>420, 7509=>420, 7510=>448, 7511=>333, 7512=>468, 7513=>390, 7514=>655, 7515=>442, 7543=>576, 7547=>342, + 7557=>342, 7579=>448, 7580=>384, 7581=>384, 7582=>420, 7583=>370, 7584=>345, 7585=>335, 7586=>448, 7587=>470, 7588=>270, 7589=>276, 7590=>270, 7591=>270, 7592=>333, 7593=>331, + 7594=>289, 7595=>387, 7596=>613, 7597=>655, 7598=>529, 7599=>528, 7600=>425, 7601=>420, 7602=>470, 7603=>360, 7604=>348, 7605=>333, 7606=>468, 7607=>427, 7609=>439, 7610=>442, + 7611=>371, 7612=>474, 7613=>371, 7614=>407, 7615=>420, 7680=>698, 7681=>583, 7682=>760, 7683=>629, 7684=>760, 7685=>629, 7686=>760, 7687=>629, 7688=>716, 7689=>548, 7690=>780, + 7691=>629, 7692=>780, 7693=>629, 7694=>780, 7695=>629, 7696=>780, 7697=>629, 7698=>780, 7699=>629, 7700=>686, 7701=>572, 7702=>686, 7703=>572, 7704=>686, 7705=>572, 7706=>686, + 7707=>572, 7710=>639, 7711=>387, 7712=>769, 7713=>629, 7714=>850, 7715=>654, 7716=>850, 7717=>654, 7718=>850, 7719=>654, 7720=>850, 7721=>654, 7722=>850, 7723=>654, 7724=>421, + 7725=>342, 7728=>782, 7729=>624, 7730=>782, 7731=>624, 7732=>782, 7733=>624, 7734=>633, 7735=>342, 7736=>633, 7737=>342, 7738=>633, 7739=>342, 7740=>633, 7741=>342, 7742=>996, + 7743=>952, 7744=>996, 7745=>952, 7746=>996, 7747=>952, 7748=>822, 7749=>654, 7750=>822, 7751=>654, 7752=>822, 7753=>654, 7754=>822, 7755=>654, 7760=>784, 7761=>600, 7762=>784, + 7763=>600, 7764=>677, 7765=>629, 7766=>677, 7767=>629, 7768=>748, 7769=>474, 7770=>748, 7771=>474, 7772=>748, 7773=>474, 7774=>748, 7775=>474, 7776=>650, 7777=>506, 7778=>650, + 7779=>506, 7784=>650, 7785=>506, 7786=>669, 7787=>416, 7788=>669, 7789=>416, 7790=>669, 7791=>416, 7792=>669, 7793=>416, 7794=>785, 7795=>654, 7796=>785, 7797=>654, 7798=>785, + 7799=>654, 7800=>785, 7801=>654, 7802=>785, 7803=>654, 7804=>698, 7805=>523, 7806=>698, 7807=>523, 7808=>1011, 7809=>774, 7810=>1011, 7811=>774, 7812=>1011, 7813=>774, 7814=>1011, + 7815=>774, 7816=>1011, 7817=>774, 7818=>698, 7819=>536, 7820=>698, 7821=>536, 7822=>642, 7823=>523, 7824=>657, 7825=>511, 7826=>657, 7827=>511, 7828=>657, 7829=>511, 7830=>654, + 7831=>416, 7832=>774, 7833=>523, 7834=>913, 7835=>506, 7840=>698, 7841=>583, 7842=>698, 7843=>583, 7852=>698, 7853=>583, 7854=>698, 7855=>583, 7856=>698, 7857=>583, 7858=>698, + 7859=>583, 7860=>698, 7861=>583, 7862=>698, 7863=>583, 7864=>686, 7865=>572, 7866=>686, 7867=>572, 7868=>686, 7869=>572, 7878=>686, 7879=>572, 7880=>421, 7881=>342, 7882=>421, + 7883=>342, 7884=>784, 7885=>600, 7886=>784, 7887=>600, 7896=>784, 7897=>600, 7908=>785, 7909=>654, 7910=>785, 7911=>654, 7922=>642, 7923=>523, 7924=>642, 7925=>523, 7926=>642, + 7927=>523, 7928=>642, 7929=>523, 7936=>692, 7937=>692, 7938=>692, 7939=>692, 7940=>692, 7941=>692, 7942=>692, 7943=>692, 7944=>698, 7945=>698, 7946=>880, 7947=>880, 7948=>748, + 7949=>764, 7950=>698, 7951=>698, 7952=>547, 7953=>547, 7954=>547, 7955=>547, 7956=>547, 7957=>547, 7960=>826, 7961=>817, 7962=>1052, 7963=>1052, 7964=>984, 7965=>1007, 7968=>654, + 7969=>654, 7970=>654, 7971=>654, 7972=>654, 7973=>654, 7974=>654, 7975=>654, 7976=>990, 7977=>984, 7978=>1222, 7979=>1225, 7980=>1151, 7981=>1177, 7982=>1077, 7983=>1074, 7984=>435, + 7985=>435, 7986=>435, 7987=>435, 7988=>435, 7989=>435, 7990=>435, 7991=>435, 7992=>566, 7993=>555, 7994=>790, 7995=>792, 7996=>719, 7997=>748, 7998=>650, 7999=>642, 8000=>600, + 8001=>600, 8002=>600, 8003=>600, 8004=>600, 8005=>600, 8008=>810, 8009=>841, 8010=>1116, 8011=>1113, 8012=>931, 8013=>959, 8016=>624, 8017=>624, 8018=>624, 8019=>624, 8020=>624, + 8021=>624, 8022=>624, 8023=>624, 8025=>830, 8027=>1067, 8029=>1020, 8031=>917, 8032=>857, 8033=>857, 8034=>857, 8035=>857, 8036=>857, 8037=>857, 8038=>857, 8039=>857, 8040=>838, + 8041=>867, 8042=>1141, 8043=>1146, 8044=>949, 8045=>979, 8046=>920, 8047=>954, 8048=>692, 8049=>692, 8050=>547, 8051=>547, 8052=>654, 8053=>654, 8054=>435, 8055=>435, 8056=>600, + 8057=>600, 8058=>624, 8059=>624, 8060=>857, 8061=>857, 8064=>692, 8065=>692, 8066=>692, 8067=>692, 8068=>692, 8069=>692, 8070=>692, 8071=>692, 8072=>698, 8073=>698, 8074=>880, + 8075=>880, 8076=>748, 8077=>764, 8078=>698, 8079=>698, 8080=>654, 8081=>654, 8082=>654, 8083=>654, 8084=>654, 8085=>654, 8086=>654, 8087=>654, 8088=>990, 8089=>984, 8090=>1222, + 8091=>1225, 8092=>1151, 8093=>1177, 8094=>1077, 8095=>1074, 8096=>857, 8097=>857, 8098=>857, 8099=>857, 8100=>857, 8101=>857, 8102=>857, 8103=>857, 8104=>838, 8105=>867, 8106=>1141, + 8107=>1146, 8108=>949, 8109=>979, 8110=>920, 8111=>954, 8112=>692, 8113=>692, 8114=>692, 8115=>692, 8116=>692, 8118=>692, 8119=>692, 8120=>698, 8121=>698, 8122=>729, 8123=>698, + 8124=>698, 8125=>450, 8126=>450, 8127=>450, 8128=>450, 8129=>450, 8130=>654, 8131=>654, 8132=>654, 8134=>654, 8135=>654, 8136=>899, 8137=>852, 8138=>1072, 8139=>1006, 8140=>850, + 8141=>450, 8142=>450, 8143=>450, 8144=>435, 8145=>435, 8146=>435, 8147=>435, 8150=>435, 8151=>435, 8152=>421, 8153=>421, 8154=>642, 8155=>595, 8157=>450, 8158=>450, 8159=>450, + 8160=>624, 8161=>624, 8162=>624, 8163=>624, 8164=>598, 8165=>598, 8166=>624, 8167=>624, 8168=>642, 8169=>642, 8170=>917, 8171=>857, 8172=>819, 8173=>450, 8174=>450, 8175=>450, + 8178=>857, 8179=>857, 8180=>857, 8182=>857, 8183=>857, 8184=>962, 8185=>798, 8186=>991, 8187=>820, 8188=>801, 8189=>450, 8190=>450, 8192=>450, 8193=>900, 8194=>450, 8195=>900, + 8196=>296, 8197=>225, 8198=>150, 8199=>626, 8200=>313, 8201=>180, 8202=>89, 8203=>0, 8204=>0, 8205=>0, 8206=>0, 8207=>0, 8208=>374, 8209=>374, 8210=>626, 8213=>900, + 8215=>450, 8219=>313, 8223=>518, 8227=>575, 8228=>313, 8229=>606, 8234=>0, 8235=>0, 8236=>0, 8237=>0, 8238=>0, 8239=>180, 8241=>1631, 8252=>566, 8253=>527, 8254=>450, + 8263=>974, 8264=>770, 8265=>770, 8287=>200, 8288=>0, 8289=>0, 8290=>0, 8291=>0, 8298=>0, 8299=>0, 8300=>0, 8301=>0, 8302=>0, 8303=>0, 8304=>394, 8308=>394, + 8309=>394, 8310=>394, 8311=>394, 8312=>394, 8313=>394, 8319=>467, 8320=>394, 8321=>394, 8322=>394, 8323=>394, 8324=>394, 8325=>394, 8326=>394, 8327=>394, 8328=>394, 8329=>394, + 8358=>626, 8367=>1039, 8369=>710, 8372=>788, 8373=>626, 8462=>654, 8470=>978, 8486=>801, 8490=>782, 8491=>698, 8531=>932, 8532=>932, 8533=>932, 8534=>932, 8535=>932, 8536=>932, + 8537=>932, 8538=>932, 8539=>932, 8540=>932, 8541=>932, 8542=>932, 8543=>554, 8592=>754, 8593=>754, 8594=>754, 8595=>754, 8706=>480, 8710=>677, 8711=>677, 8719=>757, 8721=>677, + 8722=>754, 8725=>150, 8729=>313, 8730=>591, 8733=>604, 8734=>750, 8735=>754, 8736=>754, 8743=>730, 8744=>730, 8745=>730, 8746=>730, 8747=>521, 8748=>900, 8749=>1252, 8770=>754, + 8771=>754, 8776=>754, 8800=>754, 8801=>754, 8804=>754, 8805=>754, 8962=>751, 8968=>426, 8969=>426, 8970=>426, 8971=>426, 8976=>754, 8977=>484, 8984=>835, 8985=>754, 8992=>521, + 8993=>521, 8997=>900, 9000=>1299, 9085=>907, 9134=>521, 9167=>850, 9251=>751, 9600=>692, 9601=>692, 9602=>692, 9603=>692, 9604=>692, 9605=>692, 9606=>692, 9607=>692, 9608=>692, + 9609=>692, 9610=>692, 9611=>692, 9612=>692, 9613=>692, 9614=>692, 9615=>692, 9616=>692, 9617=>692, 9618=>692, 9619=>692, 9620=>692, 9621=>692, 9622=>692, 9623=>692, 9624=>692, + 9625=>692, 9626=>692, 9627=>692, 9628=>692, 9629=>692, 9630=>692, 9631=>692, 9632=>850, 9633=>850, 9634=>850, 9635=>850, 9636=>850, 9637=>850, 9638=>850, 9639=>850, 9640=>850, + 9641=>850, 9642=>610, 9643=>610, 9644=>850, 9645=>850, 9646=>495, 9647=>495, 9648=>692, 9649=>692, 9650=>692, 9651=>692, 9652=>452, 9653=>452, 9654=>692, 9655=>692, 9656=>452, + 9657=>452, 9658=>692, 9659=>692, 9660=>692, 9661=>692, 9662=>452, 9663=>452, 9664=>692, 9665=>692, 9666=>452, 9667=>452, 9668=>692, 9669=>692, 9670=>692, 9671=>692, 9672=>692, + 9673=>785, 9674=>444, 9675=>785, 9676=>785, 9677=>785, 9678=>785, 9679=>785, 9680=>785, 9681=>785, 9682=>785, 9683=>785, 9684=>785, 9685=>785, 9686=>474, 9687=>474, 9688=>712, + 9689=>873, 9690=>873, 9691=>873, 9692=>348, 9693=>348, 9694=>348, 9695=>348, 9696=>785, 9697=>785, 9698=>692, 9699=>692, 9700=>692, 9701=>692, 9702=>531, 9703=>850, 9704=>850, + 9705=>850, 9706=>850, 9707=>850, 9708=>692, 9709=>692, 9710=>692, 9711=>1007, 9712=>850, 9713=>850, 9714=>850, 9715=>850, 9716=>785, 9717=>785, 9718=>785, 9719=>785, 9720=>692, + 9721=>692, 9722=>692, 9723=>747, 9724=>747, 9725=>659, 9726=>659, 9727=>692, 9728=>807, 9784=>807, 9785=>807, 9786=>807, 9787=>807, 9788=>807, 9791=>552, 9792=>658, 9793=>658, + 9794=>807, 9795=>807, 9796=>807, 9797=>807, 9798=>807, 9799=>807, 9824=>807, 9825=>807, 9826=>807, 9827=>807, 9828=>807, 9829=>807, 9830=>807, 9831=>807, 9833=>424, 9834=>574, + 9835=>807, 9836=>807, 9837=>424, 9838=>321, 9839=>435, 10208=>444, 10216=>411, 10217=>411, 10731=>444, 10764=>1604, 10765=>549, 10766=>549, 11026=>850, 11027=>850, 11028=>850, 11029=>850, + 11030=>692, 11031=>692, 11032=>692, 11033=>692, 11034=>850, 63172=>506, 63173=>600, 63174=>629, 63175=>654, 63176=>952, 63185=>450, 63188=>450, 64256=>744, 64257=>654, 64258=>654, 64259=>998, + 64260=>1031, 64261=>791, 64262=>906, 65024=>0, 65025=>0, 65026=>0, 65027=>0, 65028=>0, 65029=>0, 65030=>0, 65031=>0, 65032=>0, 65033=>0, 65034=>0, 65035=>0, 65036=>0, + 65037=>0, 65038=>0, 65039=>0, 65533=>1002} + font[:enc]=''; + font[:diff]=''; + font[:file]='DejaVuSerifCondensed-BoldOblique.z'; + font[:ctg]='DejaVuSerifCondensed-BoldOblique.ctg.z'; + font[:originalsize]=182696; +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSerifCondensedi.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/DejaVuSerifCondensedi.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,131 @@ +TCPDFFontDescriptor.define('DejaVuSerifCondensedi') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='DejaVuSerifCondensed-Oblique'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>96,'FontBBox'=>'[-755 -401 1485 1227]','ItalicAngle'=>-11,'StemV'=>70,'MissingWidth'=>540} + font[:up]=-42; + font[:ut]=44; + font[:cw]={ + 0=>540, 32=>286, 33=>361, 34=>414, 35=>754, 36=>572, 37=>855, 38=>801, 39=>247, 40=>351, 41=>351, 42=>450, 43=>754, 44=>286, 45=>304, 46=>286, + 47=>303, 48=>572, 49=>572, 50=>572, 51=>572, 52=>572, 53=>572, 54=>572, 55=>572, 56=>572, 57=>572, 58=>303, 59=>303, 60=>754, 61=>754, 62=>754, + 63=>482, 64=>900, 65=>650, 66=>661, 67=>688, 68=>721, 69=>657, 70=>624, 71=>719, 72=>785, 73=>355, 74=>360, 75=>672, 76=>598, 77=>921, 78=>787, + 79=>738, 80=>605, 81=>738, 82=>677, 83=>616, 84=>600, 85=>758, 86=>650, 87=>925, 88=>641, 89=>594, 90=>625, 91=>351, 92=>303, 93=>351, 94=>754, + 95=>450, 96=>450, 97=>536, 98=>576, 99=>504, 100=>576, 101=>532, 102=>333, 103=>576, 104=>580, 105=>288, 106=>279, 107=>545, 108=>288, 109=>853, 110=>580, + 111=>542, 112=>576, 113=>576, 114=>430, 115=>461, 116=>361, 117=>580, 118=>508, 119=>770, 120=>507, 121=>508, 122=>474, 123=>572, 124=>303, 125=>572, 126=>754, + 8364=>572, 1027=>596, 8218=>286, 402=>333, 8222=>466, 8230=>900, 8224=>450, 8225=>450, 710=>450, 8240=>1208, 352=>616, 8249=>360, 338=>1023, 1036=>696, 381=>625, 1039=>785, + 8216=>286, 8217=>286, 8220=>460, 8221=>460, 8226=>531, 8211=>450, 8212=>900, 732=>450, 8482=>900, 353=>461, 8250=>360, 339=>890, 1116=>554, 382=>474, 376=>594, 160=>286, + 161=>361, 162=>572, 163=>572, 164=>572, 165=>572, 166=>303, 167=>450, 168=>450, 169=>900, 170=>427, 171=>550, 172=>754, 173=>304, 174=>900, 175=>450, 176=>450, + 177=>754, 178=>360, 179=>360, 180=>450, 181=>584, 182=>572, 183=>286, 184=>450, 185=>360, 186=>423, 187=>550, 188=>872, 189=>872, 190=>872, 191=>482, 192=>650, + 193=>650, 194=>650, 195=>650, 196=>650, 197=>650, 198=>901, 199=>688, 200=>657, 201=>657, 202=>657, 203=>657, 204=>355, 205=>355, 206=>355, 207=>355, 208=>726, + 209=>787, 210=>738, 211=>738, 212=>738, 213=>738, 214=>738, 215=>754, 216=>738, 217=>758, 218=>758, 219=>758, 220=>758, 221=>594, 222=>608, 223=>601, 224=>536, + 225=>536, 226=>536, 227=>536, 228=>536, 229=>536, 230=>846, 231=>504, 232=>532, 233=>532, 234=>532, 235=>532, 236=>288, 237=>288, 238=>288, 239=>288, 240=>542, + 241=>580, 242=>542, 243=>542, 244=>542, 245=>542, 246=>542, 247=>754, 248=>542, 249=>580, 250=>580, 251=>580, 252=>580, 253=>508, 254=>576, 255=>508, 256=>650, + 257=>536, 258=>650, 259=>536, 260=>650, 261=>536, 262=>688, 263=>504, 264=>688, 265=>504, 266=>688, 267=>504, 268=>688, 269=>504, 270=>721, 271=>576, 272=>726, + 273=>576, 274=>657, 275=>532, 276=>657, 277=>532, 278=>657, 279=>532, 280=>657, 281=>532, 282=>657, 283=>532, 284=>719, 285=>576, 286=>719, 287=>576, 288=>719, + 289=>576, 290=>719, 291=>576, 292=>785, 293=>580, 294=>785, 295=>580, 296=>355, 297=>288, 298=>355, 299=>288, 300=>355, 301=>288, 302=>355, 303=>288, 304=>355, + 305=>288, 306=>721, 307=>479, 308=>360, 309=>279, 310=>672, 311=>545, 312=>545, 313=>598, 314=>288, 315=>598, 316=>288, 317=>598, 318=>360, 319=>604, 320=>418, + 321=>602, 322=>292, 323=>787, 324=>580, 325=>787, 326=>580, 327=>787, 328=>580, 329=>779, 330=>787, 331=>580, 332=>738, 333=>542, 334=>738, 335=>542, 336=>738, + 337=>542, 340=>677, 341=>430, 342=>677, 343=>430, 344=>677, 345=>430, 346=>616, 347=>461, 348=>616, 349=>461, 350=>616, 351=>461, 354=>600, 355=>361, 356=>600, + 357=>361, 358=>600, 359=>361, 360=>758, 361=>580, 362=>758, 363=>580, 364=>758, 365=>580, 366=>758, 367=>580, 368=>758, 369=>580, 370=>758, 371=>580, 372=>925, + 373=>770, 374=>594, 375=>508, 377=>625, 378=>474, 379=>625, 380=>474, 383=>333, 384=>576, 385=>661, 386=>661, 387=>576, 388=>661, 389=>576, 390=>688, 391=>688, + 392=>504, 393=>726, 394=>721, 395=>661, 396=>576, 397=>542, 398=>657, 399=>738, 400=>572, 401=>624, 403=>719, 404=>641, 405=>839, 406=>355, 407=>355, 408=>672, + 409=>545, 410=>288, 411=>570, 412=>853, 413=>787, 414=>580, 415=>738, 416=>738, 417=>542, 418=>936, 419=>726, 420=>605, 421=>576, 422=>677, 423=>616, 424=>461, + 425=>636, 426=>292, 427=>361, 428=>600, 429=>361, 430=>600, 431=>758, 432=>580, 433=>746, 434=>684, 435=>664, 436=>670, 437=>625, 438=>474, 439=>508, 440=>508, + 441=>508, 443=>572, 444=>618, 445=>508, 446=>482, 448=>265, 449=>443, 450=>413, 451=>265, 452=>1347, 453=>1195, 454=>1050, 455=>958, 456=>876, 457=>567, 458=>1148, + 459=>1066, 460=>858, 461=>650, 462=>536, 463=>355, 464=>288, 465=>738, 466=>542, 467=>758, 468=>580, 469=>758, 470=>580, 471=>758, 472=>580, 473=>758, 474=>580, + 475=>758, 476=>580, 477=>532, 478=>650, 479=>536, 480=>650, 481=>536, 482=>901, 483=>846, 484=>763, 485=>576, 486=>719, 487=>576, 488=>672, 489=>545, 490=>738, + 491=>542, 492=>738, 493=>542, 494=>508, 495=>508, 496=>288, 497=>1347, 498=>1195, 499=>1050, 500=>719, 501=>576, 502=>1038, 504=>787, 505=>580, 506=>650, 507=>536, + 508=>901, 509=>846, 510=>738, 511=>542, 512=>650, 513=>536, 514=>650, 515=>536, 516=>657, 517=>532, 518=>657, 519=>532, 520=>355, 521=>288, 522=>355, 523=>288, + 524=>738, 525=>542, 526=>738, 527=>542, 528=>677, 529=>430, 530=>677, 531=>430, 532=>758, 533=>580, 534=>758, 535=>580, 536=>616, 537=>461, 538=>600, 539=>361, + 542=>785, 543=>580, 545=>732, 548=>625, 549=>474, 550=>650, 551=>536, 552=>657, 553=>532, 554=>738, 555=>542, 556=>738, 557=>542, 558=>738, 559=>542, 560=>738, + 561=>542, 562=>594, 563=>508, 564=>450, 565=>748, 566=>444, 567=>279, 568=>864, 569=>864, 570=>650, 571=>688, 572=>504, 573=>598, 574=>600, 575=>461, 576=>474, + 577=>525, 578=>417, 581=>650, 592=>536, 593=>576, 594=>607, 595=>576, 596=>504, 597=>504, 598=>582, 599=>614, 600=>532, 601=>532, 602=>759, 603=>483, 604=>458, + 605=>695, 606=>552, 607=>283, 608=>615, 609=>576, 610=>489, 611=>641, 612=>507, 613=>580, 614=>580, 615=>580, 616=>288, 617=>353, 618=>288, 619=>342, 620=>409, + 621=>326, 622=>633, 623=>853, 624=>853, 625=>853, 626=>579, 627=>624, 628=>581, 629=>542, 630=>711, 631=>583, 632=>542, 633=>451, 634=>451, 635=>496, 636=>430, + 637=>430, 638=>407, 639=>407, 640=>534, 641=>534, 642=>461, 643=>244, 644=>333, 645=>438, 646=>292, 647=>361, 648=>361, 649=>580, 650=>558, 651=>547, 652=>508, + 653=>770, 654=>508, 655=>589, 656=>537, 657=>504, 658=>508, 659=>504, 660=>482, 661=>482, 662=>482, 663=>461, 664=>738, 665=>506, 666=>552, 667=>588, 668=>600, + 669=>329, 670=>545, 671=>581, 672=>615, 673=>482, 674=>482, 675=>896, 676=>930, 677=>898, 678=>728, 679=>538, 680=>704, 681=>804, 682=>582, 683=>608, 684=>538, + 685=>398, 686=>703, 687=>690, 688=>389, 689=>387, 690=>237, 691=>312, 692=>312, 693=>387, 694=>352, 695=>527, 696=>381, 697=>250, 699=>286, 700=>286, 701=>286, + 702=>276, 703=>276, 704=>252, 705=>252, 711=>450, 712=>254, 713=>450, 716=>254, 720=>303, 721=>303, 722=>276, 723=>276, 726=>353, 728=>450, 729=>450, 730=>450, + 731=>450, 733=>450, 734=>375, 736=>402, 737=>218, 738=>303, 739=>381, 740=>252, 741=>436, 742=>436, 743=>436, 744=>436, 745=>436, 750=>435, 768=>0, 769=>0, + 770=>0, 771=>0, 772=>0, 773=>0, 774=>0, 775=>0, 776=>0, 777=>0, 778=>0, 779=>0, 780=>0, 781=>0, 782=>0, 783=>0, 784=>0, 785=>0, + 786=>0, 787=>0, 788=>0, 789=>0, 790=>0, 791=>0, 792=>0, 793=>0, 794=>0, 795=>0, 796=>0, 797=>0, 798=>0, 799=>0, 800=>0, 801=>0, + 802=>0, 803=>0, 804=>0, 805=>0, 806=>0, 807=>0, 808=>0, 809=>0, 810=>0, 811=>0, 812=>0, 813=>0, 814=>0, 815=>0, 816=>0, 817=>0, + 818=>0, 819=>0, 820=>0, 821=>0, 822=>0, 823=>0, 824=>0, 825=>0, 826=>0, 827=>0, 828=>0, 829=>0, 830=>0, 831=>0, 835=>0, 847=>0, + 856=>0, 865=>0, 884=>250, 885=>250, 890=>450, 894=>303, 900=>450, 901=>450, 902=>650, 903=>286, 904=>810, 905=>935, 906=>505, 908=>751, 910=>808, 911=>767, + 912=>353, 913=>650, 914=>661, 915=>624, 916=>650, 917=>657, 918=>625, 919=>785, 920=>738, 921=>355, 922=>672, 923=>650, 924=>921, 925=>787, 926=>633, 927=>738, + 928=>785, 929=>605, 931=>636, 932=>600, 933=>594, 934=>738, 935=>641, 936=>789, 937=>746, 938=>355, 939=>594, 940=>607, 941=>483, 942=>539, 943=>353, 944=>547, + 945=>607, 946=>520, 947=>538, 948=>542, 949=>483, 950=>488, 951=>539, 952=>542, 953=>353, 954=>590, 955=>570, 956=>584, 957=>547, 958=>496, 959=>542, 960=>591, + 961=>529, 962=>504, 963=>614, 964=>498, 965=>547, 966=>630, 967=>545, 968=>706, 969=>734, 970=>353, 971=>547, 972=>542, 973=>547, 974=>734, 976=>524, 977=>643, + 978=>618, 979=>787, 980=>618, 981=>613, 982=>734, 983=>561, 984=>738, 985=>542, 986=>688, 987=>504, 988=>624, 989=>417, 990=>531, 991=>593, 992=>704, 993=>519, + 1008=>561, 1009=>529, 1010=>504, 1011=>279, 1012=>738, 1013=>504, 1014=>504, 1015=>608, 1016=>576, 1017=>688, 1018=>921, 1019=>637, 1020=>529, 1021=>688, 1022=>688, 1023=>688, + 1024=>657, 1025=>657, 1026=>719, 1028=>688, 1029=>616, 1030=>355, 1031=>355, 1032=>360, 1033=>976, 1034=>1006, 1035=>785, 1037=>785, 1038=>650, 1040=>681, 1041=>661, 1042=>661, + 1043=>596, 1044=>731, 1045=>657, 1046=>1011, 1047=>561, 1048=>785, 1049=>773, 1050=>696, 1051=>751, 1052=>921, 1053=>785, 1054=>738, 1055=>785, 1056=>605, 1057=>688, 1058=>600, + 1059=>650, 1060=>747, 1061=>641, 1062=>785, 1063=>695, 1064=>1027, 1065=>1027, 1066=>715, 1067=>885, 1068=>606, 1069=>688, 1070=>1074, 1071=>727, 1072=>536, 1073=>584, 1074=>532, + 1075=>455, 1076=>575, 1077=>532, 1078=>1034, 1079=>491, 1080=>580, 1081=>580, 1082=>554, 1083=>573, 1084=>786, 1085=>593, 1086=>542, 1087=>580, 1088=>576, 1089=>504, 1090=>853, + 1091=>522, 1092=>704, 1093=>507, 1094=>628, 1095=>560, 1096=>853, 1097=>901, 1098=>600, 1099=>733, 1100=>490, 1101=>504, 1102=>792, 1103=>596, 1104=>532, 1105=>532, 1106=>561, + 1107=>455, 1108=>504, 1109=>461, 1110=>288, 1111=>288, 1112=>279, 1113=>773, 1114=>790, 1115=>580, 1117=>580, 1118=>522, 1119=>580, 1122=>686, 1123=>794, 1138=>738, 1139=>497, + 1140=>773, 1141=>610, 1164=>621, 1165=>442, 1168=>604, 1169=>476, 1170=>624, 1171=>483, 1172=>657, 1173=>552, 1174=>1011, 1175=>1034, 1176=>561, 1177=>491, 1178=>696, 1179=>545, + 1182=>696, 1183=>545, 1184=>803, 1185=>597, 1186=>785, 1187=>641, 1188=>1025, 1189=>779, 1190=>1085, 1191=>848, 1194=>688, 1195=>504, 1196=>600, 1197=>911, 1198=>594, 1199=>508, + 1202=>641, 1203=>507, 1204=>971, 1205=>809, 1206=>674, 1207=>621, 1210=>674, 1211=>580, 1216=>355, 1217=>1011, 1218=>1034, 1219=>672, 1220=>545, 1223=>785, 1224=>600, 1227=>674, + 1228=>600, 1231=>288, 1232=>681, 1233=>536, 1234=>681, 1235=>536, 1236=>901, 1237=>846, 1238=>657, 1239=>532, 1240=>738, 1241=>532, 1242=>738, 1243=>532, 1244=>1011, 1245=>1034, + 1246=>561, 1247=>491, 1248=>508, 1249=>508, 1250=>785, 1251=>580, 1252=>785, 1253=>580, 1254=>738, 1255=>542, 1256=>738, 1257=>542, 1258=>738, 1259=>542, 1260=>688, 1261=>504, + 1262=>650, 1263=>522, 1264=>650, 1265=>522, 1266=>650, 1267=>522, 1268=>695, 1269=>560, 1270=>596, 1271=>483, 1272=>885, 1273=>733, 7426=>846, 7432=>458, 7433=>288, 7444=>890, + 7446=>542, 7447=>542, 7453=>663, 7454=>853, 7455=>853, 7491=>426, 7492=>301, 7493=>439, 7494=>635, 7495=>439, 7496=>439, 7497=>427, 7498=>427, 7499=>385, 7500=>385, 7501=>439, + 7502=>236, 7503=>407, 7504=>631, 7505=>438, 7506=>426, 7507=>391, 7508=>426, 7509=>426, 7510=>439, 7511=>301, 7512=>438, 7513=>497, 7514=>631, 7515=>414, 7543=>576, 7547=>334, + 7557=>288, 7579=>439, 7580=>391, 7581=>391, 7582=>426, 7583=>385, 7584=>278, 7585=>285, 7586=>439, 7587=>438, 7588=>290, 7589=>298, 7590=>290, 7591=>290, 7592=>286, 7593=>237, + 7594=>236, 7595=>409, 7596=>631, 7597=>631, 7598=>445, 7599=>443, 7600=>438, 7601=>426, 7602=>426, 7603=>374, 7604=>269, 7605=>301, 7606=>438, 7607=>429, 7609=>417, 7610=>414, + 7611=>376, 7612=>376, 7613=>376, 7614=>406, 7615=>426, 7680=>650, 7681=>536, 7682=>661, 7683=>576, 7684=>661, 7685=>576, 7686=>661, 7687=>576, 7688=>688, 7689=>504, 7690=>721, + 7691=>576, 7692=>721, 7693=>576, 7694=>721, 7695=>576, 7696=>721, 7697=>576, 7698=>721, 7699=>576, 7700=>657, 7701=>532, 7702=>657, 7703=>532, 7704=>657, 7705=>532, 7706=>657, + 7707=>532, 7710=>624, 7711=>333, 7712=>719, 7713=>576, 7714=>785, 7715=>580, 7716=>785, 7717=>580, 7718=>785, 7719=>580, 7720=>785, 7721=>580, 7722=>785, 7723=>580, 7724=>355, + 7725=>288, 7728=>672, 7729=>545, 7730=>672, 7731=>545, 7732=>672, 7733=>545, 7734=>598, 7735=>288, 7736=>598, 7737=>288, 7738=>598, 7739=>288, 7740=>598, 7741=>288, 7742=>921, + 7743=>853, 7744=>921, 7745=>853, 7746=>921, 7747=>857, 7748=>787, 7749=>580, 7750=>787, 7751=>580, 7752=>787, 7753=>580, 7754=>787, 7755=>580, 7760=>738, 7761=>542, 7762=>738, + 7763=>542, 7764=>605, 7765=>576, 7766=>605, 7767=>576, 7768=>677, 7769=>430, 7770=>677, 7771=>430, 7772=>677, 7773=>430, 7774=>677, 7775=>430, 7776=>616, 7777=>461, 7778=>616, + 7779=>461, 7784=>616, 7785=>461, 7786=>600, 7787=>361, 7788=>600, 7789=>361, 7790=>600, 7791=>361, 7792=>600, 7793=>361, 7794=>758, 7795=>580, 7796=>758, 7797=>580, 7798=>758, + 7799=>580, 7800=>758, 7801=>580, 7802=>758, 7803=>580, 7804=>650, 7805=>508, 7806=>650, 7807=>508, 7808=>925, 7809=>770, 7810=>925, 7811=>770, 7812=>925, 7813=>770, 7814=>925, + 7815=>770, 7816=>925, 7817=>770, 7818=>641, 7819=>507, 7820=>641, 7821=>507, 7822=>594, 7823=>508, 7824=>625, 7825=>474, 7826=>625, 7827=>474, 7828=>625, 7829=>474, 7830=>580, + 7831=>361, 7832=>770, 7833=>508, 7834=>813, 7835=>461, 7840=>650, 7841=>536, 7842=>650, 7843=>536, 7852=>650, 7853=>536, 7854=>650, 7855=>536, 7856=>650, 7857=>536, 7858=>650, + 7859=>536, 7860=>650, 7861=>536, 7862=>650, 7863=>536, 7864=>657, 7865=>532, 7866=>657, 7867=>532, 7868=>657, 7869=>532, 7878=>657, 7879=>532, 7880=>355, 7881=>288, 7882=>355, + 7883=>288, 7884=>738, 7885=>542, 7886=>738, 7887=>542, 7896=>738, 7897=>542, 7908=>758, 7909=>580, 7910=>758, 7911=>580, 7922=>594, 7923=>508, 7924=>594, 7925=>508, 7926=>594, + 7927=>508, 7928=>594, 7929=>508, 7936=>607, 7937=>607, 7938=>607, 7939=>607, 7940=>607, 7941=>607, 7942=>607, 7943=>607, 7944=>650, 7945=>650, 7946=>782, 7947=>782, 7948=>660, + 7949=>687, 7950=>650, 7951=>650, 7952=>483, 7953=>483, 7954=>483, 7955=>483, 7956=>483, 7957=>483, 7960=>768, 7961=>757, 7962=>960, 7963=>969, 7964=>907, 7965=>931, 7968=>539, + 7969=>539, 7970=>539, 7971=>539, 7972=>539, 7973=>539, 7974=>539, 7975=>539, 7976=>898, 7977=>893, 7978=>1090, 7979=>1101, 7980=>1043, 7981=>1064, 7982=>988, 7983=>985, 7984=>353, + 7985=>353, 7986=>353, 7987=>353, 7988=>353, 7989=>353, 7990=>353, 7991=>353, 7992=>469, 7993=>461, 7994=>661, 7995=>664, 7996=>611, 7997=>635, 7998=>561, 7999=>553, 8000=>542, + 8001=>542, 8002=>542, 8003=>542, 8004=>542, 8005=>542, 8008=>738, 8009=>773, 8010=>1008, 8011=>1015, 8012=>843, 8013=>867, 8016=>547, 8017=>547, 8018=>547, 8019=>547, 8020=>547, + 8021=>547, 8022=>547, 8023=>547, 8025=>765, 8027=>971, 8029=>939, 8031=>857, 8032=>734, 8033=>734, 8034=>734, 8035=>734, 8036=>734, 8037=>734, 8038=>734, 8039=>734, 8040=>746, + 8041=>783, 8042=>1018, 8043=>1023, 8044=>852, 8045=>878, 8046=>844, 8047=>873, 8048=>607, 8049=>607, 8050=>483, 8051=>483, 8052=>539, 8053=>539, 8054=>353, 8055=>353, 8056=>542, + 8057=>542, 8058=>547, 8059=>547, 8060=>734, 8061=>734, 8064=>607, 8065=>607, 8066=>607, 8067=>607, 8068=>607, 8069=>607, 8070=>607, 8071=>607, 8072=>650, 8073=>650, 8074=>782, + 8075=>782, 8076=>660, 8077=>687, 8078=>650, 8079=>650, 8080=>539, 8081=>539, 8082=>539, 8083=>539, 8084=>539, 8085=>539, 8086=>539, 8087=>539, 8088=>898, 8089=>893, 8090=>1090, + 8091=>1101, 8092=>1043, 8093=>1064, 8094=>988, 8095=>985, 8096=>734, 8097=>734, 8098=>734, 8099=>734, 8100=>734, 8101=>734, 8102=>734, 8103=>734, 8104=>746, 8105=>783, 8106=>1018, + 8107=>1023, 8108=>852, 8109=>878, 8110=>844, 8111=>873, 8112=>607, 8113=>607, 8114=>607, 8115=>607, 8116=>607, 8118=>607, 8119=>607, 8120=>650, 8121=>650, 8122=>650, 8123=>650, + 8124=>650, 8125=>450, 8126=>450, 8127=>450, 8128=>450, 8129=>450, 8130=>539, 8131=>539, 8132=>539, 8134=>539, 8135=>539, 8136=>820, 8137=>810, 8138=>956, 8139=>935, 8140=>785, + 8141=>450, 8142=>450, 8143=>450, 8144=>353, 8145=>353, 8146=>353, 8147=>353, 8150=>353, 8151=>353, 8152=>355, 8153=>355, 8154=>529, 8155=>505, 8157=>450, 8158=>450, 8159=>450, + 8160=>547, 8161=>547, 8162=>547, 8163=>547, 8164=>529, 8165=>529, 8166=>547, 8167=>547, 8168=>594, 8169=>594, 8170=>829, 8171=>808, 8172=>711, 8173=>450, 8174=>450, 8175=>450, + 8178=>734, 8179=>734, 8180=>734, 8182=>734, 8183=>734, 8184=>865, 8185=>751, 8186=>886, 8187=>767, 8188=>746, 8189=>450, 8190=>450, 8192=>450, 8193=>900, 8194=>450, 8195=>900, + 8196=>296, 8197=>225, 8198=>150, 8199=>572, 8200=>286, 8201=>180, 8202=>89, 8203=>0, 8204=>0, 8205=>0, 8206=>0, 8207=>0, 8208=>304, 8209=>304, 8210=>572, 8213=>900, + 8215=>450, 8219=>286, 8223=>460, 8227=>531, 8228=>301, 8229=>600, 8234=>0, 8235=>0, 8236=>0, 8237=>0, 8238=>0, 8239=>180, 8241=>1560, 8252=>475, 8253=>482, 8254=>450, + 8263=>878, 8264=>678, 8265=>678, 8287=>200, 8288=>0, 8289=>0, 8290=>0, 8291=>0, 8298=>0, 8299=>0, 8300=>0, 8301=>0, 8302=>0, 8303=>0, 8304=>360, 8308=>360, + 8309=>360, 8310=>360, 8311=>360, 8312=>360, 8313=>360, 8319=>389, 8320=>360, 8321=>360, 8322=>360, 8323=>360, 8324=>360, 8325=>360, 8326=>360, 8327=>360, 8328=>360, 8329=>360, + 8358=>594, 8367=>951, 8369=>635, 8372=>702, 8373=>572, 8462=>580, 8470=>852, 8486=>746, 8490=>672, 8491=>650, 8531=>872, 8532=>872, 8533=>872, 8534=>872, 8535=>872, 8536=>872, + 8537=>872, 8538=>872, 8539=>872, 8540=>872, 8541=>872, 8542=>872, 8543=>511, 8592=>754, 8593=>754, 8594=>754, 8595=>754, 8706=>465, 8710=>628, 8711=>628, 8719=>716, 8721=>642, + 8722=>754, 8725=>150, 8729=>286, 8730=>573, 8733=>609, 8734=>750, 8735=>754, 8736=>754, 8743=>659, 8744=>659, 8745=>659, 8746=>659, 8747=>469, 8748=>766, 8749=>1063, 8770=>754, + 8771=>754, 8776=>754, 8800=>754, 8801=>754, 8804=>754, 8805=>754, 8962=>687, 8968=>351, 8969=>351, 8970=>351, 8971=>351, 8976=>754, 8977=>461, 8984=>900, 8985=>754, 8992=>469, + 8993=>469, 8997=>900, 9000=>1299, 9085=>827, 9134=>469, 9167=>850, 9251=>687, 9600=>692, 9601=>692, 9602=>692, 9603=>692, 9604=>692, 9605=>692, 9606=>692, 9607=>692, 9608=>692, + 9609=>692, 9610=>692, 9611=>692, 9612=>692, 9613=>692, 9614=>692, 9615=>692, 9616=>692, 9617=>692, 9618=>692, 9619=>692, 9620=>692, 9621=>692, 9622=>692, 9623=>692, 9624=>692, + 9625=>692, 9626=>692, 9627=>692, 9628=>692, 9629=>692, 9630=>692, 9631=>692, 9632=>850, 9633=>850, 9634=>850, 9635=>850, 9636=>850, 9637=>850, 9638=>850, 9639=>850, 9640=>850, + 9641=>850, 9642=>610, 9643=>610, 9644=>850, 9645=>850, 9646=>495, 9647=>495, 9648=>692, 9649=>692, 9650=>692, 9651=>692, 9652=>452, 9653=>452, 9654=>692, 9655=>692, 9656=>452, + 9657=>452, 9658=>692, 9659=>692, 9660=>692, 9661=>692, 9662=>452, 9663=>452, 9664=>692, 9665=>692, 9666=>452, 9667=>452, 9668=>692, 9669=>692, 9670=>692, 9671=>692, 9672=>692, + 9673=>785, 9674=>444, 9675=>785, 9676=>785, 9677=>785, 9678=>785, 9679=>785, 9680=>785, 9681=>785, 9682=>785, 9683=>785, 9684=>785, 9685=>785, 9686=>474, 9687=>474, 9688=>712, + 9689=>873, 9690=>873, 9691=>873, 9692=>348, 9693=>348, 9694=>348, 9695=>348, 9696=>785, 9697=>785, 9698=>692, 9699=>692, 9700=>692, 9701=>692, 9702=>531, 9703=>850, 9704=>850, + 9705=>850, 9706=>850, 9707=>850, 9708=>692, 9709=>692, 9710=>692, 9711=>1007, 9712=>850, 9713=>850, 9714=>850, 9715=>850, 9716=>785, 9717=>785, 9718=>785, 9719=>785, 9720=>692, + 9721=>692, 9722=>692, 9723=>747, 9724=>747, 9725=>659, 9726=>659, 9727=>692, 9728=>807, 9784=>807, 9785=>807, 9786=>807, 9787=>807, 9788=>807, 9791=>552, 9792=>658, 9793=>658, + 9794=>807, 9795=>807, 9796=>807, 9797=>807, 9798=>807, 9799=>807, 9824=>807, 9825=>807, 9826=>807, 9827=>807, 9828=>807, 9829=>807, 9830=>807, 9831=>807, 9833=>424, 9834=>574, + 9835=>807, 9836=>807, 9837=>424, 9838=>321, 9839=>435, 10208=>444, 10216=>351, 10217=>351, 10731=>444, 10764=>1361, 10765=>469, 10766=>469, 11026=>850, 11027=>850, 11028=>850, 11029=>850, + 11030=>692, 11031=>692, 11032=>692, 11033=>692, 11034=>850, 63172=>455, 63173=>542, 63174=>576, 63175=>580, 63176=>853, 63185=>450, 63188=>450, 64256=>637, 64257=>600, 64258=>600, 64259=>847, + 64260=>887, 64261=>669, 64262=>795, 65024=>0, 65025=>0, 65026=>0, 65027=>0, 65028=>0, 65029=>0, 65030=>0, 65031=>0, 65032=>0, 65033=>0, 65034=>0, 65035=>0, 65036=>0, + 65037=>0, 65038=>0, 65039=>0, 65533=>923} + font[:enc]=''; + font[:diff]=''; + font[:file]='DejaVuSerifCondensed-Oblique.z'; + font[:ctg]='DejaVuSerifCondensed-Oblique.ctg.z'; + font[:originalsize]=181700; +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSerifb.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/DejaVuSerifb.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,130 @@ +TCPDFFontDescriptor.define('DejaVuSerifb') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='DejaVuSerif-Bold'; + font[:desc]={'Ascent'=>939,'Descent'=>-236,'CapHeight'=>939,'Flags'=>32,'FontBBox'=>'[-836 -423 1796 1235]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600}; + font[:up]=-42; + font[:ut]=44; + font[:cw]={ + 0=>600, 32=>348, 33=>439, 34=>521, 35=>838, 36=>696, 37=>950, 38=>903, 39=>306, 40=>473, 41=>473, 42=>523, 43=>838, 44=>348, 45=>415, 46=>348, + 47=>365, 48=>696, 49=>696, 50=>696, 51=>696, 52=>696, 53=>696, 54=>696, 55=>696, 56=>696, 57=>696, 58=>369, 59=>369, 60=>838, 61=>838, 62=>838, + 63=>586, 64=>1000, 65=>776, 66=>845, 67=>796, 68=>867, 69=>762, 70=>710, 71=>854, 72=>945, 73=>468, 74=>473, 75=>869, 76=>703, 77=>1107, 78=>914, + 79=>871, 80=>752, 81=>871, 82=>831, 83=>722, 84=>744, 85=>872, 86=>776, 87=>1123, 88=>776, 89=>714, 90=>730, 91=>473, 92=>365, 93=>473, 94=>838, + 95=>500, 96=>500, 97=>648, 98=>699, 99=>609, 100=>699, 101=>636, 102=>430, 103=>699, 104=>727, 105=>380, 106=>362, 107=>693, 108=>380, 109=>1058, 110=>727, + 111=>667, 112=>699, 113=>699, 114=>527, 115=>563, 116=>462, 117=>727, 118=>581, 119=>861, 120=>596, 121=>581, 122=>568, 123=>643, 124=>364, 125=>643, 126=>838, + 8364=>696, 1027=>690, 8218=>348, 402=>430, 8222=>575, 8230=>1000, 8224=>523, 8225=>523, 710=>500, 8240=>1385, 352=>722, 8249=>400, 338=>1180, 1036=>910, 381=>730, 1039=>945, + 8216=>348, 8217=>348, 8220=>575, 8221=>575, 8226=>639, 8211=>500, 8212=>1000, 732=>500, 8482=>1000, 353=>563, 8250=>400, 339=>1028, 1116=>722, 382=>568, 376=>714, 160=>348, + 161=>439, 162=>696, 163=>696, 164=>636, 165=>696, 166=>364, 167=>523, 168=>500, 169=>1000, 170=>487, 171=>625, 172=>838, 173=>415, 174=>1000, 175=>500, 176=>500, + 177=>838, 178=>438, 179=>438, 180=>500, 181=>732, 182=>636, 183=>348, 184=>500, 185=>438, 186=>500, 187=>625, 188=>1043, 189=>1043, 190=>1043, 191=>586, 192=>776, + 193=>776, 194=>776, 195=>776, 196=>776, 197=>776, 198=>1034, 199=>796, 200=>762, 201=>762, 202=>762, 203=>762, 204=>468, 205=>468, 206=>468, 207=>468, 208=>874, + 209=>914, 210=>871, 211=>871, 212=>871, 213=>871, 214=>871, 215=>838, 216=>871, 217=>872, 218=>872, 219=>872, 220=>872, 221=>714, 222=>757, 223=>760, 224=>648, + 225=>648, 226=>648, 227=>648, 228=>648, 229=>648, 230=>975, 231=>609, 232=>636, 233=>636, 234=>636, 235=>636, 236=>380, 237=>380, 238=>380, 239=>380, 240=>667, + 241=>727, 242=>667, 243=>667, 244=>667, 245=>667, 246=>667, 247=>838, 248=>667, 249=>727, 250=>727, 251=>727, 252=>727, 253=>581, 254=>699, 255=>581, 256=>776, + 257=>648, 258=>776, 259=>648, 260=>776, 261=>648, 262=>796, 263=>609, 264=>796, 265=>609, 266=>796, 267=>609, 268=>796, 269=>609, 270=>867, 271=>699, 272=>874, + 273=>699, 274=>762, 275=>636, 276=>762, 277=>636, 278=>762, 279=>636, 280=>762, 281=>636, 282=>762, 283=>636, 284=>854, 285=>699, 286=>854, 287=>699, 288=>854, + 289=>699, 290=>854, 291=>699, 292=>945, 293=>727, 294=>945, 295=>727, 296=>468, 297=>380, 298=>468, 299=>380, 300=>468, 301=>380, 302=>468, 303=>380, 304=>468, + 305=>380, 306=>942, 307=>751, 308=>473, 309=>362, 310=>869, 311=>693, 312=>693, 313=>703, 314=>380, 315=>703, 316=>380, 317=>703, 318=>508, 319=>703, 320=>557, + 321=>710, 322=>385, 323=>914, 324=>727, 325=>914, 326=>727, 327=>914, 328=>727, 329=>1008, 330=>914, 331=>727, 332=>871, 333=>667, 334=>871, 335=>667, 336=>871, + 337=>667, 340=>831, 341=>527, 342=>831, 343=>527, 344=>831, 345=>527, 346=>722, 347=>563, 348=>722, 349=>563, 350=>722, 351=>563, 354=>744, 355=>462, 356=>744, + 357=>462, 358=>744, 359=>462, 360=>872, 361=>727, 362=>872, 363=>727, 364=>872, 365=>727, 366=>872, 367=>727, 368=>872, 369=>727, 370=>872, 371=>727, 372=>1123, + 373=>861, 374=>714, 375=>581, 377=>730, 378=>568, 379=>730, 380=>568, 383=>430, 384=>699, 385=>845, 386=>854, 387=>699, 388=>854, 389=>699, 390=>796, 391=>796, + 392=>609, 393=>874, 394=>867, 395=>854, 396=>699, 397=>667, 398=>762, 399=>871, 400=>696, 401=>710, 403=>854, 404=>771, 405=>1043, 406=>468, 407=>468, 408=>869, + 409=>693, 410=>380, 411=>701, 412=>1058, 413=>914, 414=>727, 415=>871, 416=>871, 417=>667, 418=>1200, 419=>943, 420=>752, 421=>699, 422=>831, 423=>722, 424=>563, + 425=>707, 426=>331, 427=>462, 428=>744, 429=>462, 430=>744, 431=>872, 432=>727, 433=>890, 434=>890, 435=>714, 436=>708, 437=>730, 438=>568, 439=>568, 440=>568, + 441=>568, 443=>696, 444=>754, 445=>568, 446=>536, 448=>295, 449=>492, 450=>459, 451=>295, 452=>1597, 453=>1435, 454=>1267, 455=>1176, 456=>1065, 457=>742, 458=>1387, + 459=>1276, 460=>1089, 461=>776, 462=>648, 463=>468, 464=>380, 465=>871, 466=>667, 467=>872, 468=>727, 469=>872, 470=>727, 471=>872, 472=>727, 473=>872, 474=>727, + 475=>872, 476=>727, 477=>636, 478=>776, 479=>648, 480=>776, 481=>648, 482=>1034, 483=>975, 484=>896, 485=>699, 486=>854, 487=>699, 488=>869, 489=>693, 490=>871, + 491=>667, 492=>871, 493=>667, 494=>568, 495=>568, 496=>380, 497=>1597, 498=>1435, 499=>1267, 500=>854, 501=>699, 502=>1221, 504=>914, 505=>727, 506=>776, 507=>648, + 508=>1034, 509=>975, 510=>871, 511=>667, 512=>776, 513=>648, 514=>776, 515=>648, 516=>762, 517=>636, 518=>762, 519=>636, 520=>468, 521=>380, 522=>468, 523=>380, + 524=>871, 525=>667, 526=>871, 527=>667, 528=>831, 529=>527, 530=>831, 531=>527, 532=>872, 533=>727, 534=>872, 535=>727, 536=>722, 537=>563, 538=>744, 539=>462, + 542=>945, 543=>727, 545=>791, 548=>730, 549=>568, 550=>776, 551=>648, 552=>762, 553=>636, 554=>871, 555=>667, 556=>871, 557=>667, 558=>871, 559=>667, 560=>871, + 561=>667, 562=>714, 563=>581, 564=>573, 565=>922, 566=>564, 567=>362, 568=>1031, 569=>1031, 570=>776, 571=>796, 572=>609, 573=>703, 574=>744, 575=>563, 576=>568, + 577=>660, 578=>547, 581=>776, 592=>648, 593=>699, 594=>699, 595=>699, 596=>609, 597=>609, 598=>699, 599=>730, 600=>636, 601=>636, 602=>907, 603=>608, 604=>562, + 605=>907, 606=>720, 607=>387, 608=>699, 609=>699, 610=>626, 611=>712, 612=>627, 613=>727, 614=>727, 615=>727, 616=>380, 617=>380, 618=>380, 619=>409, 620=>514, + 621=>380, 622=>795, 623=>1058, 624=>1058, 625=>1058, 626=>727, 627=>727, 628=>712, 629=>667, 630=>1061, 631=>749, 632=>667, 633=>571, 634=>571, 635=>571, 636=>527, + 637=>527, 638=>452, 639=>487, 640=>801, 641=>801, 642=>563, 643=>331, 644=>430, 645=>540, 646=>331, 647=>492, 648=>462, 649=>727, 650=>679, 651=>694, 652=>641, + 653=>907, 654=>635, 655=>727, 656=>568, 657=>568, 658=>568, 659=>568, 660=>536, 661=>536, 662=>536, 663=>545, 664=>871, 665=>695, 666=>720, 667=>626, 668=>732, + 669=>384, 670=>740, 671=>646, 672=>699, 673=>536, 674=>536, 675=>1117, 676=>1179, 677=>1117, 678=>911, 679=>715, 680=>909, 681=>1039, 682=>790, 683=>795, 684=>662, + 685=>443, 686=>613, 687=>717, 688=>521, 689=>519, 690=>313, 691=>414, 692=>414, 693=>480, 694=>527, 695=>662, 696=>485, 697=>302, 699=>348, 700=>348, 701=>348, + 702=>366, 703=>366, 704=>313, 705=>313, 711=>500, 712=>282, 713=>500, 716=>282, 720=>369, 721=>369, 722=>366, 723=>366, 726=>392, 728=>500, 729=>500, 730=>500, + 731=>500, 733=>500, 734=>417, 736=>458, 737=>292, 738=>395, 739=>475, 740=>313, 741=>484, 742=>484, 743=>484, 744=>484, 745=>484, 750=>553, 768=>0, 769=>0, + 770=>0, 771=>0, 772=>0, 773=>0, 774=>0, 775=>0, 776=>0, 777=>0, 778=>0, 779=>0, 780=>0, 781=>0, 782=>0, 783=>0, 784=>0, 785=>0, + 786=>0, 787=>0, 788=>0, 789=>0, 790=>0, 791=>0, 792=>0, 793=>0, 794=>0, 795=>0, 796=>0, 797=>0, 798=>0, 799=>0, 800=>0, 801=>0, + 802=>0, 803=>0, 804=>0, 805=>0, 806=>0, 807=>0, 808=>0, 809=>0, 810=>0, 811=>0, 812=>0, 813=>0, 814=>0, 815=>0, 816=>0, 817=>0, + 818=>0, 819=>0, 820=>0, 821=>0, 822=>0, 823=>0, 824=>0, 825=>0, 826=>0, 827=>0, 828=>0, 829=>0, 830=>0, 831=>0, 835=>0, 847=>0, + 856=>0, 865=>0, 884=>302, 885=>302, 890=>500, 894=>369, 900=>500, 901=>500, 902=>776, 903=>348, 904=>947, 905=>1118, 906=>662, 908=>887, 910=>953, 911=>911, + 912=>484, 913=>776, 914=>845, 915=>710, 916=>776, 917=>762, 918=>730, 919=>945, 920=>871, 921=>468, 922=>869, 923=>776, 924=>1107, 925=>914, 926=>704, 927=>871, + 928=>944, 929=>752, 931=>707, 932=>744, 933=>714, 934=>871, 935=>776, 936=>913, 937=>890, 938=>468, 939=>714, 940=>770, 941=>608, 942=>727, 943=>484, 944=>694, + 945=>770, 946=>664, 947=>660, 948=>667, 949=>608, 950=>592, 951=>727, 952=>667, 953=>484, 954=>750, 955=>701, 956=>732, 957=>694, 958=>592, 959=>667, 960=>732, + 961=>665, 962=>609, 963=>737, 964=>673, 965=>694, 966=>905, 967=>658, 968=>941, 969=>952, 970=>484, 971=>694, 972=>667, 973=>694, 974=>952, 976=>667, 977=>849, + 978=>764, 979=>969, 980=>764, 981=>941, 982=>952, 983=>655, 984=>871, 985=>667, 986=>796, 987=>609, 988=>710, 989=>527, 990=>590, 991=>660, 992=>796, 993=>667, + 1008=>655, 1009=>665, 1010=>609, 1011=>362, 1012=>871, 1013=>609, 1014=>609, 1015=>757, 1016=>699, 1017=>796, 1018=>1107, 1019=>860, 1020=>692, 1021=>796, 1022=>796, 1023=>796, + 1024=>762, 1025=>762, 1026=>901, 1028=>795, 1029=>722, 1030=>468, 1031=>468, 1032=>473, 1033=>1202, 1034=>1262, 1035=>963, 1037=>945, 1038=>812, 1040=>814, 1041=>854, 1042=>845, + 1043=>690, 1044=>889, 1045=>762, 1046=>1312, 1047=>721, 1048=>945, 1049=>945, 1050=>910, 1051=>884, 1052=>1107, 1053=>945, 1054=>871, 1055=>944, 1056=>752, 1057=>796, 1058=>744, + 1059=>812, 1060=>949, 1061=>776, 1062=>966, 1063=>913, 1064=>1268, 1065=>1293, 1066=>957, 1067=>1202, 1068=>825, 1069=>795, 1070=>1287, 1071=>882, 1072=>648, 1073=>667, 1074=>695, + 1075=>613, 1076=>667, 1077=>636, 1078=>1010, 1079=>638, 1080=>742, 1081=>742, 1082=>722, 1083=>705, 1084=>869, 1085=>732, 1086=>667, 1087=>732, 1088=>699, 1089=>609, 1090=>620, + 1091=>640, 1092=>902, 1093=>596, 1094=>739, 1095=>732, 1096=>1075, 1097=>1082, 1098=>767, 1099=>1002, 1100=>679, 1101=>609, 1102=>1025, 1103=>739, 1104=>636, 1105=>636, 1106=>719, + 1107=>613, 1108=>609, 1109=>563, 1110=>380, 1111=>380, 1112=>362, 1113=>968, 1114=>995, 1115=>727, 1117=>742, 1118=>640, 1119=>732, 1122=>880, 1123=>703, 1138=>871, 1139=>652, + 1140=>916, 1141=>749, 1164=>792, 1165=>664, 1168=>700, 1169=>618, 1170=>710, 1171=>637, 1172=>868, 1173=>716, 1174=>1312, 1175=>1010, 1176=>721, 1177=>638, 1178=>947, 1179=>744, + 1182=>910, 1183=>693, 1184=>999, 1185=>733, 1186=>966, 1187=>739, 1188=>1187, 1189=>980, 1190=>1345, 1191=>1059, 1194=>796, 1195=>609, 1196=>744, 1197=>620, 1198=>714, 1199=>581, + 1202=>866, 1203=>649, 1204=>1250, 1205=>997, 1206=>928, 1207=>739, 1210=>910, 1211=>727, 1216=>468, 1217=>1312, 1218=>1010, 1219=>869, 1220=>693, 1223=>945, 1224=>732, 1227=>913, + 1228=>732, 1231=>380, 1232=>814, 1233=>648, 1234=>814, 1235=>648, 1236=>1034, 1237=>975, 1238=>762, 1239=>636, 1240=>871, 1241=>636, 1242=>871, 1243=>636, 1244=>1312, 1245=>1010, + 1246=>721, 1247=>638, 1248=>568, 1249=>568, 1250=>945, 1251=>742, 1252=>945, 1253=>742, 1254=>871, 1255=>667, 1256=>871, 1257=>667, 1258=>871, 1259=>667, 1260=>795, 1261=>609, + 1262=>812, 1263=>640, 1264=>812, 1265=>640, 1266=>812, 1267=>640, 1268=>913, 1269=>732, 1270=>690, 1271=>613, 1272=>1202, 1273=>1002, 7426=>940, 7432=>509, 7433=>320, 7444=>989, + 7446=>667, 7447=>667, 7453=>737, 7454=>948, 7455=>948, 7491=>466, 7492=>466, 7493=>498, 7494=>657, 7495=>499, 7496=>498, 7497=>444, 7498=>444, 7499=>412, 7500=>412, 7501=>498, + 7502=>300, 7503=>523, 7504=>729, 7505=>473, 7506=>467, 7507=>427, 7508=>467, 7509=>467, 7510=>499, 7511=>371, 7512=>520, 7513=>434, 7514=>729, 7515=>491, 7543=>640, 7547=>380, + 7557=>380, 7579=>498, 7580=>427, 7581=>427, 7582=>467, 7583=>412, 7584=>383, 7585=>373, 7586=>498, 7587=>522, 7588=>300, 7589=>307, 7590=>300, 7591=>300, 7592=>370, 7593=>368, + 7594=>321, 7595=>430, 7596=>682, 7597=>729, 7598=>588, 7599=>587, 7600=>472, 7601=>467, 7602=>522, 7603=>400, 7604=>387, 7605=>371, 7606=>520, 7607=>475, 7609=>489, 7610=>491, + 7611=>412, 7612=>527, 7613=>412, 7614=>452, 7615=>467, 7680=>776, 7681=>648, 7682=>845, 7683=>699, 7684=>845, 7685=>699, 7686=>845, 7687=>699, 7688=>796, 7689=>609, 7690=>867, + 7691=>699, 7692=>867, 7693=>699, 7694=>867, 7695=>699, 7696=>867, 7697=>699, 7698=>867, 7699=>699, 7700=>762, 7701=>636, 7702=>762, 7703=>636, 7704=>762, 7705=>636, 7706=>762, + 7707=>636, 7710=>710, 7711=>430, 7712=>854, 7713=>699, 7714=>945, 7715=>727, 7716=>945, 7717=>727, 7718=>945, 7719=>727, 7720=>945, 7721=>727, 7722=>945, 7723=>727, 7724=>468, + 7725=>380, 7728=>869, 7729=>693, 7730=>869, 7731=>693, 7732=>869, 7733=>693, 7734=>703, 7735=>380, 7736=>703, 7737=>380, 7738=>703, 7739=>380, 7740=>703, 7741=>380, 7742=>1107, + 7743=>1058, 7744=>1107, 7745=>1058, 7746=>1107, 7747=>1058, 7748=>914, 7749=>727, 7750=>914, 7751=>727, 7752=>914, 7753=>727, 7754=>914, 7755=>727, 7760=>871, 7761=>667, 7762=>871, + 7763=>667, 7764=>752, 7765=>699, 7766=>752, 7767=>699, 7768=>831, 7769=>527, 7770=>831, 7771=>527, 7772=>831, 7773=>527, 7774=>831, 7775=>527, 7776=>722, 7777=>563, 7778=>722, + 7779=>563, 7784=>722, 7785=>563, 7786=>744, 7787=>462, 7788=>744, 7789=>462, 7790=>744, 7791=>462, 7792=>744, 7793=>462, 7794=>872, 7795=>727, 7796=>872, 7797=>727, 7798=>872, + 7799=>727, 7800=>872, 7801=>727, 7802=>872, 7803=>727, 7804=>776, 7805=>581, 7806=>776, 7807=>581, 7808=>1123, 7809=>861, 7810=>1123, 7811=>861, 7812=>1123, 7813=>861, 7814=>1123, + 7815=>861, 7816=>1123, 7817=>861, 7818=>776, 7819=>596, 7820=>776, 7821=>596, 7822=>714, 7823=>581, 7824=>730, 7825=>568, 7826=>730, 7827=>568, 7828=>730, 7829=>568, 7830=>727, + 7831=>462, 7832=>861, 7833=>581, 7834=>1014, 7835=>563, 7840=>776, 7841=>648, 7842=>776, 7843=>648, 7852=>776, 7853=>648, 7854=>776, 7855=>648, 7856=>776, 7857=>648, 7858=>776, + 7859=>648, 7860=>776, 7861=>648, 7862=>776, 7863=>648, 7864=>762, 7865=>636, 7866=>762, 7867=>636, 7868=>762, 7869=>636, 7878=>762, 7879=>636, 7880=>468, 7881=>380, 7882=>468, + 7883=>380, 7884=>871, 7885=>667, 7886=>871, 7887=>667, 7896=>871, 7897=>667, 7908=>872, 7909=>727, 7910=>872, 7911=>727, 7922=>714, 7923=>581, 7924=>714, 7925=>581, 7926=>714, + 7927=>581, 7928=>714, 7929=>581, 7936=>770, 7937=>770, 7938=>770, 7939=>770, 7940=>770, 7941=>770, 7942=>770, 7943=>770, 7944=>776, 7945=>776, 7946=>978, 7947=>978, 7948=>832, + 7949=>849, 7950=>776, 7951=>776, 7952=>608, 7953=>608, 7954=>608, 7955=>608, 7956=>608, 7957=>608, 7960=>917, 7961=>909, 7962=>1169, 7963=>1169, 7964=>1093, 7965=>1120, 7968=>727, + 7969=>727, 7970=>727, 7971=>727, 7972=>727, 7973=>727, 7974=>727, 7975=>727, 7976=>1100, 7977=>1094, 7978=>1358, 7979=>1361, 7980=>1279, 7981=>1308, 7982=>1197, 7983=>1194, 7984=>484, + 7985=>484, 7986=>484, 7987=>484, 7988=>484, 7989=>484, 7990=>484, 7991=>484, 7992=>629, 7993=>617, 7994=>878, 7995=>881, 7996=>799, 7997=>831, 7998=>723, 7999=>714, 8000=>667, + 8001=>667, 8002=>667, 8003=>667, 8004=>667, 8005=>667, 8008=>900, 8009=>935, 8010=>1240, 8011=>1237, 8012=>1035, 8013=>1066, 8016=>694, 8017=>694, 8018=>694, 8019=>694, 8020=>694, + 8021=>694, 8022=>694, 8023=>694, 8025=>922, 8027=>1186, 8029=>1133, 8031=>1019, 8032=>952, 8033=>952, 8034=>952, 8035=>952, 8036=>952, 8037=>952, 8038=>952, 8039=>952, 8040=>931, + 8041=>963, 8042=>1268, 8043=>1274, 8044=>1054, 8045=>1088, 8046=>1023, 8047=>1060, 8048=>770, 8049=>770, 8050=>608, 8051=>608, 8052=>727, 8053=>727, 8054=>484, 8055=>484, 8056=>667, + 8057=>667, 8058=>694, 8059=>694, 8060=>952, 8061=>952, 8064=>770, 8065=>770, 8066=>770, 8067=>770, 8068=>770, 8069=>770, 8070=>770, 8071=>770, 8072=>776, 8073=>776, 8074=>978, + 8075=>978, 8076=>832, 8077=>849, 8078=>776, 8079=>776, 8080=>727, 8081=>727, 8082=>727, 8083=>727, 8084=>727, 8085=>727, 8086=>727, 8087=>727, 8088=>1100, 8089=>1094, 8090=>1358, + 8091=>1361, 8092=>1279, 8093=>1308, 8094=>1197, 8095=>1194, 8096=>952, 8097=>952, 8098=>952, 8099=>952, 8100=>952, 8101=>952, 8102=>952, 8103=>952, 8104=>931, 8105=>963, 8106=>1268, + 8107=>1274, 8108=>1054, 8109=>1088, 8110=>1023, 8111=>1060, 8112=>770, 8113=>770, 8114=>770, 8115=>770, 8116=>770, 8118=>770, 8119=>770, 8120=>776, 8121=>776, 8122=>811, 8123=>776, + 8124=>776, 8125=>500, 8126=>500, 8127=>500, 8128=>500, 8129=>500, 8130=>727, 8131=>727, 8132=>727, 8134=>727, 8135=>727, 8136=>1000, 8137=>947, 8138=>1191, 8139=>1118, 8140=>945, + 8141=>500, 8142=>500, 8143=>500, 8144=>484, 8145=>484, 8146=>484, 8147=>484, 8150=>484, 8151=>484, 8152=>468, 8153=>468, 8154=>714, 8155=>662, 8157=>500, 8158=>500, 8159=>500, + 8160=>694, 8161=>694, 8162=>694, 8163=>694, 8164=>665, 8165=>665, 8166=>694, 8167=>694, 8168=>714, 8169=>714, 8170=>1019, 8171=>953, 8172=>910, 8173=>500, 8174=>500, 8175=>500, + 8178=>952, 8179=>952, 8180=>952, 8182=>952, 8183=>952, 8184=>1069, 8185=>887, 8186=>1101, 8187=>911, 8188=>890, 8189=>500, 8190=>500, 8192=>500, 8193=>1000, 8194=>500, 8195=>1000, + 8196=>330, 8197=>250, 8198=>167, 8199=>696, 8200=>348, 8201=>200, 8202=>100, 8203=>0, 8204=>0, 8205=>0, 8206=>0, 8207=>0, 8208=>415, 8209=>415, 8210=>696, 8213=>1000, + 8215=>500, 8219=>348, 8223=>575, 8227=>639, 8228=>348, 8229=>674, 8234=>0, 8235=>0, 8236=>0, 8237=>0, 8238=>0, 8239=>200, 8241=>1820, 8252=>629, 8253=>586, 8254=>500, + 8263=>1082, 8264=>856, 8265=>856, 8287=>222, 8288=>0, 8289=>0, 8290=>0, 8291=>0, 8298=>0, 8299=>0, 8300=>0, 8301=>0, 8302=>0, 8303=>0, 8304=>438, 8308=>438, + 8309=>438, 8310=>438, 8311=>438, 8312=>438, 8313=>438, 8319=>519, 8320=>438, 8321=>438, 8322=>438, 8323=>438, 8324=>438, 8325=>438, 8326=>438, 8327=>438, 8328=>438, 8329=>438, + 8358=>696, 8367=>1155, 8369=>790, 8372=>876, 8373=>696, 8462=>727, 8470=>1087, 8486=>890, 8490=>869, 8491=>776, 8531=>1035, 8532=>1035, 8533=>1035, 8534=>1035, 8535=>1035, 8536=>1035, + 8537=>1035, 8538=>1035, 8539=>1035, 8540=>1035, 8541=>1035, 8542=>1035, 8543=>615, 8592=>838, 8593=>838, 8594=>838, 8595=>838, 8706=>534, 8710=>753, 8711=>753, 8719=>842, 8721=>753, + 8722=>838, 8725=>167, 8729=>348, 8730=>657, 8733=>672, 8734=>833, 8735=>838, 8736=>838, 8743=>812, 8744=>812, 8745=>812, 8746=>812, 8747=>579, 8748=>1000, 8749=>1391, 8770=>838, + 8771=>838, 8776=>838, 8800=>838, 8801=>838, 8804=>838, 8805=>838, 8962=>834, 8968=>473, 8969=>473, 8970=>473, 8971=>473, 8976=>838, 8977=>539, 8984=>928, 8985=>838, 8992=>579, + 8993=>579, 8997=>1000, 9000=>1443, 9085=>1008, 9134=>579, 9167=>945, 9251=>834, 9600=>769, 9601=>769, 9602=>769, 9603=>769, 9604=>769, 9605=>769, 9606=>769, 9607=>769, 9608=>769, + 9609=>769, 9610=>769, 9611=>769, 9612=>769, 9613=>769, 9614=>769, 9615=>769, 9616=>769, 9617=>769, 9618=>769, 9619=>769, 9620=>769, 9621=>769, 9622=>769, 9623=>769, 9624=>769, + 9625=>769, 9626=>769, 9627=>769, 9628=>769, 9629=>769, 9630=>769, 9631=>769, 9632=>945, 9633=>945, 9634=>945, 9635=>945, 9636=>945, 9637=>945, 9638=>945, 9639=>945, 9640=>945, + 9641=>945, 9642=>678, 9643=>678, 9644=>945, 9645=>945, 9646=>550, 9647=>550, 9648=>769, 9649=>769, 9650=>769, 9651=>769, 9652=>502, 9653=>502, 9654=>769, 9655=>769, 9656=>502, + 9657=>502, 9658=>769, 9659=>769, 9660=>769, 9661=>769, 9662=>502, 9663=>502, 9664=>769, 9665=>769, 9666=>502, 9667=>502, 9668=>769, 9669=>769, 9670=>769, 9671=>769, 9672=>769, + 9673=>873, 9674=>494, 9675=>873, 9676=>873, 9677=>873, 9678=>873, 9679=>873, 9680=>873, 9681=>873, 9682=>873, 9683=>873, 9684=>873, 9685=>873, 9686=>527, 9687=>527, 9688=>791, + 9689=>970, 9690=>970, 9691=>970, 9692=>387, 9693=>387, 9694=>387, 9695=>387, 9696=>873, 9697=>873, 9698=>769, 9699=>769, 9700=>769, 9701=>769, 9702=>590, 9703=>945, 9704=>945, + 9705=>945, 9706=>945, 9707=>945, 9708=>769, 9709=>769, 9710=>769, 9711=>1119, 9712=>945, 9713=>945, 9714=>945, 9715=>945, 9716=>873, 9717=>873, 9718=>873, 9719=>873, 9720=>769, + 9721=>769, 9722=>769, 9723=>830, 9724=>830, 9725=>732, 9726=>732, 9727=>769, 9728=>896, 9784=>896, 9785=>896, 9786=>896, 9787=>896, 9788=>896, 9791=>614, 9792=>731, 9793=>731, + 9794=>896, 9795=>896, 9796=>896, 9797=>896, 9798=>896, 9799=>896, 9824=>896, 9825=>896, 9826=>896, 9827=>896, 9828=>896, 9829=>896, 9830=>896, 9831=>896, 9833=>472, 9834=>638, + 9835=>896, 9836=>896, 9837=>472, 9838=>357, 9839=>484, 10208=>494, 10216=>457, 10217=>457, 10731=>494, 10764=>1782, 10765=>610, 10766=>610, 11026=>945, 11027=>945, 11028=>945, 11029=>945, + 11030=>769, 11031=>769, 11032=>769, 11033=>769, 11034=>945, 63173=>667, 63185=>500, 63188=>500, 64256=>930, 64257=>727, 64258=>727, 64259=>1126, 64260=>1123, 64261=>871, 64262=>971, 65024=>0, + 65025=>0, 65026=>0, 65027=>0, 65028=>0, 65029=>0, 65030=>0, 65031=>0, 65032=>0, 65033=>0, 65034=>0, 65035=>0, 65036=>0, 65037=>0, 65038=>0, 65039=>0, 65533=>1113}; + font[:enc]=''; + font[:diff]=''; + font[:file]='DejaVuSerif-Bold.z'; + font[:ctg]='DejaVuSerif-Bold.ctg.z'; + font[:originalsize]=203488; +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSerifbi.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/DejaVuSerifbi.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,131 @@ +TCPDFFontDescriptor.define('DejaVuSerifbi') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='DejaVuSerif-BoldOblique'; + font[:desc]={'Ascent'=>939,'Descent'=>-236,'CapHeight'=>939,'Flags'=>96,'FontBBox'=>'[-906 -423 1760 1235]','ItalicAngle'=>-11,'StemV'=>120,'MissingWidth'=>600}; + font[:up]=-42; + font[:ut]=44; + font[:cw]={ + 0=>600, 32=>348, 33=>439, 34=>521, 35=>838, 36=>696, 37=>950, 38=>903, 39=>306, 40=>473, 41=>473, 42=>523, 43=>838, 44=>348, 45=>415, 46=>348, + 47=>365, 48=>696, 49=>696, 50=>696, 51=>696, 52=>696, 53=>696, 54=>696, 55=>696, 56=>696, 57=>696, 58=>369, 59=>369, 60=>838, 61=>838, 62=>838, + 63=>586, 64=>1000, 65=>776, 66=>845, 67=>796, 68=>867, 69=>762, 70=>710, 71=>854, 72=>945, 73=>468, 74=>473, 75=>869, 76=>703, 77=>1107, 78=>914, + 79=>871, 80=>752, 81=>871, 82=>831, 83=>722, 84=>744, 85=>872, 86=>776, 87=>1123, 88=>776, 89=>714, 90=>730, 91=>473, 92=>365, 93=>473, 94=>838, + 95=>500, 96=>500, 97=>648, 98=>699, 99=>609, 100=>699, 101=>636, 102=>430, 103=>699, 104=>727, 105=>380, 106=>362, 107=>693, 108=>380, 109=>1058, 110=>727, + 111=>667, 112=>699, 113=>699, 114=>527, 115=>563, 116=>462, 117=>727, 118=>581, 119=>861, 120=>596, 121=>581, 122=>568, 123=>643, 124=>364, 125=>643, 126=>838, + 8364=>696, 1027=>690, 8218=>348, 402=>430, 8222=>575, 8230=>1000, 8224=>523, 8225=>523, 710=>500, 8240=>1385, 352=>722, 8249=>400, 338=>1180, 1036=>910, 381=>730, 1039=>945, + 8216=>348, 8217=>348, 8220=>575, 8221=>575, 8226=>639, 8211=>500, 8212=>1000, 732=>500, 8482=>1000, 353=>563, 8250=>400, 339=>1028, 1116=>677, 382=>568, 376=>714, 160=>348, + 161=>439, 162=>696, 163=>696, 164=>636, 165=>696, 166=>364, 167=>523, 168=>500, 169=>1000, 170=>487, 171=>625, 172=>838, 173=>415, 174=>1000, 175=>500, 176=>500, + 177=>838, 178=>438, 179=>438, 180=>500, 181=>732, 182=>636, 183=>348, 184=>500, 185=>438, 186=>500, 187=>625, 188=>1043, 189=>1043, 190=>1043, 191=>586, 192=>776, + 193=>776, 194=>776, 195=>776, 196=>776, 197=>776, 198=>1034, 199=>796, 200=>762, 201=>762, 202=>762, 203=>762, 204=>468, 205=>468, 206=>468, 207=>468, 208=>874, + 209=>914, 210=>871, 211=>871, 212=>871, 213=>871, 214=>871, 215=>838, 216=>871, 217=>872, 218=>872, 219=>872, 220=>872, 221=>714, 222=>757, 223=>760, 224=>648, + 225=>648, 226=>648, 227=>648, 228=>648, 229=>648, 230=>975, 231=>609, 232=>636, 233=>636, 234=>636, 235=>636, 236=>380, 237=>380, 238=>380, 239=>380, 240=>667, + 241=>727, 242=>667, 243=>667, 244=>667, 245=>667, 246=>667, 247=>838, 248=>667, 249=>727, 250=>727, 251=>727, 252=>727, 253=>581, 254=>699, 255=>581, 256=>776, + 257=>648, 258=>776, 259=>648, 260=>776, 261=>648, 262=>796, 263=>609, 264=>796, 265=>609, 266=>796, 267=>609, 268=>796, 269=>609, 270=>867, 271=>699, 272=>874, + 273=>699, 274=>762, 275=>636, 276=>762, 277=>636, 278=>762, 279=>636, 280=>762, 281=>636, 282=>762, 283=>636, 284=>854, 285=>699, 286=>854, 287=>699, 288=>854, + 289=>699, 290=>854, 291=>699, 292=>945, 293=>727, 294=>945, 295=>727, 296=>468, 297=>380, 298=>468, 299=>380, 300=>468, 301=>380, 302=>468, 303=>380, 304=>468, + 305=>380, 306=>942, 307=>751, 308=>473, 309=>362, 310=>869, 311=>693, 312=>693, 313=>703, 314=>380, 315=>703, 316=>380, 317=>703, 318=>508, 319=>703, 320=>557, + 321=>710, 322=>385, 323=>914, 324=>727, 325=>914, 326=>727, 327=>914, 328=>727, 329=>1008, 330=>914, 331=>727, 332=>871, 333=>667, 334=>871, 335=>667, 336=>871, + 337=>667, 340=>831, 341=>527, 342=>831, 343=>527, 344=>831, 345=>527, 346=>722, 347=>563, 348=>722, 349=>563, 350=>722, 351=>563, 354=>744, 355=>462, 356=>744, + 357=>462, 358=>744, 359=>462, 360=>872, 361=>727, 362=>872, 363=>727, 364=>872, 365=>727, 366=>872, 367=>727, 368=>872, 369=>727, 370=>872, 371=>727, 372=>1123, + 373=>861, 374=>714, 375=>581, 377=>730, 378=>568, 379=>730, 380=>568, 383=>430, 384=>699, 385=>845, 386=>854, 387=>699, 388=>854, 389=>699, 390=>796, 391=>796, + 392=>609, 393=>874, 394=>867, 395=>854, 396=>699, 397=>667, 398=>762, 399=>871, 400=>696, 401=>710, 403=>854, 404=>771, 405=>1043, 406=>468, 407=>468, 408=>869, + 409=>693, 410=>380, 411=>701, 412=>1058, 413=>914, 414=>727, 415=>871, 416=>871, 417=>667, 418=>1200, 419=>943, 420=>752, 421=>699, 422=>831, 423=>722, 424=>563, + 425=>707, 426=>331, 427=>462, 428=>744, 429=>462, 430=>744, 431=>872, 432=>727, 433=>890, 434=>890, 435=>714, 436=>699, 437=>730, 438=>568, 439=>568, 440=>568, + 441=>568, 443=>696, 444=>754, 445=>568, 446=>536, 448=>295, 449=>492, 450=>459, 451=>295, 452=>1597, 453=>1435, 454=>1267, 455=>1176, 456=>1065, 457=>742, 458=>1387, + 459=>1276, 460=>1089, 461=>776, 462=>648, 463=>468, 464=>380, 465=>871, 466=>667, 467=>872, 468=>727, 469=>872, 470=>727, 471=>872, 472=>727, 473=>872, 474=>727, + 475=>872, 476=>727, 477=>636, 478=>776, 479=>648, 480=>776, 481=>648, 482=>1034, 483=>975, 484=>896, 485=>699, 486=>854, 487=>699, 488=>869, 489=>693, 490=>871, + 491=>667, 492=>871, 493=>667, 494=>568, 495=>568, 496=>362, 497=>1597, 498=>1435, 499=>1267, 500=>854, 501=>699, 502=>1221, 504=>914, 505=>727, 506=>776, 507=>648, + 508=>1034, 509=>975, 510=>871, 511=>667, 512=>776, 513=>648, 514=>776, 515=>648, 516=>762, 517=>636, 518=>762, 519=>636, 520=>468, 521=>380, 522=>468, 523=>380, + 524=>871, 525=>667, 526=>871, 527=>667, 528=>831, 529=>527, 530=>831, 531=>527, 532=>872, 533=>727, 534=>872, 535=>727, 536=>722, 537=>563, 538=>744, 539=>462, + 542=>945, 543=>727, 545=>791, 548=>730, 549=>568, 550=>776, 551=>648, 552=>762, 553=>636, 554=>871, 555=>667, 556=>871, 557=>667, 558=>871, 559=>667, 560=>871, + 561=>667, 562=>714, 563=>581, 564=>573, 565=>922, 566=>564, 567=>362, 568=>1031, 569=>1031, 570=>776, 571=>796, 572=>609, 573=>703, 574=>744, 575=>563, 576=>568, + 577=>660, 578=>547, 581=>776, 592=>648, 593=>699, 594=>699, 595=>699, 596=>609, 597=>609, 598=>699, 599=>730, 600=>636, 601=>636, 602=>907, 603=>608, 604=>562, + 605=>907, 606=>720, 607=>387, 608=>699, 609=>699, 610=>626, 611=>712, 612=>627, 613=>727, 614=>727, 615=>727, 616=>380, 617=>380, 618=>380, 619=>409, 620=>514, + 621=>380, 622=>795, 623=>1058, 624=>1058, 625=>1058, 626=>727, 627=>727, 628=>712, 629=>667, 630=>1061, 631=>749, 632=>667, 633=>571, 634=>571, 635=>571, 636=>527, + 637=>527, 638=>452, 639=>487, 640=>801, 641=>801, 642=>563, 643=>331, 644=>430, 645=>540, 646=>331, 647=>492, 648=>462, 649=>727, 650=>679, 651=>694, 652=>641, + 653=>907, 654=>635, 655=>727, 656=>568, 657=>568, 658=>568, 659=>568, 660=>536, 661=>536, 662=>536, 663=>545, 664=>871, 665=>695, 666=>720, 667=>626, 668=>732, + 669=>384, 670=>740, 671=>646, 672=>699, 673=>536, 674=>536, 675=>1117, 676=>1179, 677=>1117, 678=>911, 679=>715, 680=>909, 681=>1039, 682=>790, 683=>795, 684=>662, + 685=>443, 686=>613, 687=>717, 688=>521, 689=>519, 690=>313, 691=>414, 692=>414, 693=>480, 694=>527, 695=>662, 696=>485, 697=>302, 699=>348, 700=>348, 701=>348, + 702=>366, 703=>366, 704=>313, 705=>313, 711=>500, 712=>282, 713=>500, 716=>282, 720=>369, 721=>369, 722=>366, 723=>366, 726=>392, 728=>500, 729=>500, 730=>500, + 731=>500, 733=>500, 734=>417, 736=>458, 737=>292, 738=>395, 739=>475, 740=>313, 741=>484, 742=>484, 743=>484, 744=>484, 745=>484, 750=>553, 768=>0, 769=>0, + 770=>0, 771=>0, 772=>0, 773=>0, 774=>0, 775=>0, 776=>0, 777=>0, 778=>0, 779=>0, 780=>0, 781=>0, 782=>0, 783=>0, 784=>0, 785=>0, + 786=>0, 787=>0, 788=>0, 789=>0, 790=>0, 791=>0, 792=>0, 793=>0, 794=>0, 795=>0, 796=>0, 797=>0, 798=>0, 799=>0, 800=>0, 801=>0, + 802=>0, 803=>0, 804=>0, 805=>0, 806=>0, 807=>0, 808=>0, 809=>0, 810=>0, 811=>0, 812=>0, 813=>0, 814=>0, 815=>0, 816=>0, 817=>0, + 818=>0, 819=>0, 820=>0, 821=>0, 822=>0, 823=>0, 824=>0, 825=>0, 826=>0, 827=>0, 828=>0, 829=>0, 830=>0, 831=>0, 835=>0, 847=>0, + 856=>0, 865=>0, 884=>302, 885=>302, 890=>500, 894=>369, 900=>500, 901=>500, 902=>776, 903=>348, 904=>947, 905=>1136, 906=>662, 908=>887, 910=>953, 911=>911, + 912=>484, 913=>776, 914=>845, 915=>710, 916=>776, 917=>762, 918=>730, 919=>945, 920=>871, 921=>468, 922=>869, 923=>776, 924=>1107, 925=>914, 926=>704, 927=>871, + 928=>945, 929=>752, 931=>707, 932=>744, 933=>714, 934=>871, 935=>776, 936=>913, 937=>890, 938=>468, 939=>714, 940=>770, 941=>608, 942=>727, 943=>484, 944=>694, + 945=>770, 946=>664, 947=>660, 948=>667, 949=>608, 950=>592, 951=>727, 952=>667, 953=>484, 954=>750, 955=>701, 956=>732, 957=>694, 958=>592, 959=>667, 960=>732, + 961=>665, 962=>609, 963=>737, 964=>673, 965=>694, 966=>905, 967=>658, 968=>941, 969=>952, 970=>484, 971=>694, 972=>667, 973=>694, 974=>952, 976=>667, 977=>849, + 978=>764, 979=>969, 980=>764, 981=>941, 982=>952, 983=>655, 984=>871, 985=>667, 986=>796, 987=>609, 988=>710, 989=>527, 990=>590, 991=>660, 992=>796, 993=>667, + 1008=>655, 1009=>665, 1010=>609, 1011=>362, 1012=>871, 1013=>609, 1014=>609, 1015=>757, 1016=>699, 1017=>796, 1018=>1107, 1019=>860, 1020=>692, 1021=>796, 1022=>796, 1023=>796, + 1024=>762, 1025=>762, 1026=>901, 1028=>795, 1029=>722, 1030=>468, 1031=>468, 1032=>473, 1033=>1202, 1034=>1262, 1035=>963, 1037=>945, 1038=>812, 1040=>814, 1041=>854, 1042=>845, + 1043=>690, 1044=>889, 1045=>762, 1046=>1312, 1047=>721, 1048=>945, 1049=>945, 1050=>910, 1051=>884, 1052=>1107, 1053=>945, 1054=>871, 1055=>945, 1056=>752, 1057=>796, 1058=>744, + 1059=>812, 1060=>949, 1061=>776, 1062=>966, 1063=>913, 1064=>1268, 1065=>1293, 1066=>957, 1067=>1202, 1068=>825, 1069=>795, 1070=>1287, 1071=>882, 1072=>648, 1073=>722, 1074=>657, + 1075=>563, 1076=>695, 1077=>636, 1078=>1306, 1079=>638, 1080=>727, 1081=>727, 1082=>677, 1083=>732, 1084=>970, 1085=>729, 1086=>667, 1087=>727, 1088=>699, 1089=>609, 1090=>1058, + 1091=>598, 1092=>902, 1093=>596, 1094=>803, 1095=>715, 1096=>1058, 1097=>1134, 1098=>727, 1099=>1018, 1100=>660, 1101=>645, 1102=>1001, 1103=>796, 1104=>636, 1105=>636, 1106=>719, + 1107=>563, 1108=>609, 1109=>563, 1110=>380, 1111=>380, 1112=>362, 1113=>1014, 1114=>1011, 1115=>727, 1117=>727, 1118=>598, 1119=>727, 1122=>880, 1123=>1050, 1138=>871, 1139=>652, + 1140=>916, 1141=>749, 1164=>792, 1165=>664, 1168=>700, 1169=>618, 1170=>710, 1171=>637, 1172=>854, 1173=>705, 1174=>1312, 1175=>1306, 1176=>721, 1177=>638, 1178=>902, 1179=>693, + 1182=>910, 1183=>693, 1184=>999, 1185=>733, 1186=>952, 1187=>805, 1188=>1187, 1189=>980, 1190=>1324, 1191=>1013, 1194=>796, 1195=>609, 1196=>744, 1197=>1142, 1198=>714, 1199=>581, + 1202=>789, 1203=>596, 1204=>1235, 1205=>974, 1206=>913, 1207=>716, 1210=>910, 1211=>727, 1216=>468, 1217=>1312, 1218=>1306, 1219=>869, 1220=>693, 1223=>945, 1224=>732, 1227=>984, + 1228=>732, 1231=>380, 1232=>814, 1233=>648, 1234=>814, 1235=>648, 1236=>1034, 1237=>975, 1238=>762, 1239=>636, 1240=>871, 1241=>636, 1242=>871, 1243=>636, 1244=>1312, 1245=>1306, + 1246=>721, 1247=>638, 1248=>568, 1249=>568, 1250=>945, 1251=>727, 1252=>945, 1253=>727, 1254=>871, 1255=>667, 1256=>871, 1257=>667, 1258=>871, 1259=>667, 1260=>795, 1261=>645, + 1262=>812, 1263=>598, 1264=>812, 1265=>598, 1266=>812, 1267=>598, 1268=>913, 1269=>715, 1270=>690, 1271=>637, 1272=>1202, 1273=>1018, 7426=>940, 7432=>509, 7433=>320, 7444=>989, + 7446=>667, 7447=>667, 7453=>737, 7454=>948, 7455=>948, 7491=>466, 7492=>466, 7493=>498, 7494=>657, 7495=>499, 7496=>498, 7497=>444, 7498=>444, 7499=>412, 7500=>412, 7501=>498, + 7502=>300, 7503=>523, 7504=>729, 7505=>473, 7506=>467, 7507=>427, 7508=>467, 7509=>467, 7510=>499, 7511=>371, 7512=>520, 7513=>434, 7514=>729, 7515=>491, 7543=>640, 7547=>380, + 7557=>380, 7579=>498, 7580=>427, 7581=>427, 7582=>467, 7583=>412, 7584=>383, 7585=>373, 7586=>498, 7587=>522, 7588=>300, 7589=>307, 7590=>300, 7591=>300, 7592=>370, 7593=>368, + 7594=>321, 7595=>430, 7596=>682, 7597=>729, 7598=>588, 7599=>587, 7600=>472, 7601=>467, 7602=>522, 7603=>400, 7604=>387, 7605=>371, 7606=>520, 7607=>475, 7609=>489, 7610=>491, + 7611=>412, 7612=>527, 7613=>412, 7614=>452, 7615=>467, 7680=>776, 7681=>648, 7682=>845, 7683=>699, 7684=>845, 7685=>699, 7686=>845, 7687=>699, 7688=>796, 7689=>609, 7690=>867, + 7691=>699, 7692=>867, 7693=>699, 7694=>867, 7695=>699, 7696=>867, 7697=>699, 7698=>867, 7699=>699, 7700=>762, 7701=>636, 7702=>762, 7703=>636, 7704=>762, 7705=>636, 7706=>762, + 7707=>636, 7710=>710, 7711=>430, 7712=>854, 7713=>699, 7714=>945, 7715=>727, 7716=>945, 7717=>727, 7718=>945, 7719=>727, 7720=>945, 7721=>727, 7722=>945, 7723=>727, 7724=>468, + 7725=>380, 7728=>869, 7729=>693, 7730=>869, 7731=>693, 7732=>869, 7733=>693, 7734=>703, 7735=>380, 7736=>703, 7737=>380, 7738=>703, 7739=>380, 7740=>703, 7741=>380, 7742=>1107, + 7743=>1058, 7744=>1107, 7745=>1058, 7746=>1107, 7747=>1058, 7748=>914, 7749=>727, 7750=>914, 7751=>727, 7752=>914, 7753=>727, 7754=>914, 7755=>727, 7760=>871, 7761=>667, 7762=>871, + 7763=>667, 7764=>752, 7765=>699, 7766=>752, 7767=>699, 7768=>831, 7769=>527, 7770=>831, 7771=>527, 7772=>831, 7773=>527, 7774=>831, 7775=>527, 7776=>722, 7777=>563, 7778=>722, + 7779=>563, 7784=>722, 7785=>563, 7786=>744, 7787=>462, 7788=>744, 7789=>462, 7790=>744, 7791=>462, 7792=>744, 7793=>462, 7794=>872, 7795=>727, 7796=>872, 7797=>727, 7798=>872, + 7799=>727, 7800=>872, 7801=>727, 7802=>872, 7803=>727, 7804=>776, 7805=>581, 7806=>776, 7807=>581, 7808=>1123, 7809=>861, 7810=>1123, 7811=>861, 7812=>1123, 7813=>861, 7814=>1123, + 7815=>861, 7816=>1123, 7817=>861, 7818=>776, 7819=>596, 7820=>776, 7821=>596, 7822=>714, 7823=>581, 7824=>730, 7825=>568, 7826=>730, 7827=>568, 7828=>730, 7829=>568, 7830=>727, + 7831=>462, 7832=>861, 7833=>581, 7834=>1014, 7835=>563, 7840=>776, 7841=>648, 7842=>776, 7843=>648, 7852=>776, 7853=>648, 7854=>776, 7855=>648, 7856=>776, 7857=>648, 7858=>776, + 7859=>648, 7860=>776, 7861=>648, 7862=>776, 7863=>648, 7864=>762, 7865=>636, 7866=>762, 7867=>636, 7868=>762, 7869=>636, 7878=>762, 7879=>636, 7880=>468, 7881=>380, 7882=>468, + 7883=>380, 7884=>871, 7885=>667, 7886=>871, 7887=>667, 7896=>871, 7897=>667, 7908=>872, 7909=>727, 7910=>872, 7911=>727, 7922=>714, 7923=>581, 7924=>714, 7925=>581, 7926=>714, + 7927=>581, 7928=>714, 7929=>581, 7936=>770, 7937=>770, 7938=>770, 7939=>770, 7940=>770, 7941=>770, 7942=>770, 7943=>770, 7944=>776, 7945=>776, 7946=>978, 7947=>978, 7948=>832, + 7949=>849, 7950=>776, 7951=>776, 7952=>608, 7953=>608, 7954=>608, 7955=>608, 7956=>608, 7957=>608, 7960=>917, 7961=>909, 7962=>1169, 7963=>1169, 7964=>1093, 7965=>1120, 7968=>727, + 7969=>727, 7970=>727, 7971=>727, 7972=>727, 7973=>727, 7974=>727, 7975=>727, 7976=>1100, 7977=>1094, 7978=>1358, 7979=>1361, 7980=>1279, 7981=>1308, 7982=>1197, 7983=>1194, 7984=>484, + 7985=>484, 7986=>484, 7987=>484, 7988=>484, 7989=>484, 7990=>484, 7991=>484, 7992=>629, 7993=>617, 7994=>878, 7995=>881, 7996=>799, 7997=>831, 7998=>723, 7999=>714, 8000=>667, + 8001=>667, 8002=>667, 8003=>667, 8004=>667, 8005=>667, 8008=>900, 8009=>935, 8010=>1240, 8011=>1237, 8012=>1035, 8013=>1066, 8016=>694, 8017=>694, 8018=>694, 8019=>694, 8020=>694, + 8021=>694, 8022=>694, 8023=>694, 8025=>922, 8027=>1186, 8029=>1133, 8031=>1019, 8032=>952, 8033=>952, 8034=>952, 8035=>952, 8036=>952, 8037=>952, 8038=>952, 8039=>952, 8040=>931, + 8041=>963, 8042=>1268, 8043=>1274, 8044=>1054, 8045=>1088, 8046=>1023, 8047=>1060, 8048=>770, 8049=>770, 8050=>608, 8051=>608, 8052=>727, 8053=>727, 8054=>484, 8055=>484, 8056=>667, + 8057=>667, 8058=>694, 8059=>694, 8060=>952, 8061=>952, 8064=>770, 8065=>770, 8066=>770, 8067=>770, 8068=>770, 8069=>770, 8070=>770, 8071=>770, 8072=>776, 8073=>776, 8074=>978, + 8075=>978, 8076=>832, 8077=>849, 8078=>776, 8079=>776, 8080=>727, 8081=>727, 8082=>727, 8083=>727, 8084=>727, 8085=>727, 8086=>727, 8087=>727, 8088=>1100, 8089=>1094, 8090=>1358, + 8091=>1361, 8092=>1279, 8093=>1308, 8094=>1197, 8095=>1194, 8096=>952, 8097=>952, 8098=>952, 8099=>952, 8100=>952, 8101=>952, 8102=>952, 8103=>952, 8104=>931, 8105=>963, 8106=>1268, + 8107=>1274, 8108=>1054, 8109=>1088, 8110=>1023, 8111=>1060, 8112=>770, 8113=>770, 8114=>770, 8115=>770, 8116=>770, 8118=>770, 8119=>770, 8120=>776, 8121=>776, 8122=>811, 8123=>776, + 8124=>776, 8125=>500, 8126=>500, 8127=>500, 8128=>500, 8129=>500, 8130=>727, 8131=>727, 8132=>727, 8134=>727, 8135=>727, 8136=>1000, 8137=>947, 8138=>1191, 8139=>1118, 8140=>945, + 8141=>500, 8142=>500, 8143=>500, 8144=>484, 8145=>484, 8146=>484, 8147=>484, 8150=>484, 8151=>484, 8152=>468, 8153=>468, 8154=>714, 8155=>662, 8157=>500, 8158=>500, 8159=>500, + 8160=>694, 8161=>694, 8162=>694, 8163=>694, 8164=>665, 8165=>665, 8166=>694, 8167=>694, 8168=>714, 8169=>714, 8170=>1019, 8171=>953, 8172=>910, 8173=>500, 8174=>500, 8175=>500, + 8178=>952, 8179=>952, 8180=>952, 8182=>952, 8183=>952, 8184=>1069, 8185=>887, 8186=>1101, 8187=>911, 8188=>890, 8189=>500, 8190=>500, 8192=>500, 8193=>1000, 8194=>500, 8195=>1000, + 8196=>330, 8197=>250, 8198=>167, 8199=>696, 8200=>348, 8201=>200, 8202=>100, 8203=>0, 8204=>0, 8205=>0, 8206=>0, 8207=>0, 8208=>415, 8209=>415, 8210=>696, 8213=>1000, + 8215=>500, 8219=>348, 8223=>575, 8227=>639, 8228=>348, 8229=>674, 8234=>0, 8235=>0, 8236=>0, 8237=>0, 8238=>0, 8239=>200, 8241=>1813, 8252=>629, 8253=>586, 8254=>500, + 8263=>1082, 8264=>856, 8265=>856, 8287=>222, 8288=>0, 8289=>0, 8290=>0, 8291=>0, 8298=>0, 8299=>0, 8300=>0, 8301=>0, 8302=>0, 8303=>0, 8304=>438, 8308=>438, + 8309=>438, 8310=>438, 8311=>438, 8312=>438, 8313=>438, 8319=>519, 8320=>438, 8321=>438, 8322=>438, 8323=>438, 8324=>438, 8325=>438, 8326=>438, 8327=>438, 8328=>438, 8329=>438, + 8358=>696, 8367=>1155, 8369=>790, 8372=>876, 8373=>696, 8462=>727, 8470=>1087, 8486=>890, 8490=>869, 8491=>776, 8531=>1035, 8532=>1035, 8533=>1035, 8534=>1035, 8535=>1035, 8536=>1035, + 8537=>1035, 8538=>1035, 8539=>1035, 8540=>1035, 8541=>1035, 8542=>1035, 8543=>615, 8592=>838, 8593=>838, 8594=>838, 8595=>838, 8706=>534, 8710=>753, 8711=>753, 8719=>842, 8721=>753, + 8722=>838, 8725=>167, 8729=>348, 8730=>657, 8733=>672, 8734=>833, 8735=>838, 8736=>838, 8743=>812, 8744=>812, 8745=>812, 8746=>812, 8747=>579, 8748=>1000, 8749=>1391, 8770=>838, + 8771=>838, 8776=>838, 8800=>838, 8801=>838, 8804=>838, 8805=>838, 8962=>834, 8968=>473, 8969=>473, 8970=>473, 8971=>473, 8976=>838, 8977=>539, 8984=>928, 8985=>838, 8992=>579, + 8993=>579, 8997=>1000, 9000=>1443, 9085=>1008, 9134=>579, 9167=>945, 9251=>834, 9600=>769, 9601=>769, 9602=>769, 9603=>769, 9604=>769, 9605=>769, 9606=>769, 9607=>769, 9608=>769, + 9609=>769, 9610=>769, 9611=>769, 9612=>769, 9613=>769, 9614=>769, 9615=>769, 9616=>769, 9617=>769, 9618=>769, 9619=>769, 9620=>769, 9621=>769, 9622=>769, 9623=>769, 9624=>769, + 9625=>769, 9626=>769, 9627=>769, 9628=>769, 9629=>769, 9630=>769, 9631=>769, 9632=>945, 9633=>945, 9634=>945, 9635=>945, 9636=>945, 9637=>945, 9638=>945, 9639=>945, 9640=>945, + 9641=>945, 9642=>678, 9643=>678, 9644=>945, 9645=>945, 9646=>550, 9647=>550, 9648=>769, 9649=>769, 9650=>769, 9651=>769, 9652=>502, 9653=>502, 9654=>769, 9655=>769, 9656=>502, + 9657=>502, 9658=>769, 9659=>769, 9660=>769, 9661=>769, 9662=>502, 9663=>502, 9664=>769, 9665=>769, 9666=>502, 9667=>502, 9668=>769, 9669=>769, 9670=>769, 9671=>769, 9672=>769, + 9673=>873, 9674=>494, 9675=>873, 9676=>873, 9677=>873, 9678=>873, 9679=>873, 9680=>873, 9681=>873, 9682=>873, 9683=>873, 9684=>873, 9685=>873, 9686=>527, 9687=>527, 9688=>791, + 9689=>970, 9690=>970, 9691=>970, 9692=>387, 9693=>387, 9694=>387, 9695=>387, 9696=>873, 9697=>873, 9698=>769, 9699=>769, 9700=>769, 9701=>769, 9702=>590, 9703=>945, 9704=>945, + 9705=>945, 9706=>945, 9707=>945, 9708=>769, 9709=>769, 9710=>769, 9711=>1119, 9712=>945, 9713=>945, 9714=>945, 9715=>945, 9716=>873, 9717=>873, 9718=>873, 9719=>873, 9720=>769, + 9721=>769, 9722=>769, 9723=>830, 9724=>830, 9725=>732, 9726=>732, 9727=>769, 9728=>896, 9784=>896, 9785=>896, 9786=>896, 9787=>896, 9788=>896, 9791=>614, 9792=>731, 9793=>731, + 9794=>896, 9795=>896, 9796=>896, 9797=>896, 9798=>896, 9799=>896, 9824=>896, 9825=>896, 9826=>896, 9827=>896, 9828=>896, 9829=>896, 9830=>896, 9831=>896, 9833=>472, 9834=>638, + 9835=>896, 9836=>896, 9837=>472, 9838=>357, 9839=>484, 10208=>494, 10216=>457, 10217=>457, 10731=>494, 10764=>1782, 10765=>610, 10766=>610, 11026=>945, 11027=>945, 11028=>945, 11029=>945, + 11030=>769, 11031=>769, 11032=>769, 11033=>769, 11034=>945, 63172=>563, 63173=>667, 63174=>699, 63175=>727, 63176=>1058, 63185=>500, 63188=>500, 64256=>827, 64257=>727, 64258=>727, 64259=>1108, + 64260=>1146, 64261=>879, 64262=>971, 65024=>0, 65025=>0, 65026=>0, 65027=>0, 65028=>0, 65029=>0, 65030=>0, 65031=>0, 65032=>0, 65033=>0, 65034=>0, 65035=>0, 65036=>0, + 65037=>0, 65038=>0, 65039=>0, 65533=>1113}; + font[:enc]=''; + font[:diff]=''; + font[:file]='DejaVuSerif-BoldOblique.z'; + font[:ctg]='DejaVuSerif-BoldOblique.ctg.z'; + font[:originalsize]=183096; +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/DejaVuSerifi.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/DejaVuSerifi.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,131 @@ +TCPDFFontDescriptor.define('DejaVuSerifi') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='DejaVuSerif-Oblique'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>96,'FontBBox'=>'[-839 -401 1650 1227]','ItalicAngle'=>-11,'StemV'=>70,'MissingWidth'=>600} + font[:up]=-42; + font[:ut]=44; + font[:cw]={ + 0=>600, 32=>318, 33=>402, 34=>460, 35=>838, 36=>636, 37=>950, 38=>890, 39=>275, 40=>390, 41=>390, 42=>500, 43=>838, 44=>318, 45=>338, 46=>318, + 47=>337, 48=>636, 49=>636, 50=>636, 51=>636, 52=>636, 53=>636, 54=>636, 55=>636, 56=>636, 57=>636, 58=>337, 59=>337, 60=>838, 61=>838, 62=>838, + 63=>536, 64=>1000, 65=>722, 66=>735, 67=>765, 68=>802, 69=>730, 70=>694, 71=>799, 72=>872, 73=>395, 74=>401, 75=>747, 76=>664, 77=>1024, 78=>875, + 79=>820, 80=>673, 81=>820, 82=>753, 83=>685, 84=>667, 85=>843, 86=>722, 87=>1028, 88=>712, 89=>660, 90=>695, 91=>390, 92=>337, 93=>390, 94=>838, + 95=>500, 96=>500, 97=>596, 98=>640, 99=>560, 100=>640, 101=>592, 102=>370, 103=>640, 104=>644, 105=>320, 106=>310, 107=>606, 108=>320, 109=>948, 110=>644, + 111=>602, 112=>640, 113=>640, 114=>478, 115=>513, 116=>402, 117=>644, 118=>565, 119=>856, 120=>564, 121=>565, 122=>527, 123=>636, 124=>337, 125=>636, 126=>838, + 8364=>636, 1027=>662, 8218=>318, 402=>370, 8222=>518, 8230=>1000, 8224=>500, 8225=>500, 710=>500, 8240=>1342, 352=>685, 8249=>400, 338=>1137, 1036=>774, 381=>695, 1039=>872, + 8216=>318, 8217=>318, 8220=>511, 8221=>511, 8226=>590, 8211=>500, 8212=>1000, 732=>500, 8482=>1000, 353=>513, 8250=>400, 339=>989, 1116=>616, 382=>527, 376=>660, 160=>318, + 161=>402, 162=>636, 163=>636, 164=>636, 165=>636, 166=>337, 167=>500, 168=>500, 169=>1000, 170=>475, 171=>612, 172=>838, 173=>338, 174=>1000, 175=>500, 176=>500, + 177=>838, 178=>401, 179=>401, 180=>500, 181=>650, 182=>636, 183=>318, 184=>500, 185=>401, 186=>470, 187=>612, 188=>969, 189=>969, 190=>969, 191=>536, 192=>722, + 193=>722, 194=>722, 195=>722, 196=>722, 197=>722, 198=>1001, 199=>765, 200=>730, 201=>730, 202=>730, 203=>730, 204=>395, 205=>395, 206=>395, 207=>395, 208=>807, + 209=>875, 210=>820, 211=>820, 212=>820, 213=>820, 214=>820, 215=>838, 216=>820, 217=>843, 218=>843, 219=>843, 220=>843, 221=>660, 222=>676, 223=>668, 224=>596, + 225=>596, 226=>596, 227=>596, 228=>596, 229=>596, 230=>940, 231=>560, 232=>592, 233=>592, 234=>592, 235=>592, 236=>320, 237=>320, 238=>320, 239=>320, 240=>602, + 241=>644, 242=>602, 243=>602, 244=>602, 245=>602, 246=>602, 247=>838, 248=>602, 249=>644, 250=>644, 251=>644, 252=>644, 253=>565, 254=>640, 255=>565, 256=>722, + 257=>596, 258=>722, 259=>596, 260=>722, 261=>596, 262=>765, 263=>560, 264=>765, 265=>560, 266=>765, 267=>560, 268=>765, 269=>560, 270=>802, 271=>640, 272=>807, + 273=>640, 274=>730, 275=>592, 276=>730, 277=>592, 278=>730, 279=>592, 280=>730, 281=>592, 282=>730, 283=>592, 284=>799, 285=>640, 286=>799, 287=>640, 288=>799, + 289=>640, 290=>799, 291=>640, 292=>872, 293=>644, 294=>872, 295=>644, 296=>395, 297=>320, 298=>395, 299=>320, 300=>395, 301=>320, 302=>395, 303=>320, 304=>395, + 305=>320, 306=>801, 307=>533, 308=>401, 309=>310, 310=>747, 311=>606, 312=>606, 313=>664, 314=>320, 315=>664, 316=>320, 317=>664, 318=>400, 319=>671, 320=>465, + 321=>669, 322=>324, 323=>875, 324=>644, 325=>875, 326=>644, 327=>875, 328=>644, 329=>866, 330=>875, 331=>644, 332=>820, 333=>602, 334=>820, 335=>602, 336=>820, + 337=>602, 340=>753, 341=>478, 342=>753, 343=>478, 344=>753, 345=>478, 346=>685, 347=>513, 348=>685, 349=>513, 350=>685, 351=>513, 354=>667, 355=>402, 356=>667, + 357=>402, 358=>667, 359=>402, 360=>843, 361=>644, 362=>843, 363=>644, 364=>843, 365=>644, 366=>843, 367=>644, 368=>843, 369=>644, 370=>843, 371=>644, 372=>1028, + 373=>856, 374=>660, 375=>565, 377=>695, 378=>527, 379=>695, 380=>527, 383=>370, 384=>640, 385=>735, 386=>735, 387=>640, 388=>735, 389=>640, 390=>765, 391=>765, + 392=>560, 393=>807, 394=>802, 395=>735, 396=>640, 397=>602, 398=>730, 399=>820, 400=>636, 401=>694, 403=>799, 404=>712, 405=>932, 406=>395, 407=>395, 408=>747, + 409=>606, 410=>320, 411=>634, 412=>948, 413=>875, 414=>644, 415=>820, 416=>820, 417=>602, 418=>1040, 419=>807, 420=>673, 421=>640, 422=>753, 423=>685, 424=>513, + 425=>707, 426=>324, 427=>402, 428=>667, 429=>402, 430=>667, 431=>843, 432=>644, 433=>829, 434=>760, 435=>738, 436=>745, 437=>695, 438=>527, 439=>564, 440=>564, + 441=>564, 443=>636, 444=>687, 445=>564, 446=>536, 448=>295, 449=>492, 450=>459, 451=>295, 452=>1497, 453=>1329, 454=>1167, 455=>1065, 456=>974, 457=>630, 458=>1276, + 459=>1185, 460=>954, 461=>722, 462=>596, 463=>395, 464=>320, 465=>820, 466=>602, 467=>843, 468=>644, 469=>843, 470=>644, 471=>843, 472=>644, 473=>843, 474=>644, + 475=>843, 476=>644, 477=>592, 478=>722, 479=>596, 480=>722, 481=>596, 482=>1001, 483=>940, 484=>848, 485=>640, 486=>799, 487=>640, 488=>747, 489=>606, 490=>820, + 491=>602, 492=>820, 493=>602, 494=>564, 495=>564, 496=>320, 497=>1497, 498=>1329, 499=>1167, 500=>799, 501=>640, 502=>1154, 504=>875, 505=>644, 506=>722, 507=>596, + 508=>1001, 509=>940, 510=>820, 511=>602, 512=>722, 513=>596, 514=>722, 515=>596, 516=>730, 517=>592, 518=>730, 519=>592, 520=>395, 521=>320, 522=>395, 523=>320, + 524=>820, 525=>602, 526=>820, 527=>602, 528=>753, 529=>478, 530=>753, 531=>478, 532=>843, 533=>644, 534=>843, 535=>644, 536=>685, 537=>513, 538=>667, 539=>402, + 542=>872, 543=>644, 545=>814, 548=>695, 549=>527, 550=>722, 551=>596, 552=>730, 553=>592, 554=>820, 555=>602, 556=>820, 557=>602, 558=>820, 559=>602, 560=>820, + 561=>602, 562=>660, 563=>565, 564=>500, 565=>832, 566=>494, 567=>310, 568=>960, 569=>960, 570=>722, 571=>765, 572=>560, 573=>664, 574=>667, 575=>513, 576=>527, + 577=>583, 578=>464, 581=>722, 592=>596, 593=>640, 594=>675, 595=>640, 596=>560, 597=>560, 598=>647, 599=>683, 600=>592, 601=>592, 602=>843, 603=>537, 604=>509, + 605=>773, 606=>613, 607=>315, 608=>683, 609=>640, 610=>544, 611=>712, 612=>564, 613=>644, 614=>644, 615=>644, 616=>320, 617=>392, 618=>320, 619=>380, 620=>454, + 621=>363, 622=>704, 623=>948, 624=>948, 625=>948, 626=>644, 627=>694, 628=>646, 629=>602, 630=>790, 631=>647, 632=>602, 633=>501, 634=>501, 635=>551, 636=>478, + 637=>478, 638=>453, 639=>453, 640=>594, 641=>594, 642=>513, 643=>271, 644=>370, 645=>487, 646=>324, 647=>402, 648=>402, 649=>644, 650=>620, 651=>608, 652=>565, + 653=>856, 654=>565, 655=>655, 656=>597, 657=>560, 658=>564, 659=>560, 660=>536, 661=>536, 662=>536, 663=>513, 664=>820, 665=>563, 666=>613, 667=>654, 668=>667, + 669=>366, 670=>606, 671=>646, 672=>683, 673=>536, 674=>536, 675=>996, 676=>1033, 677=>998, 678=>809, 679=>598, 680=>782, 681=>894, 682=>646, 683=>676, 684=>598, + 685=>443, 686=>781, 687=>767, 688=>433, 689=>430, 690=>264, 691=>347, 692=>347, 693=>430, 694=>392, 695=>585, 696=>423, 697=>278, 699=>318, 700=>318, 701=>318, + 702=>307, 703=>307, 704=>280, 705=>281, 711=>500, 712=>282, 713=>500, 716=>282, 720=>337, 721=>337, 722=>307, 723=>307, 726=>392, 728=>500, 729=>500, 730=>500, + 731=>500, 733=>500, 734=>417, 736=>447, 737=>243, 738=>337, 739=>424, 740=>281, 741=>484, 742=>484, 743=>484, 744=>484, 745=>484, 750=>484, 768=>0, 769=>0, + 770=>0, 771=>0, 772=>0, 773=>0, 774=>0, 775=>0, 776=>0, 777=>0, 778=>0, 779=>0, 780=>0, 781=>0, 782=>0, 783=>0, 784=>0, 785=>0, + 786=>0, 787=>0, 788=>0, 789=>0, 790=>0, 791=>0, 792=>0, 793=>0, 794=>0, 795=>0, 796=>0, 797=>0, 798=>0, 799=>0, 800=>0, 801=>0, + 802=>0, 803=>0, 804=>0, 805=>0, 806=>0, 807=>0, 808=>0, 809=>0, 810=>0, 811=>0, 812=>0, 813=>0, 814=>0, 815=>0, 816=>0, 817=>0, + 818=>0, 819=>0, 820=>0, 821=>0, 822=>0, 823=>0, 824=>0, 825=>0, 826=>0, 827=>0, 828=>0, 829=>0, 830=>0, 831=>0, 835=>0, 847=>0, + 856=>0, 865=>0, 884=>278, 885=>278, 890=>500, 894=>337, 900=>500, 901=>500, 902=>722, 903=>318, 904=>900, 905=>1039, 906=>562, 908=>835, 910=>897, 911=>853, + 912=>392, 913=>722, 914=>735, 915=>694, 916=>722, 917=>730, 918=>695, 919=>872, 920=>820, 921=>395, 922=>747, 923=>722, 924=>1024, 925=>875, 926=>704, 927=>820, + 928=>872, 929=>673, 931=>707, 932=>667, 933=>660, 934=>820, 935=>712, 936=>877, 937=>829, 938=>395, 939=>660, 940=>675, 941=>537, 942=>599, 943=>392, 944=>608, + 945=>675, 946=>578, 947=>598, 948=>602, 949=>537, 950=>542, 951=>599, 952=>602, 953=>392, 954=>656, 955=>634, 956=>650, 957=>608, 958=>551, 959=>602, 960=>657, + 961=>588, 962=>560, 963=>683, 964=>553, 965=>608, 966=>700, 967=>606, 968=>784, 969=>815, 970=>392, 971=>608, 972=>602, 973=>608, 974=>815, 976=>583, 977=>715, + 978=>687, 979=>874, 980=>687, 981=>682, 982=>815, 983=>624, 984=>820, 985=>602, 986=>765, 987=>560, 988=>694, 989=>463, 990=>590, 991=>660, 992=>782, 993=>577, + 1008=>624, 1009=>588, 1010=>560, 1011=>310, 1012=>820, 1013=>560, 1014=>560, 1015=>676, 1016=>640, 1017=>765, 1018=>1024, 1019=>708, 1020=>588, 1021=>765, 1022=>765, 1023=>765, + 1024=>730, 1025=>730, 1026=>799, 1028=>765, 1029=>685, 1030=>395, 1031=>395, 1032=>401, 1033=>1084, 1034=>1118, 1035=>872, 1037=>872, 1038=>723, 1040=>757, 1041=>735, 1042=>735, + 1043=>662, 1044=>813, 1045=>730, 1046=>1124, 1047=>623, 1048=>872, 1049=>860, 1050=>774, 1051=>834, 1052=>1024, 1053=>872, 1054=>820, 1055=>872, 1056=>673, 1057=>765, 1058=>667, + 1059=>723, 1060=>830, 1061=>712, 1062=>872, 1063=>773, 1064=>1141, 1065=>1141, 1066=>794, 1067=>984, 1068=>674, 1069=>765, 1070=>1193, 1071=>808, 1072=>596, 1073=>649, 1074=>592, + 1075=>505, 1076=>639, 1077=>592, 1078=>1149, 1079=>545, 1080=>644, 1081=>644, 1082=>616, 1083=>637, 1084=>873, 1085=>659, 1086=>602, 1087=>644, 1088=>640, 1089=>560, 1090=>948, + 1091=>580, 1092=>783, 1093=>564, 1094=>698, 1095=>622, 1096=>947, 1097=>1001, 1098=>667, 1099=>814, 1100=>544, 1101=>560, 1102=>880, 1103=>662, 1104=>592, 1105=>592, 1106=>624, + 1107=>505, 1108=>560, 1109=>513, 1110=>320, 1111=>320, 1112=>310, 1113=>859, 1114=>878, 1115=>644, 1117=>644, 1118=>580, 1119=>644, 1122=>762, 1123=>882, 1138=>820, 1139=>552, + 1140=>859, 1141=>678, 1164=>690, 1165=>492, 1168=>672, 1169=>529, 1170=>694, 1171=>538, 1172=>730, 1173=>614, 1174=>1124, 1175=>1149, 1176=>623, 1177=>545, 1178=>774, 1179=>606, + 1182=>774, 1183=>606, 1184=>892, 1185=>664, 1186=>872, 1187=>712, 1188=>1139, 1189=>866, 1190=>1206, 1191=>943, 1194=>765, 1195=>560, 1196=>667, 1197=>1013, 1198=>660, 1199=>565, + 1202=>712, 1203=>564, 1204=>1079, 1205=>899, 1206=>749, 1207=>690, 1210=>749, 1211=>644, 1216=>395, 1217=>1124, 1218=>1149, 1219=>747, 1220=>606, 1223=>872, 1224=>667, 1227=>749, + 1228=>667, 1231=>320, 1232=>757, 1233=>596, 1234=>757, 1235=>596, 1236=>1001, 1237=>940, 1238=>730, 1239=>592, 1240=>820, 1241=>592, 1242=>820, 1243=>592, 1244=>1124, 1245=>1149, + 1246=>623, 1247=>545, 1248=>564, 1249=>564, 1250=>872, 1251=>644, 1252=>872, 1253=>644, 1254=>820, 1255=>602, 1256=>820, 1257=>602, 1258=>820, 1259=>602, 1260=>765, 1261=>560, + 1262=>723, 1263=>580, 1264=>723, 1265=>580, 1266=>723, 1267=>580, 1268=>773, 1269=>622, 1270=>662, 1271=>538, 1272=>984, 1273=>814, 7426=>940, 7432=>509, 7433=>320, 7444=>989, + 7446=>602, 7447=>602, 7453=>737, 7454=>948, 7455=>948, 7491=>474, 7492=>334, 7493=>488, 7494=>706, 7495=>488, 7496=>488, 7497=>475, 7498=>475, 7499=>428, 7500=>428, 7501=>488, + 7502=>263, 7503=>453, 7504=>701, 7505=>487, 7506=>473, 7507=>434, 7508=>473, 7509=>473, 7510=>488, 7511=>334, 7512=>487, 7513=>552, 7514=>701, 7515=>460, 7543=>640, 7547=>372, + 7557=>320, 7579=>488, 7580=>434, 7581=>434, 7582=>473, 7583=>428, 7584=>310, 7585=>316, 7586=>488, 7587=>487, 7588=>322, 7589=>332, 7590=>322, 7591=>322, 7592=>318, 7593=>263, + 7594=>263, 7595=>455, 7596=>701, 7597=>701, 7598=>495, 7599=>492, 7600=>487, 7601=>473, 7602=>473, 7603=>416, 7604=>299, 7605=>334, 7606=>487, 7607=>477, 7609=>464, 7610=>460, + 7611=>418, 7612=>418, 7613=>418, 7614=>452, 7615=>473, 7680=>722, 7681=>596, 7682=>735, 7683=>640, 7684=>735, 7685=>640, 7686=>735, 7687=>640, 7688=>765, 7689=>560, 7690=>802, + 7691=>640, 7692=>802, 7693=>640, 7694=>802, 7695=>640, 7696=>802, 7697=>640, 7698=>802, 7699=>640, 7700=>730, 7701=>592, 7702=>730, 7703=>592, 7704=>730, 7705=>592, 7706=>730, + 7707=>592, 7710=>694, 7711=>370, 7712=>799, 7713=>640, 7714=>872, 7715=>644, 7716=>872, 7717=>644, 7718=>872, 7719=>644, 7720=>872, 7721=>644, 7722=>872, 7723=>644, 7724=>395, + 7725=>320, 7728=>747, 7729=>606, 7730=>747, 7731=>606, 7732=>747, 7733=>606, 7734=>664, 7735=>320, 7736=>664, 7737=>320, 7738=>664, 7739=>320, 7740=>664, 7741=>320, 7742=>1024, + 7743=>948, 7744=>1024, 7745=>948, 7746=>1024, 7747=>953, 7748=>875, 7749=>644, 7750=>875, 7751=>644, 7752=>875, 7753=>644, 7754=>875, 7755=>644, 7760=>820, 7761=>602, 7762=>820, + 7763=>602, 7764=>673, 7765=>640, 7766=>673, 7767=>640, 7768=>753, 7769=>478, 7770=>753, 7771=>478, 7772=>753, 7773=>478, 7774=>753, 7775=>478, 7776=>685, 7777=>513, 7778=>685, + 7779=>513, 7784=>685, 7785=>513, 7786=>667, 7787=>402, 7788=>667, 7789=>402, 7790=>667, 7791=>402, 7792=>667, 7793=>402, 7794=>843, 7795=>644, 7796=>843, 7797=>644, 7798=>843, + 7799=>644, 7800=>843, 7801=>644, 7802=>843, 7803=>644, 7804=>722, 7805=>565, 7806=>722, 7807=>565, 7808=>1028, 7809=>856, 7810=>1028, 7811=>856, 7812=>1028, 7813=>856, 7814=>1028, + 7815=>856, 7816=>1028, 7817=>856, 7818=>712, 7819=>564, 7820=>712, 7821=>564, 7822=>660, 7823=>565, 7824=>695, 7825=>527, 7826=>695, 7827=>527, 7828=>695, 7829=>527, 7830=>644, + 7831=>402, 7832=>856, 7833=>565, 7834=>903, 7835=>513, 7840=>722, 7841=>596, 7842=>722, 7843=>596, 7852=>722, 7853=>596, 7854=>722, 7855=>596, 7856=>722, 7857=>596, 7858=>722, + 7859=>596, 7860=>722, 7861=>596, 7862=>722, 7863=>596, 7864=>730, 7865=>592, 7866=>730, 7867=>592, 7868=>730, 7869=>592, 7878=>730, 7879=>592, 7880=>395, 7881=>320, 7882=>395, + 7883=>320, 7884=>820, 7885=>602, 7886=>820, 7887=>602, 7896=>820, 7897=>602, 7908=>843, 7909=>644, 7910=>843, 7911=>644, 7922=>660, 7923=>565, 7924=>660, 7925=>565, 7926=>660, + 7927=>565, 7928=>660, 7929=>565, 7936=>675, 7937=>675, 7938=>675, 7939=>675, 7940=>675, 7941=>675, 7942=>675, 7943=>675, 7944=>722, 7945=>722, 7946=>869, 7947=>869, 7948=>734, + 7949=>763, 7950=>722, 7951=>722, 7952=>537, 7953=>537, 7954=>537, 7955=>537, 7956=>537, 7957=>537, 7960=>853, 7961=>841, 7962=>1067, 7963=>1077, 7964=>1008, 7965=>1035, 7968=>599, + 7969=>599, 7970=>599, 7971=>599, 7972=>599, 7973=>599, 7974=>599, 7975=>599, 7976=>998, 7977=>992, 7978=>1212, 7979=>1224, 7980=>1159, 7981=>1183, 7982=>1098, 7983=>1095, 7984=>392, + 7985=>392, 7986=>392, 7987=>392, 7988=>392, 7989=>392, 7990=>392, 7991=>392, 7992=>521, 7993=>512, 7994=>735, 7995=>738, 7996=>679, 7997=>706, 7998=>624, 7999=>615, 8000=>602, + 8001=>602, 8002=>602, 8003=>602, 8004=>602, 8005=>602, 8008=>820, 8009=>859, 8010=>1120, 8011=>1127, 8012=>937, 8013=>964, 8016=>608, 8017=>608, 8018=>608, 8019=>608, 8020=>608, + 8021=>608, 8022=>608, 8023=>608, 8025=>851, 8027=>1079, 8029=>1044, 8031=>953, 8032=>815, 8033=>815, 8034=>815, 8035=>815, 8036=>815, 8037=>815, 8038=>815, 8039=>815, 8040=>829, + 8041=>870, 8042=>1131, 8043=>1137, 8044=>946, 8045=>976, 8046=>938, 8047=>970, 8048=>675, 8049=>675, 8050=>537, 8051=>537, 8052=>599, 8053=>599, 8054=>392, 8055=>392, 8056=>602, + 8057=>602, 8058=>608, 8059=>608, 8060=>815, 8061=>815, 8064=>675, 8065=>675, 8066=>675, 8067=>675, 8068=>675, 8069=>675, 8070=>675, 8071=>675, 8072=>722, 8073=>722, 8074=>869, + 8075=>869, 8076=>734, 8077=>763, 8078=>722, 8079=>722, 8080=>599, 8081=>599, 8082=>599, 8083=>599, 8084=>599, 8085=>599, 8086=>599, 8087=>599, 8088=>998, 8089=>992, 8090=>1212, + 8091=>1224, 8092=>1159, 8093=>1183, 8094=>1098, 8095=>1095, 8096=>815, 8097=>815, 8098=>815, 8099=>815, 8100=>815, 8101=>815, 8102=>815, 8103=>815, 8104=>829, 8105=>870, 8106=>1131, + 8107=>1137, 8108=>946, 8109=>976, 8110=>938, 8111=>970, 8112=>675, 8113=>675, 8114=>675, 8115=>675, 8116=>675, 8118=>675, 8119=>675, 8120=>722, 8121=>722, 8122=>722, 8123=>722, + 8124=>722, 8125=>500, 8126=>500, 8127=>500, 8128=>500, 8129=>500, 8130=>599, 8131=>599, 8132=>599, 8134=>599, 8135=>599, 8136=>912, 8137=>900, 8138=>1063, 8139=>1039, 8140=>872, + 8141=>500, 8142=>500, 8143=>500, 8144=>392, 8145=>392, 8146=>392, 8147=>392, 8150=>392, 8151=>392, 8152=>395, 8153=>395, 8154=>588, 8155=>562, 8157=>500, 8158=>500, 8159=>500, + 8160=>608, 8161=>608, 8162=>608, 8163=>608, 8164=>588, 8165=>588, 8166=>608, 8167=>608, 8168=>660, 8169=>660, 8170=>921, 8171=>897, 8172=>790, 8173=>500, 8174=>500, 8175=>500, + 8178=>815, 8179=>815, 8180=>815, 8182=>815, 8183=>815, 8184=>961, 8185=>835, 8186=>984, 8187=>853, 8188=>829, 8189=>500, 8190=>500, 8192=>500, 8193=>1000, 8194=>500, 8195=>1000, + 8196=>330, 8197=>250, 8198=>167, 8199=>636, 8200=>318, 8201=>200, 8202=>100, 8203=>0, 8204=>0, 8205=>0, 8206=>0, 8207=>0, 8208=>338, 8209=>338, 8210=>636, 8213=>1000, + 8215=>500, 8219=>318, 8223=>511, 8227=>590, 8228=>334, 8229=>667, 8234=>0, 8235=>0, 8236=>0, 8237=>0, 8238=>0, 8239=>200, 8241=>1734, 8252=>527, 8253=>536, 8254=>500, + 8263=>976, 8264=>753, 8265=>753, 8287=>222, 8288=>0, 8289=>0, 8290=>0, 8291=>0, 8298=>0, 8299=>0, 8300=>0, 8301=>0, 8302=>0, 8303=>0, 8304=>401, 8308=>401, + 8309=>401, 8310=>401, 8311=>401, 8312=>401, 8313=>401, 8319=>433, 8320=>401, 8321=>401, 8322=>401, 8323=>401, 8324=>401, 8325=>401, 8326=>401, 8327=>401, 8328=>401, 8329=>401, + 8358=>660, 8367=>1057, 8369=>706, 8372=>780, 8373=>636, 8462=>644, 8470=>946, 8486=>829, 8490=>747, 8491=>722, 8531=>969, 8532=>969, 8533=>969, 8534=>969, 8535=>969, 8536=>969, + 8537=>969, 8538=>969, 8539=>969, 8540=>969, 8541=>969, 8542=>969, 8543=>568, 8592=>838, 8593=>838, 8594=>838, 8595=>838, 8706=>517, 8710=>698, 8711=>698, 8719=>796, 8721=>714, + 8722=>838, 8725=>167, 8729=>318, 8730=>637, 8733=>677, 8734=>833, 8735=>838, 8736=>838, 8743=>732, 8744=>732, 8745=>732, 8746=>732, 8747=>521, 8748=>852, 8749=>1182, 8770=>838, + 8771=>838, 8776=>838, 8800=>838, 8801=>838, 8804=>838, 8805=>838, 8962=>764, 8968=>390, 8969=>390, 8970=>390, 8971=>390, 8976=>838, 8977=>513, 8984=>1000, 8985=>838, 8992=>521, + 8993=>521, 8997=>1000, 9000=>1443, 9085=>919, 9134=>521, 9167=>945, 9251=>764, 9600=>769, 9601=>769, 9602=>769, 9603=>769, 9604=>769, 9605=>769, 9606=>769, 9607=>769, 9608=>769, + 9609=>769, 9610=>769, 9611=>769, 9612=>769, 9613=>769, 9614=>769, 9615=>769, 9616=>769, 9617=>769, 9618=>769, 9619=>769, 9620=>769, 9621=>769, 9622=>769, 9623=>769, 9624=>769, + 9625=>769, 9626=>769, 9627=>769, 9628=>769, 9629=>769, 9630=>769, 9631=>769, 9632=>945, 9633=>945, 9634=>945, 9635=>945, 9636=>945, 9637=>945, 9638=>945, 9639=>945, 9640=>945, + 9641=>945, 9642=>678, 9643=>678, 9644=>945, 9645=>945, 9646=>550, 9647=>550, 9648=>769, 9649=>769, 9650=>769, 9651=>769, 9652=>502, 9653=>502, 9654=>769, 9655=>769, 9656=>502, + 9657=>502, 9658=>769, 9659=>769, 9660=>769, 9661=>769, 9662=>502, 9663=>502, 9664=>769, 9665=>769, 9666=>502, 9667=>502, 9668=>769, 9669=>769, 9670=>769, 9671=>769, 9672=>769, + 9673=>873, 9674=>494, 9675=>873, 9676=>873, 9677=>873, 9678=>873, 9679=>873, 9680=>873, 9681=>873, 9682=>873, 9683=>873, 9684=>873, 9685=>873, 9686=>527, 9687=>527, 9688=>791, + 9689=>970, 9690=>970, 9691=>970, 9692=>387, 9693=>387, 9694=>387, 9695=>387, 9696=>873, 9697=>873, 9698=>769, 9699=>769, 9700=>769, 9701=>769, 9702=>590, 9703=>945, 9704=>945, + 9705=>945, 9706=>945, 9707=>945, 9708=>769, 9709=>769, 9710=>769, 9711=>1119, 9712=>945, 9713=>945, 9714=>945, 9715=>945, 9716=>873, 9717=>873, 9718=>873, 9719=>873, 9720=>769, + 9721=>769, 9722=>769, 9723=>830, 9724=>830, 9725=>732, 9726=>732, 9727=>769, 9728=>896, 9784=>896, 9785=>896, 9786=>896, 9787=>896, 9788=>896, 9791=>614, 9792=>731, 9793=>731, + 9794=>896, 9795=>896, 9796=>896, 9797=>896, 9798=>896, 9799=>896, 9824=>896, 9825=>896, 9826=>896, 9827=>896, 9828=>896, 9829=>896, 9830=>896, 9831=>896, 9833=>472, 9834=>638, + 9835=>896, 9836=>896, 9837=>472, 9838=>357, 9839=>484, 10208=>494, 10216=>390, 10217=>390, 10731=>494, 10764=>1513, 10765=>521, 10766=>521, 11026=>945, 11027=>945, 11028=>945, 11029=>945, + 11030=>769, 11031=>769, 11032=>769, 11033=>769, 11034=>945, 63172=>505, 63173=>602, 63174=>640, 63175=>644, 63176=>947, 63185=>500, 63188=>500, 64256=>708, 64257=>667, 64258=>667, 64259=>941, + 64260=>986, 64261=>744, 64262=>916, 65024=>0, 65025=>0, 65026=>0, 65027=>0, 65028=>0, 65029=>0, 65030=>0, 65031=>0, 65032=>0, 65033=>0, 65034=>0, 65035=>0, 65036=>0, + 65037=>0, 65038=>0, 65039=>0, 65533=>1025} + font[:enc]=''; + font[:diff]=''; + font[:file]='DejaVuSerif-Oblique.z'; + font[:ctg]='DejaVuSerif-Oblique.ctg.z'; + font[:originalsize]=181932; +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/FreeMono.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/FreeMono.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/FreeMono.z Binary file vendor/plugins/rfpdf/lib/fonts/FreeMono.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/FreeMonoBold.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/FreeMonoBold.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/FreeMonoBold.z Binary file vendor/plugins/rfpdf/lib/fonts/FreeMonoBold.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/FreeMonoBoldOblique.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/FreeMonoBoldOblique.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/FreeMonoBoldOblique.z Binary file vendor/plugins/rfpdf/lib/fonts/FreeMonoBoldOblique.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/FreeMonoOblique.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/FreeMonoOblique.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/FreeMonoOblique.z Binary file vendor/plugins/rfpdf/lib/fonts/FreeMonoOblique.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/FreeSans.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/FreeSans.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/FreeSans.z Binary file vendor/plugins/rfpdf/lib/fonts/FreeSans.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/FreeSansBold.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/FreeSansBold.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/FreeSansBold.z Binary file vendor/plugins/rfpdf/lib/fonts/FreeSansBold.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/FreeSansBoldOblique.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/FreeSansBoldOblique.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/FreeSansBoldOblique.z Binary file vendor/plugins/rfpdf/lib/fonts/FreeSansBoldOblique.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/FreeSansOblique.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/FreeSansOblique.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/FreeSansOblique.z Binary file vendor/plugins/rfpdf/lib/fonts/FreeSansOblique.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/README.z --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/README.z Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,2 @@ +This folder contains fonts descriptions for TCPDF. +Please read the documentation on subfolders for copyright, license and other information. \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/courier.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/courier.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,25 @@ +TCPDFFontDescriptor.define('courier') do |font| + font[:cw] = {} + 0.upto(255) do |i| + font[:cw][i]=600 + end +end +TCPDFFontDescriptor.define('courierb') do |font| + font[:cw] = {} + 0.upto(255) do |i| + font[:cw][i]=600 + end +end +TCPDFFontDescriptor.define('courierbi') do |font| + font[:cw] = {} + 0.upto(255) do |i| + font[:cw][i]=600 + end +end +TCPDFFontDescriptor.define('courieri') do |font| + font[:cw] = {} + 0.upto(255) do |i| + font[:cw][i]=600 + end +end + diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/dejavu-ttf-2.15/AUTHORS --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/dejavu-ttf-2.15/AUTHORS Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,38 @@ +Adrian Schroeter +Andrey Valentinovich Panov +Ben Laenen +Bhikkhu Pesala +Clayborne Arevalo +Dafydd Harries +Danilo Segan +Davide Viti +David Jez +David Lawrence Ramsey +Denis Jacquerye +Dwayne Bailey +Eugeniy Meshcheryakov +Gee Fung Sit +Heikki Lindroos +James Cloos +James Crippen +John Karp +Keenan Pepper +Lars Naesbye Christensen +Mashrab Kuvatov +Mederic Boquien +Michael Everson +Misu Moldovan +Nguyen Thai Ngoc Duy +Ognyan Kulev +Ondrej Koala Vacha +Peter Cernak +Remy Oudompheng +Roozbeh Pournader +Sander Vesik +Stepan Roh +Tavmjong Bah +Tim May +Valentin Stoykov +Vasek Stodulka + +$Id: AUTHORS 1491 2007-01-12 20:40:12Z ben_laenen $ diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/dejavu-ttf-2.15/BUGS --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/dejavu-ttf-2.15/BUGS Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,3 @@ +See http://dejavu.sourceforge.net/wiki/index.rb/Bugs + +$Id: BUGS 80 2004-11-13 13:12:02Z src $ diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/dejavu-ttf-2.15/LICENSE --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/dejavu-ttf-2.15/LICENSE Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,98 @@ +Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. Glyphs imported from Arev fonts are (c) Tavmjung Bah (see below) + +Bitstream Vera Fonts Copyright +------------------------------ + +Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is +a trademark of Bitstream, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of the fonts accompanying this license ("Fonts") and associated +documentation files (the "Font Software"), to reproduce and distribute the +Font Software, including without limitation the rights to use, copy, merge, +publish, distribute, and/or sell copies of the Font Software, and to permit +persons to whom the Font Software is furnished to do so, subject to the +following conditions: + +The above copyright and trademark notices and this permission notice shall +be included in all copies of one or more of the Font Software typefaces. + +The Font Software may be modified, altered, or added to, and in particular +the designs of glyphs or characters in the Fonts may be modified and +additional glyphs or characters may be added to the Fonts, only if the fonts +are renamed to names not containing either the words "Bitstream" or the word +"Vera". + +This License becomes null and void to the extent applicable to Fonts or Font +Software that has been modified and is distributed under the "Bitstream +Vera" names. + +The Font Software may be sold as part of a larger software package but no +copy of one or more of the Font Software typefaces may be sold by itself. + +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, +TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME +FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING +ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE +FONT SOFTWARE. + +Except as contained in this notice, the names of Gnome, the Gnome +Foundation, and Bitstream Inc., shall not be used in advertising or +otherwise to promote the sale, use or other dealings in this Font Software +without prior written authorization from the Gnome Foundation or Bitstream +Inc., respectively. For further information, contact: fonts at gnome dot +org. + +Arev Fonts Copyright +------------------------------ + +Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the fonts accompanying this license ("Fonts") and +associated documentation files (the "Font Software"), to reproduce +and distribute the modifications to the Bitstream Vera Font Software, +including without limitation the rights to use, copy, merge, publish, +distribute, and/or sell copies of the Font Software, and to permit +persons to whom the Font Software is furnished to do so, subject to +the following conditions: + +The above copyright and trademark notices and this permission notice +shall be included in all copies of one or more of the Font Software +typefaces. + +The Font Software may be modified, altered, or added to, and in +particular the designs of glyphs or characters in the Fonts may be +modified and additional glyphs or characters may be added to the +Fonts, only if the fonts are renamed to names not containing either +the words "Tavmjong Bah" or the word "Arev". + +This License becomes null and void to the extent applicable to Fonts +or Font Software that has been modified and is distributed under the +"Tavmjong Bah Arev" names. + +The Font Software may be sold as part of a larger software package but +no copy of one or more of the Font Software typefaces may be sold by +itself. + +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL +TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + +Except as contained in this notice, the name of Tavmjong Bah shall not +be used in advertising or otherwise to promote the sale, use or other +dealings in this Font Software without prior written authorization +from Tavmjong Bah. For further information, contact: tavmjong @ free +. fr. + +$Id: LICENSE 778 2006-04-20 18:14:24Z moyogo $ diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/dejavu-ttf-2.15/NEWS --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/dejavu-ttf-2.15/NEWS Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,789 @@ +Changes from 2.14 to 2.15 + +- improved hinting in Sans Oblique to deal with some spacing and inconsistency + issues (by Ben Laenen) +- added anchors to Mono Book, and added GPOS rules for combining diacritics to + show up as zero width glyphs (by Ben Laenen) +- removed U+F21C (PUA), it was copy of U+2C64 from Latin Extended C (by Eugeniy + Meshcheryakov) +- added U+27E6-U+27E7 to Sans (by Gee Fung Sit) +- added U+1407, U+1409, U+140C-U+141B, U+141D-U+1425, U+1427-U+142E, + U+1435-U+1438, U+143A-U+1449, U+1452, U+1454, U+1457-U+1465, U+1467-U+146A, + U+1471, U+1474-U+1482, U+1484-U+1488, U+148F, U+1492, U+14A0, U+14A2, U+14A9, + U+14AC-U+14BA, U+14BC, U+14BD, U+14C6, U+14C9-U+14CF, U+14D1, U+14D2, U+14D9, + U+14DC-U+14E9, U+14EC, U+14F3, U+14F6-U+1504, U+1506, U+1507, U+1510-U+1525, + U+152C, U+152F-U+153D, U+1540, U+1541, U+154E, U+154F, U+1552, U+155B, U+155C, + U+1568, U+1569, U+1574-U+157B, U+157D, U+15A7-U+15AE, U+1646, U+1647 (by + Eugeniy Meshcheryakov) +- fixed several contours to not intersect, use horizontal or vertical tangents, + use integer coordinates, etc in Sans Book (by Denis Jacquerye) +- added U+0496-U+0497 in Serif (by Andrey V. Panov) + +Changes from 2.13 to 2.14 + +- added Philippine peso glyph U+20B1 (by Clayborne Arevalo) +- made U+2012 have the same width as digits, according to Unicode 5.0, + page 206 (by Roozbeh Pournader) +- made all of the "above" combining characters remove the dot of "i", + "j", etc (Soft_Dotted characters), according to Unicode 5.0, + page 228 (by Roozbeh Pournader) +- made U+012F, U+03F3, U+0456, U+0458, U+1E2D, and U+1ECB (all fonts + except Mono), U+0249, U+2148, and U+2149 (Sans and Sans Condensed), + U+0268 (Sans ExtraLight, Serif and Serif Condensed), and U+029D (Serif + and Serif Condensed) respect the Soft_Dotted property (by Roozbeh + Pournader) +- added U+223E, U+223F, U+2240, U+22C2, U+22C3 to Sans (by Rémy Oudompheng) +- added U+203D to Serif (by Gee Fung Sit) +- added zero-width glyphs for U+2061-U+2063 to Sans and Serif (by Gee + Fung Sit) +- changed isolated forms of Arabic waw (U+0648, U+0624 and U+06C6) (bug #9432) + (by Ben Laenen) +- added Lao consonants U+0E81, U+0E82, U+0E84, U+0E87, U+0E88, U+0E8A, + U+0E8D, U+0E94-0E97, U+0E99-0E9F, U+0EA1-0EA3, U+0EA5, U+0EA7, U+0EAA, + U+0EAB, U+0EAD-0EAF to Sans Mono (by Rémy Oudompheng) +- added U+0200-U+0217, U+0226-U+0229, U+02F3, U+1E00-U+1E07, + U+1E0A-U+1E0B, U+1E18-U+1E1F, U+1E22-U+1E23, U+1E28-U+1E2D, + U+1E3A-U+1E3B, U+1E40, U+1E48-U+1E49, U+1E56, U+1E58-U+1E59, + U+1E5E-U+1E5F, U+1E60, U+1E68-U+1E6B, U+1E6E-U+1E6F, U+1E72-U+1E77, + U+1E86-U+1E8B, U+1E92-U+1E96, U+1EA0-U+1EA1, U+1EF4-U+1EF5 to Mono + (by Ben Laenen) +- renamed uppercase variants of diacritics (macron, breve, double grave, + double acute, inverted breve, dot above) to "uni03XX.case" in Mono + (by Ben Laenen) +- moved uppercase variants of diacritics up in Mono so they properly + vertically align on capitals (by Ben Laenen) +- precomposed glyphs with macron, breve, double grave, double acute, + inverted breve, dot above, macron below, breve below, inverted breve + below, dot below, cedilla, caron below, circumflex below, diaeresis + below, tilde below now reference to combining diacritics instead of + space modifiers in Mono (by Ben Laenen) +- made ring below (U+0325), and half rings below (U+031C and U+0339) + smaller in Mono (by Ben Laenen) +- added U+205F to all fonts (by Roozbeh Pournader) +- added U+035E-U+035F to Sans (by Roozbeh Pournader) +- added empty glyphs for U+034F, U+202A-U+202E, U+2060, U+206A-206F, + U+FE00-U+FE0F to non-Mono fonts (by Roozbeh Pournader) +- added U+2101, U+2107-U+2108, U+210B, U+210C, U+2110, U+2112, U+211B, + U+211F, U+2123, U+2125, U+2128-U+2129, U+212C-U+212D, U+212F, + U+2130-U+2131, U+2133, U+2136-U+213A, U+2141-U+2144, U+2B00-U+2B11, + U+2B20-U+2B23 to Sans (by John Karp) +- reshaped omega (U+03C9) in Mono (by Ben Laenen) +- added U+2205, U+22C6, U+2300-U+2301, U+2303-U+2306, U+230C-U+230F, + U+2312-U+2315, U+231C-U+231F, U+2335, U+2337-U+233E, U+2341-U+2344, + U+2347-U+2348, U+234B-U+234D, U+2349-U+2350, U+2352-U+2354, + U+2357-U+2359, U+235A-U+235C, U+235E-U+2360, U+2363-U+2365, + U+2368-U+2369, U+236B-U+2370, U+2373-U+237A, U+2380-U+2383, + U+2388-U+238B, U+2395 in Mono (by Ben Laenen) + +Changes from 2.12 to 2.13 + +- adjusted U+0198B, U+01B3-U+01B4 in Sans, hinted U+01B4 in Sans Book + (by Denis Jacquerye) +- added U+27F0-U+27FF, U+2906-U+2907, U+290A-U+290B, U+2940-U+2941 to Sans + (by Denis Jacquerye) +- added U+01E6-U+01E9, U+01EE-U+01EF, U+01F4-U+01F5, U+01FC-U+01FF, + U+021E-U+021F, U+0245, U+02BD, U+02C9, U+1E9B, U+2045-U+2046, U+2213, U+22C5, + U+22EF to Sans Mono (by Roozbeh Pournader) +- added U+04FA-U+04FD to Sans (by Michael Everson) +- removed U+2329 and U+232A because of their CJK properties, added U+27E8 + and U+27E9 in their stead, fixing part of bug #9038 (by Roozbeh Pournader) +- corrected and improvised U+0466-U+0469, U+046E-U+0471, U+047C-U+047D, U+0482, + U+0484-U+0486, U+0492-U+0493, U+04B0-U+04B1, U+050C-U+050D, and U+204A + in Sans (by Michael Everson) +- added instructions for U+0402, U+0409, U+040A, U+040B, U+044D, U+040F, + U+0452, U+0459-U+045B, U+045F to Sans Book (by Eugeniy Meshcheryakov) +- made italic shape for U+431, U+432, U+437, U+43B, U+43C, U+43D, U+444, U+447, + U+44D, U+44F, U+459, U+45A in SerifOblique and SerifBoldOblique + (by Andrey V. Panov) +- modified U+024C to match glyph in Unicode chart, fixing bug #9039 + (by Denis Jacquerye) +- made some canonically equivalent characters share the same glyph: + U+02B9 = U+0374, U+0343 = U+0313, and U+0387 = U+00B7 also adjusting U+02BA + to look like double U+02B9, fixing parts of bug #9038 (by Roozbeh Pournader) +- changed shapes for U+0478 and U+0479 in Sans to those in the Unicode charts, + based on a recent decision by Unicode Technical Committee to only use + the digraph form (by Michael Everson) +- adjusted width of NBSP U+00A0 and NNBSP U+202F, fixing bug #8401 + (by Denis Jacquerye) +- fixed several contours to not intersect, use horizontal or vertical tangents, + use integer coordinates, etc (by Roozbeh Pournader and Denis Jacquerye) +- added U+1402, U+1430, U+144D, U+146C, U+148A, U+14A4, U+14C1, U+14D4, U+14EE, + U+1527, U+1545, U+157E, U+158E, U+15AF to Sans (by Eugeniy Meshcheryakov) +- enlarged width of U+459 and U+45A in Serif (by Andrey V. Panov) +- made traditional shape for U+452, U+45B (by Andrey V. Panov) +- added euro sign U+20AC to Sans ExtraLight, making fontconfig recognize + the font as supporting English (by Denis Jacquerye) + +Changes from 2.11 to 2.12 + +- added U+0180 to Serif (by Denis Jacquerye) +- improved and/or hinted Armenian letters U+0542, U+0546, U+0562, + U+0563, U+0564, U+0577, U+0582 in Sans (by Ben Laenen) +- added U+4FE-U+4FF, U+512-U+513, U+2114, U+214E, U+26B2 to Sans + (by Gee Fung Sit) +- adjusted U+0496-U+0497, U+049A-U+04A1 in Sans to match U+0416, + U+041A, U+0436 and U+043A (by Gee Fung Sit) +- Mathematical Operators in Sans: changed U+22C0-U+22C1 to match + other n-ary operators, adjusted U+2203-U+2204, changed U+2220 in + Sans to match the style of U+2221 (by Gee Fung Sit) +- added U+1401, U+1403-U+1406, U+140A, U+140B, U+1426, U+142F, + U+1431-U+1434, U+1438, U+1439, U+1449, U+144A, U+144C, + U+144E-U+1451, U+1455, U+1456, U+1466, U+146B, U+146D-U+1470, + U+1472, U+1473, U+1483, U+1489, U+148B-U+148E, U+1490, U+1491, + U+14A1, U+14A3, U+14A5-U+14A8, U+14AA, U+14AB, U+14BB, U+14C0, + U+14C2-U+14C5, U+14C7, U+14C8, U+14D0, U+14D3, U+14D5-U+14D8, + U+14DA, U+14DB, U+14EA, U+14ED, U+14EF-U+14F2, U+14F4, U+14F5, + U+1405, U+1526, U+1528-U+152B, U+152D, U+152E, U+153E, + U+1542-U+1544, U+1546-U+154D, U+1550, U+1553, U+1555-U+155A, + U+1567, U+156A, U+157C, U+157F-U+1585, U+158A-U+158D, + U+158F-U+1596, U+15A0-U+15A6, U+15DE, U+15E1, U+166E-U+1676 to + Sans (by Eugeniy Meshcheryakov) +- re-enabled Latin ligatures fi, ffi, fl, ffl and ff in Sans + (by Ben Laenen) +- made italic shape for U+436, U+44A, U+44B, U+44C, U+44E, U+45F, + U+463 in SerifOblique and SerifBoldOblique (by Andrey V. Panov) +- fixed sub- and superscript metrics in Condensed Sans (bug #8848) + (by Ben Laenen) +- added U+474, U+475 in Serif (by Andrey V. Panov) +- hinted Greek glyphs U+03B7, U+30B8, U+03B9, U+03C1, U+03C3, + U+03C6 in Mono Book (by Ben Laenen) + +Changes from 2.10 to 2.11 + +- added instructions for Hebrew glyphs (Sans Book, by Eugeniy + Meshcheryakov) +- changed U+01A6 (Latin Yr) after bug #8212, in Sans, Serif and + Sans Mono fonts (by Denis Jacquerye). +- removed instruction for U+2600-U+26A1 (by Mederic Boquien) +- added U+202F and set width of U+00A0 (nobreakingspace) to the + same as U+0020, space (by Denis Jacquerye). +- added and improved instructions for various Cyrillic letters + (by Eugeniy Meshcheryakov) +- Changed U+416, U+42F, U+427 (non-Bold), U+436, U+447 (non-Bold), + U+44F, U+437 (Bold), corrected U+40F, U+414, U+424, U+426, U+429, + U+434, U+438 (Bold), U+446, U+449, U+44D (non-Bold), U+45F in + Sans Mono (by Andrey V. Panov) +- made small corrections to Cyrillic, most appreciable to U+409, + U+413, U+41B, U+427 and U+433, U+434, U+43B, U+447, U+459 + (upright fonts) to Serif (by Andrey V. Panov) +- adjusted bearings of U+410, U+416, U+41A, U+42F, U+436, U+43A, + U+443, U+44F in Serif (by Andrey V. Panov) +- enlarged width of U+44A, U+44B, U+44C, U+463 in Serif + (by Andrey V. Panov) +- added ligature "iacute" as "afii10103" (U+456) "acutecomb" in + Serif (by Andrey V. Panov) +- made italic shape to U+446, U+448, U+449 in Serif (by Andrey V. + Panov) +- added "afii10831" (U+F6C7), "afii10832" (U+F6C8) in Serif (by + Andrey V. Panov) +- new minimum version of fontforge is 20061014 (by Ben Laenen) + +Changes from 2.9 to 2.10: + +- added U+0242, U+024A-U+024B, U+024E-U+024F, U+037C-U+037D, U+0E3F, + U+1D2C-U+1D2E, U+1D30-U+1D42, U+1D5D-U+1D6A, U+1D78, U+1DB8, + U+2090-U+2094, U+20D0-U+20D1, U+2C60-U+2C66, U+2C6B-U+2C6C, U+2C74 and + U+FB29 to Sans (by Gee Fung Sit) +- added Lao glyphs : U+0E81-0E82, U+E084, U+0E87-0E88, U+0E8A, U+0E8D, + U+0E94-0E97, U+0E99-0E9F, U+0EA1-0EA3, U+0EA5, U+0EA7, U+0EAA-0EAB, + U+0EAD-0EB9, U+0EBB-0EBD, U+0EC0-0EC4, U+0EC6, U+0EC8-0ECD, U+0EDC-0EDD + (by Rémy Oudompheng) +- fixed U+0193 not showing in Windows (bug #7897) (by Ben Laenen) +- changes to U+222B-222D in Sans Mono (by Rémy Oudompheng) +- ported the three remaining currency symbols from Arev (U+20B0, + U+20B2-U+20B3), and replaced one (U+20AF) in Sans (by Lars Naesbye + Christensen) +- corrected U+20A5 in Sans (by Gee Fung Sit) +- merged Double-Struck Letters from Arev: U+2102, U+210D, U+2115, + U+2119-U+211A, U+2124, U+213C-U+2140 (by Gee Fung Sit) +- added U+2308-U+230B and U+2329-U+232A to Sans Mono and Serif faces, + fixed incorrect direction of U+2329 in Sans faces, and improved + U+2308-U+230B in Sans faces per Ben Laenen's suggestions (by David + Lawrence Ramsey) +- added U+06D5 and final form of it (needed for Kurdish) (by Ben Laenen) +- added two special glyphs U+F000 and U+F001 in Sans Book that show the + current ppem size (horizontal and vertical) (by Ben Laenen) +- added U+2318 and U+2325 to Sans Mono faces, based on the Sans versions + (by David Lawrence Ramsey) +- added U+2B14-U+2B1A to all faces except Sans ExtraLight (by David + Lawrence Ramsey) +- respaced all Geometric Shapes characters in Serif faces to match those + in Sans faces again, respaced U+23CF in Sans, Sans ExtraLight, and + Serif faces to match U+25A0 (or Sans in Sans ExtraLight's case) again, + and respaced U+2B12-U+2B13 in Sans and Serif faces to match U+25A1 + again (by David Lawrence Ramsey) +- corrected width of Modifier Small Letters U+1D43-1D5B in Sans Oblique + and U+1D9B-U+1DBF in Sans Oblique and Sans Bold Oblique (by Gee Fung Sit) +- added a bunch of glyphs to Sans ExtraLight (see SVN for details) (by + Gee Fung Sit) +- adjusted Cyrillic descenders in Sans ExtraLight to sync with Sans (by + Gee Fung Sit) +- added U+0242, U+0245 to Serif (by Gee Fung Sit) +- replaced the SHPIX routines which gave them bad spacing at certain + sizes in FreeType for A, V, Z, v and z in Sans Bold (by Ben Laenen) + +Changes from 2.8 to 2.9: + +- DejaVuSansExtraLight.sfd: changed family name from "DejaVu Sans" to + "DejaVu Sans Light" (in case we add a Light weight variant), so legacy + apps that understand only 4 styles are happy. (by Denis Jacquerye) +- added Name ID 16, aka preferred family name, and Name ID 17, aka + preferred style name, so contemporary apps that understand more that 4 + styles can use big fonts families "DejaVu Sans" and "DejaVu Serif". For + those, Extralight and Condensed are just styles not different families. + (by Denis Jacquerye) +- added U+22B6-22BD, U+22C0-22C1, U+22D6-22D7 to Sans. (by Remy Oudompheng) +- added U+037B, U+2184, U+2C67-U+2C6A and U+2C75-U+2C77 to Sans (by Gee + Fung Sit) +- adjusted asteriskmath (U+2217) for consistency with other mathematical + operators in Sans (by Ben Laenen) +- hinted some Armenian capitals in Sans Book (by Ben Laenen) +- added U+0246 - U+0249 (by Ben Laenen) +- BUGFIX : swapped U+224E and U+224F, in Sans, Sans Condensed and Sans Mono + (by Remy Oudompheng) +- adjusted U+20B5 (by Mederic Boquien) +- swapped U+21DA and U+21DB which were in wrong order (by Heikki Lindroos) +- added U+222E-2233, U+239B-23AD, U+2A00-2A02, U+2A0F-2A1C to Sans (by Remy + Oudompheng) +- added U+239B-23AD to Mono (by Remy Oudompheng) +- added U+2024-2025 to Serif (by Mederic Boquien) +- added U+222C-222D, U+2A0C-2A0E to Serif (by Remy Oudompheng) +- added U+2190-21FF to Mono (by Heikki Lindroos) +- added Hebrew glyphs - U+05B0-U+05BD, U+05BF-U+05C3, U+05C6, U+05C7, + U+05D0-U+05EA, U+05F0-U+05F2, U+FB1F, U+FB20, U+FB2A-U+FB36, + U+FB38-U+FB3C, U+FB3E, U+FB40, U+FB41, U+FB43, U+FB44, U+FB46-U+FB4E (by + Gee Fung Sit and Eugeniy Meshcheryakov) +- adjustments for Cyrillic in Sans (by Andrey V. Panov) +- made italic shape for U+0434, U+0456, U+0457 in SerifOblique and Serif + Bold Oblique (by Andrey V. Panov) + +Changes from 2.7 to 2.8: + +- fixed instructions for U+0423, U+0427, U+0447, U+0448 in Serif, so they + look good at large sizes too (by Eugeniy Meshcheryakov) +- added U+FB00 and U+FB03 to U+FB06 to Serif typefaces (by Heikki Lindroos) +- added U+26B0-U+26B1, U+2701-U+2704, U+2706-U+2709, U+270C-U+2727, U+2729 + to U+274B, U+274D, U+274F to U+2752, U+2756, U+2758-U+275E, U+2761 to + U+2775 (by Heikki Lindroos) +- added and improved instructions for Cyrillic letters in Mono and Serif + (Book, by Eugeniy Meshcheryakov) +- rotated U+26B0 (was too small in mono) (by Gee Fung Sit) +- adjusted U+1EDA-U+1EDD, U+1EE8-U+1EEB, capitals using capital specific + accent and moved diacritics to match position on U+00F2 (ograve), etc. + (by Denis Jacquerye) +- added U+20D6, U+20D7 to Sans (by Gee Fung Sit) +- made Armenian ligatures discretionary since the Firefox ligature problem + still isn't fixed (by Ben Laenen) +- moved Armenian hyphen U+058A to a higher position (bug #7436) (by Ben + Laenen) +- hinted Greek glyphs in Sans Bold (by Ben Laenen) +- enabled Arabic lam-alif ligatures when diacritics are used (by Ben Laenen) + +Changes from 2.6 to 2.7: + +- added glyphs needed for Kurdish: U+0695, U+06B5, U+06C6, U+06CE and their + init/medi/fina forms in Sans (by Ben Laenen) +- added U+02CD, U+01F8 - U+01F9, U+1E3E - U+1E3F, U+1E30 - U+1E35, U+1EBC - + U+1EBD, U+1EF8 - U+1EF9 (includes glyphs needed for Yoruba, Maori, Guarani + and Twi) (by Ben Laenen) +- added U+22C8-22CC, U+29CE-29D5, U+2A7D-2AA0, U+2AAE-2ABA, U+2AF9-2AFA to + Sans (by Remy Oudompheng) +- adjusted diacritics on Vietnamese, Pinyin and other characters: + U+01A0-U+01A1, U+01AF-U+01B0, U+01D5-U+01DC, U+01DE-01E1, U+01FA-U+01FB + U+022A-U+022D, U+0230-U+0231, U+1E14-U+1E17, U+1E4C-U+1E53, U+1E78-U+1E7B, + U+1EA4-U+1EF1 in Sans (Book, Bold and Oblique) (by Denis Jacquerye) +- added basic arrows U+2190-U+2193 in Serif, which completes MES-1 compliance + for Serif (by Ben Laenen) +- added U+01E4, U+01E5, U+01FA, U+01FB, U+02BD, U+02C9 and U+02EE to Serif + (by Ben Laenen) +- fixed U+0209 in Serif Bold Oblique (by Ben Laenen) +- adjusted Box Drawing block characters U+2500-257F in Mono to fit character + cell, shifting them up by 416 (Denis Jacquerye) +- redid U+0194 in Sans (by Ben Laenen) +- added U+2217-2218, U+2295-22A1 to Mono (by Remy Oudompheng) +- added U+0462 to Serif (by Andrey V. Panov) +- added U+226C, U+228C-228E, U+2293-2294, U+22F2-22FF to Sans (by Remy + Oudompheng) +- adjusted U+2208-220D in Sans (by Remy Oudompheng) +- improved some Cyrillic glyphs in Mono (by Andrey V. Panov), rewritten + instructions for changed glyphs (by Eugeniy Meshcheryakov) +- added U+1E0E-1E0F, U+1E8E-1E8F to Mono fonts (by Denis Jacquerye). (bug + #7166) +- renamed 'Dotabove' to 'Dotaccent' in Mono Sans Oblique to match other fonts + (by Denis Jacquerye). +- added U+200B-U+200F in Sans faces and Serif faces, U+200B and U+200C were + in Sans already (by Lars Naesbye Christensen) +- added U+2601-U+262F, U+263D, U+263E, U+2648-U+265F, U+2668, U+2670-U+268B, + U+2690-U+269C, U+26A0, U+26A1, U+2794, U+2798-U+27AF, U+27B1-U+27BE to Mono + (by Heikki Lindroos) +- replaced the references with unshifted ones for both κ U+03BA and к U+043A + in Mono Book (by Denis Jacquerye) +- fixing glyph for U+04ED in Mono Book, consisted only of dieresis (by Andrey + V. Panov). + +Changes from 2.5 to 2.6: + +- redid U+2032 - U+2037, U+2057 based on Arev in Sans (by Gee Fung Sit) +- added U+0195, corrected U+039E, U+204B in Sans ExtraLight (by Gee Fung Sit) +- added instructions for some Cyrillic letters in Sans Bold (by Eugeniy + Meshcheryakov) +- added vulgar fractions U+2153-U+215F for Serif, made with references (by + Lars Naesbye Christensen) +- added U+228F-2292, U+2299-22AF, U+22B2-22B5, U+22CD, U+22D8-22ED to Sans + (by Remy Oudompheng) +- added U+2208-220D, U+2238-223D, U+2278-2281, U+228A-228B, U+228F-2292, + U+22CD, U+22DA-22E9 to Mono (by Remy Oudompheng) +- fixed misplaced dot in U+2250 in Mono (by Remy Oudompheng) +- added instructions for some Cyrillic letters in Mono Book and Bold(by + Eugeniy Meshcheryakov) +- minor changes to U+2241, U+2261-2263, U+22A4, U+22A5 in Sans (by Remy + Oudompheng) +- added hinting instructions to lowercase Armenian glyphs in Sans Book (by + Ben Laenen) +- changed U+2208, U+220B to match U+2209 and U+220C in Sans Bold (by Remy + Oudompheng) +- added Braille patterns U+2800-U+28FF to Sans (by Mederic Boquien) +- added instructions for some Cyrillic letters in Serif Book (by Eugeniy + Meshcheryakov) +- renamed BoldOblique fonts to Bold Oblique in TTF Name as originally in + Bitstream Vera fonts (by Denis Jacquerye) +- added hinting instructions to some Latin-B Extended and IPA characters in + Sans Book (by Denis Jacquerye and Ben Laenen) +- adjusted bearings, replaced diacritics, hinted hook and horn for + Vietnamese in Sans Book (by Denis Jacquerye) +- made FAX, TM, TEL, etc. discritionary ligatures in Sans and Serif fonts + (by Denis Jacquerye) +- removed ligatures of precomposed characters in Sans and Serif fonts (by + Denis Jacquerye) +- added U+F208, U+F20A, U+F215-F217, U+F21A-F21B, U+F25F in PUA (from SIL's + PUA, probably in Unicode 5.0): U+0243, U+0244, U+0245, U+024C, U+024D, + U+2C64, (U+2C6D), (U+2C71) +- modified some glyphs in Serif Oblique to make them more italic (by Denis + Jacquerye) + +Changes from 2.4 to 2.5: + +- fixed excessive kerning bug that occurs with Pango (by Denis Jacquerye) +- added U+20AF to Sans and Serif (by Lars Naesbye Christensen) +- regenerated Condensed faces (by Ben Laenen) +- added U+035C-U+035D to Sans, fixed U+0361 (by Denis Jacquerye) +- integrated 255 characters from Arev fonts: Latin Extended-B, Spacing + Modifiers, Combining Diacritical Marks, Cyrillic, Cyrillic supplement, + General Punctuation, Letterlike Symbols, Arrows, Mathematical Operators, + Miscellaneous Technical, Dingbats, Alphabetic Presentation Forms (by Denis + Jacquerye) +- added basic Cyrillic and basic Greek to Sans ExtraLight (by Denis Jacquerye) +- added U+0498, U+049A, U+04AA, U+04AB, U+04AF to Serif (by Eugeniy + Meshcheryakov) +- added U+0494, U+0495, U+0498, U+0499, U+04AA, U+04AB, U+04C3, U+04C4, + U+04C7, U+04C8 to Mono (by Eugeniy Meshcheryakov) +- adjusted weight of U+0256, U+0257, U+0260, U+0272, U+0273, U+0277, U+029B, + U+02A0 and modifed U+028B and U+027A in Mono (by Denis Jacquerye) +- added U+2000-200A to Mono (by Denis Jacquerye) +- added vulgar fractions U+2153 - U+215F to Mono (by Gee Fung Sit) +- adapted metrics of Arabic glyphs so they stay above cut-off height in Sans + (by Ben Laenen) +- fixed mkmk anchors for Arabic diacritics so they stack properly in Sans (by + Ben Laenen) +- fixed weight of lowercase upsilon in Sans Bold, make small adjustment to + lowercase omega in Sans (by Ben Laenen) +- added U+210E (by Mederic Boquien) +- unslanted U+2201, U+221B and U+221C in Sans Oblique (by Mederic Boquien) +- added several mathematical relation symbols to Sans and Mono (U+2241-224C, + U+2250-2255, U+2260-2269, U+226E-2277, U+2282-2287) modified U+223C to match + other tildes, and U+2282-2284 to have the same shape. (by Remy Oudompheng) +- made U+2234-U+2237 refer to U+2219 instead of U+00B7 in Sans (by Mederic + Boquien) +- added U+2238-223B, U+226A-226B, U+2278-2281, U+2288-228B to Sans (by Remy + Oudompheng) +- unslanted and changed reference of U+22C5 from U+00B7 to U+2219 in Sans (by + Mederic Boquien) +- added U+224D-225F, U+226D, U+22C6 to Sans and unslanted U+2219 in Sans + Oblique. (by Remy Oudompheng) +- added U+224D-225F, U+226D to Mono, shifted U+2266-2269 higher upwards and + unslanted U+2219 in Oblique. (by Remy Oudompheng) +- merged Coptic glyphs from Arev 0.2 (by Lars Naesbye Christensen) +- fixed and adjusted various Cyrillic glyphs in Serif (by Andrey V. Panov) +- made fi, fl... ligatures discretionary ligatures (by Ben Laenen) + +Changes from 2.3 to 2.4: + +- added U+04A2, U+04A3, U+04AC - U+04AF, U+04BA, U+04BB, U+04C0 - + U+04C2, U+04CB, U+04CD, U+04D8 - U+04DF, U+04E2 - U+04E5, U+04E8 - U+04F5, + U+04F6 - U+04F9 to Mono (by Eugeniy Meshcheryakov) +- added U+048C, U+048D, U+0494, U+0495, U+049E - U+04A7, U+04AC - + U+04AE, U+04B4- U+04B7, U+04BA, U+04BB, U+04C0 - U+04C4, U+04C7, U+04C8, + U+04CB, U+04CC, U+04D8 - U+04DF, U+04E2 - U+04E5, U+04EC - U+04F9 to Serif + (by Eugeniy Meshcheryakov) +- added U+2134 to Sans (by Gee Fung Sit) +- added U+2080 - U+2089 to all faces (by Gee Fung Sit) +- several minor corrections to Sans (by Gee Fung Sit) +- major corrections to Sans Condensed (by Gee Fung Sit) +- corrected Superscripts and Subscripts in Sans (by Gee Fung Sit) +- corrected anchors of U+0316-U+0319 (by Denis Jacquerye) +- Verajja integrated (by Stepan Roh) +- copied U+2328, U+2600, U+2639-U+263C, U+263F-U+2647, U+2660-U+2667, + and U+2669-U+266F from Sans to Serif, and copied scaled-down versions of + them to Sans Mono (by David Lawrence Ramsey) +- added U+20B4 to all faces (by Eugeniy Meshcheryakov) +- added more minor positional adjustments to U+2638 in all faces to + match the other miscellaneous symbols in Verajja, and rescale it in Sans + Mono so that it looks better (by David Lawrence Ramsey) +- added U+2242, U+2243 and U+22A4 (by Mederic Boquien) +- corrected U+2245 in Sans (by Mederic Boquien) +- added U+0221, U+0234-0236 (by Denis Jacquerye) +- added in Arabic block to Sans: U+060C, U+0615, U+061B, U+061F, U+0621 +- U+063A, U+0640 - U+0655, U+0660 - U+066F, U+0679 - U+0687, U+0698, U+06A1, + U+06A9, U+06AF, U+06BA, U+06BF, U+06CC, U+06F0 - U+06F9 (by Ben Laenen) +- added in Arabic Presentation Forms A to Sans: U+FB52 - U+FB81, U+FB8A +- U+FB95, U+FB9E - U+FB9F, U+FBE8 - U+FBE9, U+FBFC - U+FBFF (by Ben Laenen) +- added complete Arabic Presentation Forms B to Sans: U+FE70 - U+FE74, + U+FE76 - U+FEFC, U+FEFF (by Ben Laenen) +- added complete Greek Extended block to Mono (by Ben Laenen) +- modified Greek capitals with tonos in Mono (by Ben Laenen) +- added U+01C4-01CC, U+01D5, U+01DE, U+01E0-U+01E1, U+01E6-U+01E9, + U+01EE-U+01F5, U+01F8-U+0217, U+021E-U+021F, U+0226-U+022A, U+022C to Serif + (by Denis Jacquerye) +- adjusted U+043B and U+044F in Serif (by Denis Jacquerye) +- added U+2000-U+200A (by Denis Jacquerye) +- added U+1E00-U+1E0B, U+1E0E-U+1E11, U+1E14-U+1E1C, U+1E1E-U+1E23, + U+1E26-U+1E2D, U+1E30-U+1E35, U+1E3A-U+1E3B, U+1E3E-U+1E40, U+1E48-U+1E49, + U+1E50-U+1E56, U+1E58-U+1E59, U+1E5E-U+1E60, U+1E68-U+1E6B, U+1E6E-U+1E6F, + U+1E72-U+1E7D, U+1E86-U+1E9B, U+1EA0-U+1EA3, U+1EAC-U+1EB7, U+1EBA-U+1EBD, + U+1EC6-U+1ECF, U+1ED8-U+1ED9, U+1EE6-U+1EE7, U+1EF4-U+1EF9 to Serif (by + Denis Jacquerye) +- added U+048E, U+048F, U+049C-U+049F, U+04B8, U+04B9, U+04BC-U+04BF, + U+04C3, U+04C4 to Sans (by Eugeniy Meshcheryakov) +- added DejaVu Sans Extra Light (by Denis Jacquerye) +- Adjusted underline position for (hopefully) improved legibility in + Sans, Serif, Mono (Tim May) +- added auto-generated DejaVu LGC (by Stepan Roh) + +Changes from 2.2 to 2.3: + +- fixed bug U+042B and U+044B behave badly in Sans Bold or Oblique (by + Keenan Pepper) +- added and improved TrueType instructions and related settings (by + Keenan Pepper) +- added U+04D0-U+04D7, U+04E6, U+04E7 to Mono (by Eugeniy Meshcheryakov) +- added U+048A - U+048D, U+0498, U+0499, U+04AA, U+04AB, U+04B0, U+04B1, + U+04C0, U+04C9, U+04CA, U+04CE, U+04CD, U+04DA, U+04DB, U+04DE, U+04DF, + U+04E2 - U+04E5, U+04EC - U+04F8, U+04F9 to Sans (by Eugeniy Meshcheryakov) +- added U+04E0, U+04E1 to all faces (by Eugeniy Meshcheryakov) +- added Greek Extended to Sans and Serif: U+1F00-U+1F15, U+1F18-U+1F1D, + U+1F20-U+1F45, U+1F48-U+1F4D, U+1F50-U+1F57, U+1F59, U+1F5B, U+1F5D, + U+1F5F-U+1F7D, U+1F80-U+1FB4, U+1FB6-U+1FC4, U+1FC6-U+1FD3, U+1FD6-U+1FDB, + U+1FDD-U+1FEF, U+1FF2-U+1FF4, U+1FF6-U+1FFE (by Ben Laenen) +- added Greek variant letterforms, archaic letters and symbols to Mono: + U+03D0-U+03E1, U+03F0-U+03FF (by Ben Laenen) +- added Armenian block and Armenian ligatures to Sans (U+0531 - U+0556, + U+0559 - U+055F, U+0561 - U+0587, U+0589 - U+058A, U+FB13 - U+FB17) (by Ben + Laenen) +- redid some Greek characters in Sans and Mono to make them look better + and to correct some errors (by Ben Laenen) +- added U+27E0 to all faces (by David Lawrence Ramsey) +- added underscore (U+005F) consistency fixes: extended the Sans Mono + and Sans Mono Oblique underscores to touch both horizontal edges, and + reduced the height of the Sans Bold Oblique underscore to match the Sans + Bold underscore (by David Lawrence Ramsey) +- added underscore (U+005F) derivatives and consistency fixes for them: + made U+0332 a reference to underscore at Denis Jacquerye's suggestion; made + U+0333 two references to underscore; made U+033F two references to U+203E; + added U+2017 as two references to underscore, and made U+0333 a reference to + it; and added U+203E as a reference to underscore, and made U+0305 a + reference to it (by David Lawrence Ramsey) +- added U+201B, U+2220, U+2320-U+2321, U+23AE, U+23CF, all remaining + Geometric Shapes glyphs (U+25A0-U+25C9, U+25CB-U+25D7, U+25D9-U+25E5, + U+25E7-U+25FF), and U+2B12-U+2B13 to all faces (by David Lawrence Ramsey) +- added minor positional adjustments to U+2638 in all faces (by David + Lawrence Ramsey) +- added U+201F to Sans Mono and Serif faces (by David Lawrence Ramsey) +- added U+01B7, U+01F6, U+0464 - U+0465, U+2160 - U+2180, U+2183, + U+220A, U+220D, U+2329, U+232A, U+2422, U+27E8 - U+27EB, U+2680 - U+2685 to + Sans (by Gee Fung Sit ???) +- added U+2116 to Sans and Serif (by Gee Fung Sit) +- changed florin sign U+0192 in Sans (by Gee Fung Sit) +- added anchor points to some glyphs (by Denis Jacquerye) +- adjusted height of IPA superscripts U+02B0-02B8, U+02C0-02C1, + U+02E0-02E4, U+207F to match with height of U+00B2 (by Denis Jacquerye) +- added U+0184-U+0185, U+019C, U+019F, U+01A0-U+01A3, U+01A6, U+01AA, + U+01AF-U+01B0, U+01B2-U+01B4, U+01B7-U+01B8, U+01BC-U+01BC, U+0224-U+0225, + U+023A-U+0240, U+1D16-U+1D17, U+1D1D-U+1D1E, U+1D43-U+1D5B, U+1D7B, + U+1D85,U+1D9B-1DB7, U+1DB9-U+1DBF, U+20A6 to all fonts (by Denis Jacquerye) +- added added U+0182, U+018B, U+018E, U+01A0-U+01A1, U+01B1, U+01B9, + U+01C0-U+01C3, U+0238-U+0239, U+1D02, U+1D08-U+1D09, U+1D14, U+1D1F, U+1D77 + to Serif and Mono (by Denis Jacquerye) +- added U+0181, U+0183, U+0187-U+0188, U+018A-U+018F, U+0191, U+0193, + U+0195-U+019B, U+019D-U+019E, U+01A4-U+01A5, U+01AC-U+01AE, U+01B5-U+01B6, + U+01B9, U+01BB, U+01F6 to Serif (by Denis Jacquerye) +- added U+0181, U+0187-U+0188, U+018A, U+018D, U+018F, U+0191, U+0193, + U+0195-U+019F, U+01A4-01A5, U+01AC-01AD, U+01B5-U+01B6, U+1BB, U+01F6, + U+01D7-U+01DC, U+0238-U+0239, U+0241 to Mono (by Denis Jacquerye) +- added to Mono and Serif (by Denis Jacquerye) + +Changes from 2.1 to 2.2: + +- reworked the vertical orientation of the Blocks Elements characters + in all faces to remove their overly large descenders, in order to fix + problems with e.g. terminal emulators (by David Lawrence Ramsey) +- copied bullet in Sans faces to Serif faces for consistency (by David + Lawrence Ramsey) +- added U+2023, U+25D8, U+25E6, and U+29EB to all faces (by David + Lawrence Ramsey) +- added U+1EB8, U+1EB9, U+1ECA - U+1ECD, U+1EE4, U+1EE5 (by Tim May) +- added U+01DD, U+02BE, U+02BF, U+02D3 to all, changed U+02D2 in + non-Condensed and U+1EE5 in Serif (by Tim May) +- fixed U+01CE, replacing wrong circumflex by caron (by Denis Jacquerye) +- added anchor points to some glyphs (by Denis Jacquerye) +- added U+20B5 (by Denis Jacquerye) +- added U+0181 - U+0183, U+0187, U+0188, U+018A - U+018D, U+0191, + U+0193, U+0195 - U+019B, U+019D, U+019E, U+01A4, U+01A7 - U+01A9, U+01AB - + U+01AE, U+01B1, U+01B5, U+01B6, U+01BB, U+01C0 - U+01C3, U+01F1 - U+01F3, + U+0238, U+0239, U+1D02, U+1D08, U+1D09, U+1D14, U+1D1F, U+1D77, U+2103, + U+2126, U+2127, U+212A, U+212B, U+2132, U+214B, U+2210, U+2217, U+2218, + U+2A0C - U+2A0E, U+FB00, U+FB03 and U+FB04 to Sans (by Gee Fung Sit) +- added U+01A9, U+01C3 and U+2126 to Mono and Serif (by Gee Fung Sit) +- adjusted bearings of U+028B in Sans (by Gee Fung Sit) +- added U+018F, U+0494-U+0497, U+04A0-U+04A7, U+04AC-U+04AF, + U+04B4-U+04B7, U+04BA-U+04BB, U+04C1-U+04C2, U+04C5-U+04C8, U+04CB-U+04CC, + U+04D0-U+04D9, U+04DC-U+04DD, U+04E6-U+04EB to Sans (by Eugeniy + Meshcheryakov) +- replaced with references U+0391-U+0393, U+0395-U+0397, U+0399, U+039A, + U+039C, U+039D, U+039F-U+03A1, U+03A4, U+03A5, U+03A7, U+03BF, U+03DC, + U+0405, U+0406, U+0408, U+0410, U+0412, U+0415, U+0417, U+041A, + U+041C-U+041E, U+0420-U+0422, U+0425, U+0430, U+0435, U+043E, U+0440, + U+0441, U+0443, U+0445, U+0455-U+0458 in Serif and Mono (by Eugeniy + Meshcheryakov) +- added U+04D0-U+04D7, U+04E6-U+04EB to Serif (by Eugeniy Meshcheryakov) +- added U+212A and U+212B to the rest of the faces (by Lars Naesbye + Christensen) +- added U+2318 and U+2325 to Sans and Serif (by Lars Naesbye Christensen) +- added and improved TrueType instructions and related settings (by + Keenan Pepper) +- completed basic Greek alphabet: added U+0374-U+0375, U+037A, U+037E, + U+0384-U+038A, U+038C, U+038E-U+0390, U+03AC-U+03BF, U+03C1-U+03CE (by Ben + Laenen) +- added U+2070 and U+2074-U+2079 (by Mederic Boquien) + +Changes from 2.0 to 2.1: + +**# Be aware that names of some TTF files changed since version 2.0.#** + +- added U+0323, U+1E0C, U+1E0D, U+1E24, U+1E25, U+1E36 - U+1E39, U+1E42, + U+1E43, U+1E46, U+1E47, U+1E5A - U+1E5D, U+1E62, U+1E63, U+1E6C, U+1E6D, + U+1E7E, U+1E7F (by Tim May) +- fixed bug where GNOME applications used Mono Bold Oblique instead of + Mono Oblique (by Keenan Pepper) +- added and improved TrueType instructions and related settings (by + Keenan Pepper) +- added U+1E41, U+1E57, U+1E61 (by Sander Vesik) +- added U+0189, U+0309, U+0313, U+0314, U+031A, U+031B, U+0327, U+0328, + U+032B, U+0333, U+033C (by Denis Jacquerye) +- adjusted and fixed U+0186, U+0254, U+0291, U+0316 - U+0319, U+031C - + U+0320, U+0323 - U+0326, U+0329 - U+032A, U+032C - U+0332, U+0339 - U+033B, + U+033E, U+033F (by Denis Jacquerye) +- fixed U+1E12, U+1E3C, U+1E4A, U+1E70 to have normal below diacritics + (by Denis Jacquerye) +- fixed U+1E82, U+1E84 and U+1EF2 to have uppercase above diacritics (by + Denis Jacquerye) +- added anchor points to some glyphs (by Denis Jacquerye) +- dropped "-Roman" from font names - affects both internal TTF names and + names of generated files (by Stepan Roh) +- attempt to fix bug Vertical spacing too big for Mono by exchanging + LineGap and OS2TypoLinegap values (proofed by Stefan Rank) +- added Greek capitals U+0391 - U+03A1, U+03A3 - U+03A9, U+03AA, U+03AB + in Mono (by Ben Laenen) +- added the per ten thousand sign U+2031 (by Mederic Boquien) +- added U+2207, U+221D, U+221F, U+2227 - U+222A, and U+2261 (by David + Lawrence Ramsey) +- new logo (by Gee Fung Sit) +- added U+0180, U+018E, U+201F, U+2024, U+2025, U+203D, U+2200, U+2203, + U+2213, U+222C, U+222D, U+2263 to Sans (by Gee Fung Sit) + +Changes from 1.15 to 2.0: + +- "Italized" basic glyphs in all Serif Oblique and their Condensed faces + (by David Jez) +- added and improved TrueType instructions and related settings (by Keenan + Pepper) +- added anchor points to some glyphs (by Denis Jacquerye) +- many new spacing and combining accents (by Denis Jacquerye) +- smart substitutions for transforming i and j to dottless form and for + using uppercase diacritics (by Denis Jacquerye) +- fixed remaining erroneously slanted characters in Serif Oblique faces (by + David Lawrence Ramsey) +- copied bullet in Sans faces to Sans Oblique faces for consistency (by + David Lawrence Ramsey) +- added U+203C and U+2047-U+2049 (by David Lawrence Ramsey) +- added Greek glyphs to Serif (by Ben Laenen, Condensed merge by David Jez) +- fixed bug LTR glyphs behaving like RTL (by Ben Laenen) +- fixed wrong glyph directions (by David Jez) +- fixed repositioned accents in Condensed faces (by David Jez) + +Changes from 1.14 to 1.15: + +- added and improved TrueType instructions and related settings (by Keenan + Pepper) +- fixed U+2302, U+2319 (by David Lawrence Ramsey) +- fixed yet another monospace bug (by Stepan Roh) +- fixed potential "too big ascender/descender" bug (by Stepan Roh) +- fixed U+026E and U+028E (by Denis Jacquerye) +- added U+0186, U+0190, U+0300 - U+0304, U+0306 - U+0308, U+030A - U+030C, + U+0321, U+0322 (by Denis Jacquerye) +- added rest of Block Elements: U+2591 - U+2593 (by David Lawrence Ramsey) +- added U+2311, U+237D and U+2638 (by David Lawrence Ramsey) +- added U+01CD - U+01D4 (by Denis Jacquerye) +- fixed accents of U+00F2 - U+00F6 by replacing them with references in Mono + Bold (by David Jez) +- added U+0490, U+0491 (by Eugeniy Meshcheryakov) +- added hints to U+0404 and U+0454 in Sans (by Eugeniy Meshcheryakov) +- completed Greek glyphs from U+0370 to U+03CF in Serif (by Ben Laenen) +- fixed shape of U+0255 in Sans Bold and Sans Bold Oblique (by Denis + Jacquerye) + +Changes from 1.13 to 1.14: + +- fixed bug where Mono faces were not recognized as fixed pitch in Windows + by correcting Venda glyphs (by David Jez) +- added and improved TrueType instructions (by Keenan Pepper) +- added 6 Uzbekian glyphs (by Mashrab Kuvatov) +- added Greek glyphs to Sans and Serif, changed pi and omega to fit in (by + Ben Laenen) +- added IPA and related superscript glyphs (by Denis Jacquerye) +- fixed buggy Venda glyphs (by David Lawrence Ramsey and Stepan Roh) +- added U+2302, U+2310, U+2319 (by David Lawrence Ramsey) +- fixed slanted U+00AC in Serif Oblique faces (by David Lawrence Ramsey) +- added 29 glyphs from Block Elements (by David Lawrence Ramsey) + +Changes from 1.12 to 1.13: + +- removed all stems (PS hints) (requested by David Jez) +- added U+01D6, U+01DF, U+022B, U+022D and U+0231 (by Sander Vesik) +- added 10 Venda glyphs (by Dwayne Bailey) +- fixed bug when fonts had no name on Microsoft Windows (by Stepan Roh) +- updated 'missing' glyph U+FFFD (by David Jez) +- set TTF flag fsType to 'Installable Embedding' (= unrestricted usage) + (idea by C. Tiffany) + +Changes from 1.11 to 1.12: + +- added long s (by James Cloos) +- prettier comma accent in gcommaaccent (by David Jez) +- added Hbar, hbar, kgreenlandic, napostrophe, Eng, eng, Tbar, tbar, + afii57929 (by David Jez) +- changed Iogonek, iogonek, IJ, ij to look better (by David Jez) +- glyph uni0237 renamed to dotlessj (requested by David Jez) +- fixed accents for dcaron, lcaron, tcaron, Uogonek, uogonek in Serif (by + David Jez) +- added U+2500 - U+257F box drawing glyphs to Sans Mono (by David Jez) +- fixed accents in Wcircumflex, Ycircumflex and Zdotaccent (by David Jez) +- extra kerning for F (by Sander Vesik) +- added 'missing' glyph U+FFFD (by David Jez) + +Changes from 1.10 to 1.11: + +- kerning updates (by Sander Vesik) +- added Iogonek, iogonek, IJ, ij, Uogonek, uogonek (from SuSE standard fonts + by Adrian Schroeter, SuSE AG) +- added Gcommaaccent, gcommaaccent, Kcommaaccent, kcommaaccent, + Lcommaaccent, lcommaaccent, Ncommaaccent, ncommaaccent, Rcommaaccent, + rcommaaccent (by Stepan Roh) + +Changes from 1.9 to 1.10: + +- added U+022E, U+022F (by Sander Vesik) +- kerning updates for DejaVu Sans (by Sander Vesik) +- fixed too wide cyrillic glyphs in DejaVu Sans Mono (by Valentin Stoykov) +- fixed ligatures bug in Mono (by Stepan Roh) + +Changes from 1.8 to 1.9: + +- integrated Arev Cyrillics (by Danilo Segan) +- added U+01EA, U+01EB, U+01EC, U+01ED (by Sander Vesik) + +Changes from 1.7 to 1.8: + +- fixed accents in Serif Oblique and Serif Bold Oblique (by Stepan Roh) + +Changes from 1.6 to 1.7: + +- added automatically generated Condensed typefaces (by Stepan Roh) + +Changes from 1.5 to 1.6: + +- monospace bug fixed (by Stepan Roh) +- incorrect Bitstream foundry assigned by fontconfig and KDE Font Installer +fixed (by Stepan Roh) +- added automatically generated Oblique version of Serif typefaces (by +Stepan Roh) +- corrected cyrillic D and d (by Danilo Segan and David Jez) +- fixed accents position in Oblique version of Serif typefaces (by Danilo +Segan and Sander Vesik) +- fixed incorrect computation of OS2Win# fields (by Stepan Roh) +- added visiblespace U+2423 (by David Jez) +- fixed 'line height' bug by fixing ascender and descender values (by David +Jez and Stepan Roh) +- fixed part of 'worse than Vera' bug (by Peter Cernak) +- smaller comma accent U+0326 (by David Jez) + +Changes from 1.4 to 1.5: + +- added Cyrillics (96 characters) and Dcroat to the rest of typefaces (by +Danilo Segan) +- fixed bugs in some Cyrillic characters, some of them reported by Sander +Vesik (by Danilo Segan) +- added U+0100, U+0101, U+0112, U+0113, U+012A, U+012B, U+014C, U+014D, +U+016A, U+016B, U+01E2, U+01E3, U+0232 and U+0233 (by Sander Vesik) +- added Romanian characters (by Misu Moldovan) +- added U+0108, U+0109, U+010A, U+010B, U+0114, U+0115, U+0116, U+0117, +U+011C, U+011D, U+0120, U+0121, U+0124, U+0125, U+0128, U+0129, U+012C, +U+012D, U+0134, U+0135, U+014E, U+014F, U+0150, U+0151, U+015C, U+015D, +U+0168, U+0169, U+016C, U+016D, U+0170, U+0171 and U+0237 (by James +Crippen) +- added U+02BB, U+2010, U+2011, U+2012 and U+2015 (by Stepan Roh) + +Changes from 1.3 to 1.4: + +- added Polish characters (Aogonek, aogonek, Eogonek, eogonek, Nacute, +nacute, Sacute, sacute, Zacute, zacute, Zdotaccent, zdotaccent) (by Stepan +Roh) + +Changes from 1.2 to 1.3: + +- added Cyrillics (96 characters) and Dcroat to Sans typefaces (by Danilo +Segan from his BePa fonts) + +Changes from 1.1 to 1.2: + +- added Ldot, ldot, Wcircumflex, wcircumflex, Ycircumflex, ycircumflex, + Wgrave, wgrave, Wacute, wacute, Wdieresis, wdieresis, Ygrave and ygrave + (from The Olwen Font Family 0.2 by Dafydd Harries) + +Changes from 1.0 to 1.1: + +- added Lacute, lacute, Lcaron, lcaron, Racute and racute (by Peter Cernak) + +Changes from 0.9.4 to 1.0: + +- none, just changed version and updated README + +Changes from 0.9.3 to 0.9.4: + +- fixed TTF generation (kerning tables were missing) + +Changes from 0.9.2 to 0.9.3: + +- kerning of added characters +- proper caron shape for dcaron in Mono (by Ondrej Koala Vacha) +- minor visual changes + +Changes from 0.9.1 to 0.9.2: + +- internal bugged version + +Changes from 0.9 to 0.9.1: + +- proper caron shape for dcaron and tcaron +- minor visual changes + +$Id: NEWS 1587 2007-02-18 16:20:38Z ben_laenen $ diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/dejavu-ttf-2.15/README --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/dejavu-ttf-2.15/README Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,59 @@ +DejaVu fonts 2.15 (c)2004-2007 DejaVu fonts team +----------------------------------------------- + +The DejaVu fonts are a font family based on the Bitstream Vera Fonts +(http://gnome.org/fonts/). Its purpose is to provide a wider range of +characters (see status.txt for more information) while maintaining the +original look and feel. + +DejaVu fonts are based on Bitstream Vera fonts version 1.10. + +Available fonts (Sans = sans serif, Mono = monospaced): + +DejaVu Sans Mono +DejaVu Sans Mono Bold +DejaVu Sans Mono Bold Oblique +DejaVu Sans Mono Oblique +DejaVu Sans +DejaVu Sans Bold +DejaVu Sans Bold Oblique +DejaVu Sans Oblique +DejaVu Sans ExtraLight (experimental) +DejaVu Serif +DejaVu Serif Bold +DejaVu Serif Bold Oblique (experimental) +DejaVu Serif Oblique (experimental) +DejaVu Sans Condensed (experimental) +DejaVu Sans Condensed Bold (experimental) +DejaVu Sans Condensed Bold Oblique (experimental) +DejaVu Sans Condensed Oblique (experimental) +DejaVu Serif Condensed (experimental) +DejaVu Serif Condensed Bold (experimental) +DejaVu Serif Condensed Bold Oblique (experimental) +DejaVu Serif Condensed Oblique (experimental) + +All fonts are also available as derivative called DejaVu LGC with support +only for Latin, Greek and Cyrillic scripts. + +For license information see LICENSE. What's new is described in NEWS. Known +bugs are in BUGS. All authors are mentioned in AUTHORS. + +Fonts are published in source form as SFD files (Spline Font Database from +FontForge - http://fontforge.sf.net/) and in compiled form as TTF files +(TrueType fonts). + +For more information go to http://dejavu.sourceforge.net/. + +Characters from Arev fonts, Copyright (c) 2006 by Tavmjong Bah: +--------------------------- +U+01ba, U+01bf, U+01f7, U+021c, U+021d, U+0220, U+0222, U+0223, +U+02b9, U+02ba, U+02bd, U+02c2, U+02c3, U+02c4, U+02c5, U+02d4, +U+02d5, U+02d7, U+02ec, U+02ed, U+02ee, U+0346-034e, U+0360, U+0362, +U+03e2-03ef, U+0460-0463, U+0466-0486, U+0488-0489, U+04a8-04a9, +U+0500-050f, U+2055-205e, U+20B0, U+20B2-20B3, U+2102, U+210D, U+210f, +U+2111, U+2113, U+2115, U+2118-U+211A, U+211c-211d, U+2124,U+2135, +U+213C-U+2140, U+2295-2298, U+2308-230b, U+26A2-U+26B1, U+2701-2704, +U+2706-2709, U+270c-274b, U+2758-275a, U+2761-2775, U+2780-2794, +U+2798-27af, U+27b1-27be, U+fb05-fb06 + +$Id: README 1587 2007-02-18 16:20:38Z ben_laenen $ diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/dejavu-ttf-2.15/langcover.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/dejavu-ttf-2.15/langcover.txt Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,187 @@ +This is the language coverage file for DejaVu fonts +($Id: langcover.txt 1586 2007-02-18 16:07:32Z ben_laenen $) + + Sans Serif Sans Mono +aa Afar 100% (62/62) 100% (62/62) 100% (62/62) +ab Abkhazia 100% (90/90) 93% (84/90) 84% (76/90) +af Afrikaans 100% (69/69) 100% (69/69) 100% (69/69) +am Amharic (0/264) (0/264) (0/264) +ar Arabic 100% (125/125) (0/125) (0/125) +ast Asturian 100% (72/72) 100% (72/72) 100% (72/72) +ava Avaric 100% (67/67) 100% (67/67) 100% (67/67) +ay Aymara 100% (60/60) 100% (60/60) 100% (60/60) +az Azerbaijani 100% (148/148) 97% (144/148) 97% (144/148) +az-ir Azerbaijani in Iran 100% (130/130) (0/130) (0/130) +ba Bashkir 100% (82/82) 100% (82/82) 97% (80/82) +bam Bambara 100% (60/60) 100% (60/60) 100% (60/60) +be Byelorussian 100% (68/68) 100% (68/68) 100% (68/68) +bg Bulgarian 100% (60/60) 100% (60/60) 100% (60/60) +bh Bihari (Devanagari script) (0/68) (0/68) (0/68) +bho Bhojpuri (Devanagari script) (0/68) (0/68) (0/68) +bi Bislama 100% (58/58) 100% (58/58) 100% (58/58) +bin Edo or Bini 100% (78/78) 100% (78/78) 100% (78/78) +bn Bengali (0/89) (0/89) (0/89) +bo Tibetan (0/95) (0/95) (0/95) +br Breton 100% (64/64) 100% (64/64) 100% (64/64) +bs Bosnian 100% (62/62) 100% (62/62) 100% (62/62) +bua Buriat (Buryat) 100% (70/70) 100% (70/70) 100% (70/70) +ca Catalan 100% (74/74) 100% (74/74) 100% (74/74) +ce Chechen 100% (67/67) 100% (67/67) 100% (67/67) +ch Chamorro 100% (58/58) 100% (58/58) 100% (58/58) +chm Mari (Lower Cheremis / Upper Cheremis) 100% (76/76) 100% (76/76) 97% (74/76) +chr Cherokee (0/85) (0/85) (0/85) +co Corsican 100% (84/84) 100% (84/84) 100% (84/84) +cs Czech 100% (82/82) 100% (82/82) 100% (82/82) +cu Old Church Slavonic 100% (103/103) 80% (83/103) 74% (77/103) +cv Chuvash 100% (74/74) 100% (74/74) 100% (74/74) +cy Welsh 100% (78/78) 100% (78/78) 100% (78/78) +da Danish 100% (70/70) 100% (70/70) 100% (70/70) +de German 100% (59/59) 100% (59/59) 100% (59/59) +dz Dzongkha (0/95) (0/95) (0/95) +el Greek 100% (69/69) 100% (69/69) 100% (69/69) +en English 100% (72/72) 100% (72/72) 100% (72/72) +eo Esperanto 100% (64/64) 100% (64/64) 100% (64/64) +es Spanish 100% (66/66) 100% (66/66) 100% (66/66) +et Estonian 100% (64/64) 100% (64/64) 100% (64/64) +eu Basque 100% (56/56) 100% (56/56) 100% (56/56) +fa Persian 100% (129/129) (0/129) (0/129) +fi Finnish 100% (62/62) 100% (62/62) 100% (62/62) +fj Fijian 100% (52/52) 100% (52/52) 100% (52/52) +fo Faroese 100% (68/68) 100% (68/68) 100% (68/68) +fr French 100% (84/84) 100% (84/84) 100% (84/84) +ful Fulah (Fula) 100% (62/62) 100% (62/62) 100% (62/62) +fur Friulian 100% (66/66) 100% (66/66) 100% (66/66) +fy Frisian 100% (75/75) 100% (75/75) 100% (75/75) +ga Irish 100% (80/80) 100% (80/80) 100% (80/80) +gd Scots Gaelic 100% (70/70) 100% (70/70) 100% (70/70) +gez Ethiopic (Geez) (0/218) (0/218) (0/218) +gl Galician 100% (66/66) 100% (66/66) 100% (66/66) +gn Guarani 100% (70/70) 100% (70/70) 100% (70/70) +gu Gujarati (0/78) (0/78) (0/78) +gv Manx Gaelic 100% (54/54) 100% (54/54) 100% (54/54) +ha Hausa 100% (60/60) 100% (60/60) 100% (60/60) +haw Hawaiian 100% (63/63) 100% (63/63) 100% (63/63) +he Hebrew 100% (27/27) (0/27) (0/27) +hi Hindi (Devanagari script) (0/68) (0/68) (0/68) +ho Hiri Motu 100% (52/52) 100% (52/52) 100% (52/52) +hr Croatian 100% (62/62) 100% (62/62) 100% (62/62) +hu Hungarian 100% (70/70) 100% (70/70) 100% (70/70) +hy Armenian 100% (77/77) (0/77) (0/77) +ia Interlingua 100% (52/52) 100% (52/52) 100% (52/52) +ibo Igbo 100% (58/58) 100% (58/58) 100% (58/58) +id Indonesian 100% (54/54) 100% (54/54) 100% (54/54) +ie Interlingue 100% (52/52) 100% (52/52) 100% (52/52) +ik Inupiaq (Inupiak, Eskimo) 100% (68/68) 100% (68/68) 100% (68/68) +io Ido 100% (52/52) 100% (52/52) 100% (52/52) +is Icelandic 100% (70/70) 100% (70/70) 100% (70/70) +it Italian 100% (72/72) 100% (72/72) 100% (72/72) +iu Inuktitut 100% (161/161) (0/161) (0/161) +ja Japanese (0/6538) (0/6538) (0/6538) +ka Georgian (0/34) (0/34) (0/34) +kaa Kara-Kalpak (Karakalpak) 100% (78/78) 100% (78/78) 100% (78/78) +ki Kikuyu 100% (56/56) 100% (56/56) 100% (56/56) +kk Kazakh 100% (77/77) 100% (77/77) 100% (77/77) +kl Greenlandic 100% (81/81) 100% (81/81) 100% (81/81) +km Khmer (0/70) (0/70) (0/70) +kn Kannada (0/80) (0/80) (0/80) +ko Korean (0/2443) (0/2443) (0/2443) +kok Kokani (Devanagari script) (0/68) (0/68) (0/68) +ks Kashmiri (Devanagari script) (0/68) (0/68) (0/68) +ku Kurdish 100% (64/64) 100% (64/64) 100% (64/64) +ku-ir Kurdish in Iran 100% (32/32) (0/32) (0/32) +kum Kumyk 100% (66/66) 100% (66/66) 100% (66/66) +kv Komi (Komi-Permyak/Komi-Siryan) 100% (70/70) 100% (70/70) 100% (70/70) +kw Cornish 100% (64/64) 100% (64/64) 100% (64/64) +ky Kirgiz 100% (70/70) 100% (70/70) 100% (70/70) +la Latin 100% (68/68) 100% (68/68) 100% (68/68) +lb Luxembourgish (Letzeburgesch) 100% (75/75) 100% (75/75) 100% (75/75) +lez Lezghian (Lezgian) 100% (67/67) 100% (67/67) 100% (67/67) +lo Lao 84% (55/65) (0/65) 43% (28/65) +lt Lithuanian 100% (70/70) 100% (70/70) 100% (70/70) +lv Latvian 100% (78/78) 100% (78/78) 100% (78/78) +mg Malagasy 100% (56/56) 100% (56/56) 100% (56/56) +mh Marshallese 100% (62/62) 100% (62/62) 100% (62/62) +mi Maori 100% (64/64) 100% (64/64) 100% (64/64) +mk Macedonian 100% (42/42) 100% (42/42) 100% (42/42) +ml Malayalam (0/78) (0/78) (0/78) +mn Mongolian (0/130) (0/130) (0/130) +mo Moldavian 100% (128/128) 100% (128/128) 100% (128/128) +mr Marathi (Devanagari script) (0/68) (0/68) (0/68) +mt Maltese 100% (72/72) 100% (72/72) 100% (72/72) +my Burmese (Myanmar) (0/48) (0/48) (0/48) +nb Norwegian Bokmal 100% (70/70) 100% (70/70) 100% (70/70) +nds Low Saxon 100% (59/59) 100% (59/59) 100% (59/59) +ne Nepali (Devanagari script) (0/68) (0/68) (0/68) +nl Dutch 100% (82/82) 100% (82/82) 100% (82/82) +nn Norwegian Nynorsk 100% (76/76) 100% (76/76) 100% (76/76) +no Norwegian (Bokmal) 100% (70/70) 100% (70/70) 100% (70/70) +ny Chichewa 100% (54/54) 100% (54/54) 100% (54/54) +oc Occitan 100% (70/70) 100% (70/70) 100% (70/70) +om Oromo or Galla 100% (52/52) 100% (52/52) 100% (52/52) +or Oriya (0/79) (0/79) (0/79) +os Ossetic 100% (66/66) 100% (66/66) 100% (66/66) +pa Punjabi (Gurumukhi script) (0/63) (0/63) (0/63) +pl Polish 100% (70/70) 100% (70/70) 100% (70/70) +ps-af Pashto in Afghanistan 83% (41/49) (0/49) (0/49) +ps-pk Pashto in Pakistan 81% (40/49) (0/49) (0/49) +pt Portuguese 100% (82/82) 100% (82/82) 100% (82/82) +rm Rhaeto-Romance (Romansch) 100% (66/66) 100% (66/66) 100% (66/66) +ro Romanian 100% (62/62) 100% (62/62) 100% (62/62) +ru Russian 100% (66/66) 100% (66/66) 100% (66/66) +sa Sanskrit (Devanagari script) (0/68) (0/68) (0/68) +sah Yakut 100% (76/76) 100% (76/76) 97% (74/76) +sco Scots 100% (56/56) 96% (54/56) 96% (54/56) +se North Sami 100% (66/66) 100% (66/66) 100% (66/66) +sel Selkup (Ostyak-Samoyed) 100% (66/66) 100% (66/66) 100% (66/66) +sh Serbo-Croatian 100% (76/76) 100% (76/76) 100% (76/76) +si Sinhala (Sinhalese) (0/77) (0/77) (0/77) +sk Slovak 100% (86/86) 100% (86/86) 100% (86/86) +sl Slovenian 100% (62/62) 100% (62/62) 100% (62/62) +sm Samoan 100% (53/53) 100% (53/53) 100% (53/53) +sma South Sami 100% (60/60) 100% (60/60) 100% (60/60) +smj Lule Sami 100% (60/60) 100% (60/60) 100% (60/60) +smn Inari Sami 100% (68/68) 100% (68/68) 100% (68/68) +sms Skolt Sami 100% (80/80) 100% (80/80) 97% (78/80) +so Somali 100% (52/52) 100% (52/52) 100% (52/52) +sq Albanian 100% (56/56) 100% (56/56) 100% (56/56) +sr Serbian 100% (76/76) 100% (76/76) 100% (76/76) +sv Swedish 100% (68/68) 100% (68/68) 100% (68/68) +sw Swahili 100% (52/52) 100% (52/52) 100% (52/52) +syr Syriac (0/45) (0/45) (0/45) +ta Tamil (0/48) (0/48) (0/48) +te Telugu (0/80) (0/80) (0/80) +tg Tajik 100% (78/78) 100% (78/78) 97% (76/78) +th Thai 1% (1/87) (0/87) (0/87) +ti-er Eritrean Tigrinya (0/256) (0/256) (0/256) +ti-et Ethiopian Tigrinya (0/282) (0/282) (0/282) +tig Tigre (0/221) (0/221) (0/221) +tk Turkmen 100% (74/74) 100% (74/74) 97% (72/74) +tl Tagalog (0/19) (0/19) (0/19) +tn Tswana 100% (56/56) 100% (56/56) 100% (56/56) +to Tonga 100% (53/53) 100% (53/53) 100% (53/53) +tr Turkish 100% (70/70) 100% (70/70) 100% (70/70) +ts Tsonga 100% (52/52) 100% (52/52) 100% (52/52) +tt Tatar 100% (76/76) 100% (76/76) 97% (74/76) +tw Twi 100% (73/73) 100% (73/73) 100% (73/73) +tyv Tuvinian 100% (70/70) 100% (70/70) 100% (70/70) +ug Uighur 100% (125/125) (0/125) (0/125) +uk Ukrainian 100% (72/72) 100% (72/72) 100% (72/72) +ur Urdu 94% (137/145) (0/145) (0/145) +uz Uzbek 100% (68/68) 100% (68/68) 100% (68/68) +ven Venda 100% (62/62) 100% (62/62) 100% (62/62) +vi Vietnamese 100% (194/194) 77% (150/194) 62% (122/194) +vo Volapuk 100% (54/54) 100% (54/54) 100% (54/54) +vot Votic 100% (62/62) 100% (62/62) 100% (62/62) +wa Walloon 100% (70/70) 100% (70/70) 100% (70/70) +wen Sorbian languages (lower and upper) 100% (76/76) 100% (76/76) 100% (76/76) +wo Wolof 100% (66/66) 100% (66/66) 100% (66/66) +xh Xhosa 100% (52/52) 100% (52/52) 100% (52/52) +yap Yapese 100% (58/58) 100% (58/58) 100% (58/58) +yi Yiddish 100% (27/27) (0/27) (0/27) +yo Yoruba 100% (119/119) 100% (119/119) 100% (119/119) +zh-cn Chinese (simplified) 0% (2/6765) 0% (2/6765) 0% (2/6765) +zh-hk Chinese Hong Kong Supplementary Character Set (0/2213) (0/2213) (0/2213) +zh-mo Chinese in Macau (0/13063) (0/13063) (0/13063) +zh-sg Chinese in Singapore 0% (2/6765) 0% (2/6765) 0% (2/6765) +zh-tw Chinese (traditional) (0/13063) (0/13063) (0/13063) +zu Zulu 100% (52/52) 100% (52/52) 100% (52/52) diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/dejavu-ttf-2.15/status.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/dejavu-ttf-2.15/status.txt Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,4641 @@ +This is the status file for DejaVu fonts +($Id: status.txt 1586 2007-02-18 16:07:32Z ben_laenen $) + +original = present in original Bitstream Vera 1.10 + = added in DejaVu fonts + +U+0020 space original +U+0021 exclam original +U+0022 quotedbl original +U+0023 numbersign original +U+0024 dollar original +U+0025 percent original +U+0026 ampersand original +U+0027 quotesingle original +U+0028 parenleft original +U+0029 parenright original +U+002a asterisk original +U+002b plus original +U+002c comma original +U+002d hyphen original +U+002e period original +U+002f slash original +U+0030 zero original +U+0031 one original +U+0032 two original +U+0033 three original +U+0034 four original +U+0035 five original +U+0036 six original +U+0037 seven original +U+0038 eight original +U+0039 nine original +U+003a colon original +U+003b semicolon original +U+003c less original +U+003d equal original +U+003e greater original +U+003f question original +U+0040 at original +U+0041 A original +U+0042 B original +U+0043 C original +U+0044 D original +U+0045 E original +U+0046 F original +U+0047 G original +U+0048 H original +U+0049 I original +U+004a J original +U+004b K original +U+004c L original +U+004d M original +U+004e N original +U+004f O original +U+0050 P original +U+0051 Q original +U+0052 R original +U+0053 S original +U+0054 T original +U+0055 U original +U+0056 V original +U+0057 W original +U+0058 X original +U+0059 Y original +U+005a Z original +U+005b bracketleft original +U+005c backslash original +U+005d bracketright original +U+005e asciicircum original +U+005f underscore original +U+0060 grave original +U+0061 a original +U+0062 b original +U+0063 c original +U+0064 d original +U+0065 e original +U+0066 f original +U+0067 g original +U+0068 h original +U+0069 i original +U+006a j original +U+006b k original +U+006c l original +U+006d m original +U+006e n original +U+006f o original +U+0070 p original +U+0071 q original +U+0072 r original +U+0073 s original +U+0074 t original +U+0075 u original +U+0076 v original +U+0077 w original +U+0078 x original +U+0079 y original +U+007a z original +U+007b braceleft original +U+007c bar original +U+007d braceright original +U+007e asciitilde original +U+00a0 nonbreakingspace original +U+00a1 exclamdown original +U+00a2 cent original +U+00a3 sterling original +U+00a4 currency original +U+00a5 yen original +U+00a6 brokenbar original +U+00a7 section original +U+00a8 dieresis original +U+00a9 copyright original +U+00aa ordfeminine original +U+00ab guillemotleft original +U+00ac logicalnot original +U+00ad sfthyphen original +U+00ae registered original +U+00af macron original +U+00b0 degree original +U+00b1 plusminus original +U+00b2 twosuperior original +U+00b3 threesuperior original +U+00b4 acute original +U+00b5 mu original +U+00b6 paragraph original +U+00b7 periodcentered original +U+00b8 cedilla original +U+00b9 onesuperior original +U+00ba ordmasculine original +U+00bb guillemotright original +U+00bc onequarter original +U+00bd onehalf original +U+00be threequarters original +U+00bf questiondown original +U+00c0 Agrave original +U+00c1 Aacute original +U+00c2 Acircumflex original +U+00c3 Atilde original +U+00c4 Adieresis original +U+00c5 Aring original +U+00c6 AE original +U+00c7 Ccedilla original +U+00c8 Egrave original +U+00c9 Eacute original +U+00ca Ecircumflex original +U+00cb Edieresis original +U+00cc Igrave original +U+00cd Iacute original +U+00ce Icircumflex original +U+00cf Idieresis original +U+00d0 Eth original +U+00d1 Ntilde original +U+00d2 Ograve original +U+00d3 Oacute original +U+00d4 Ocircumflex original +U+00d5 Otilde original +U+00d6 Odieresis original +U+00d7 multiply original +U+00d8 Oslash original +U+00d9 Ugrave original +U+00da Uacute original +U+00db Ucircumflex original +U+00dc Udieresis original +U+00dd Yacute original +U+00de Thorn original +U+00df germandbls original +U+00e0 agrave original +U+00e1 aacute original +U+00e2 acircumflex original +U+00e3 atilde original +U+00e4 adieresis original +U+00e5 aring original +U+00e6 ae original +U+00e7 ccedilla original +U+00e8 egrave original +U+00e9 eacute original +U+00ea ecircumflex original +U+00eb edieresis original +U+00ec igrave original +U+00ed iacute original +U+00ee icircumflex original +U+00ef idieresis original +U+00f0 eth original +U+00f1 ntilde original +U+00f2 ograve original +U+00f3 oacute original +U+00f4 ocircumflex original +U+00f5 otilde original +U+00f6 odieresis original +U+00f7 divide original +U+00f8 oslash original +U+00f9 ugrave original +U+00fa uacute original +U+00fb ucircumflex original +U+00fc udieresis original +U+00fd yacute original +U+00fe thorn original +U+00ff ydieresis original +U+0100 Amacron 1.5 +U+0101 amacron 1.5 +U+0102 Abreve 1.5 +U+0103 abreve 1.5 +U+0104 Aogonek 1.4 +U+0105 aogonek 1.4 +U+0106 Cacute original +U+0107 cacute original +U+0108 Ccircumflex 1.5 +U+0109 ccircumflex 1.5 +U+010a Cdotaccent 1.5 +U+010b cdotaccent 1.5 +U+010c Ccaron original +U+010d ccaron original +U+010e Dcaron 1.0 +U+010f dcaron 1.0 +U+0110 Dcroat 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0111 dcroat original +U+0112 Emacron 1.5 +U+0113 emacron 1.5 +U+0114 Ebreve 1.5 +U+0115 ebreve 1.5 +U+0116 Edotaccent 1.5 +U+0117 edotaccent 1.5 +U+0118 Eogonek 1.4 +U+0119 eogonek 1.4 +U+011a Ecaron 1.0 +U+011b ecaron 1.0 +U+011c Gcircumflex 1.5 +U+011d gcircumflex 1.5 +U+011e Gbreve original +U+011f gbreve original +U+0120 Gdotaccent 1.5 +U+0121 gdotaccent 1.5 +U+0122 Gcommaaccent 1.11 +U+0123 gcommaaccent 1.11 +U+0124 Hcircumflex 1.5 +U+0125 hcircumflex 1.5 +U+0126 Hbar 1.12 +U+0127 hbar 1.12 +U+0128 Itilde 1.5 +U+0129 itilde 1.5 +U+012a Imacron 1.5 +U+012b imacron 1.5 +U+012c Ibreve 1.5 +U+012d ibreve 1.5 +U+012e Iogonek 1.11 +U+012f iogonek 1.11 +U+0130 Idotaccent original +U+0131 dotlessi original +U+0132 IJ 1.11 +U+0133 ij 1.11 +U+0134 Jcircumflex 1.5 +U+0135 jcircumflex 1.5 +U+0136 Kcommaaccent 1.11 +U+0137 kcommaaccent 1.11 +U+0138 kgreenlandic 1.12 +U+0139 Lacute 1.1 +U+013a lacute 1.1 +U+013b Lcommaaccent 1.11 +U+013c lcommaaccent 1.11 +U+013d Lcaron 1.1 +U+013e lcaron 1.1 +U+013f Ldot 1.2 +U+0140 ldot 1.2 +U+0141 Lslash original +U+0142 lslash original +U+0143 Nacute 1.4 +U+0144 nacute 1.4 +U+0145 Ncommaaccent 1.11 +U+0146 ncommaaccent 1.11 +U+0147 Ncaron 1.0 +U+0148 ncaron 1.0 +U+0149 napostrophe 1.12 +U+014a Eng 1.12 +U+014b eng 1.12 +U+014c Omacron 1.5 +U+014d omacron 1.5 +U+014e Obreve 1.5 +U+014f obreve 1.5 +U+0150 Ohungarumlaut 1.5 +U+0151 ohungarumlaut 1.5 +U+0152 OE original +U+0153 oe original +U+0154 Racute 1.1 +U+0155 racute 1.1 +U+0156 Rcommaaccent 1.11 +U+0157 rcommaaccent 1.11 +U+0158 Rcaron 1.0 +U+0159 rcaron 1.0 +U+015a Sacute 1.4 +U+015b sacute 1.4 +U+015c Scircumflex 1.5 +U+015d scircumflex 1.5 +U+015e Scedilla original +U+015f scedilla original +U+0160 Scaron original +U+0161 scaron original +U+0162 Tcommaaccent 1.5 +U+0163 tcommaaccent 1.5 +U+0164 Tcaron 1.0 +U+0165 tcaron 1.0 +U+0166 Tbar 1.12 +U+0167 tbar 1.12 +U+0168 Utilde 1.5 +U+0169 utilde 1.5 +U+016a Umacron 1.5 +U+016b umacron 1.5 +U+016c Ubreve 1.5 +U+016d ubreve 1.5 +U+016e Uring 1.0 +U+016f uring 1.0 +U+0170 Uhungarumlaut 1.5 +U+0171 uhungarumlaut 1.5 +U+0172 Uogonek 1.11 +U+0173 uogonek 1.11 +U+0174 Wcircumflex 1.2 +U+0175 wcircumflex 1.2 +U+0176 Ycircumflex 1.2 +U+0177 ycircumflex 1.2 +U+0178 Ydieresis original +U+0179 Zacute 1.4 +U+017a zacute 1.4 +U+017b Zdotaccent 1.4 +U+017c zdotaccent 1.4 +U+017d Zcaron original +U+017e zcaron original +U+017f longs 1.12 +U+0180 uni0180 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.12 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+0181 uni0181 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+0182 uni0182 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+0183 uni0183 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+0184 uni0184 2.3 +U+0185 uni0185 2.3 +U+0186 uni0186 1.15 +U+0187 uni0187 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+0188 uni0188 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+0189 uni0189 2.1 +U+018a uni018A 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+018b uni018B 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+018c uni018C 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+018d uni018D 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+018e uni018E 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+018f uni018F 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+0190 uni0190 1.15 +U+0191 uni0191 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+0192 florin original +U+0193 uni0193 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+0194 uni0194 1.14 +U+0195 uni0195 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.6 (Sans ExtraLight) +U+0196 uni0196 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+0197 uni0197 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+0198 uni0198 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+0199 uni0199 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+019a uni019A 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+019b uni019B 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+019c uni019C 2.3 +U+019d uni019D 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+019e uni019E 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+019f uni019F 2.3 +U+01a0 Ohorn 2.3 +U+01a1 ohorn 2.3 +U+01a2 uni01A2 2.3 +U+01a3 uni01A3 2.3 +U+01a4 uni01A4 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+01a5 uni01A5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+01a6 uni01A6 2.3 +U+01a7 uni01A7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+01a8 uni01A8 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+01a9 uni01A9 2.2 +U+01aa uni01AA 2.3 +U+01ab uni01AB 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+01ac uni01AC 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+01ad uni01AD 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+01ae uni01AE 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+01af Uhorn 2.3 +U+01b0 uhorn 2.3 +U+01b1 uni01B1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+01b2 uni01B2 2.3 +U+01b3 uni01B3 2.3 +U+01b4 uni01B4 2.3 +U+01b5 uni01B5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+01b6 uni01B6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+01b7 uni01B7 2.3 +U+01b8 uni01B8 2.3 +U+01b9 uni01B9 2.3 +U+01ba uni01BA 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+01bb uni01BB 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+01bc uni01BC 2.3 +U+01bd uni01BD 2.3 +U+01be uni01BE 2.3 +U+01bf uni01BF 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+01c0 uni01C0 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+01c1 uni01C1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+01c2 uni01C2 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+01c3 uni01C3 2.2 +U+01c4 uni01C4 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+01c5 uni01C5 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+01c6 uni01C6 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+01c7 uni01C7 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+01c8 uni01C8 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+01c9 uni01C9 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+01ca uni01CA 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+01cb uni01CB 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+01cc uni01CC 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+01cd uni01CD 1.15 +U+01ce uni01CE 1.15 +U+01cf uni01CF 1.15 +U+01d0 uni01D0 1.15 +U+01d1 uni01D1 1.15 +U+01d2 uni01D2 1.15 +U+01d3 uni01D3 1.15 +U+01d4 uni01D4 1.15 +U+01d5 uni01D5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+01d6 uni01D6 1.13 +U+01d7 uni01D7 2.3 +U+01d8 uni01D8 2.3 +U+01d9 uni01D9 2.3 +U+01da uni01DA 2.3 +U+01db uni01DB 2.3 +U+01dc uni01DC 2.3 +U+01dd uni01DD 2.2 +U+01de uni01DE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+01df uni01DF 1.13 +U+01e0 uni01E0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+01e1 uni01E1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+01e2 uni01E2 1.5 +U+01e3 uni01E3 1.5 +U+01e4 uni01E4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+01e5 uni01E5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+01e6 Gcaron 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+01e7 gcaron 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+01e8 uni01E8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+01e9 uni01E9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+01ea uni01EA 1.9 +U+01eb uni01EB 1.9 +U+01ec uni01EC 1.9 +U+01ed uni01ED 1.9 +U+01ee uni01EE 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+01ef uni01EF 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+01f0 uni01F0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono) +U+01f1 uni01F1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+01f2 uni01F2 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+01f3 uni01F3 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+01f4 uni01F4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+01f5 uni01F5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+01f6 uni01F6 2.3 +U+01f7 uni01F7 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+01f8 uni01F8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+01f9 uni01F9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+01fa Aringacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+01fb aringacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+01fc AEacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+01fd aeacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+01fe Oslashacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+01ff oslashacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0200 uni0200 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0201 uni0201 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0202 uni0202 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0203 uni0203 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0204 uni0204 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0205 uni0205 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0206 uni0206 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0207 uni0207 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0208 uni0208 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0209 uni0209 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+020a uni020A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+020b uni020B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+020c uni020C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+020d uni020D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+020e uni020E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+020f uni020F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0210 uni0210 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0211 uni0211 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0212 uni0212 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0213 uni0213 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0214 uni0214 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0215 uni0215 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0216 uni0216 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0217 uni0217 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0218 Scommaaccent 1.5 +U+0219 scommaaccent 1.5 +U+021a uni021A 1.5 +U+021b uni021B 1.5 +U+021c uni021C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+021d uni021D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+021e uni021E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+021f uni021F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0220 uni0220 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0221 uni0221 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+0222 uni0222 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0223 uni0223 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0224 uni0224 2.3 +U+0225 uni0225 2.3 +U+0226 uni0226 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0227 uni0227 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0228 uni0228 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0229 uni0229 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+022a uni022A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+022b uni022B 1.13 +U+022c uni022C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+022d uni022D 1.13 +U+022e uni022E 1.10 +U+022f uni022F 1.10 +U+0230 uni0230 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+0231 uni0231 1.13 +U+0232 uni0232 1.5 +U+0233 uni0233 1.5 +U+0234 uni0234 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+0235 uni0235 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+0236 uni0236 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+0237 dotlessj 1.5 +U+0238 uni0238 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.10 (Sans ExtraLight) +U+0239 uni0239 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.10 (Sans ExtraLight) +U+023a uni023A 2.3 +U+023b uni023B 2.3 +U+023c uni023C 2.3 +U+023d uni023D 2.3 +U+023e uni023E 2.3 +U+023f uni023F 2.3 +U+0240 uni0240 2.3 +U+0241 uni0241 2.3 +U+0242 uni0242 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) +U+0243 uni0243 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0244 uni0244 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0245 uni0245 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0246 uni0246 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0247 uni0247 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0248 uni0248 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0249 uni0249 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+024a uni024A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+024b uni024B 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+024c uni024C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+024d uni024D 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+024e uni024E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+024f uni024F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0250 uni0250 1.14 +U+0251 uni0251 1.14 +U+0252 uni0252 1.14 +U+0253 uni0253 1.14 +U+0254 uni0254 1.14 +U+0255 uni0255 1.14 +U+0256 uni0256 1.14 +U+0257 uni0257 1.14 +U+0258 uni0258 1.14 +U+0259 uni0259 1.14 +U+025a uni025A 1.14 +U+025b uni025B 1.14 +U+025c uni025C 1.14 +U+025d uni025D 1.14 +U+025e uni025E 1.14 +U+025f uni025F 1.14 +U+0260 uni0260 1.14 +U+0261 uni0261 1.14 +U+0262 uni0262 1.14 +U+0263 uni0263 1.14 +U+0264 uni0264 1.14 +U+0265 uni0265 1.14 +U+0266 uni0266 1.14 +U+0267 uni0267 1.14 +U+0268 uni0268 1.14 +U+0269 uni0269 1.14 +U+026a uni026A 1.14 +U+026b uni026B 1.14 +U+026c uni026C 1.14 +U+026d uni026D 1.14 +U+026e uni026E 1.14 +U+026f uni026F 1.14 +U+0270 uni0270 1.14 +U+0271 uni0271 1.14 +U+0272 uni0272 1.14 +U+0273 uni0273 1.14 +U+0274 uni0274 1.14 +U+0275 uni0275 1.14 +U+0276 uni0276 1.14 +U+0277 uni0277 1.14 +U+0278 uni0278 1.14 +U+0279 uni0279 1.14 +U+027a uni027A 1.14 +U+027b uni027B 1.14 +U+027c uni027C 1.14 +U+027d uni027D 1.14 +U+027e uni027E 1.14 +U+027f uni027F 1.14 +U+0280 uni0280 1.14 +U+0281 uni0281 1.14 +U+0282 uni0282 1.14 +U+0283 uni0283 1.14 +U+0284 uni0284 1.14 +U+0285 uni0285 1.14 +U+0286 uni0286 1.14 +U+0287 uni0287 1.14 +U+0288 uni0288 1.14 +U+0289 uni0289 1.14 +U+028a uni028A 1.14 +U+028b uni028B 1.14 +U+028c uni028C 1.14 +U+028d uni028D 1.14 +U+028e uni028E 1.14 +U+028f uni028F 1.14 +U+0290 uni0290 1.14 +U+0291 uni0291 1.14 +U+0292 uni0292 1.14 +U+0293 uni0293 1.14 +U+0294 uni0294 1.14 +U+0295 uni0295 1.14 +U+0296 uni0296 1.14 +U+0297 uni0297 1.14 +U+0298 uni0298 1.14 +U+0299 uni0299 1.14 +U+029a uni029A 1.14 +U+029b uni029B 1.14 +U+029c uni029C 1.14 +U+029d uni029D 1.14 +U+029e uni029E 1.14 +U+029f uni029F 1.14 +U+02a0 uni02A0 1.14 +U+02a1 uni02A1 1.14 +U+02a2 uni02A2 1.14 +U+02a3 uni02A3 1.14 +U+02a4 uni02A4 1.14 +U+02a5 uni02A5 1.14 +U+02a6 uni02A6 1.14 +U+02a7 uni02A7 1.14 +U+02a8 uni02A8 1.14 +U+02a9 uni02A9 1.14 +U+02aa uni02AA 1.14 +U+02ab uni02AB 1.14 +U+02ac uni02AC 1.14 +U+02ad uni02AD 1.14 +U+02ae uni02AE 1.14 +U+02af uni02AF 1.14 +U+02b0 uni02B0 1.14 +U+02b1 uni02B1 1.14 +U+02b2 uni02B2 1.14 +U+02b3 uni02B3 1.14 +U+02b4 uni02B4 1.14 +U+02b5 uni02B5 1.14 +U+02b6 uni02B6 1.14 +U+02b7 uni02B7 1.14 +U+02b8 uni02B8 1.14 +U+02b9 uni02B9 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+02ba uni02BA 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02bb uni02BB 1.5 +U+02bc afii57929 1.12 +U+02bd afii64937 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+02be uni02BE 2.2 +U+02bf uni02BF 2.2 +U+02c0 uni02C0 1.14 +U+02c1 uni02C1 1.14 +U+02c2 uni02C2 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02c3 uni02C3 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02c4 uni02C4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02c5 uni02C5 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02c6 circumflex original +U+02c7 caron original +U+02c8 uni02C8 2.0 +U+02c9 uni02C9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+02ca uni02CA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+02cb uni02CB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+02cc uni02CC 2.0 +U+02cd uni02CD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+02ce uni02CE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+02cf uni02CF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+02d0 uni02D0 1.14 +U+02d1 uni02D1 1.14 +U+02d2 uni02D2 2.0 +U+02d3 uni02D3 2.2 +U+02d4 uni02D4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02d5 uni02D5 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02d6 uni02D6 2.0 +U+02d7 uni02D7 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02d8 breve original +U+02d9 dotaccent original +U+02da ring original +U+02db ogonek original +U+02dc tilde original +U+02dd hungarumlaut original +U+02de uni02DE 2.0 +U+02df uni02DF 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02e0 uni02E0 1.14 +U+02e1 uni02E1 1.14 +U+02e2 uni02E2 1.14 +U+02e3 uni02E3 1.14 +U+02e4 uni02E4 1.14 +U+02e5 uni02E5 2.0 +U+02e6 uni02E6 2.0 +U+02e7 uni02E7 2.0 +U+02e8 uni02E8 2.0 +U+02e9 uni02E9 2.0 +U+02ec uni02EC 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02ed uni02ED 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02ee uni02EE 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+02f3 uni02F3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+02f7 uni02F7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+0300 gravecomb 1.15 +U+0301 acutecomb 1.15 +U+0302 uni0302 1.15 +U+0303 tildecomb 1.15 +U+0304 uni0304 1.15 +U+0305 uni0305 2.0 +U+0306 uni0306 1.15 +U+0307 uni0307 1.15 +U+0308 uni0308 1.15 +U+0309 hookabovecomb 2.1 +U+030a uni030A 1.15 +U+030b uni030B 1.15 +U+030c uni030C 1.15 +U+030d uni030D 2.0 +U+030e uni030E 2.0 +U+030f uni030F 2.0 +U+0310 uni0310 2.0 +U+0311 uni0311 2.0 +U+0312 uni0312 1.11 +U+0313 uni0313 2.1 +U+0314 uni0314 2.1 +U+0315 uni0315 2.0 +U+0316 uni0316 2.0 +U+0317 uni0317 2.0 +U+0318 uni0318 2.0 +U+0319 uni0319 2.0 +U+031a uni031A 2.1 +U+031b uni031B 2.1 +U+031c uni031C 2.0 +U+031d uni031D 2.0 +U+031e uni031E 2.0 +U+031f uni031F 2.0 +U+0320 uni0320 2.0 +U+0321 uni0321 1.15 +U+0322 uni0322 1.15 +U+0323 dotbelowcomb 2.1 +U+0324 uni0324 2.0 +U+0325 uni0325 2.0 +U+0326 uni0326 1.5 +U+0327 uni0327 2.1 +U+0328 uni0328 2.1 +U+0329 uni0329 2.0 +U+032a uni032A 2.0 +U+032b uni032B 2.1 +U+032c uni032C 2.0 +U+032d uni032D 2.0 +U+032e uni032E 2.0 +U+032f uni032F 2.0 +U+0330 uni0330 2.0 +U+0331 uni0331 2.0 +U+0332 uni0332 2.0 +U+0333 uni0333 2.1 +U+0334 uni0334 2.3 +U+0335 uni0335 2.3 +U+0336 uni0336 2.3 +U+0337 uni0337 2.3 +U+0338 uni0338 2.3 +U+0339 uni0339 2.0 +U+033a uni033A 2.0 +U+033b uni033B 2.0 +U+033c uni033C 2.1 +U+033d uni033D 2.0 +U+033e uni033E 2.1 +U+033f uni033F 2.1 +U+0340 uni0340 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0341 uni0341 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0342 uni0342 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0343 uni0343 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+0344 uni0344 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0345 uni0345 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0346 uni0346 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0347 uni0347 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0348 uni0348 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0349 uni0349 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034a uni034A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034b uni034B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034c uni034C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034d uni034D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034e uni034E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034f uni034F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+0351 uni0351 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0352 uni0352 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique) +U+0353 uni0353 2.5 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0357 uni0357 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0358 uni0358 2.3 +U+035c uni035C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+035d uni035D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+035e uni035E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+035f uni035F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0360 uni0360 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0361 uni0361 2.0 +U+0362 uni0362 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0374 uni0374 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+0375 uni0375 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+037a uni037A 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+037b uni037B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+037c uni037C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+037d uni037D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+037e uni037E 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+0384 tonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+0385 dieresistonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+0386 Alphatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+0387 anoteleia 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+0388 Epsilontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+0389 Etatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+038a Iotatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+038c Omicrontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+038e Upsilontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+038f Omegatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+0390 iotadieresistonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+0391 Alpha 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+0392 Beta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+0393 Gamma 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+0394 uni0394 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+0395 Epsilon 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+0396 Zeta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+0397 Eta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+0398 Theta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+0399 Iota 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+039a Kappa 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+039b Lambda 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+039c Mu 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+039d Nu 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+039e Xi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+039f Omicron 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03a0 Pi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03a1 Rho 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03a3 Sigma 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03a4 Tau 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03a5 Upsilon 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03a6 Phi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03a7 Chi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03a8 Psi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03a9 Omega original +U+03aa Iotadieresis 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03ab Upsilondieresis 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03ac alphatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03ad epsilontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03ae etatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03af iotatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03b0 upsilondieresistonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03b1 alpha 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03b2 beta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03b3 gamma 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03b4 delta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03b5 epsilon 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03b6 zeta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03b7 eta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03b8 theta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03b9 iota 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03ba kappa 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03bb lambda 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03bc uni03BC 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03bd nu 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03be xi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03bf omicron 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03c0 pi original +U+03c1 rho 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03c2 sigma1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03c3 sigma 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03c4 tau 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03c5 upsilon 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03c6 phi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03c7 chi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03c8 psi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03c9 omega 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03ca iotadieresis 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03cb upsilondieresis 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03cc omicrontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03cd upsilontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03ce omegatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+03d0 uni03D0 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+03d1 theta1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+03d2 Upsilon1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+03d3 uni03D3 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+03d4 uni03D4 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+03d5 phi1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+03d6 omega1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+03d7 uni03D7 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+03d8 uni03D8 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+03d9 uni03D9 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+03da uni03DA 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+03db uni03DB 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+03dc uni03DC 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03dd uni03DD 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+03de uni03DE 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+03df uni03DF 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+03e0 uni03E0 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+03e1 uni03E1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+03e2 uni03E2 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e3 uni03E3 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e4 uni03E4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e5 uni03E5 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e6 uni03E6 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e7 uni03E7 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e8 uni03E8 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e9 uni03E9 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03ea uni03EA 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03eb uni03EB 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03ec uni03EC 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03ed uni03ED 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03ee uni03EE 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03ef uni03EF 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03f0 uni03F0 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+03f1 uni03F1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+03f2 uni03F2 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03f3 uni03F3 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03f4 uni03F4 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03f5 uni03F5 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03f6 uni03F6 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03f7 uni03F7 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03f8 uni03F8 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03f9 uni03F9 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03fa uni03FA 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+03fb uni03FB 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+03fc uni03FC 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+03fd uni03FD 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03fe uni03FE 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+03ff uni03FF 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+0400 uni0400 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0401 afii10023 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0402 afii10051 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+0403 afii10052 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0404 afii10053 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0405 afii10054 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0406 afii10055 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0407 afii10056 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0408 afii10057 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0409 afii10058 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+040a afii10059 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+040b afii10060 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+040c afii10061 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+040d uni040D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+040e afii10062 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+040f afii10145 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+0410 afii10017 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0411 afii10018 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0412 afii10019 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0413 afii10020 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0414 afii10021 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+0415 afii10022 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0416 afii10024 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0417 afii10025 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0418 afii10026 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0419 afii10027 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+041a afii10028 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+041b afii10029 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+041c afii10030 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+041d afii10031 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+041e afii10032 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+041f afii10033 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0420 afii10034 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0421 afii10035 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0422 afii10036 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0423 afii10037 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+0424 afii10038 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+0425 afii10039 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0426 afii10040 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+0427 afii10041 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+0428 afii10042 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+0429 afii10043 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+042a afii10044 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+042b afii10045 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+042c afii10046 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+042d afii10047 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+042e afii10048 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+042f afii10049 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0430 afii10065 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0431 afii10066 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+0432 afii10067 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0433 afii10068 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0434 afii10069 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+0435 afii10070 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0436 afii10072 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0437 afii10073 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0438 afii10074 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0439 afii10075 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+043a afii10076 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+043b afii10077 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+043c afii10078 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+043d afii10079 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+043e afii10080 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+043f afii10081 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0440 afii10082 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0441 afii10083 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0442 afii10084 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0443 afii10085 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0444 afii10086 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+0445 afii10087 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0446 afii10088 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+0447 afii10089 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+0448 afii10090 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+0449 afii10091 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+044a afii10092 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+044b afii10093 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+044c afii10094 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+044d afii10095 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+044e afii10096 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+044f afii10097 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0450 uni0450 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0451 afii10071 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0452 afii10099 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+0453 afii10100 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0454 afii10101 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0455 afii10102 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0456 afii10103 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0457 afii10104 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0458 afii10105 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+0459 afii10106 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+045a afii10107 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+045b afii10108 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+045c afii10109 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+045d uni045D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+045e afii10110 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.4 (Sans ExtraLight) +U+045f afii10193 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Oblique, Serif Oblique) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) 2.5 (Sans ExtraLight) +U+0460 uni0460 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0461 uni0461 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+0462 afii10146 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+0463 afii10194 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+0464 uni0464 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+0465 uni0465 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+0466 uni0466 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0467 uni0467 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0468 uni0468 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0469 uni0469 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+046a uni046A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+046b uni046B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+046c uni046C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+046d uni046D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+046e uni046E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+046f uni046F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0470 uni0470 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+0471 uni0471 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+0472 afii10147 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.10 (Sans ExtraLight) +U+0473 afii10195 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+0474 afii10148 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.12 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+0475 afii10196 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.12 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+0476 uni0476 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0477 uni0477 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0478 uni0478 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0479 uni0479 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047a uni047A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047b uni047B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047c uni047C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047d uni047D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047e uni047E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047f uni047F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0480 uni0480 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0481 uni0481 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0482 uni0482 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0483 uni0483 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0484 uni0484 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0485 uni0485 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0486 uni0486 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0487 uni0487 2.9 (Sans, Sans Condensed) +U+0488 uni0488 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0489 uni0489 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+048a uni048A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+048b uni048B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+048c uni048C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+048d uni048D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+048e uni048E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+048f uni048F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0490 afii10050 1.15 +U+0491 afii10098 1.15 +U+0492 uni0492 1.14 +U+0493 uni0493 1.14 +U+0494 uni0494 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0495 uni0495 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0496 uni0496 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+0497 uni0497 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.15 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+0498 uni0498 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+0499 uni0499 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+049a uni049A 1.14 +U+049b uni049B 1.14 +U+049c uni049C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+049d uni049D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+049e uni049E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+049f uni049F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04a0 uni04A0 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04a1 uni04A1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04a2 uni04A2 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04a3 uni04A3 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04a4 uni04A4 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.10 (Sans ExtraLight) +U+04a5 uni04A5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.10 (Sans ExtraLight) +U+04a6 uni04A6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04a7 uni04A7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04a8 uni04A8 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04a9 uni04A9 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04aa uni04AA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04ab uni04AB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04ac uni04AC 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04ad uni04AD 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04ae uni04AE 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04af uni04AF 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04b0 uni04B0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04b1 uni04B1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04b2 uni04B2 1.14 +U+04b3 uni04B3 1.14 +U+04b4 uni04B4 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.10 (Sans ExtraLight) +U+04b5 uni04B5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.10 (Sans ExtraLight) +U+04b6 uni04B6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04b7 uni04B7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04b8 uni04B8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04b9 uni04B9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04ba uni04BA 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+04bb uni04BB 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04bc uni04BC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04bd uni04BD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04be uni04BE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04bf uni04BF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04c0 uni04C0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04c1 uni04C1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+04c2 uni04C2 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+04c3 uni04C3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+04c4 uni04C4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+04c5 uni04C5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04c6 uni04C6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04c7 uni04C7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+04c8 uni04C8 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+04c9 uni04C9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04ca uni04CA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04cb uni04CB 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04cc uni04CC 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04cd uni04CD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04ce uni04CE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04cf uni04CF 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04d0 uni04D0 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+04d1 uni04D1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+04d2 uni04D2 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+04d3 uni04D3 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+04d4 uni04D4 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+04d5 uni04D5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+04d6 uni04D6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+04d7 uni04D7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+04d8 uni04D8 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04d9 afii10846 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04da uni04DA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04db uni04DB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04dc uni04DC 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+04dd uni04DD 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+04de uni04DE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04df uni04DF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04e0 uni04E0 2.3 +U+04e1 uni04E1 2.3 +U+04e2 uni04E2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04e3 uni04E3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04e4 uni04E4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04e5 uni04E5 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04e6 uni04E6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+04e7 uni04E7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) +U+04e8 uni04E8 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+04e9 uni04E9 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+04ea uni04EA 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+04eb uni04EB 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+04ec uni04EC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+04ed uni04ED 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+04ee uni04EE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+04ef uni04EF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04f0 uni04F0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+04f1 uni04F1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04f2 uni04F2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+04f3 uni04F3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04f4 uni04F4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+04f5 uni04F5 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+04f6 uni04F6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04f7 uni04F7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04f8 uni04F8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+04f9 uni04F9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+04fa uni04FA 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04fb uni04FB 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04fc uni04FC 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04fd uni04FD 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04fe uni04FE 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04ff uni04FF 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0500 uni0500 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0501 uni0501 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0502 uni0502 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0503 uni0503 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0504 uni0504 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0505 uni0505 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0506 uni0506 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0507 uni0507 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0508 uni0508 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0509 uni0509 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050a uni050A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050b uni050B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050c uni050C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050d uni050D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050e uni050E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050f uni050F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0510 uni0510 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0511 uni0511 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0512 uni0512 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0513 uni0513 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0531 uni0531 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0532 uni0532 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0533 uni0533 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0534 uni0534 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0535 uni0535 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0536 uni0536 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0537 uni0537 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0538 uni0538 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0539 uni0539 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+053a uni053A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+053b uni053B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+053c uni053C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+053d uni053D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+053e uni053E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+053f uni053F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0540 uni0540 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0541 uni0541 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0542 uni0542 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0543 uni0543 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0544 uni0544 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0545 uni0545 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0546 uni0546 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0547 uni0547 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0548 uni0548 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+0549 uni0549 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+054a uni054A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+054b uni054B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+054c uni054C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+054d uni054D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+054e uni054E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+054f uni054F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+0550 uni0550 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0551 uni0551 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0552 uni0552 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0553 uni0553 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+0554 uni0554 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0555 uni0555 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+0556 uni0556 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0559 uni0559 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+055a uni055A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+055b uni055B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+055c uni055C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+055d uni055D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+055e uni055E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+055f uni055F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0561 uni0561 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+0562 uni0562 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0563 uni0563 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0564 uni0564 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0565 uni0565 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0566 uni0566 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0567 uni0567 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0568 uni0568 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0569 uni0569 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+056a uni056A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+056b uni056B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+056c uni056C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+056d uni056D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+056e uni056E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+056f uni056F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+0570 uni0570 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+0571 uni0571 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0572 uni0572 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0573 uni0573 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0574 uni0574 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0575 uni0575 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+0576 uni0576 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0577 uni0577 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0578 uni0578 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+0579 uni0579 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+057a uni057A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+057b uni057B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+057c uni057C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+057d uni057D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+057e uni057E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+057f uni057F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+0580 uni0580 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+0581 uni0581 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+0582 uni0582 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0583 uni0583 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+0584 uni0584 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0585 uni0585 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+0586 uni0586 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0587 uni0587 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0589 uni0589 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+058a uni058A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b0 afii57799 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b1 afii57801 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b2 afii57800 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b3 afii57802 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b4 afii57793 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b5 afii57794 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b6 afii57795 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b7 afii57798 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b8 afii57797 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b9 afii57806 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05bb afii57796 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05bc afii57807 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05bd afii57839 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05be afii57645 2.9 (Sans Condensed Oblique, Sans Oblique) +U+05bf afii57841 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c0 afii57842 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c1 afii57804 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c2 afii57803 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c3 afii57658 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c6 uni05C6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c7 uni05C7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d0 afii57664 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d1 afii57665 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d2 afii57666 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d3 afii57667 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d4 afii57668 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d5 afii57669 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d6 afii57670 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d7 afii57671 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d8 afii57672 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d9 afii57673 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05da afii57674 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05db afii57675 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05dc afii57676 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05dd afii57677 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05de afii57678 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05df afii57679 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e0 afii57680 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e1 afii57681 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e2 afii57682 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e3 afii57683 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e4 afii57684 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e5 afii57685 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e6 afii57686 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e7 afii57687 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e8 afii57688 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e9 afii57689 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05ea afii57690 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05f0 afii57716 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05f1 afii57717 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05f2 afii57718 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+060c afii57388 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0615 uni0615 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+061b afii57403 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+061f afii57407 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0621 afii57409 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0622 afii57410 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0623 afii57411 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0624 afii57412 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0625 afii57413 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0626 afii57414 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0627 afii57415 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0628 afii57416 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0629 afii57417 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+062a afii57418 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+062b afii57419 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+062c afii57420 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+062d afii57421 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+062e afii57422 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+062f afii57423 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0630 afii57424 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0631 afii57425 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0632 afii57426 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0633 afii57427 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0634 afii57428 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0635 afii57429 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0636 afii57430 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0637 afii57431 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0638 afii57432 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0639 afii57433 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+063a afii57434 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0640 afii57440 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0641 afii57441 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0642 afii57442 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0643 afii57443 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0644 afii57444 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0645 afii57445 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0646 afii57446 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0647 afii57470 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0648 afii57448 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0649 afii57449 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+064a afii57450 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+064b afii57451 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+064c afii57452 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+064d afii57453 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+064e afii57454 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+064f afii57455 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0650 afii57456 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0651 afii57457 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0652 afii57458 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0653 uni0653 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0654 uni0654 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0655 uni0655 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+065a uni065A 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0660 afii57392 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0661 afii57393 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0662 afii57394 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0663 afii57395 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0664 afii57396 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0665 afii57397 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0666 afii57398 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0667 afii57399 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0668 afii57400 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0669 afii57401 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+066a afii57381 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+066b uni066B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+066c uni066C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+066d afii63167 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+066e uni066E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+066f uni066F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0674 uni0674 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans ExtraLight) +U+0679 afii57511 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+067a uni067A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+067b uni067B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+067c uni067C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+067d uni067D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+067e afii57506 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+067f uni067F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0680 uni0680 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0681 uni0681 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0682 uni0682 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0683 uni0683 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0684 uni0684 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0685 uni0685 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0686 afii57507 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0687 uni0687 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0691 afii57513 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0692 uni0692 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0695 uni0695 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0698 afii57508 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a1 uni06A1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a4 afii57505 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a6 uni06A6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a9 uni06A9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06af afii57509 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06b5 uni06B5 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06ba afii57514 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06bf uni06BF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06c6 uni06C6 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06cc uni06CC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06ce uni06CE 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06d5 uni06D5 2.10 (Sans, Sans Bold) 2.11 (Sans Condensed, Sans Condensed Bold) +U+06f0 uni06F0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06f1 uni06F1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06f2 uni06F2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06f3 uni06F3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06f4 uni06F4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06f5 uni06F5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06f6 uni06F6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06f7 uni06F7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06f8 uni06F8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06f9 uni06F9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0e3f uni0E3F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0e81 uni0E81 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e82 uni0E82 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e84 uni0E84 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e87 uni0E87 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e88 uni0E88 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e8a uni0E8A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e8d uni0E8D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e94 uni0E94 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e95 uni0E95 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e96 uni0E96 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e97 uni0E97 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e99 uni0E99 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9a uni0E9A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9b uni0E9B 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9c uni0E9C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9d uni0E9D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9e uni0E9E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9f uni0E9F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ea1 uni0EA1 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ea2 uni0EA2 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ea3 uni0EA3 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ea5 uni0EA5 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ea7 uni0EA7 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eaa uni0EAA 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eab uni0EAB 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ead uni0EAD 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eae uni0EAE 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eaf uni0EAF 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb0 uni0EB0 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0eb1 uni0EB1 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0eb2 uni0EB2 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0eb3 uni0EB3 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0eb4 uni0EB4 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0eb5 uni0EB5 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0eb6 uni0EB6 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0eb7 uni0EB7 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0eb8 uni0EB8 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0eb9 uni0EB9 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ebb uni0EBB 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ebc uni0EBC 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ebd uni0EBD 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec0 uni0EC0 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec1 uni0EC1 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec2 uni0EC2 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec3 uni0EC3 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec4 uni0EC4 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec6 uni0EC6 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec8 uni0EC8 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec9 uni0EC9 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0eca uni0ECA 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ecb uni0ECB 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ecc uni0ECC 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ecd uni0ECD 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0edc uni0EDC 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0edd uni0EDD 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1401 uni1401 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1402 uni1402 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1403 uni1403 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1404 uni1404 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1405 uni1405 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1406 uni1406 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1407 uni1407 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1409 uni1409 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140a uni140A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140b uni140B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140c uni140C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140d uni140D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140e uni140E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140f uni140F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1410 uni1410 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1411 uni1411 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1412 uni1412 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1413 uni1413 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1414 uni1414 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1415 uni1415 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1416 uni1416 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1417 uni1417 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1418 uni1418 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1419 uni1419 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+141a uni141A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+141b uni141B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+141d uni141D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+141e uni141E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+141f uni141F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1420 uni1420 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1421 uni1421 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1422 uni1422 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1423 uni1423 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1424 uni1424 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1425 uni1425 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1426 uni1426 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1427 uni1427 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1428 uni1428 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1429 uni1429 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142a uni142A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142b uni142B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142c uni142C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142d uni142D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142e uni142E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142f uni142F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1430 uni1430 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1431 uni1431 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1432 uni1432 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1433 uni1433 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1434 uni1434 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1435 uni1435 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1437 uni1437 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1438 uni1438 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1439 uni1439 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143a uni143A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143b uni143B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143c uni143C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143d uni143D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143e uni143E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143f uni143F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1440 uni1440 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1441 uni1441 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1442 uni1442 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1443 uni1443 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1444 uni1444 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1445 uni1445 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1446 uni1446 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1447 uni1447 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1448 uni1448 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1449 uni1449 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+144a uni144A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+144c uni144C 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+144d uni144D 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+144e uni144E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+144f uni144F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1450 uni1450 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1451 uni1451 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1452 uni1452 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1454 uni1454 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1455 uni1455 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1456 uni1456 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1457 uni1457 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1458 uni1458 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1459 uni1459 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145a uni145A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145b uni145B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145c uni145C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145d uni145D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145e uni145E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145f uni145F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1460 uni1460 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1461 uni1461 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1462 uni1462 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1463 uni1463 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1464 uni1464 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1465 uni1465 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1466 uni1466 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1467 uni1467 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1468 uni1468 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1469 uni1469 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146a uni146A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146b uni146B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146c uni146C 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146d uni146D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146e uni146E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146f uni146F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1470 uni1470 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1471 uni1471 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1472 uni1472 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1473 uni1473 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1474 uni1474 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1475 uni1475 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1476 uni1476 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1477 uni1477 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1478 uni1478 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1479 uni1479 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147a uni147A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147b uni147B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147c uni147C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147d uni147D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147e uni147E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147f uni147F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1480 uni1480 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1481 uni1481 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1482 uni1482 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1483 uni1483 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1484 uni1484 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1485 uni1485 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1486 uni1486 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1487 uni1487 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1488 uni1488 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1489 uni1489 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148a uni148A 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148b uni148B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148c uni148C 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148d uni148D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148e uni148E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148f uni148F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1490 uni1490 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1491 uni1491 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1492 uni1492 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1493 uni1493 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1494 uni1494 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1495 uni1495 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1496 uni1496 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1497 uni1497 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1498 uni1498 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1499 uni1499 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149a uni149A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149b uni149B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149c uni149C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149d uni149D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149e uni149E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149f uni149F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a0 uni14A0 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a1 uni14A1 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a2 uni14A2 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a3 uni14A3 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a4 uni14A4 2.13 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Oblique) 2.15 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+14a5 uni14A5 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a6 uni14A6 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a7 uni14A7 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a8 uni14A8 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a9 uni14A9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14aa uni14AA 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ab uni14AB 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ac uni14AC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ad uni14AD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ae uni14AE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14af uni14AF 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b0 uni14B0 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b1 uni14B1 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b2 uni14B2 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b3 uni14B3 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b4 uni14B4 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b5 uni14B5 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b6 uni14B6 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b7 uni14B7 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b8 uni14B8 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b9 uni14B9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ba uni14BA 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14bb uni14BB 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14bc uni14BC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14bd uni14BD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c0 uni14C0 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c1 uni14C1 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c2 uni14C2 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c3 uni14C3 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c4 uni14C4 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c5 uni14C5 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c6 uni14C6 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c7 uni14C7 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c8 uni14C8 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c9 uni14C9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ca uni14CA 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14cb uni14CB 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14cc uni14CC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14cd uni14CD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ce uni14CE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14cf uni14CF 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d0 uni14D0 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d1 uni14D1 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d2 uni14D2 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d3 uni14D3 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d4 uni14D4 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d5 uni14D5 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d6 uni14D6 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d7 uni14D7 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d8 uni14D8 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d9 uni14D9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14da uni14DA 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14db uni14DB 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14dc uni14DC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14dd uni14DD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14de uni14DE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14df uni14DF 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e0 uni14E0 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e1 uni14E1 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e2 uni14E2 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e3 uni14E3 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e4 uni14E4 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e5 uni14E5 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e6 uni14E6 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e7 uni14E7 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e8 uni14E8 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e9 uni14E9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ea uni14EA 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ec uni14EC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ed uni14ED 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ee uni14EE 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ef uni14EF 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f0 uni14F0 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f1 uni14F1 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f2 uni14F2 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f3 uni14F3 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f4 uni14F4 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f5 uni14F5 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f6 uni14F6 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f7 uni14F7 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f8 uni14F8 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f9 uni14F9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14fa uni14FA 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14fb uni14FB 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14fc uni14FC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14fd uni14FD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14fe uni14FE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ff uni14FF 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1500 uni1500 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1501 uni1501 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1502 uni1502 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1503 uni1503 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1504 uni1504 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1505 uni1505 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1506 uni1506 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1507 uni1507 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1510 uni1510 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1511 uni1511 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1512 uni1512 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1513 uni1513 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1514 uni1514 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1515 uni1515 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1516 uni1516 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1517 uni1517 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1518 uni1518 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1519 uni1519 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151a uni151A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151b uni151B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151c uni151C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151d uni151D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151e uni151E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151f uni151F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1520 uni1520 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1521 uni1521 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1522 uni1522 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1523 uni1523 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1524 uni1524 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1525 uni1525 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1526 uni1526 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1527 uni1527 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1528 uni1528 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1529 uni1529 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152a uni152A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152b uni152B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152c uni152C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152d uni152D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152e uni152E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152f uni152F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1530 uni1530 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1531 uni1531 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1532 uni1532 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1533 uni1533 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1534 uni1534 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1535 uni1535 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1536 uni1536 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1537 uni1537 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1538 uni1538 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1539 uni1539 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+153a uni153A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+153b uni153B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+153c uni153C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+153d uni153D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+153e uni153E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1540 uni1540 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1541 uni1541 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1542 uni1542 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1543 uni1543 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1544 uni1544 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1545 uni1545 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1546 uni1546 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1547 uni1547 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1548 uni1548 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1549 uni1549 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154a uni154A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154b uni154B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154c uni154C 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154d uni154D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154e uni154E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154f uni154F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1550 uni1550 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1552 uni1552 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1553 uni1553 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1554 uni1554 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1555 uni1555 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1556 uni1556 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1557 uni1557 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1558 uni1558 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1559 uni1559 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155a uni155A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155b uni155B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155c uni155C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155d uni155D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155e uni155E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155f uni155F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1560 uni1560 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1561 uni1561 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1562 uni1562 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1563 uni1563 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1564 uni1564 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1565 uni1565 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1566 uni1566 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1567 uni1567 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1568 uni1568 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1569 uni1569 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+156a uni156A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1574 uni1574 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1575 uni1575 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1576 uni1576 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1577 uni1577 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1578 uni1578 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1579 uni1579 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157a uni157A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157b uni157B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157c uni157C 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157d uni157D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157e uni157E 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157f uni157F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1580 uni1580 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1581 uni1581 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1582 uni1582 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1583 uni1583 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1584 uni1584 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1585 uni1585 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158a uni158A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158b uni158B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158c uni158C 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158d uni158D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158e uni158E 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158f uni158F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1590 uni1590 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1591 uni1591 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1592 uni1592 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1593 uni1593 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1594 uni1594 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1595 uni1595 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1596 uni1596 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a0 uni15A0 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a1 uni15A1 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a2 uni15A2 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a3 uni15A3 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a4 uni15A4 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a5 uni15A5 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a6 uni15A6 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a7 uni15A7 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a8 uni15A8 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a9 uni15A9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15aa uni15AA 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15ab uni15AB 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15ac uni15AC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15ad uni15AD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15ae uni15AE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15af uni15AF 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15de uni15DE 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15e1 uni15E1 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1646 uni1646 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1647 uni1647 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+166e uni166E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+166f uni166F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1670 uni1670 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1671 uni1671 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1672 uni1672 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1673 uni1673 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1674 uni1674 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1675 uni1675 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1676 uni1676 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d00 uni1D00 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d01 uni1D01 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d02 uni1D02 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+1d03 uni1D03 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d04 uni1D04 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d05 uni1D05 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d06 uni1D06 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d07 uni1D07 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d08 uni1D08 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1d09 uni1D09 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+1d0a uni1D0A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d0b uni1D0B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d0c uni1D0C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d0d uni1D0D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d0e uni1D0E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d0f uni1D0F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d10 uni1D10 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d11 uni1D11 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d12 uni1D12 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d13 uni1D13 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d14 uni1D14 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+1d16 uni1D16 2.3 +U+1d17 uni1D17 2.3 +U+1d18 uni1D18 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d19 uni1D19 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d1a uni1D1A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d1b uni1D1B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d1c uni1D1C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d1d uni1D1D 2.3 +U+1d1e uni1D1E 2.3 +U+1d1f uni1D1F 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1d20 uni1D20 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d21 uni1D21 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d22 uni1D22 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d23 uni1D23 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d26 uni1D26 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d27 uni1D27 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d28 uni1D28 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d29 uni1D29 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d2a uni1D2A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d2b uni1D2B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d2c uni1D2C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d2d uni1D2D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d2e uni1D2E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d30 uni1D30 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d31 uni1D31 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d32 uni1D32 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d33 uni1D33 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d34 uni1D34 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d35 uni1D35 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d36 uni1D36 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d37 uni1D37 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d38 uni1D38 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d39 uni1D39 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d3a uni1D3A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d3b uni1D3B 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d3c uni1D3C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d3d uni1D3D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d3e uni1D3E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d3f uni1D3F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d40 uni1D40 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d41 uni1D41 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d42 uni1D42 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d43 uni1D43 2.3 +U+1d44 uni1D44 2.3 +U+1d45 uni1D45 2.3 +U+1d46 uni1D46 2.3 +U+1d47 uni1D47 2.3 +U+1d48 uni1D48 2.3 +U+1d49 uni1D49 2.3 +U+1d4a uni1D4A 2.3 +U+1d4b uni1D4B 2.3 +U+1d4c uni1D4C 2.3 +U+1d4d uni1D4D 2.3 +U+1d4e uni1D4E 2.3 +U+1d4f uni1D4F 2.3 +U+1d50 uni1D50 2.3 +U+1d51 uni1D51 2.3 +U+1d52 uni1D52 2.3 +U+1d53 uni1D53 2.3 +U+1d54 uni1D54 2.3 +U+1d55 uni1D55 2.3 +U+1d56 uni1D56 2.3 +U+1d57 uni1D57 2.3 +U+1d58 uni1D58 2.3 +U+1d59 uni1D59 2.3 +U+1d5a uni1D5A 2.3 +U+1d5b uni1D5B 2.3 +U+1d5c uni1D5C 2.10 (Sans Oblique) 2.11 (Sans Condensed Oblique) +U+1d5d uni1D5D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d5e uni1D5E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d5f uni1D5F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d60 uni1D60 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d61 uni1D61 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d62 uni1D62 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d63 uni1D63 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d64 uni1D64 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d65 uni1D65 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d66 uni1D66 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d67 uni1D67 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d68 uni1D68 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d69 uni1D69 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d6a uni1D6A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d77 uni1D77 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+1d78 uni1D78 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d7b uni1D7B 2.3 +U+1d85 uni1D85 2.3 +U+1d9b uni1D9B 2.3 +U+1d9c uni1D9C 2.3 +U+1d9d uni1D9D 2.3 +U+1d9e uni1D9E 2.3 +U+1d9f uni1D9F 2.3 +U+1da0 uni1DA0 2.3 +U+1da1 uni1DA1 2.3 +U+1da2 uni1DA2 2.3 +U+1da3 uni1DA3 2.3 +U+1da4 uni1DA4 2.3 +U+1da5 uni1DA5 2.3 +U+1da6 uni1DA6 2.3 +U+1da7 uni1DA7 2.3 +U+1da8 uni1DA8 2.3 +U+1da9 uni1DA9 2.3 +U+1daa uni1DAA 2.3 +U+1dab uni1DAB 2.3 +U+1dac uni1DAC 2.3 +U+1dad uni1DAD 2.3 +U+1dae uni1DAE 2.3 +U+1daf uni1DAF 2.3 +U+1db0 uni1DB0 2.3 +U+1db1 uni1DB1 2.3 +U+1db2 uni1DB2 2.3 +U+1db3 uni1DB3 2.3 +U+1db4 uni1DB4 2.3 +U+1db5 uni1DB5 2.3 +U+1db6 uni1DB6 2.3 +U+1db7 uni1DB7 2.3 +U+1db8 uni1DB8 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1db9 uni1DB9 2.3 +U+1dba uni1DBA 2.3 +U+1dbb uni1DBB 2.3 +U+1dbc uni1DBC 2.3 +U+1dbd uni1DBD 2.3 +U+1dbe uni1DBE 2.3 +U+1dbf uni1DBF 2.3 +U+1dc4 uni1DC4 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1dc5 uni1DC5 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1dc6 uni1DC6 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1dc7 uni1DC7 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1dc8 uni1DC8 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1dc9 uni1DC9 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1e00 uni1E00 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e01 uni1E01 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e02 uni1E02 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e03 uni1E03 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e04 uni1E04 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e05 uni1E05 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e06 uni1E06 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e07 uni1E07 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e08 uni1E08 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1e09 uni1E09 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1e0a uni1E0A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e0b uni1E0B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e0c uni1E0C 2.1 +U+1e0d uni1E0D 2.1 +U+1e0e uni1E0E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e0f uni1E0F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e10 uni1E10 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1e11 uni1E11 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1e12 uni1E12 1.13 +U+1e13 uni1E13 1.13 +U+1e14 uni1E14 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1e15 uni1E15 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1e16 uni1E16 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1e17 uni1E17 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1e18 uni1E18 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e19 uni1E19 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e1a uni1E1A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e1b uni1E1B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e1c uni1E1C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e1d uni1E1D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e1e uni1E1E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e1f uni1E1F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e20 uni1E20 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e21 uni1E21 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e22 uni1E22 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e23 uni1E23 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e24 uni1E24 2.1 +U+1e25 uni1E25 2.1 +U+1e26 uni1E26 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1e27 uni1E27 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1e28 uni1E28 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e29 uni1E29 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e2a uni1E2A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e2b uni1E2B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e2c uni1E2C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e2d uni1E2D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e2e uni1E2E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1e2f uni1E2F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1e30 uni1E30 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e31 uni1E31 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e32 uni1E32 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e33 uni1E33 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e34 uni1E34 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e35 uni1E35 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e36 uni1E36 2.1 +U+1e37 uni1E37 2.1 +U+1e38 uni1E38 2.1 +U+1e39 uni1E39 2.1 +U+1e3a uni1E3A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e3b uni1E3B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e3c uni1E3C 1.13 +U+1e3d uni1E3D 1.13 +U+1e3e uni1E3E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e3f uni1E3F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e40 uni1E40 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e41 uni1E41 2.1 +U+1e42 uni1E42 2.1 +U+1e43 uni1E43 2.1 +U+1e44 uni1E44 1.13 +U+1e45 uni1E45 1.13 +U+1e46 uni1E46 2.1 +U+1e47 uni1E47 2.1 +U+1e48 uni1E48 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e49 uni1E49 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e4a uni1E4A 1.13 +U+1e4b uni1E4B 1.13 +U+1e4c uni1E4C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1e4d uni1E4D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1e4e uni1E4E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1e4f uni1E4F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1e50 uni1E50 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1e51 uni1E51 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1e52 uni1E52 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1e53 uni1E53 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1e54 uni1E54 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1e55 uni1E55 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1e56 uni1E56 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e57 uni1E57 2.1 +U+1e58 uni1E58 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e59 uni1E59 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e5a uni1E5A 2.1 +U+1e5b uni1E5B 2.1 +U+1e5c uni1E5C 2.1 +U+1e5d uni1E5D 2.1 +U+1e5e uni1E5E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e5f uni1E5F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e60 uni1E60 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e61 uni1E61 2.1 +U+1e62 uni1E62 2.1 +U+1e63 uni1E63 2.1 +U+1e64 uni1E64 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+1e65 uni1E65 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+1e66 uni1E66 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1e67 uni1E67 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1e68 uni1E68 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e69 uni1E69 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e6a uni1E6A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e6b uni1E6B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e6c uni1E6C 2.1 +U+1e6d uni1E6D 2.1 +U+1e6e uni1E6E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e6f uni1E6F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e70 uni1E70 1.13 +U+1e71 uni1E71 1.13 +U+1e72 uni1E72 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e73 uni1E73 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e74 uni1E74 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e75 uni1E75 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e76 uni1E76 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e77 uni1E77 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e78 uni1E78 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1e79 uni1E79 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1e7a uni1E7A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1e7b uni1E7B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1e7c uni1E7C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1e7d uni1E7D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1e7e uni1E7E 2.1 +U+1e7f uni1E7F 2.1 +U+1e80 Wgrave 1.2 +U+1e81 wgrave 1.2 +U+1e82 Wacute 1.2 +U+1e83 wacute 1.2 +U+1e84 Wdieresis 1.2 +U+1e85 wdieresis 1.2 +U+1e86 uni1E86 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e87 uni1E87 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e88 uni1E88 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e89 uni1E89 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e8a uni1E8A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e8b uni1E8B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e8c uni1E8C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1e8d uni1E8D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1e8e uni1E8E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e8f uni1E8F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e90 uni1E90 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1e91 uni1E91 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1e92 uni1E92 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e93 uni1E93 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e94 uni1E94 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e95 uni1E95 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e96 uni1E96 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e97 uni1E97 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1e98 uni1E98 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1e99 uni1E99 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1e9a uni1E9A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.10 (Sans ExtraLight) +U+1e9b uni1E9B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ea0 uni1EA0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ea1 uni1EA1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ea2 uni1EA2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1ea3 uni1EA3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1ea4 uni1EA4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ea5 uni1EA5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ea6 uni1EA6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ea7 uni1EA7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ea8 uni1EA8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ea9 uni1EA9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1eaa uni1EAA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1eab uni1EAB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1eac uni1EAC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1ead uni1EAD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1eae uni1EAE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1eaf uni1EAF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1eb0 uni1EB0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1eb1 uni1EB1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1eb2 uni1EB2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1eb3 uni1EB3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1eb4 uni1EB4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1eb5 uni1EB5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1eb6 uni1EB6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1eb7 uni1EB7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1eb8 uni1EB8 2.2 +U+1eb9 uni1EB9 2.2 +U+1eba uni1EBA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1ebb uni1EBB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1ebc uni1EBC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ebd uni1EBD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ebe uni1EBE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ebf uni1EBF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ec0 uni1EC0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ec1 uni1EC1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ec2 uni1EC2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ec3 uni1EC3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ec4 uni1EC4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ec5 uni1EC5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ec6 uni1EC6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1ec7 uni1EC7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1ec8 uni1EC8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1ec9 uni1EC9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1eca uni1ECA 2.2 +U+1ecb uni1ECB 2.2 +U+1ecc uni1ECC 2.2 +U+1ecd uni1ECD 2.2 +U+1ece uni1ECE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1ecf uni1ECF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1ed0 uni1ED0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ed1 uni1ED1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ed2 uni1ED2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ed3 uni1ED3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ed4 uni1ED4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ed5 uni1ED5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ed6 uni1ED6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ed7 uni1ED7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ed8 uni1ED8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1ed9 uni1ED9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+1eda uni1EDA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+1edb uni1EDB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+1edc uni1EDC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+1edd uni1EDD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+1ede uni1EDE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1edf uni1EDF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ee0 uni1EE0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+1ee1 uni1EE1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+1ee2 uni1EE2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+1ee3 uni1EE3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+1ee4 uni1EE4 2.2 +U+1ee5 uni1EE5 2.2 +U+1ee6 uni1EE6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1ee7 uni1EE7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1ee8 uni1EE8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+1ee9 uni1EE9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+1eea uni1EEA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+1eeb uni1EEB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+1eec uni1EEC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1eed uni1EED 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1eee uni1EEE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+1eef uni1EEF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+1ef0 uni1EF0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+1ef1 uni1EF1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+1ef2 Ygrave 1.2 +U+1ef3 ygrave 1.2 +U+1ef4 uni1EF4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ef5 uni1EF5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ef6 uni1EF6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1ef7 uni1EF7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans ExtraLight) +U+1ef8 uni1EF8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ef9 uni1EF9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1f00 uni1F00 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f01 uni1F01 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f02 uni1F02 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f03 uni1F03 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f04 uni1F04 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f05 uni1F05 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f06 uni1F06 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f07 uni1F07 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f08 uni1F08 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f09 uni1F09 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f0a uni1F0A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f0b uni1F0B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f0c uni1F0C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f0d uni1F0D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f0e uni1F0E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f0f uni1F0F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f10 uni1F10 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f11 uni1F11 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f12 uni1F12 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f13 uni1F13 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f14 uni1F14 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f15 uni1F15 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f18 uni1F18 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f19 uni1F19 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f1a uni1F1A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f1b uni1F1B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f1c uni1F1C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f1d uni1F1D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f20 uni1F20 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f21 uni1F21 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f22 uni1F22 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f23 uni1F23 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f24 uni1F24 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f25 uni1F25 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f26 uni1F26 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f27 uni1F27 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f28 uni1F28 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f29 uni1F29 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f2a uni1F2A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f2b uni1F2B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f2c uni1F2C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f2d uni1F2D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f2e uni1F2E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f2f uni1F2F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f30 uni1F30 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f31 uni1F31 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f32 uni1F32 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f33 uni1F33 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f34 uni1F34 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f35 uni1F35 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f36 uni1F36 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f37 uni1F37 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f38 uni1F38 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f39 uni1F39 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f3a uni1F3A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f3b uni1F3B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f3c uni1F3C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f3d uni1F3D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f3e uni1F3E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f3f uni1F3F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f40 uni1F40 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f41 uni1F41 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f42 uni1F42 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f43 uni1F43 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f44 uni1F44 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f45 uni1F45 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f48 uni1F48 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f49 uni1F49 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f4a uni1F4A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f4b uni1F4B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f4c uni1F4C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f4d uni1F4D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f50 uni1F50 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f51 uni1F51 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f52 uni1F52 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f53 uni1F53 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f54 uni1F54 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f55 uni1F55 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f56 uni1F56 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f57 uni1F57 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f59 uni1F59 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f5b uni1F5B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f5d uni1F5D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f5f uni1F5F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f60 uni1F60 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f61 uni1F61 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f62 uni1F62 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f63 uni1F63 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f64 uni1F64 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f65 uni1F65 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f66 uni1F66 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f67 uni1F67 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f68 uni1F68 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f69 uni1F69 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f6a uni1F6A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f6b uni1F6B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f6c uni1F6C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f6d uni1F6D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f6e uni1F6E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f6f uni1F6F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f70 uni1F70 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1f71 uni1F71 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1f72 uni1F72 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1f73 uni1F73 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1f74 uni1F74 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1f75 uni1F75 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1f76 uni1F76 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f77 uni1F77 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f78 uni1F78 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1f79 uni1F79 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1f7a uni1F7A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f7b uni1F7B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f7c uni1F7C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f7d uni1F7D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f80 uni1F80 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f81 uni1F81 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f82 uni1F82 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f83 uni1F83 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f84 uni1F84 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f85 uni1F85 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f86 uni1F86 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f87 uni1F87 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f88 uni1F88 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f89 uni1F89 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f8a uni1F8A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f8b uni1F8B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f8c uni1F8C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f8d uni1F8D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f8e uni1F8E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f8f uni1F8F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f90 uni1F90 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f91 uni1F91 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f92 uni1F92 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f93 uni1F93 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f94 uni1F94 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f95 uni1F95 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f96 uni1F96 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f97 uni1F97 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f98 uni1F98 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f99 uni1F99 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f9a uni1F9A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f9b uni1F9B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f9c uni1F9C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f9d uni1F9D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f9e uni1F9E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1f9f uni1F9F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fa0 uni1FA0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fa1 uni1FA1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fa2 uni1FA2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fa3 uni1FA3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fa4 uni1FA4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fa5 uni1FA5 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fa6 uni1FA6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fa7 uni1FA7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fa8 uni1FA8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fa9 uni1FA9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1faa uni1FAA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fab uni1FAB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fac uni1FAC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fad uni1FAD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fae uni1FAE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1faf uni1FAF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fb0 uni1FB0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fb1 uni1FB1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fb2 uni1FB2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fb3 uni1FB3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fb4 uni1FB4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fb6 uni1FB6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fb7 uni1FB7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fb8 uni1FB8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1fb9 uni1FB9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1fba uni1FBA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1fbb uni1FBB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1fbc uni1FBC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fbd uni1FBD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fbe uni1FBE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1fbf uni1FBF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fc0 uni1FC0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1fc1 uni1FC1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1fc2 uni1FC2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fc3 uni1FC3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fc4 uni1FC4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fc6 uni1FC6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1fc7 uni1FC7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fc8 uni1FC8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1fc9 uni1FC9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1fca uni1FCA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1fcb uni1FCB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1fcc uni1FCC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.10 (Sans ExtraLight) +U+1fcd uni1FCD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fce uni1FCE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fcf uni1FCF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fd0 uni1FD0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fd1 uni1FD1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fd2 uni1FD2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fd3 uni1FD3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fd6 uni1FD6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fd7 uni1FD7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fd8 uni1FD8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1fd9 uni1FD9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1fda uni1FDA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1fdb uni1FDB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1fdd uni1FDD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fde uni1FDE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fdf uni1FDF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fe0 uni1FE0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fe1 uni1FE1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fe2 uni1FE2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fe3 uni1FE3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fe4 uni1FE4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fe5 uni1FE5 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fe6 uni1FE6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fe7 uni1FE7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fe8 uni1FE8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1fe9 uni1FE9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1fea uni1FEA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1feb uni1FEB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1fec uni1FEC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1fed uni1FED 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1fee uni1FEE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1fef uni1FEF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ff2 uni1FF2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1ff3 uni1FF3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1ff4 uni1FF4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1ff6 uni1FF6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1ff7 uni1FF7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1ff8 uni1FF8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ff9 uni1FF9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ffa uni1FFA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1ffb uni1FFB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.10 (Sans ExtraLight) +U+1ffc uni1FFC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+1ffd uni1FFD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ffe uni1FFE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) +U+2000 uni2000 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2001 uni2001 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2002 uni2002 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2003 uni2003 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2004 uni2004 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2005 uni2005 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2006 uni2006 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2007 uni2007 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2008 uni2008 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2009 uni2009 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+200a uni200A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+200b uni200B 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.8 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) +U+200c afii61664 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.8 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) +U+200d afii301 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.8 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) +U+200e afii299 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.8 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) +U+200f afii300 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.8 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) +U+2010 uni2010 1.5 +U+2011 uni2011 1.5 +U+2012 figuredash 1.5 +U+2013 endash original +U+2014 emdash original +U+2015 afii00208 1.5 +U+2016 uni2016 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2017 underscoredbl 2.3 +U+2018 quoteleft original +U+2019 quoteright original +U+201a quotesinglbase original +U+201b quotereversed 2.3 +U+201c quotedblleft original +U+201d quotedblright original +U+201e quotedblbase original +U+201f uni201F 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) +U+2020 dagger original +U+2021 daggerdbl original +U+2022 bullet original +U+2023 uni2023 2.2 +U+2024 onedotenleader 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.9 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2025 twodotenleader 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.9 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2026 ellipsis original +U+2027 uni2027 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+202a uni202A 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+202b uni202B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+202c afii61573 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+202d afii61574 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+202e afii61575 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+202f uni202F 2.11 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2030 perthousand original +U+2031 uni2031 2.1 +U+2032 minute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2033 second 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2034 uni2034 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2035 uni2035 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2036 uni2036 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2037 uni2037 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2038 uni2038 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2039 guilsinglleft original +U+203a guilsinglright original +U+203b uni203B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+203c exclamdbl 2.0 +U+203d uni203D 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.11 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.14 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+203e uni203E 2.3 +U+203f uni203F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2040 uni2040 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2041 uni2041 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2042 uni2042 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2043 uni2043 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2044 fraction 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2045 uni2045 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2046 uni2046 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2047 uni2047 2.0 +U+2048 uni2048 2.0 +U+2049 uni2049 2.0 +U+204a uni204A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+204b uni204B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+204c uni204C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+204d uni204D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+204e uni204E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+204f uni204F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2050 uni2050 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2051 uni2051 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2052 uni2052 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2053 uni2053 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2054 uni2054 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2055 uni2055 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2056 uni2056 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2057 uni2057 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2058 uni2058 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2059 uni2059 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205a uni205A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205b uni205B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205c uni205C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205d uni205D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205e uni205E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205f uni205F 2.14 +U+2060 uni2060 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2061 uni2061 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2062 uni2062 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2063 uni2063 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+206a uni206A 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+206b uni206B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+206c uni206C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+206d uni206D 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+206e uni206E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+206f uni206F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2070 uni2070 2.2 +U+2071 uni2071 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2074 uni2074 2.2 +U+2075 uni2075 2.2 +U+2076 uni2076 2.2 +U+2077 uni2077 2.2 +U+2078 uni2078 2.2 +U+2079 uni2079 2.2 +U+207a uni207A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+207b uni207B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+207c uni207C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+207d uni207D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+207e uni207E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+207f uni207F 1.14 +U+2080 uni2080 2.4 +U+2081 uni2081 2.4 +U+2082 uni2082 2.4 +U+2083 uni2083 2.4 +U+2084 uni2084 2.4 +U+2085 uni2085 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2086 uni2086 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2087 uni2087 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2088 uni2088 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2089 uni2089 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+208a uni208A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+208b uni208B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+208c uni208C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+208d uni208D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+208e uni208E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2090 uni2090 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2091 uni2091 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2092 uni2092 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2093 uni2093 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2094 uni2094 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+20a0 uni20A0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20a1 colonmonetary 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20a2 uni20A2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20a3 franc 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20a4 lira 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20a5 uni20A5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20a6 uni20A6 2.3 +U+20a7 peseta 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20a8 uni20A8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20a9 uni20A9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20aa afii57636 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20ab dong 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+20ac Euro original +U+20ad uni20AD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20ae uni20AE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20af uni20AF 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+20b0 uni20B0 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+20b1 uni20B1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.14 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+20b2 uni20B2 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+20b3 uni20B3 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+20b4 uni20B4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+20b5 uni20B5 2.2 +U+20d0 uni20D0 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+20d1 uni20D1 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+20d6 uni20D6 2.8 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20d7 uni20D7 2.8 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2100 uni2100 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2101 uni2101 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2102 uni2102 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2103 uni2103 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+2104 uni2104 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2105 afii61248 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2106 uni2106 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2107 uni2107 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2108 uni2108 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2109 uni2109 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+210b uni210B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+210c uni210C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+210d uni210D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+210e uni210E 2.5 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+210f uni210F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2110 uni2110 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2111 Ifraktur 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2112 uni2112 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2113 afii61289 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2114 uni2114 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2115 uni2115 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2116 afii61352 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2117 uni2117 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2118 weierstrass 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2119 uni2119 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+211a uni211A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+211b uni211B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+211c Rfraktur 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+211d uni211D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+211e prescription 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+211f uni211F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2120 uni2120 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2121 uni2121 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2122 trademark original +U+2123 uni2123 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2124 uni2124 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2125 uni2125 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2126 uni2126 2.2 +U+2127 uni2127 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+2128 uni2128 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2129 uni2129 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+212a uni212A 2.2 +U+212b uni212B 2.2 +U+212c uni212C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+212d uni212D 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+212e estimated 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+212f uni212F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2130 uni2130 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2131 uni2131 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2132 uni2132 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+2133 uni2133 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2134 uni2134 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2135 aleph 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2136 uni2136 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2137 uni2137 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2138 uni2138 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2139 uni2139 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+213a uni213A 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+213b uni213B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+213c uni213C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+213d uni213D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+213e uni213E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+213f uni213F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2140 uni2140 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2141 uni2141 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2142 uni2142 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2143 uni2143 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2144 uni2144 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2145 uni2145 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2146 uni2146 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2147 uni2147 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2148 uni2148 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2149 uni2149 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+214b uni214B 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+214e uni214E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2153 onethird 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2154 twothirds 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2155 uni2155 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2156 uni2156 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2157 uni2157 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2158 uni2158 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2159 uni2159 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+215a uni215A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+215b oneeighth 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+215c threeeighths 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+215d fiveeighths 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+215e seveneighths 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+215f uni215F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2160 uni2160 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+2161 uni2161 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+2162 uni2162 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+2163 uni2163 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+2164 uni2164 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+2165 uni2165 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+2166 uni2166 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+2167 uni2167 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+2168 uni2168 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+2169 uni2169 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+216a uni216A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+216b uni216B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+216c uni216C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+216d uni216D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+216e uni216E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+216f uni216F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+2170 uni2170 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+2171 uni2171 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+2172 uni2172 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+2173 uni2173 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+2174 uni2174 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+2175 uni2175 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+2176 uni2176 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+2177 uni2177 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+2178 uni2178 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+2179 uni2179 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+217a uni217A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+217b uni217B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+217c uni217C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+217d uni217D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+217e uni217E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+217f uni217F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+2180 uni2180 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+2181 uni2181 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2182 uni2182 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2183 uni2183 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+2184 uni2184 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+2190 arrowleft 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2191 arrowup 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2192 arrowright 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2193 arrowdown 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2194 arrowboth 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2195 arrowupdn 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2196 uni2196 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2197 uni2197 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2198 uni2198 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2199 uni2199 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+219a uni219A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+219b uni219B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+219c uni219C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+219d uni219D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+219e uni219E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+219f uni219F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21a0 uni21A0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21a1 uni21A1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21a2 uni21A2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21a3 uni21A3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21a4 uni21A4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21a5 uni21A5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21a6 uni21A6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21a7 uni21A7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21a8 arrowupdnbse 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21a9 uni21A9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21aa uni21AA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21ab uni21AB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21ac uni21AC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21ad uni21AD 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21ae uni21AE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21af uni21AF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21b0 uni21B0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21b1 uni21B1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21b2 uni21B2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21b3 uni21B3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21b4 uni21B4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21b5 carriagereturn 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21b6 uni21B6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21b7 uni21B7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21b8 uni21B8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21b9 uni21B9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21ba uni21BA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21bb uni21BB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21bc uni21BC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21bd uni21BD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21be uni21BE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21bf uni21BF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21c0 uni21C0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21c1 uni21C1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21c2 uni21C2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21c3 uni21C3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21c4 uni21C4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21c5 uni21C5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21c6 uni21C6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21c7 uni21C7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21c8 uni21C8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21c9 uni21C9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21ca uni21CA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21cb uni21CB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21cc uni21CC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21cd uni21CD 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21ce uni21CE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21cf uni21CF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21d0 arrowdblleft 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21d1 arrowdblup 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21d2 arrowdblright 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21d3 arrowdbldown 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21d4 arrowdblboth 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21d5 uni21D5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21d6 uni21D6 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21d7 uni21D7 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21d8 uni21D8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21d9 uni21D9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21da uni21DA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21db uni21DB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21dc uni21DC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21dd uni21DD 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21de uni21DE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21df uni21DF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21e0 uni21E0 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21e1 uni21E1 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21e2 uni21E2 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21e3 uni21E3 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21e4 uni21E4 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21e5 uni21E5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21e6 uni21E6 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21e7 uni21E7 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21e8 uni21E8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21e9 uni21E9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21ea uni21EA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21eb uni21EB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21ec uni21EC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21ed uni21ED 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21ee uni21EE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21ef uni21EF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21f0 uni21F0 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21f1 uni21F1 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21f2 uni21F2 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21f3 uni21F3 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21f4 uni21F4 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21f5 uni21F5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21f6 uni21F6 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21f7 uni21F7 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21f8 uni21F8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21f9 uni21F9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21fa uni21FA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21fb uni21FB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21fc uni21FC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21fd uni21FD 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21fe uni21FE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+21ff uni21FF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2200 universal 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+2201 uni2201 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2202 partialdiff original +U+2203 existential 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+2204 uni2204 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2205 emptyset 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2206 Delta original +U+2207 gradient 2.1 +U+2208 element 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2209 notelement 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+220a uni220A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+220b suchthat 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+220c uni220C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+220d uni220D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+220e uni220E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+220f product original +U+2210 uni2210 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2211 summation original +U+2212 minus original +U+2213 uni2213 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2214 uni2214 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2215 fraction original +U+2216 uni2216 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2217 asteriskmath 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2218 uni2218 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2219 periodcentered original +U+221a radical original +U+221b uni221B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+221c uni221C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+221d proportional 2.1 +U+221e infinity original +U+221f orthogonal 2.1 +U+2220 angle 2.3 +U+2221 uni2221 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2222 uni2222 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2223 uni2223 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2224 uni2224 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2225 uni2225 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2226 uni2226 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2227 logicaland 2.1 +U+2228 logicalor 2.1 +U+2229 intersection 2.1 +U+222a union 2.1 +U+222b integral original +U+222c uni222C 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+222d uni222D 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+222e uni222E 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+222f uni222F 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2230 uni2230 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2231 uni2231 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2232 uni2232 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2233 uni2233 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2234 therefore 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2235 uni2235 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2236 uni2236 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2237 uni2237 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2238 uni2238 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2239 uni2239 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+223a uni223A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+223b uni223B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+223c similar 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+223d uni223D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+223e uni223E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+223f uni223F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2240 uni2240 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2241 uni2241 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2242 uni2242 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2243 uni2243 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2244 uni2244 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2245 congruent 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2246 uni2246 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2247 uni2247 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2248 approxequal original +U+2249 uni2249 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+224a uni224A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+224b uni224B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+224c uni224C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+224d uni224D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+224e uni224E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+224f uni224F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2250 uni2250 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2251 uni2251 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2252 uni2252 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2253 uni2253 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2254 uni2254 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2255 uni2255 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2256 uni2256 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2257 uni2257 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2258 uni2258 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2259 uni2259 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+225a uni225A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+225b uni225B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+225c uni225C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+225d uni225D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+225e uni225E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+225f uni225F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2260 notequal original +U+2261 equivalence 2.1 +U+2262 uni2262 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2263 uni2263 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2264 lessequal original +U+2265 greaterequal original +U+2266 uni2266 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2267 uni2267 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2268 uni2268 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2269 uni2269 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+226a uni226A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+226b uni226B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+226c uni226C 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+226d uni226D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+226e uni226E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+226f uni226F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2270 uni2270 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2271 uni2271 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2272 uni2272 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2273 uni2273 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2274 uni2274 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2275 uni2275 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2276 uni2276 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2277 uni2277 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2278 uni2278 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2279 uni2279 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+227a uni227A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+227b uni227B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+227c uni227C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+227d uni227D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+227e uni227E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+227f uni227F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2280 uni2280 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2281 uni2281 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2282 propersubset 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2283 propersuperset 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2284 notsubset 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2285 uni2285 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2286 reflexsubset 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2287 reflexsuperset 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2288 uni2288 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2289 uni2289 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+228a uni228A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+228b uni228B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+228c uni228C 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+228d uni228D 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+228e uni228E 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+228f uni228F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2290 uni2290 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2291 uni2291 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2292 uni2292 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2293 uni2293 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2294 uni2294 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2295 circleplus 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2296 uni2296 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2297 circlemultiply 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2298 uni2298 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2299 uni2299 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+229a uni229A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+229b uni229B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+229c uni229C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+229d uni229D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+229e uni229E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+229f uni229F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+22a0 uni22A0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+22a1 uni22A1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+22a2 uni22A2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22a3 uni22A3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22a4 uni22A4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22a5 perpendicular 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22a6 uni22A6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22a7 uni22A7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22a8 uni22A8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22a9 uni22A9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22aa uni22AA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ab uni22AB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ac uni22AC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ad uni22AD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ae uni22AE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22af uni22AF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b2 uni22B2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b3 uni22B3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b4 uni22B4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b5 uni22B5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b6 uni22B6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b7 uni22B7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b8 uni22B8 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b9 uni22B9 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ba uni22BA 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22bb uni22BB 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22bc uni22BC 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22bd uni22BD 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c0 uni22C0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c1 uni22C1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c2 uni22C2 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c3 uni22C3 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c4 uni22C4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c5 dotmath 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+22c6 uni22C6 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+22c8 uni22C8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c9 uni22C9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ca uni22CA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22cb uni22CB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22cc uni22CC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22cd uni22CD 2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+22d6 uni22D6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d7 uni22D7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d8 uni22D8 2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+22d9 uni22D9 2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+22da uni22DA 2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+22db uni22DB 2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+22dc uni22DC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22dd uni22DD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22de uni22DE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22df uni22DF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e0 uni22E0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e1 uni22E1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e2 uni22E2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e3 uni22E3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e4 uni22E4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e5 uni22E5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e6 uni22E6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e7 uni22E7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e8 uni22E8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e9 uni22E9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22ea uni22EA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22eb uni22EB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ec uni22EC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ed uni22ED 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ef uni22EF 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+22f2 uni22F2 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f3 uni22F3 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f4 uni22F4 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f5 uni22F5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f6 uni22F6 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f7 uni22F7 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f8 uni22F8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f9 uni22F9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22fa uni22FA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22fb uni22FB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22fc uni22FC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22fd uni22FD 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22fe uni22FE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ff uni22FF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2300 uni2300 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2301 uni2301 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2302 house 1.14 +U+2303 uni2303 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2304 uni2304 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2305 uni2305 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2306 uni2306 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2308 uni2308 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) +U+2309 uni2309 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) +U+230a uni230A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) +U+230b uni230B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) +U+230c uni230C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+230d uni230D 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+230e uni230E 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+230f uni230F 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2310 revlogicalnot 1.14 +U+2311 uni2311 1.15 +U+2312 uni2312 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2313 uni2313 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2314 uni2314 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2315 uni2315 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2318 uni2318 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2319 uni2319 1.14 +U+231c uni231C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+231d uni231D 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+231e uni231E 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+231f uni231F 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2320 integraltp 2.3 +U+2321 integralbt 2.3 +U+2325 uni2325 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2326 uni2326 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2327 uni2327 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2328 uni2328 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2329 angleleft 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) +U+232a angleright 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) +U+232b uni232B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2335 uni2335 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2337 uni2337 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2338 uni2338 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2339 uni2339 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233a uni233A 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233b uni233B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233c uni233C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233d uni233D 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233e uni233E 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2341 uni2341 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2342 uni2342 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2343 uni2343 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2344 uni2344 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2347 uni2347 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2348 uni2348 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2349 uni2349 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+234b uni234B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+234c uni234C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+234d uni234D 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2350 uni2350 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2352 uni2352 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2353 uni2353 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2354 uni2354 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2357 uni2357 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2358 uni2358 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2359 uni2359 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235a uni235A 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235b uni235B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235c uni235C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235e uni235E 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235f uni235F 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2360 uni2360 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2363 uni2363 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2364 uni2364 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2365 uni2365 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2368 uni2368 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2369 uni2369 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236b uni236B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236c uni236C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236d uni236D 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236e uni236E 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236f uni236F 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2370 uni2370 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2373 uni2373 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2374 uni2374 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2375 uni2375 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2376 uni2376 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2377 uni2377 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2378 uni2378 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2379 uni2379 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+237a uni237A 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+237d uni237D 1.15 +U+2380 uni2380 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2381 uni2381 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2382 uni2382 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2383 uni2383 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2388 uni2388 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2389 uni2389 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+238a uni238A 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+238b uni238B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2395 uni2395 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+239b uni239B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+239c uni239C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+239d uni239D 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+239e uni239E 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+239f uni239F 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23a0 uni23A0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23a1 uni23A1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23a2 uni23A2 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23a3 uni23A3 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23a4 uni23A4 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23a5 uni23A5 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23a6 uni23A6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23a7 uni23A7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23a8 uni23A8 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23a9 uni23A9 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23aa uni23AA 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23ab uni23AB 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23ac uni23AC 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23ad uni23AD 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23ae uni23AE 2.3 +U+23ce uni23CE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23cf uni23CF 2.3 +U+2422 uni2422 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2423 uni2423 1.6 +U+2460 uni2460 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2461 uni2461 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2462 uni2462 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2463 uni2463 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2464 uni2464 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2465 uni2465 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2466 uni2466 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2467 uni2467 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2468 uni2468 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2469 uni2469 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2500 SF100000 1.12 (Sans Mono, Sans Mono Oblique) +U+2501 uni2501 1.12 (Sans Mono, Sans Mono Oblique) +U+2502 SF110000 1.12 (Sans Mono, Sans Mono Oblique) +U+2503 uni2503 1.12 (Sans Mono, Sans Mono Oblique) +U+2504 uni2504 1.12 (Sans Mono, Sans Mono Oblique) +U+2505 uni2505 1.12 (Sans Mono, Sans Mono Oblique) +U+2506 uni2506 1.12 (Sans Mono, Sans Mono Oblique) +U+2507 uni2507 1.12 (Sans Mono, Sans Mono Oblique) +U+2508 uni2508 1.12 (Sans Mono, Sans Mono Oblique) +U+2509 uni2509 1.12 (Sans Mono, Sans Mono Oblique) +U+250a uni250A 1.12 (Sans Mono, Sans Mono Oblique) +U+250b uni250B 1.12 (Sans Mono, Sans Mono Oblique) +U+250c SF010000 1.12 (Sans Mono, Sans Mono Oblique) +U+250d uni250D 1.12 (Sans Mono, Sans Mono Oblique) +U+250e uni250E 1.12 (Sans Mono, Sans Mono Oblique) +U+250f uni250F 1.12 (Sans Mono, Sans Mono Oblique) +U+2510 SF030000 1.12 (Sans Mono, Sans Mono Oblique) +U+2511 uni2511 1.12 (Sans Mono, Sans Mono Oblique) +U+2512 uni2512 1.12 (Sans Mono, Sans Mono Oblique) +U+2513 uni2513 1.12 (Sans Mono, Sans Mono Oblique) +U+2514 SF020000 1.12 (Sans Mono, Sans Mono Oblique) +U+2515 uni2515 1.12 (Sans Mono, Sans Mono Oblique) +U+2516 uni2516 1.12 (Sans Mono, Sans Mono Oblique) +U+2517 uni2517 1.12 (Sans Mono, Sans Mono Oblique) +U+2518 SF040000 1.12 (Sans Mono, Sans Mono Oblique) +U+2519 uni2519 1.12 (Sans Mono, Sans Mono Oblique) +U+251a uni251A 1.12 (Sans Mono, Sans Mono Oblique) +U+251b uni251B 1.12 (Sans Mono, Sans Mono Oblique) +U+251c SF080000 1.12 (Sans Mono, Sans Mono Oblique) +U+251d uni251D 1.12 (Sans Mono, Sans Mono Oblique) +U+251e uni251E 1.12 (Sans Mono, Sans Mono Oblique) +U+251f uni251F 1.12 (Sans Mono, Sans Mono Oblique) +U+2520 uni2520 1.12 (Sans Mono, Sans Mono Oblique) +U+2521 uni2521 1.12 (Sans Mono, Sans Mono Oblique) +U+2522 uni2522 1.12 (Sans Mono, Sans Mono Oblique) +U+2523 uni2523 1.12 (Sans Mono, Sans Mono Oblique) +U+2524 SF090000 1.12 (Sans Mono, Sans Mono Oblique) +U+2525 uni2525 1.12 (Sans Mono, Sans Mono Oblique) +U+2526 uni2526 1.12 (Sans Mono, Sans Mono Oblique) +U+2527 uni2527 1.12 (Sans Mono, Sans Mono Oblique) +U+2528 uni2528 1.12 (Sans Mono, Sans Mono Oblique) +U+2529 uni2529 1.12 (Sans Mono, Sans Mono Oblique) +U+252a uni252A 1.12 (Sans Mono, Sans Mono Oblique) +U+252b uni252B 1.12 (Sans Mono, Sans Mono Oblique) +U+252c SF060000 1.12 (Sans Mono, Sans Mono Oblique) +U+252d uni252D 1.12 (Sans Mono, Sans Mono Oblique) +U+252e uni252E 1.12 (Sans Mono, Sans Mono Oblique) +U+252f uni252F 1.12 (Sans Mono, Sans Mono Oblique) +U+2530 uni2530 1.12 (Sans Mono, Sans Mono Oblique) +U+2531 uni2531 1.12 (Sans Mono, Sans Mono Oblique) +U+2532 uni2532 1.12 (Sans Mono, Sans Mono Oblique) +U+2533 uni2533 1.12 (Sans Mono, Sans Mono Oblique) +U+2534 SF070000 1.12 (Sans Mono, Sans Mono Oblique) +U+2535 uni2535 1.12 (Sans Mono, Sans Mono Oblique) +U+2536 uni2536 1.12 (Sans Mono, Sans Mono Oblique) +U+2537 uni2537 1.12 (Sans Mono, Sans Mono Oblique) +U+2538 uni2538 1.12 (Sans Mono, Sans Mono Oblique) +U+2539 uni2539 1.12 (Sans Mono, Sans Mono Oblique) +U+253a uni253A 1.12 (Sans Mono, Sans Mono Oblique) +U+253b uni253B 1.12 (Sans Mono, Sans Mono Oblique) +U+253c SF050000 1.12 (Sans Mono, Sans Mono Oblique) +U+253d uni253D 1.12 (Sans Mono, Sans Mono Oblique) +U+253e uni253E 1.12 (Sans Mono, Sans Mono Oblique) +U+253f uni253F 1.12 (Sans Mono, Sans Mono Oblique) +U+2540 uni2540 1.12 (Sans Mono, Sans Mono Oblique) +U+2541 uni2541 1.12 (Sans Mono, Sans Mono Oblique) +U+2542 uni2542 1.12 (Sans Mono, Sans Mono Oblique) +U+2543 uni2543 1.12 (Sans Mono, Sans Mono Oblique) +U+2544 uni2544 1.12 (Sans Mono, Sans Mono Oblique) +U+2545 uni2545 1.12 (Sans Mono, Sans Mono Oblique) +U+2546 uni2546 1.12 (Sans Mono, Sans Mono Oblique) +U+2547 uni2547 1.12 (Sans Mono, Sans Mono Oblique) +U+2548 uni2548 1.12 (Sans Mono, Sans Mono Oblique) +U+2549 uni2549 1.12 (Sans Mono, Sans Mono Oblique) +U+254a uni254A 1.12 (Sans Mono, Sans Mono Oblique) +U+254b uni254B 1.12 (Sans Mono, Sans Mono Oblique) +U+254c uni254C 1.12 (Sans Mono, Sans Mono Oblique) +U+254d uni254D 1.12 (Sans Mono, Sans Mono Oblique) +U+254e uni254E 1.12 (Sans Mono, Sans Mono Oblique) +U+254f uni254F 1.12 (Sans Mono, Sans Mono Oblique) +U+2550 SF430000 1.12 (Sans Mono, Sans Mono Oblique) +U+2551 SF240000 1.12 (Sans Mono, Sans Mono Oblique) +U+2552 SF510000 1.12 (Sans Mono, Sans Mono Oblique) +U+2553 SF520000 1.12 (Sans Mono, Sans Mono Oblique) +U+2554 SF390000 1.12 (Sans Mono, Sans Mono Oblique) +U+2555 SF220000 1.12 (Sans Mono, Sans Mono Oblique) +U+2556 SF210000 1.12 (Sans Mono, Sans Mono Oblique) +U+2557 SF250000 1.12 (Sans Mono, Sans Mono Oblique) +U+2558 SF500000 1.12 (Sans Mono, Sans Mono Oblique) +U+2559 SF490000 1.12 (Sans Mono, Sans Mono Oblique) +U+255a SF380000 1.12 (Sans Mono, Sans Mono Oblique) +U+255b SF280000 1.12 (Sans Mono, Sans Mono Oblique) +U+255c SF270000 1.12 (Sans Mono, Sans Mono Oblique) +U+255d SF260000 1.12 (Sans Mono, Sans Mono Oblique) +U+255e SF360000 1.12 (Sans Mono, Sans Mono Oblique) +U+255f SF370000 1.12 (Sans Mono, Sans Mono Oblique) +U+2560 SF420000 1.12 (Sans Mono, Sans Mono Oblique) +U+2561 SF190000 1.12 (Sans Mono, Sans Mono Oblique) +U+2562 SF200000 1.12 (Sans Mono, Sans Mono Oblique) +U+2563 SF230000 1.12 (Sans Mono, Sans Mono Oblique) +U+2564 SF470000 1.12 (Sans Mono, Sans Mono Oblique) +U+2565 SF480000 1.12 (Sans Mono, Sans Mono Oblique) +U+2566 SF410000 1.12 (Sans Mono, Sans Mono Oblique) +U+2567 SF450000 1.12 (Sans Mono, Sans Mono Oblique) +U+2568 SF460000 1.12 (Sans Mono, Sans Mono Oblique) +U+2569 SF400000 1.12 (Sans Mono, Sans Mono Oblique) +U+256a SF540000 1.12 (Sans Mono, Sans Mono Oblique) +U+256b SF530000 1.12 (Sans Mono, Sans Mono Oblique) +U+256c SF440000 1.12 (Sans Mono, Sans Mono Oblique) +U+256d uni256D 1.12 (Sans Mono, Sans Mono Oblique) +U+256e uni256E 1.12 (Sans Mono, Sans Mono Oblique) +U+256f uni256F 1.12 (Sans Mono, Sans Mono Oblique) +U+2570 uni2570 1.12 (Sans Mono, Sans Mono Oblique) +U+2571 uni2571 1.12 (Sans Mono, Sans Mono Oblique) +U+2572 uni2572 1.12 (Sans Mono, Sans Mono Oblique) +U+2573 uni2573 1.12 (Sans Mono, Sans Mono Oblique) +U+2574 uni2574 1.12 (Sans Mono, Sans Mono Oblique) +U+2575 uni2575 1.12 (Sans Mono, Sans Mono Oblique) +U+2576 uni2576 1.12 (Sans Mono, Sans Mono Oblique) +U+2577 uni2577 1.12 (Sans Mono, Sans Mono Oblique) +U+2578 uni2578 1.12 (Sans Mono, Sans Mono Oblique) +U+2579 uni2579 1.12 (Sans Mono, Sans Mono Oblique) +U+257a uni257A 1.12 (Sans Mono, Sans Mono Oblique) +U+257b uni257B 1.12 (Sans Mono, Sans Mono Oblique) +U+257c uni257C 1.12 (Sans Mono, Sans Mono Oblique) +U+257d uni257D 1.12 (Sans Mono, Sans Mono Oblique) +U+257e uni257E 1.12 (Sans Mono, Sans Mono Oblique) +U+257f uni257F 1.12 (Sans Mono, Sans Mono Oblique) +U+2580 upblock 1.14 +U+2581 uni2581 1.14 +U+2582 uni2582 1.14 +U+2583 uni2583 1.14 +U+2584 dnblock 1.14 +U+2585 uni2585 1.14 +U+2586 uni2586 1.14 +U+2587 uni2587 1.14 +U+2588 block 1.14 +U+2589 uni2589 1.14 +U+258a uni258A 1.14 +U+258b uni258B 1.14 +U+258c lfblock 1.14 +U+258d uni258D 1.14 +U+258e uni258E 1.14 +U+258f uni258F 1.14 +U+2590 rtblock 1.14 +U+2591 ltshade 1.15 +U+2592 shade 1.15 +U+2593 dkshade 1.15 +U+2594 uni2594 1.14 +U+2595 uni2595 1.14 +U+2596 uni2596 1.14 +U+2597 uni2597 1.14 +U+2598 uni2598 1.14 +U+2599 uni2599 1.14 +U+259a uni259A 1.14 +U+259b uni259B 1.14 +U+259c uni259C 1.14 +U+259d uni259D 1.14 +U+259e uni259E 1.14 +U+259f uni259F 1.14 +U+25a0 filledbox 2.3 +U+25a1 H22073 2.3 +U+25a2 uni25A2 2.3 +U+25a3 uni25A3 2.3 +U+25a4 uni25A4 2.3 +U+25a5 uni25A5 2.3 +U+25a6 uni25A6 2.3 +U+25a7 uni25A7 2.3 +U+25a8 uni25A8 2.3 +U+25a9 uni25A9 2.3 +U+25aa H18543 2.3 +U+25ab H18551 2.3 +U+25ac filledrect 2.3 +U+25ad uni25AD 2.3 +U+25ae uni25AE 2.3 +U+25af uni25AF 2.3 +U+25b0 uni25B0 2.3 +U+25b1 uni25B1 2.3 +U+25b2 triagup 2.3 +U+25b3 uni25B3 2.3 +U+25b4 uni25B4 2.3 +U+25b5 uni25B5 2.3 +U+25b6 uni25B6 2.3 +U+25b7 uni25B7 2.3 +U+25b8 uni25B8 2.3 +U+25b9 uni25B9 2.3 +U+25ba triagrt 2.3 +U+25bb uni25BB 2.3 +U+25bc triagdn 2.3 +U+25bd uni25BD 2.3 +U+25be uni25BE 2.3 +U+25bf uni25BF 2.3 +U+25c0 uni25C0 2.3 +U+25c1 uni25C1 2.3 +U+25c2 uni25C2 2.3 +U+25c3 uni25C3 2.3 +U+25c4 triaglf 2.3 +U+25c5 uni25C5 2.3 +U+25c6 uni25C6 2.3 +U+25c7 uni25C7 2.3 +U+25c8 uni25C8 2.3 +U+25c9 uni25C9 2.3 +U+25ca lozenge original +U+25cb circle 2.3 +U+25cc uni25CC 2.3 +U+25cd uni25CD 2.3 +U+25ce uni25CE 2.3 +U+25cf H18533 2.3 +U+25d0 uni25D0 2.3 +U+25d1 uni25D1 2.3 +U+25d2 uni25D2 2.3 +U+25d3 uni25D3 2.3 +U+25d4 uni25D4 2.3 +U+25d5 uni25D5 2.3 +U+25d6 uni25D6 2.3 +U+25d7 uni25D7 2.3 +U+25d8 invbullet 2.2 +U+25d9 invcircle 2.3 +U+25da uni25DA 2.3 +U+25db uni25DB 2.3 +U+25dc uni25DC 2.3 +U+25dd uni25DD 2.3 +U+25de uni25DE 2.3 +U+25df uni25DF 2.3 +U+25e0 uni25E0 2.3 +U+25e1 uni25E1 2.3 +U+25e2 uni25E2 2.3 +U+25e3 uni25E3 2.3 +U+25e4 uni25E4 2.3 +U+25e5 uni25E5 2.3 +U+25e6 openbullet 2.2 +U+25e7 uni25E7 2.3 +U+25e8 uni25E8 2.3 +U+25e9 uni25E9 2.3 +U+25ea uni25EA 2.3 +U+25eb uni25EB 2.3 +U+25ec uni25EC 2.3 +U+25ed uni25ED 2.3 +U+25ee uni25EE 2.3 +U+25ef uni25EF 2.3 +U+25f0 uni25F0 2.3 +U+25f1 uni25F1 2.3 +U+25f2 uni25F2 2.3 +U+25f3 uni25F3 2.3 +U+25f4 uni25F4 2.3 +U+25f5 uni25F5 2.3 +U+25f6 uni25F6 2.3 +U+25f7 uni25F7 2.3 +U+25f8 uni25F8 2.3 +U+25f9 uni25F9 2.3 +U+25fa uni25FA 2.3 +U+25fb uni25FB 2.3 +U+25fc uni25FC 2.3 +U+25fd uni25FD 2.3 +U+25fe uni25FE 2.3 +U+25ff uni25FF 2.3 +U+2600 uni2600 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2601 uni2601 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2602 uni2602 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2603 uni2603 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2604 uni2604 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2605 uni2605 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2606 uni2606 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2607 uni2607 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2608 uni2608 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2609 uni2609 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260a uni260A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260b uni260B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260c uni260C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260d uni260D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260e uni260E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260f uni260F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2610 uni2610 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2611 uni2611 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2612 uni2612 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2613 uni2613 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2614 uni2614 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2615 uni2615 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2616 uni2616 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2617 uni2617 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2618 uni2618 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2619 uni2619 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261a uni261A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261b uni261B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261c uni261C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261d uni261D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261e uni261E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261f uni261F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2620 uni2620 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2621 uni2621 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2622 uni2622 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2623 uni2623 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2624 uni2624 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2625 uni2625 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2626 uni2626 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2627 uni2627 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2628 uni2628 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2629 uni2629 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262a uni262A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262b uni262B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262c uni262C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262d uni262D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262e uni262E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262f uni262F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2630 uni2630 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2631 uni2631 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2632 uni2632 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2633 uni2633 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2634 uni2634 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2635 uni2635 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2636 uni2636 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2637 uni2637 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2638 uni2638 1.15 +U+2639 uni2639 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+263a smileface 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+263b invsmileface 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+263c sun 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+263d uni263D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+263e uni263E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+263f uni263F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2640 female 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2641 uni2641 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2642 male 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2643 uni2643 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2644 uni2644 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2645 uni2645 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2646 uni2646 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2647 uni2647 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2648 uni2648 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2649 uni2649 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264a uni264A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264b uni264B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264c uni264C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264d uni264D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264e uni264E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264f uni264F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2650 uni2650 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2651 uni2651 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2652 uni2652 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2653 uni2653 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2654 uni2654 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2655 uni2655 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2656 uni2656 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2657 uni2657 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2658 uni2658 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2659 uni2659 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265a uni265A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265b uni265B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265c uni265C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265d uni265D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265e uni265E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265f uni265F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2660 spade 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2661 uni2661 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2662 uni2662 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2663 club 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2664 uni2664 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2665 heart 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2666 diamond 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2667 uni2667 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2668 uni2668 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2669 uni2669 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+266a musicalnote 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+266b musicalnotedbl 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+266c uni266C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+266d uni266D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+266e uni266E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+266f uni266F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2670 uni2670 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2671 uni2671 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2672 uni2672 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2673 uni2673 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2674 uni2674 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2675 uni2675 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2676 uni2676 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2677 uni2677 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2678 uni2678 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2679 uni2679 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267a uni267A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267b uni267B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267c uni267C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267d uni267D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267e uni267E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267f uni267F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2680 uni2680 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2681 uni2681 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2682 uni2682 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2683 uni2683 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2684 uni2684 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2685 uni2685 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2686 uni2686 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2687 uni2687 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2688 uni2688 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2689 uni2689 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+268a uni268A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+268b uni268B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+268c uni268C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+268d uni268D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+268e uni268E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+268f uni268F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2690 uni2690 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2691 uni2691 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2692 uni2692 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2693 uni2693 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2694 uni2694 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2695 uni2695 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2696 uni2696 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2697 uni2697 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2698 uni2698 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2699 uni2699 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+269a uni269A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+269b uni269B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+269c uni269C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+26a0 uni26A0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+26a1 uni26A1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+26a2 uni26A2 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a3 uni26A3 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a4 uni26A4 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a5 uni26A5 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a6 uni26A6 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a7 uni26A7 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a8 uni26A8 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a9 uni26A9 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26aa uni26AA 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26ab uni26AB 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26ac uni26AC 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26ad uni26AD 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26ae uni26AE 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26af uni26AF 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26b0 uni26B0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+26b1 uni26B1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+26b2 uni26B2 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2701 uni2701 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2702 uni2702 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2703 uni2703 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2704 uni2704 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2706 uni2706 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2707 uni2707 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2708 uni2708 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2709 uni2709 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+270c uni270C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+270d uni270D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+270e uni270E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+270f uni270F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2710 uni2710 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2711 uni2711 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2712 uni2712 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2713 uni2713 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2714 uni2714 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2715 uni2715 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2716 uni2716 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2717 uni2717 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2718 uni2718 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2719 uni2719 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271a uni271A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271b uni271B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271c uni271C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271d uni271D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271e uni271E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271f uni271F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2720 uni2720 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2721 uni2721 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2722 uni2722 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2723 uni2723 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2724 uni2724 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2725 uni2725 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2726 uni2726 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2727 uni2727 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2729 uni2729 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272a uni272A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272b uni272B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272c uni272C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272d uni272D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272e uni272E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272f uni272F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2730 uni2730 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2731 uni2731 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2732 uni2732 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2733 uni2733 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2734 uni2734 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2735 uni2735 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2736 uni2736 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2737 uni2737 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2738 uni2738 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2739 uni2739 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273a uni273A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273b uni273B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273c uni273C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273d uni273D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273e uni273E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273f uni273F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2740 uni2740 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2741 uni2741 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2742 uni2742 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2743 uni2743 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2744 uni2744 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2745 uni2745 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2746 uni2746 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2747 uni2747 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2748 uni2748 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2749 uni2749 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+274a uni274A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+274b uni274B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+274d uni274D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+274f uni274F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2750 uni2750 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2751 uni2751 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2752 uni2752 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2756 uni2756 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2758 uni2758 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2759 uni2759 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+275a uni275A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+275b uni275B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+275c uni275C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+275d uni275D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+275e uni275E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2761 uni2761 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2762 uni2762 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2763 uni2763 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2764 uni2764 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2765 uni2765 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2766 uni2766 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2767 uni2767 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2768 uni2768 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2769 uni2769 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276a uni276A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276b uni276B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276c uni276C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276d uni276D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276e uni276E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276f uni276F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2770 uni2770 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2771 uni2771 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2772 uni2772 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2773 uni2773 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2774 uni2774 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2775 uni2775 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2776 uni2776 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2777 uni2777 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2778 uni2778 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2779 uni2779 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277a uni277A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277b uni277B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277c uni277C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277d uni277D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277e uni277E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277f uni277F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2780 uni2780 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2781 uni2781 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2782 uni2782 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2783 uni2783 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2784 uni2784 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2785 uni2785 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2786 uni2786 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2787 uni2787 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2788 uni2788 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2789 uni2789 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278a uni278A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278b uni278B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278c uni278C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278d uni278D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278e uni278E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278f uni278F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2790 uni2790 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2791 uni2791 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2792 uni2792 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2793 uni2793 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2794 uni2794 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2798 uni2798 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2799 uni2799 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279a uni279A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279b uni279B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279c uni279C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279d uni279D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279e uni279E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279f uni279F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a0 uni27A0 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a1 uni27A1 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a2 uni27A2 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a3 uni27A3 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a4 uni27A4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a5 uni27A5 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a6 uni27A6 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a7 uni27A7 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a8 uni27A8 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a9 uni27A9 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27aa uni27AA 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27ab uni27AB 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27ac uni27AC 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27ad uni27AD 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27ae uni27AE 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27af uni27AF 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b1 uni27B1 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b2 uni27B2 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b3 uni27B3 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b4 uni27B4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b5 uni27B5 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b6 uni27B6 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b7 uni27B7 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b8 uni27B8 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b9 uni27B9 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27ba uni27BA 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27bb uni27BB 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27bc uni27BC 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27bd uni27BD 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27be uni27BE 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27bf uni27BF 2.7 (Sans Mono Bold) +U+27e0 uni27E0 2.3 +U+27e6 uni27E6 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27e7 uni27E7 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27e8 uni27E8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+27e9 uni27E9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+27ea uni27EA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27eb uni27EB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27f0 uni27F0 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27f1 uni27F1 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27f2 uni27F2 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27f3 uni27F3 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27f4 uni27F4 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27f5 uni27F5 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27f6 uni27F6 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27f7 uni27F7 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27f8 uni27F8 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27f9 uni27F9 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27fa uni27FA 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27fb uni27FB 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27fc uni27FC 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27fd uni27FD 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27fe uni27FE 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27ff uni27FF 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2800 uni2800 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2801 uni2801 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2802 uni2802 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2803 uni2803 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2804 uni2804 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2805 uni2805 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2806 uni2806 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2807 uni2807 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2808 uni2808 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2809 uni2809 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+280a uni280A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+280b uni280B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+280c uni280C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+280d uni280D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+280e uni280E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+280f uni280F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2810 uni2810 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2811 uni2811 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2812 uni2812 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2813 uni2813 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2814 uni2814 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2815 uni2815 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2816 uni2816 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2817 uni2817 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2818 uni2818 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2819 uni2819 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+281a uni281A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+281b uni281B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+281c uni281C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+281d uni281D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+281e uni281E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+281f uni281F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2820 uni2820 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2821 uni2821 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2822 uni2822 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2823 uni2823 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2824 uni2824 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2825 uni2825 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2826 uni2826 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2827 uni2827 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2828 uni2828 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2829 uni2829 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+282a uni282A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+282b uni282B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+282c uni282C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+282d uni282D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+282e uni282E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+282f uni282F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2830 uni2830 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2831 uni2831 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2832 uni2832 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2833 uni2833 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2834 uni2834 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2835 uni2835 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2836 uni2836 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2837 uni2837 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2838 uni2838 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2839 uni2839 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+283a uni283A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+283b uni283B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+283c uni283C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+283d uni283D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+283e uni283E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+283f uni283F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2840 uni2840 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2841 uni2841 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2842 uni2842 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2843 uni2843 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2844 uni2844 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2845 uni2845 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2846 uni2846 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2847 uni2847 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2848 uni2848 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2849 uni2849 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+284a uni284A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+284b uni284B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+284c uni284C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+284d uni284D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+284e uni284E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+284f uni284F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2850 uni2850 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2851 uni2851 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2852 uni2852 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2853 uni2853 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2854 uni2854 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2855 uni2855 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2856 uni2856 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2857 uni2857 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2858 uni2858 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2859 uni2859 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+285a uni285A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+285b uni285B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+285c uni285C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+285d uni285D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+285e uni285E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+285f uni285F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2860 uni2860 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2861 uni2861 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2862 uni2862 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2863 uni2863 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2864 uni2864 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2865 uni2865 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2866 uni2866 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2867 uni2867 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2868 uni2868 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2869 uni2869 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+286a uni286A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+286b uni286B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+286c uni286C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+286d uni286D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+286e uni286E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+286f uni286F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2870 uni2870 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2871 uni2871 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2872 uni2872 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2873 uni2873 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2874 uni2874 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2875 uni2875 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2876 uni2876 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2877 uni2877 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2878 uni2878 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2879 uni2879 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+287a uni287A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+287b uni287B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+287c uni287C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+287d uni287D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+287e uni287E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+287f uni287F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2880 uni2880 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2881 uni2881 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2882 uni2882 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2883 uni2883 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2884 uni2884 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2885 uni2885 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2886 uni2886 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2887 uni2887 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2888 uni2888 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2889 uni2889 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+288a uni288A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+288b uni288B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+288c uni288C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+288d uni288D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+288e uni288E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+288f uni288F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2890 uni2890 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2891 uni2891 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2892 uni2892 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2893 uni2893 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2894 uni2894 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2895 uni2895 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2896 uni2896 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2897 uni2897 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2898 uni2898 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2899 uni2899 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+289a uni289A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+289b uni289B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+289c uni289C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+289d uni289D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+289e uni289E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+289f uni289F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28a0 uni28A0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28a1 uni28A1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28a2 uni28A2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28a3 uni28A3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28a4 uni28A4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28a5 uni28A5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28a6 uni28A6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28a7 uni28A7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28a8 uni28A8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28a9 uni28A9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28aa uni28AA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28ab uni28AB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28ac uni28AC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28ad uni28AD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28ae uni28AE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28af uni28AF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28b0 uni28B0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28b1 uni28B1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28b2 uni28B2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28b3 uni28B3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28b4 uni28B4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28b5 uni28B5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28b6 uni28B6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28b7 uni28B7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28b8 uni28B8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28b9 uni28B9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28ba uni28BA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28bb uni28BB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28bc uni28BC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28bd uni28BD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28be uni28BE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28bf uni28BF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28c0 uni28C0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28c1 uni28C1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28c2 uni28C2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28c3 uni28C3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28c4 uni28C4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28c5 uni28C5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28c6 uni28C6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28c7 uni28C7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28c8 uni28C8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28c9 uni28C9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28ca uni28CA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28cb uni28CB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28cc uni28CC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28cd uni28CD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28ce uni28CE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28cf uni28CF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28d0 uni28D0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28d1 uni28D1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28d2 uni28D2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28d3 uni28D3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28d4 uni28D4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28d5 uni28D5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28d6 uni28D6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28d7 uni28D7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28d8 uni28D8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28d9 uni28D9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28da uni28DA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28db uni28DB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28dc uni28DC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28dd uni28DD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28de uni28DE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28df uni28DF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28e0 uni28E0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28e1 uni28E1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28e2 uni28E2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28e3 uni28E3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28e4 uni28E4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28e5 uni28E5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28e6 uni28E6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28e7 uni28E7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28e8 uni28E8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28e9 uni28E9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28ea uni28EA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28eb uni28EB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28ec uni28EC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28ed uni28ED 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28ee uni28EE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28ef uni28EF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28f0 uni28F0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28f1 uni28F1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28f2 uni28F2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28f3 uni28F3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28f4 uni28F4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28f5 uni28F5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28f6 uni28F6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28f7 uni28F7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28f8 uni28F8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28f9 uni28F9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28fa uni28FA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28fb uni28FB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28fc uni28FC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28fd uni28FD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28fe uni28FE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+28ff uni28FF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2906 uni2906 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2907 uni2907 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+290a uni290A 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+290b uni290B 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2940 uni2940 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2941 uni2941 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29ce uni29CE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29cf uni29CF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d0 uni29D0 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d1 uni29D1 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d2 uni29D2 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d3 uni29D3 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d4 uni29D4 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d5 uni29D5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29eb uni29EB 2.2 +U+2a00 uni2A00 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a01 uni2A01 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a02 uni2A02 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a0c uni2A0C 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2a0d uni2A0D 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2a0e uni2A0E 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+2a0f uni2A0F 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a10 uni2A10 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a11 uni2A11 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a12 uni2A12 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a13 uni2A13 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a14 uni2A14 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a15 uni2A15 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a16 uni2A16 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a17 uni2A17 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a18 uni2A18 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a19 uni2A19 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a1a uni2A1A 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a1b uni2A1B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a1c uni2A1C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a7d uni2A7D 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a7e uni2A7E 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a7f uni2A7F 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a80 uni2A80 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a81 uni2A81 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a82 uni2A82 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a83 uni2A83 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a84 uni2A84 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a85 uni2A85 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a86 uni2A86 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a87 uni2A87 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a88 uni2A88 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a89 uni2A89 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8a uni2A8A 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8b uni2A8B 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8c uni2A8C 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8d uni2A8D 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8e uni2A8E 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8f uni2A8F 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a90 uni2A90 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a91 uni2A91 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a92 uni2A92 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a93 uni2A93 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a94 uni2A94 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a95 uni2A95 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a96 uni2A96 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a97 uni2A97 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a98 uni2A98 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a99 uni2A99 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9a uni2A9A 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9b uni2A9B 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9c uni2A9C 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9d uni2A9D 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9e uni2A9E 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9f uni2A9F 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2aa0 uni2AA0 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2aae uni2AAE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2aaf uni2AAF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab0 uni2AB0 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab1 uni2AB1 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab2 uni2AB2 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab3 uni2AB3 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab4 uni2AB4 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab5 uni2AB5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab6 uni2AB6 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab7 uni2AB7 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab8 uni2AB8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab9 uni2AB9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2aba uni2ABA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2af9 uni2AF9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2afa uni2AFA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b00 uni2B00 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b01 uni2B01 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b02 uni2B02 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b03 uni2B03 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b04 uni2B04 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b05 uni2B05 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b06 uni2B06 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b07 uni2B07 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b08 uni2B08 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b09 uni2B09 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b0a uni2B0A 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b0b uni2B0B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b0c uni2B0C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b0d uni2B0D 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b0e uni2B0E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b0f uni2B0F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b10 uni2B10 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b11 uni2B11 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b12 uni2B12 2.3 +U+2b13 uni2B13 2.3 +U+2b14 uni2B14 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) +U+2b15 uni2B15 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) +U+2b16 uni2B16 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) +U+2b17 uni2B17 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) +U+2b18 uni2B18 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) +U+2b19 uni2B19 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) +U+2b1a uni2B1A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique) +U+2b20 uni2B20 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b21 uni2B21 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b22 uni2B22 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b23 uni2B23 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2c60 uni2C60 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c61 uni2C61 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c62 uni2C62 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c63 uni2C63 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c64 uni2C64 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c65 uni2C65 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c66 uni2C66 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c67 uni2C67 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2c68 uni2C68 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2c69 uni2C69 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2c6a uni2C6A 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2c6b uni2C6B 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c6c uni2C6C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c74 uni2C74 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c75 uni2C75 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2c76 uni2C76 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2c77 uni2C77 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e000 uniE000 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e001 uniE001 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e002 uniE002 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e003 uniE003 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e004 uniE004 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e005 uniE005 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e006 uniE006 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e007 uniE007 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e008 uniE008 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e009 uniE009 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00a uniE00A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00b uniE00B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00c uniE00C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00d uniE00D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00e uniE00E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00f uniE00F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e010 uniE010 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e011 uniE011 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e012 uniE012 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e013 uniE013 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e014 uniE014 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e015 uniE015 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e016 uniE016 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e017 uniE017 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e018 uniE018 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e019 uniE019 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e01a uniE01A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e01b uniE01B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e01c uniE01C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e01d uniE01D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f000 uniF000 2.10 (Sans) 2.11 (Sans Condensed) +U+f001 uniF001 2.10 (Sans) 2.11 (Sans Condensed) +U+f208 uniF208 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f20a uniF20A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f215 uniF215 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f216 uniF216 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f217 uniF217 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f21a uniF21A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f21b uniF21B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f25f uniF25F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f5c5 afii10064 2.9 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+f6c4 afii10063 2.10 (Serif Bold Oblique, Serif Oblique) 2.11 (Serif Condensed Bold Oblique, Serif Condensed Oblique) +U+f6c5 afii10064 2.5 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.9 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Oblique) +U+f6c6 afii10192 2.5 (Serif Bold Oblique, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+f6c7 afii10831 2.11 (Serif Bold Oblique, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+f6c8 afii10832 2.11 (Serif Bold Oblique, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+f6d1 cyrBreve 2.5 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+f6d4 cyrbreve 2.5 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+fb00 uniFB00 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.8 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+fb01 fi original +U+fb02 fl original +U+fb03 uniFB03 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.8 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+fb04 uniFB04 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.8 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+fb05 uniFB05 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+fb06 uniFB06 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+fb13 uniFB13 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb14 uniFB14 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb15 uniFB15 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb16 uniFB16 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb17 uniFB17 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb1d uniFB1D 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb1f uniFB1F 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb20 uniFB20 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb29 uniFB29 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb2a uniFB2A 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb2b uniFB2B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb2c uniFB2C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb2d uniFB2D 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb2e uniFB2E 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb2f uniFB2F 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb30 uniFB30 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb31 uniFB31 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb32 uniFB32 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb33 uniFB33 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb34 uniFB34 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb35 uniFB35 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb36 uniFB36 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb37 uniFB37 2.11 (Sans Condensed Oblique, Sans Oblique) +U+fb38 uniFB38 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb39 uniFB39 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb3a uniFB3A 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb3b uniFB3B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb3c uniFB3C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb3e uniFB3E 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb40 uniFB40 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb41 uniFB41 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb43 uniFB43 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb44 uniFB44 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb46 uniFB46 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb47 uniFB47 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb48 uniFB48 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb49 uniFB49 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4a uniFB4A 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4b uniFB4B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4c uniFB4C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4d uniFB4D 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4e uniFB4E 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb52 uniFB52 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb53 uniFB53 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb54 uniFB54 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb55 uniFB55 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb56 uniFB56 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb57 uniFB57 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb58 uniFB58 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb59 uniFB59 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb5a uniFB5A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb5b uniFB5B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb5c uniFB5C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb5d uniFB5D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb5e uniFB5E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb5f uniFB5F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb60 uniFB60 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb61 uniFB61 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb62 uniFB62 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb63 uniFB63 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb64 uniFB64 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb65 uniFB65 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb66 uniFB66 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb67 uniFB67 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb68 uniFB68 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb69 uniFB69 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb6a uniFB6A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb6b uniFB6B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb6c uniFB6C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb6d uniFB6D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb6e uniFB6E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb6f uniFB6F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb70 uniFB70 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb71 uniFB71 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb72 uniFB72 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb73 uniFB73 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb74 uniFB74 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb75 uniFB75 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb76 uniFB76 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb77 uniFB77 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb78 uniFB78 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb79 uniFB79 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb7a uniFB7A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb7b uniFB7B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb7c uniFB7C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb7d uniFB7D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb7e uniFB7E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb7f uniFB7F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb80 uniFB80 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb81 uniFB81 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb8a uniFB8A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb8b uniFB8B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb8c uniFB8C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb8d uniFB8D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb8e uniFB8E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb8f uniFB8F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb90 uniFB90 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb91 uniFB91 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb92 uniFB92 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb93 uniFB93 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb94 uniFB94 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb95 uniFB95 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb9e uniFB9E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb9f uniFB9F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbd9 uniFBD9 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbda uniFBDA 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbe8 uniFBE8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbe9 uniFBE9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbfc uniFBFC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbfd uniFBFD 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbfe uniFBFE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbff uniFBFF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe00 uniFE00 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+fe01 uniFE01 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+fe02 uniFE02 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+fe03 uniFE03 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+fe04 uniFE04 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+fe05 uniFE05 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+fe06 uniFE06 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+fe07 uniFE07 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+fe08 uniFE08 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+fe09 uniFE09 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+fe0a uniFE0A 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+fe0b uniFE0B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+fe0c uniFE0C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+fe0d uniFE0D 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+fe0e uniFE0E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+fe0f uniFE0F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Oblique, Serif Condensed Oblique, Serif Oblique) +U+fe70 uniFE70 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe71 uniFE71 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe72 uniFE72 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe73 uniFE73 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe74 uniFE74 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe76 uniFE76 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe77 uniFE77 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe78 uniFE78 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe79 uniFE79 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe7a uniFE7A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe7b uniFE7B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe7c uniFE7C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe7d uniFE7D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe7e uniFE7E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe7f uniFE7F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe80 uniFE80 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe81 uniFE81 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe82 uniFE82 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe83 uniFE83 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe84 uniFE84 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe85 uniFE85 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe86 uniFE86 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe87 uniFE87 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe88 uniFE88 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe89 uniFE89 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe8a uniFE8A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe8b uniFE8B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe8c uniFE8C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe8d uniFE8D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe8e uniFE8E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe8f uniFE8F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe90 uniFE90 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe91 uniFE91 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe92 uniFE92 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe93 uniFE93 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe94 uniFE94 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe95 uniFE95 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe96 uniFE96 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe97 uniFE97 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe98 uniFE98 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe99 uniFE99 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe9a uniFE9A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe9b uniFE9B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe9c uniFE9C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe9d uniFE9D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe9e uniFE9E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fe9f uniFE9F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fea0 uniFEA0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fea1 uniFEA1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fea2 uniFEA2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fea3 uniFEA3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fea4 uniFEA4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fea5 uniFEA5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fea6 uniFEA6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fea7 uniFEA7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fea8 uniFEA8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fea9 uniFEA9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+feaa uniFEAA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+feab uniFEAB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+feac uniFEAC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fead uniFEAD 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+feae uniFEAE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+feaf uniFEAF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+feb0 uniFEB0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+feb1 uniFEB1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+feb2 uniFEB2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+feb3 uniFEB3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+feb4 uniFEB4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+feb5 uniFEB5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+feb6 uniFEB6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+feb7 uniFEB7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+feb8 uniFEB8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+feb9 uniFEB9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+feba uniFEBA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+febb uniFEBB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+febc uniFEBC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+febd uniFEBD 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+febe uniFEBE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+febf uniFEBF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fec0 uniFEC0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fec1 uniFEC1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fec2 uniFEC2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fec3 uniFEC3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fec4 uniFEC4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fec5 uniFEC5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fec6 uniFEC6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fec7 uniFEC7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fec8 uniFEC8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fec9 uniFEC9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+feca uniFECA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fecb uniFECB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fecc uniFECC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fecd uniFECD 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fece uniFECE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fecf uniFECF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fed0 uniFED0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fed1 uniFED1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fed2 uniFED2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fed3 uniFED3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fed4 uniFED4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fed5 uniFED5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fed6 uniFED6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fed7 uniFED7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fed8 uniFED8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fed9 uniFED9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+feda uniFEDA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fedb uniFEDB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fedc uniFEDC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fedd uniFEDD 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fede uniFEDE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fedf uniFEDF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fee0 uniFEE0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fee1 uniFEE1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fee2 uniFEE2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fee3 uniFEE3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fee4 uniFEE4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fee5 uniFEE5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fee6 uniFEE6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fee7 uniFEE7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fee8 uniFEE8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fee9 uniFEE9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+feea uniFEEA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+feeb uniFEEB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+feec uniFEEC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+feed uniFEED 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+feee uniFEEE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+feef uniFEEF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fef0 uniFEF0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fef1 uniFEF1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fef2 uniFEF2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fef3 uniFEF3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fef4 uniFEF4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fef5 uniFEF5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fef6 uniFEF6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fef7 uniFEF7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fef8 uniFEF8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fef9 uniFEF9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fefa uniFEFA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fefb uniFEFB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fefc uniFEFC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+feff uniFEFF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fffd uniFFFD 1.12 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/dejavu-ttf-2.15/unicover.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/dejavu-ttf-2.15/unicover.txt Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,160 @@ +This is the Unicode coverage file for DejaVu fonts +($Id: unicover.txt 1586 2007-02-18 16:07:32Z ben_laenen $) + +Control and similar characters are discounted from totals. + + Sans Serif Sans Mono +U+0000 Basic Latin 100% (95/95) 100% (95/95) 100% (95/95) +U+0080 Latin-1 Supplement 100% (96/96) 100% (96/96) 100% (96/96) +U+0100 Latin Extended-A 100% (128/128) 100% (128/128) 100% (128/128) +U+0180 Latin Extended-B 100% (208/208) 90% (188/208) 78% (163/208) +U+0250 IPA Extensions 100% (96/96) 100% (96/96) 100% (96/96) +U+02b0 Spacing Modifier Letters 78% (63/80) 56% (45/80) 57% (46/80) +U+0300 Combining Diacritical Marks 82% (92/112) 60% (68/112) 59% (67/112) +U+0370 Greek and Coptic 100% (127/127) 86% (110/127) 86% (110/127) +U+0400 Cyrillic 100% (255/255) 75% (192/255) 66% (170/255) +U+0500 Cyrillic Supplement 100% (20/20) (0/20) (0/20) +U+0530 Armenian 100% (86/86) (0/86) (0/86) +U+0590 Hebrew 57% (50/87) (0/87) (0/87) +U+0600 Arabic 47% (111/235) (0/235) (0/235) +U+0700 Syriac (0/77) (0/77) (0/77) +U+0750 Arabic Supplement (0/30) (0/30) (0/30) +U+0780 Thaana (0/50) (0/50) (0/50) +U+07c0 NKo (0/59) (0/59) (0/59) +U+0900 Devanagari (0/111) (0/111) (0/111) +U+0980 Bengali (0/91) (0/91) (0/91) +U+0a00 Gurmukhi (0/77) (0/77) (0/77) +U+0a80 Gujarati (0/83) (0/83) (0/83) +U+0b00 Oriya (0/81) (0/81) (0/81) +U+0b80 Tamil (0/71) (0/71) (0/71) +U+0c00 Telugu (0/80) (0/80) (0/80) +U+0c80 Kannada (0/86) (0/86) (0/86) +U+0d00 Malayalam (0/78) (0/78) (0/78) +U+0d80 Sinhala (0/80) (0/80) (0/80) +U+0e00 Thai 1% (1/87) (0/87) (0/87) +U+0e80 Lao 84% (55/65) (0/65) 43% (28/65) +U+0f00 Tibetan (0/195) (0/195) (0/195) +U+1000 Myanmar (0/78) (0/78) (0/78) +U+10a0 Georgian (0/83) (0/83) (0/83) +U+1100 Hangul Jamo (0/240) (0/240) (0/240) +U+1200 Ethiopic (0/356) (0/356) (0/356) +U+1380 Ethiopic Supplement (0/26) (0/26) (0/26) +U+13a0 Cherokee (0/85) (0/85) (0/85) +U+1400 Unified Canadian Aboriginal Syllabics 64% (404/630) (0/630) (0/630) +U+1680 Ogham (0/29) (0/29) (0/29) +U+16a0 Runic (0/81) (0/81) (0/81) +U+1700 Tagalog (0/20) (0/20) (0/20) +U+1720 Hanunoo (0/23) (0/23) (0/23) +U+1740 Buhid (0/20) (0/20) (0/20) +U+1760 Tagbanwa (0/18) (0/18) (0/18) +U+1780 Khmer (0/114) (0/114) (0/114) +U+1800 Mongolian (0/155) (0/155) (0/155) +U+1900 Limbu (0/66) (0/66) (0/66) +U+1950 Tai Le (0/35) (0/35) (0/35) +U+1980 New Tai Lue (0/80) (0/80) (0/80) +U+19e0 Khmer Symbols (0/32) (0/32) (0/32) +U+1a00 Buginese (0/30) (0/30) (0/30) +U+1b00 Balinese (0/121) (0/121) (0/121) +U+1d00 Phonetic Extensions 82% (105/128) 28% (36/128) 28% (36/128) +U+1d80 Phonetic Extensions Supplement 59% (38/64) 57% (37/64) 57% (37/64) +U+1dc0 Combining Diacritical Marks Supplement 46% (6/13) (0/13) (0/13) +U+1e00 Latin Extended Additional 100% (246/246) 77% (190/246) 54% (134/246) +U+1f00 Greek Extended 100% (233/233) 100% (233/233) 100% (233/233) +U+2000 General Punctuation 98% (104/106) 61% (65/106) 42% (45/106) +U+2070 Superscripts and Subscripts 100% (34/34) 52% (18/34) 52% (18/34) +U+20a0 Currency Symbols 100% (22/22) 27% (6/22) 22% (5/22) +U+20d0 Combining Diacritical Marks for Symbols 12% (4/32) (0/32) (0/32) +U+2100 Letterlike Symbols 94% (75/79) 7% (6/79) 7% (6/79) +U+2150 Number Forms 100% (50/50) 26% (13/50) 26% (13/50) +U+2190 Arrows 100% (112/112) 3% (4/112) 100% (112/112) +U+2200 Mathematical Operators 93% (239/256) 10% (27/256) 56% (145/256) +U+2300 Miscellaneous Technical 15% (37/232) 6% (16/232) 50% (117/232) +U+2400 Control Pictures 5% (2/39) 2% (1/39) 2% (1/39) +U+2440 Optical Character Recognition (0/11) (0/11) (0/11) +U+2460 Enclosed Alphanumerics 6% (10/160) (0/160) (0/160) +U+2500 Box Drawing (0/128) (0/128) 100% (128/128) +U+2580 Block Elements 100% (32/32) 100% (32/32) 100% (32/32) +U+25a0 Geometric Shapes 100% (96/96) 100% (96/96) 100% (96/96) +U+2600 Miscellaneous Symbols 100% (176/176) 17% (30/176) 84% (149/176) +U+2700 Dingbats 100% (174/174) (0/174) 82% (144/174) +U+27c0 Miscellaneous Mathematical Symbols-A 17% (7/39) 7% (3/39) 7% (3/39) +U+27f0 Supplemental Arrows-A 100% (16/16) (0/16) (0/16) +U+2800 Braille Patterns 100% (256/256) (0/256) (0/256) +U+2900 Supplemental Arrows-B 4% (6/128) (0/128) (0/128) +U+2980 Miscellaneous Mathematical Symbols-B 7% (9/128) 0% (1/128) 0% (1/128) +U+2a00 Supplemental Mathematical Operators 27% (71/256) 1% (3/256) (0/256) +U+2b00 Miscellaneous Symbols and Arrows 100% (31/31) 29% (9/31) 29% (9/31) +U+2c00 Glagolitic (0/94) (0/94) (0/94) +U+2c60 Latin Extended-C 100% (17/17) (0/17) (0/17) +U+2c80 Coptic (0/114) (0/114) (0/114) +U+2d00 Georgian Supplement (0/38) (0/38) (0/38) +U+2d30 Tifinagh (0/55) (0/55) (0/55) +U+2d80 Ethiopic Extended (0/79) (0/79) (0/79) +U+2e00 Supplemental Punctuation (0/26) (0/26) (0/26) +U+2e80 CJK Radicals Supplement (0/115) (0/115) (0/115) +U+2f00 Kangxi Radicals (0/214) (0/214) (0/214) +U+2ff0 Ideographic Description Characters (0/12) (0/12) (0/12) +U+3000 CJK Symbols and Punctuation (0/64) (0/64) (0/64) +U+3040 Hiragana (0/93) (0/93) (0/93) +U+30a0 Katakana (0/96) (0/96) (0/96) +U+3100 Bopomofo (0/40) (0/40) (0/40) +U+3130 Hangul Compatibility Jamo (0/94) (0/94) (0/94) +U+3190 Kanbun (0/16) (0/16) (0/16) +U+31a0 Bopomofo Extended (0/24) (0/24) (0/24) +U+31c0 CJK Strokes (0/16) (0/16) (0/16) +U+31f0 Katakana Phonetic Extensions (0/16) (0/16) (0/16) +U+3200 Enclosed CJK Letters and Months (0/242) (0/242) (0/242) +U+3300 CJK Compatibility (0/256) (0/256) (0/256) +U+3400 CJK Unified Ideographs Extension A (0/0) (0/0) (0/0) +U+4dc0 Yijing Hexagram Symbols (0/64) (0/64) (0/64) +U+4e00 CJK Unified Ideographs (0/0) (0/0) (0/0) +U+a000 Yi Syllables (0/1165) (0/1165) (0/1165) +U+a490 Yi Radicals (0/55) (0/55) (0/55) +U+a700 Modifier Tone Letters (0/27) (0/27) (0/27) +U+a720 Latin Extended-D (0/2) (0/2) (0/2) +U+a800 Syloti Nagri (0/44) (0/44) (0/44) +U+a840 Phags-pa (0/56) (0/56) (0/56) +U+ac00 Hangul Syllables (0/0) (0/0) (0/0) +U+d800 High Surrogates (0/0) (0/0) (0/0) +U+db80 High Private Use Surrogates (0/0) (0/0) (0/0) +U+dc00 Low Surrogates (0/0) (0/0) (0/0) +U+e000 Private Use Area (0/0) (0/0) (0/0) +U+f900 CJK Compatibility Ideographs (0/467) (0/467) (0/467) +U+fb00 Alphabetic Presentation Forms 82% (48/58) 12% (7/58) 3% (2/58) +U+fb50 Arabic Presentation Forms-A 11% (70/595) (0/595) (0/595) +U+fe00 Variation Selectors 100% (16/16) 100% (16/16) (0/16) +U+fe10 Vertical Forms (0/10) (0/10) (0/10) +U+fe20 Combining Half Marks (0/4) (0/4) (0/4) +U+fe30 CJK Compatibility Forms (0/32) (0/32) (0/32) +U+fe50 Small Form Variants (0/26) (0/26) (0/26) +U+fe70 Arabic Presentation Forms-B 100% (141/141) (0/141) (0/141) +U+ff00 Halfwidth and Fullwidth Forms (0/225) (0/225) (0/225) +U+fff0 Specials 20% (1/5) 20% (1/5) 20% (1/5) +U+10000 Linear B Syllabary (0/88) (0/88) (0/88) +U+10080 Linear B Ideograms (0/123) (0/123) (0/123) +U+10100 Aegean Numbers (0/57) (0/57) (0/57) +U+10140 Ancient Greek Numbers (0/75) (0/75) (0/75) +U+10300 Old Italic (0/35) (0/35) (0/35) +U+10330 Gothic (0/27) (0/27) (0/27) +U+10380 Ugaritic (0/31) (0/31) (0/31) +U+103a0 Old Persian (0/50) (0/50) (0/50) +U+10400 Deseret (0/80) (0/80) (0/80) +U+10450 Shavian (0/48) (0/48) (0/48) +U+10480 Osmanya (0/40) (0/40) (0/40) +U+10800 Cypriot Syllabary (0/55) (0/55) (0/55) +U+10900 Phoenician (0/27) (0/27) (0/27) +U+10a00 Kharoshthi (0/65) (0/65) (0/65) +U+12000 Cuneiform (0/879) (0/879) (0/879) +U+12400 Cuneiform Numbers and Punctuation (0/103) (0/103) (0/103) +U+1d000 Byzantine Musical Symbols (0/246) (0/246) (0/246) +U+1d100 Musical Symbols (0/219) (0/219) (0/219) +U+1d200 Ancient Greek Musical Notation (0/70) (0/70) (0/70) +U+1d300 Tai Xuan Jing Symbols (0/87) (0/87) (0/87) +U+1d360 Counting Rod Numerals (0/18) (0/18) (0/18) +U+1d400 Mathematical Alphanumeric Symbols (0/996) (0/996) (0/996) +U+20000 CJK Unified Ideographs Extension B (0/0) (0/0) (0/0) +U+2f800 CJK Compatibility Ideographs Supplement (0/542) (0/542) (0/542) +U+e0000 Tags (0/98) (0/98) (0/98) +U+e0100 Variation Selectors Supplement (0/240) (0/240) (0/240) +U+f0000 Supplementary Private Use Area-A (0/0) (0/0) (0/0) +U+100000 Supplementary Private Use Area-B (0/0) (0/0) (0/0) diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/dejavusans.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/dejavusans.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,287 @@ +TCPDFFontDescriptor.define('dejavusans') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='DejaVuSans'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>32,'FontBBox'=>'[-1021 -356 1681 1068]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600}; + font[:up]=-42; + font[:ut]=44; + font[:cw]={ + 0=>600, 32=>318, 33=>401, 34=>460, 35=>838, 36=>636, 37=>950, 38=>780, 39=>275, 40=>390, 41=>390, 42=>500, 43=>838, 44=>318, 45=>361, 46=>318, + 47=>337, 48=>636, 49=>636, 50=>636, 51=>636, 52=>636, 53=>636, 54=>636, 55=>636, 56=>636, 57=>636, 58=>337, 59=>337, 60=>838, 61=>838, 62=>838, + 63=>531, 64=>1000, 65=>684, 66=>686, 67=>698, 68=>770, 69=>632, 70=>575, 71=>775, 72=>752, 73=>295, 74=>295, 75=>656, 76=>557, 77=>863, 78=>748, + 79=>787, 80=>603, 81=>787, 82=>695, 83=>635, 84=>611, 85=>732, 86=>684, 87=>989, 88=>685, 89=>611, 90=>685, 91=>390, 92=>337, 93=>390, 94=>838, + 95=>500, 96=>500, 97=>613, 98=>635, 99=>550, 100=>635, 101=>615, 102=>352, 103=>635, 104=>634, 105=>278, 106=>278, 107=>579, 108=>278, 109=>974, 110=>634, + 111=>612, 112=>635, 113=>635, 114=>411, 115=>521, 116=>392, 117=>634, 118=>592, 119=>818, 120=>592, 121=>592, 122=>525, 123=>636, 124=>337, 125=>636, 126=>838, + 8364=>636, 1027=>610, 8218=>318, 402=>352, 8222=>518, 8230=>1000, 8224=>500, 8225=>500, 710=>500, 8240=>1342, 352=>635, 8249=>400, 338=>1070, 1036=>710, 381=>685, 1039=>752, + 8216=>318, 8217=>318, 8220=>518, 8221=>518, 8226=>590, 8211=>500, 8212=>1000, 732=>500, 8482=>1000, 353=>521, 8250=>400, 339=>1023, 1116=>604, 382=>525, 376=>611, 160=>318, + 161=>401, 162=>636, 163=>636, 164=>636, 165=>636, 166=>337, 167=>500, 168=>500, 169=>1000, 170=>471, 171=>612, 172=>838, 173=>361, 174=>1000, 175=>500, 176=>500, + 177=>838, 178=>401, 179=>401, 180=>500, 181=>636, 182=>636, 183=>318, 184=>500, 185=>401, 186=>471, 187=>612, 188=>969, 189=>969, 190=>969, 191=>531, 192=>684, + 193=>684, 194=>684, 195=>684, 196=>684, 197=>684, 198=>974, 199=>698, 200=>632, 201=>632, 202=>632, 203=>632, 204=>295, 205=>295, 206=>295, 207=>295, 208=>775, + 209=>748, 210=>787, 211=>787, 212=>787, 213=>787, 214=>787, 215=>838, 216=>787, 217=>732, 218=>732, 219=>732, 220=>732, 221=>611, 222=>605, 223=>630, 224=>613, + 225=>613, 226=>613, 227=>613, 228=>613, 229=>613, 230=>982, 231=>550, 232=>615, 233=>615, 234=>615, 235=>615, 236=>278, 237=>278, 238=>278, 239=>278, 240=>612, + 241=>634, 242=>612, 243=>612, 244=>612, 245=>612, 246=>612, 247=>838, 248=>612, 249=>634, 250=>634, 251=>634, 252=>634, 253=>592, 254=>635, 255=>592, 256=>684, + 257=>613, 258=>684, 259=>613, 260=>684, 261=>613, 262=>698, 263=>550, 264=>698, 265=>550, 266=>698, 267=>550, 268=>698, 269=>550, 270=>770, 271=>635, 272=>775, + 273=>635, 274=>632, 275=>615, 276=>632, 277=>615, 278=>632, 279=>615, 280=>632, 281=>615, 282=>632, 283=>615, 284=>775, 285=>635, 286=>775, 287=>635, 288=>775, + 289=>635, 290=>775, 291=>635, 292=>752, 293=>634, 294=>916, 295=>695, 296=>295, 297=>278, 298=>295, 299=>278, 300=>295, 301=>278, 302=>295, 303=>278, 304=>295, + 305=>278, 306=>590, 307=>556, 308=>295, 309=>278, 310=>656, 311=>579, 312=>579, 313=>557, 314=>293, 315=>557, 316=>278, 317=>557, 318=>375, 319=>557, 320=>342, + 321=>562, 322=>284, 323=>748, 324=>634, 325=>748, 326=>634, 327=>748, 328=>634, 329=>813, 330=>748, 331=>634, 332=>787, 333=>612, 334=>787, 335=>612, 336=>787, + 337=>612, 340=>695, 341=>411, 342=>695, 343=>411, 344=>695, 345=>411, 346=>635, 347=>521, 348=>635, 349=>521, 350=>635, 351=>521, 354=>611, 355=>392, 356=>611, + 357=>392, 358=>611, 359=>392, 360=>732, 361=>634, 362=>732, 363=>634, 364=>732, 365=>634, 366=>732, 367=>634, 368=>732, 369=>634, 370=>732, 371=>634, 372=>989, + 373=>818, 374=>611, 375=>592, 377=>685, 378=>525, 379=>685, 380=>525, 383=>352, 384=>635, 385=>735, 386=>686, 387=>635, 388=>686, 389=>635, 390=>703, 391=>698, + 392=>550, 393=>775, 394=>819, 395=>686, 396=>635, 397=>612, 398=>632, 399=>787, 400=>614, 401=>575, 403=>775, 404=>687, 405=>984, 406=>354, 407=>295, 408=>746, + 409=>579, 410=>278, 411=>592, 412=>974, 413=>748, 414=>634, 415=>787, 416=>913, 417=>612, 418=>949, 419=>759, 420=>652, 421=>635, 422=>695, 423=>635, 424=>521, + 425=>632, 426=>336, 427=>392, 428=>611, 429=>392, 430=>611, 431=>858, 432=>634, 433=>764, 434=>721, 435=>744, 436=>729, 437=>685, 438=>525, 439=>666, 440=>666, + 441=>578, 442=>525, 443=>636, 444=>666, 445=>578, 446=>510, 447=>635, 448=>295, 449=>492, 450=>459, 451=>295, 452=>1422, 453=>1299, 454=>1154, 455=>835, 456=>787, + 457=>457, 458=>931, 459=>924, 460=>797, 461=>684, 462=>613, 463=>295, 464=>278, 465=>787, 466=>612, 467=>732, 468=>634, 469=>732, 470=>634, 471=>732, 472=>634, + 473=>732, 474=>634, 475=>732, 476=>634, 477=>615, 478=>684, 479=>613, 480=>684, 481=>613, 482=>974, 483=>982, 484=>775, 485=>635, 486=>775, 487=>635, 488=>656, + 489=>579, 490=>787, 491=>612, 492=>787, 493=>612, 494=>666, 495=>578, 496=>278, 497=>1422, 498=>1299, 499=>1154, 500=>775, 501=>635, 502=>1113, 503=>682, 504=>748, + 505=>634, 506=>684, 507=>613, 508=>974, 509=>982, 510=>787, 511=>612, 512=>684, 513=>613, 514=>684, 515=>613, 516=>632, 517=>615, 518=>632, 519=>615, 520=>295, + 521=>278, 522=>295, 523=>278, 524=>787, 525=>612, 526=>787, 527=>612, 528=>695, 529=>411, 530=>695, 531=>411, 532=>732, 533=>634, 534=>732, 535=>634, 536=>635, + 537=>521, 538=>611, 539=>392, 540=>627, 541=>521, 542=>752, 543=>634, 544=>735, 545=>838, 546=>698, 547=>610, 548=>685, 549=>525, 550=>684, 551=>613, 552=>632, + 553=>615, 554=>787, 555=>612, 556=>787, 557=>612, 558=>787, 559=>612, 560=>787, 561=>612, 562=>611, 563=>592, 564=>475, 565=>843, 566=>477, 567=>278, 568=>998, + 569=>998, 570=>684, 571=>698, 572=>550, 573=>557, 574=>611, 575=>521, 576=>525, 577=>603, 578=>479, 579=>686, 580=>732, 581=>684, 582=>632, 583=>615, 584=>295, + 585=>278, 586=>781, 587=>635, 588=>695, 589=>411, 590=>611, 591=>592, 592=>600, 593=>635, 594=>635, 595=>635, 596=>549, 597=>550, 598=>635, 599=>696, 600=>615, + 601=>615, 602=>819, 603=>541, 604=>532, 605=>775, 606=>664, 607=>278, 608=>696, 609=>635, 610=>629, 611=>596, 612=>596, 613=>634, 614=>634, 615=>634, 616=>278, + 617=>338, 618=>372, 619=>396, 620=>487, 621=>278, 622=>706, 623=>974, 624=>974, 625=>974, 626=>646, 627=>642, 628=>634, 629=>612, 630=>858, 631=>728, 632=>660, + 633=>414, 634=>414, 635=>414, 636=>411, 637=>411, 638=>437, 639=>530, 640=>604, 641=>604, 642=>521, 643=>336, 644=>336, 645=>461, 646=>336, 647=>392, 648=>392, + 649=>634, 650=>618, 651=>598, 652=>592, 653=>818, 654=>592, 655=>611, 656=>525, 657=>525, 658=>578, 659=>578, 660=>510, 661=>510, 662=>510, 663=>510, 664=>787, + 665=>580, 666=>664, 667=>708, 668=>654, 669=>292, 670=>667, 671=>507, 672=>727, 673=>510, 674=>510, 675=>1014, 676=>1058, 677=>1013, 678=>824, 679=>610, 680=>778, + 681=>848, 682=>641, 683=>654, 684=>515, 685=>515, 686=>570, 687=>664, 688=>404, 689=>399, 690=>175, 691=>259, 692=>295, 693=>296, 694=>379, 695=>515, 696=>373, + 697=>278, 698=>460, 699=>318, 700=>318, 701=>318, 702=>307, 703=>307, 704=>370, 705=>370, 706=>500, 707=>500, 708=>500, 709=>500, 711=>500, 712=>275, 713=>500, + 714=>500, 715=>500, 716=>275, 717=>500, 718=>500, 719=>500, 720=>337, 721=>337, 722=>307, 723=>307, 724=>500, 725=>500, 726=>413, 727=>500, 728=>500, 729=>500, + 730=>500, 731=>500, 733=>500, 734=>315, 735=>500, 736=>426, 737=>166, 738=>373, 739=>444, 740=>370, 741=>493, 742=>493, 743=>493, 744=>493, 745=>493, 748=>500, + 749=>500, 750=>500, 755=>500, 759=>500, 768=>0, 769=>0, 770=>0, 771=>0, 772=>0, 773=>0, 774=>0, 775=>0, 776=>0, 777=>0, 778=>0, 779=>0, + 780=>0, 781=>0, 782=>0, 783=>0, 784=>0, 785=>0, 786=>0, 787=>0, 788=>0, 789=>0, 790=>0, 791=>0, 792=>0, 793=>0, 794=>0, 795=>0, + 796=>0, 797=>0, 798=>0, 799=>0, 800=>0, 801=>0, 802=>0, 803=>0, 804=>0, 805=>0, 806=>0, 807=>0, 808=>0, 809=>0, 810=>0, 811=>0, + 812=>0, 813=>0, 814=>0, 815=>0, 816=>0, 817=>0, 818=>0, 819=>0, 820=>0, 821=>0, 822=>0, 823=>0, 824=>0, 825=>0, 826=>0, 827=>0, + 828=>0, 829=>0, 830=>0, 831=>0, 832=>0, 833=>0, 834=>0, 835=>0, 836=>0, 837=>0, 838=>0, 839=>0, 840=>0, 841=>0, 842=>0, 843=>0, + 844=>0, 845=>0, 846=>0, 847=>0, 849=>0, 850=>0, 851=>0, 855=>0, 856=>0, 860=>0, 861=>0, 862=>0, 863=>0, 864=>0, 865=>0, 866=>0, + 884=>278, 885=>278, 890=>500, 891=>549, 892=>550, 893=>549, 894=>337, 900=>500, 901=>500, 902=>692, 903=>318, 904=>746, 905=>871, 906=>408, 908=>813, 910=>825, + 911=>826, 912=>338, 913=>684, 914=>686, 915=>557, 916=>684, 917=>632, 918=>685, 919=>752, 920=>787, 921=>295, 922=>656, 923=>684, 924=>863, 925=>748, 926=>632, + 927=>787, 928=>752, 929=>603, 931=>632, 932=>611, 933=>611, 934=>787, 935=>685, 936=>787, 937=>764, 938=>295, 939=>611, 940=>659, 941=>548, 942=>654, 943=>338, + 944=>579, 945=>659, 946=>638, 947=>592, 948=>612, 949=>541, 950=>544, 951=>634, 952=>612, 953=>338, 954=>589, 955=>592, 956=>636, 957=>559, 958=>558, 959=>612, + 960=>602, 961=>635, 962=>587, 963=>634, 964=>602, 965=>579, 966=>660, 967=>578, 968=>660, 969=>837, 970=>338, 971=>579, 972=>612, 973=>579, 974=>837, 976=>614, + 977=>619, 978=>699, 979=>842, 980=>699, 981=>660, 982=>837, 983=>664, 984=>787, 985=>612, 986=>648, 987=>587, 988=>575, 989=>458, 990=>660, 991=>660, 992=>865, + 993=>627, 994=>934, 995=>837, 996=>758, 997=>659, 998=>792, 999=>615, 1000=>687, 1001=>607, 1002=>768, 1003=>625, 1004=>699, 1005=>612, 1006=>611, 1007=>536, 1008=>664, + 1009=>635, 1010=>550, 1011=>278, 1012=>787, 1013=>615, 1014=>615, 1015=>605, 1016=>635, 1017=>698, 1018=>863, 1019=>651, 1020=>635, 1021=>703, 1022=>698, 1023=>703, 1024=>632, + 1025=>632, 1026=>786, 1028=>698, 1029=>635, 1030=>295, 1031=>295, 1032=>295, 1033=>1094, 1034=>1045, 1035=>786, 1037=>748, 1038=>609, 1040=>684, 1041=>686, 1042=>686, 1043=>610, + 1044=>781, 1045=>632, 1046=>1077, 1047=>641, 1048=>748, 1049=>748, 1050=>710, 1051=>752, 1052=>863, 1053=>752, 1054=>787, 1055=>752, 1056=>603, 1057=>698, 1058=>611, 1059=>609, + 1060=>861, 1061=>685, 1062=>776, 1063=>686, 1064=>1069, 1065=>1094, 1066=>833, 1067=>882, 1068=>686, 1069=>698, 1070=>1080, 1071=>695, 1072=>613, 1073=>617, 1074=>589, 1075=>525, + 1076=>691, 1077=>615, 1078=>901, 1079=>532, 1080=>650, 1081=>650, 1082=>604, 1083=>639, 1084=>754, 1085=>654, 1086=>612, 1087=>654, 1088=>635, 1089=>550, 1090=>583, 1091=>592, + 1092=>855, 1093=>592, 1094=>681, 1095=>591, 1096=>915, 1097=>942, 1098=>707, 1099=>790, 1100=>589, 1101=>549, 1102=>842, 1103=>602, 1104=>615, 1105=>615, 1106=>625, 1107=>525, + 1108=>549, 1109=>521, 1110=>278, 1111=>278, 1112=>278, 1113=>902, 1114=>898, 1115=>652, 1117=>650, 1118=>592, 1119=>654, 1120=>934, 1121=>837, 1122=>771, 1123=>672, 1124=>942, + 1125=>749, 1126=>879, 1127=>783, 1128=>1160, 1129=>1001, 1130=>787, 1131=>612, 1132=>1027, 1133=>824, 1134=>636, 1135=>541, 1136=>856, 1137=>876, 1138=>787, 1139=>592, 1140=>781, + 1141=>665, 1142=>781, 1143=>665, 1144=>992, 1145=>904, 1146=>953, 1147=>758, 1148=>1180, 1149=>1028, 1150=>934, 1151=>837, 1152=>698, 1153=>550, 1154=>502, 1155=>0, 1156=>0, + 1157=>0, 1158=>0, 1160=>418, 1161=>418, 1162=>772, 1163=>677, 1164=>686, 1165=>589, 1166=>603, 1167=>635, 1168=>610, 1169=>525, 1170=>675, 1171=>556, 1172=>624, 1173=>530, + 1174=>1077, 1175=>901, 1176=>641, 1177=>532, 1178=>710, 1179=>604, 1180=>710, 1181=>604, 1182=>710, 1183=>604, 1184=>856, 1185=>832, 1186=>752, 1187=>661, 1188=>1014, 1189=>877, + 1190=>1081, 1191=>916, 1192=>796, 1193=>651, 1194=>698, 1195=>550, 1196=>611, 1197=>529, 1198=>611, 1199=>592, 1200=>611, 1201=>592, 1202=>685, 1203=>592, 1204=>934, 1205=>807, + 1206=>686, 1207=>591, 1208=>686, 1209=>591, 1210=>686, 1211=>634, 1212=>941, 1213=>728, 1214=>941, 1215=>728, 1216=>295, 1217=>1077, 1218=>901, 1219=>656, 1220=>604, 1221=>776, + 1222=>670, 1223=>752, 1224=>661, 1225=>776, 1226=>681, 1227=>686, 1228=>591, 1229=>888, 1230=>774, 1231=>278, 1232=>684, 1233=>613, 1234=>684, 1235=>613, 1236=>974, 1237=>982, + 1238=>632, 1239=>615, 1240=>787, 1241=>615, 1242=>787, 1243=>615, 1244=>1077, 1245=>901, 1246=>641, 1247=>532, 1248=>666, 1249=>578, 1250=>748, 1251=>650, 1252=>748, 1253=>650, + 1254=>787, 1255=>612, 1256=>787, 1257=>612, 1258=>787, 1259=>612, 1260=>698, 1261=>549, 1262=>609, 1263=>592, 1264=>609, 1265=>592, 1266=>609, 1267=>592, 1268=>686, 1269=>591, + 1270=>557, 1271=>491, 1272=>882, 1273=>790, 1274=>675, 1275=>556, 1276=>685, 1277=>592, 1278=>685, 1279=>592, 1280=>686, 1281=>589, 1282=>1006, 1283=>897, 1284=>975, 1285=>869, + 1286=>679, 1287=>588, 1288=>1072, 1289=>957, 1290=>1072, 1291=>967, 1292=>775, 1293=>660, 1294=>773, 1295=>711, 1296=>614, 1297=>541, 1298=>752, 1299=>639, 1329=>867, 1330=>732, + 1331=>882, 1332=>882, 1333=>732, 1334=>644, 1335=>682, 1336=>732, 1337=>851, 1338=>882, 1339=>732, 1340=>557, 1341=>824, 1342=>986, 1343=>732, 1344=>707, 1345=>644, 1346=>882, + 1347=>777, 1348=>882, 1349=>732, 1350=>840, 1351=>732, 1352=>732, 1353=>732, 1354=>791, 1355=>644, 1356=>882, 1357=>732, 1358=>882, 1359=>635, 1360=>732, 1361=>732, 1362=>799, + 1363=>861, 1364=>790, 1365=>787, 1366=>635, 1369=>307, 1370=>318, 1371=>500, 1372=>500, 1373=>392, 1374=>526, 1375=>500, 1377=>974, 1378=>634, 1379=>762, 1380=>767, 1381=>634, + 1382=>697, 1383=>533, 1384=>634, 1385=>700, 1386=>697, 1387=>634, 1388=>404, 1389=>894, 1390=>641, 1391=>634, 1392=>634, 1393=>635, 1394=>702, 1395=>634, 1396=>659, 1397=>278, + 1398=>760, 1399=>516, 1400=>634, 1401=>453, 1402=>974, 1403=>516, 1404=>769, 1405=>634, 1406=>696, 1407=>974, 1408=>634, 1409=>635, 1410=>501, 1411=>974, 1412=>648, 1413=>612, + 1414=>629, 1415=>763, 1417=>337, 1418=>433, 1456=>0, 1457=>0, 1458=>0, 1459=>0, 1460=>0, 1461=>0, 1462=>0, 1463=>0, 1464=>0, 1465=>0, 1467=>0, 1468=>0, + 1469=>0, 1471=>0, 1472=>295, 1473=>0, 1474=>0, 1475=>295, 1478=>456, 1479=>0, 1488=>629, 1489=>608, 1490=>448, 1491=>594, 1492=>640, 1493=>272, 1494=>423, 1495=>640, + 1496=>648, 1497=>272, 1498=>592, 1499=>556, 1500=>599, 1501=>640, 1502=>659, 1503=>272, 1504=>441, 1505=>700, 1506=>636, 1507=>640, 1508=>604, 1509=>521, 1510=>581, 1511=>663, + 1512=>592, 1513=>808, 1514=>657, 1520=>471, 1521=>454, 1522=>471, 1548=>323, 1557=>0, 1563=>318, 1567=>531, 1569=>470, 1570=>278, 1571=>278, 1572=>483, 1573=>278, 1574=>783, + 1575=>278, 1576=>941, 1577=>524, 1578=>941, 1579=>941, 1580=>646, 1581=>646, 1582=>646, 1583=>445, 1584=>445, 1585=>483, 1586=>483, 1587=>1221, 1588=>1221, 1589=>1209, 1590=>1209, + 1591=>925, 1592=>925, 1593=>597, 1594=>597, 1600=>293, 1601=>1037, 1602=>776, 1603=>824, 1604=>727, 1605=>619, 1606=>734, 1607=>524, 1608=>483, 1609=>783, 1610=>783, 1611=>0, + 1612=>0, 1613=>0, 1614=>0, 1615=>0, 1616=>0, 1617=>0, 1618=>0, 1619=>0, 1620=>0, 1621=>0, 1626=>500, 1632=>537, 1633=>537, 1634=>537, 1635=>537, 1636=>537, + 1637=>537, 1638=>537, 1639=>537, 1640=>537, 1641=>537, 1642=>537, 1643=>325, 1644=>318, 1645=>545, 1646=>941, 1647=>776, 1652=>292, 1657=>941, 1658=>941, 1659=>941, 1660=>941, + 1661=>941, 1662=>941, 1663=>941, 1664=>941, 1665=>646, 1666=>646, 1667=>646, 1668=>646, 1669=>646, 1670=>646, 1671=>646, 1681=>483, 1682=>483, 1685=>610, 1688=>483, 1697=>1037, + 1700=>1037, 1702=>1037, 1705=>895, 1711=>895, 1717=>727, 1722=>734, 1727=>646, 1734=>483, 1740=>783, 1742=>783, 1749=>524, 1776=>537, 1777=>537, 1778=>537, 1779=>537, 1780=>537, + 1781=>537, 1782=>537, 1783=>537, 1784=>537, 1785=>537, 3647=>652, 3713=>670, 3714=>684, 3716=>688, 3719=>482, 3720=>628, 3722=>684, 3725=>688, 3732=>669, 3733=>642, 3734=>645, + 3735=>655, 3737=>659, 3738=>625, 3739=>625, 3740=>745, 3741=>767, 3742=>687, 3743=>687, 3745=>702, 3746=>688, 3747=>684, 3749=>649, 3751=>632, 3754=>703, 3755=>819, 3757=>633, + 3758=>684, 3759=>788, 3760=>632, 3761=>0, 3762=>539, 3763=>539, 3764=>0, 3765=>0, 3766=>0, 3767=>0, 3768=>0, 3769=>0, 3771=>0, 3772=>0, 3773=>663, 3776=>375, + 3777=>657, 3778=>460, 3779=>547, 3780=>491, 3782=>674, 3784=>0, 3785=>0, 3786=>0, 3787=>0, 3788=>0, 3789=>0, 3804=>1028, 3805=>1028, 5121=>684, 5122=>684, 5123=>684, + 5124=>684, 5125=>769, 5126=>769, 5127=>769, 5129=>769, 5130=>769, 5131=>769, 5132=>835, 5133=>834, 5134=>835, 5135=>834, 5136=>835, 5137=>834, 5138=>967, 5139=>1007, 5140=>967, + 5141=>1007, 5142=>769, 5143=>967, 5144=>1007, 5145=>967, 5146=>1007, 5147=>769, 5149=>256, 5150=>543, 5151=>423, 5152=>423, 5153=>389, 5154=>389, 5155=>393, 5156=>389, 5157=>466, + 5158=>385, 5159=>256, 5160=>389, 5161=>389, 5162=>389, 5163=>1090, 5164=>909, 5165=>953, 5166=>1117, 5167=>684, 5168=>684, 5169=>684, 5170=>684, 5171=>729, 5172=>729, 5173=>729, + 5175=>729, 5176=>729, 5177=>729, 5178=>835, 5179=>834, 5180=>835, 5181=>834, 5182=>835, 5183=>834, 5184=>967, 5185=>1007, 5186=>967, 5187=>1007, 5188=>967, 5189=>1007, 5190=>967, + 5191=>1007, 5192=>729, 5193=>508, 5194=>192, 5196=>732, 5197=>732, 5198=>732, 5199=>732, 5200=>730, 5201=>730, 5202=>730, 5204=>730, 5205=>730, 5206=>730, 5207=>921, 5208=>889, + 5209=>921, 5210=>889, 5211=>921, 5212=>889, 5213=>928, 5214=>900, 5215=>928, 5216=>900, 5217=>947, 5218=>900, 5219=>947, 5220=>900, 5221=>947, 5222=>434, 5223=>877, 5224=>877, + 5225=>866, 5226=>890, 5227=>628, 5228=>628, 5229=>628, 5230=>628, 5231=>628, 5232=>694, 5233=>628, 5234=>628, 5235=>628, 5236=>860, 5237=>771, 5238=>815, 5239=>816, 5240=>815, + 5241=>816, 5242=>860, 5243=>771, 5244=>860, 5245=>771, 5246=>815, 5247=>816, 5248=>815, 5249=>816, 5250=>815, 5251=>407, 5252=>407, 5253=>750, 5254=>775, 5255=>750, 5256=>775, + 5257=>628, 5258=>628, 5259=>628, 5260=>628, 5261=>628, 5262=>628, 5263=>628, 5264=>628, 5265=>628, 5266=>860, 5267=>771, 5268=>815, 5269=>816, 5270=>815, 5271=>816, 5272=>860, + 5273=>771, 5274=>860, 5275=>771, 5276=>815, 5277=>816, 5278=>815, 5279=>816, 5280=>815, 5281=>435, 5282=>435, 5283=>610, 5284=>557, 5285=>557, 5286=>557, 5287=>610, 5288=>522, + 5289=>610, 5290=>557, 5291=>557, 5292=>749, 5293=>769, 5294=>746, 5295=>764, 5296=>746, 5297=>764, 5298=>749, 5299=>769, 5300=>749, 5301=>769, 5302=>746, 5303=>764, 5304=>746, + 5305=>764, 5306=>746, 5307=>386, 5308=>508, 5309=>386, 5312=>852, 5313=>852, 5314=>852, 5315=>823, 5316=>852, 5317=>852, 5318=>852, 5319=>852, 5320=>852, 5321=>1069, 5322=>1035, + 5323=>1059, 5324=>852, 5325=>1059, 5326=>852, 5327=>852, 5328=>600, 5329=>453, 5330=>600, 5331=>852, 5332=>852, 5333=>852, 5334=>852, 5335=>852, 5336=>852, 5337=>852, 5338=>852, + 5339=>852, 5340=>1069, 5341=>1035, 5342=>1059, 5343=>1030, 5344=>1059, 5345=>1030, 5346=>1069, 5347=>1035, 5348=>1069, 5349=>1035, 5350=>1083, 5351=>1030, 5352=>1083, 5353=>1030, 5354=>600, + 5356=>729, 5357=>603, 5358=>603, 5359=>603, 5360=>603, 5361=>603, 5362=>661, 5363=>603, 5364=>603, 5365=>603, 5366=>834, 5367=>754, 5368=>792, 5369=>771, 5370=>792, 5371=>771, + 5372=>834, 5373=>754, 5374=>834, 5375=>754, 5376=>792, 5377=>771, 5378=>792, 5379=>771, 5380=>792, 5381=>418, 5382=>420, 5383=>418, 5392=>712, 5393=>712, 5394=>712, 5395=>892, + 5396=>892, 5397=>892, 5398=>892, 5399=>910, 5400=>872, 5401=>910, 5402=>872, 5403=>910, 5404=>872, 5405=>1140, 5406=>1100, 5407=>1140, 5408=>1100, 5409=>1140, 5410=>1100, 5411=>1140, + 5412=>1100, 5413=>641, 5414=>627, 5415=>627, 5416=>627, 5417=>627, 5418=>627, 5419=>667, 5420=>627, 5421=>627, 5422=>627, 5423=>844, 5424=>781, 5425=>816, 5426=>818, 5427=>816, + 5428=>818, 5429=>844, 5430=>781, 5431=>844, 5432=>781, 5433=>816, 5434=>818, 5435=>816, 5436=>818, 5437=>816, 5438=>418, 5440=>389, 5441=>484, 5442=>916, 5443=>916, 5444=>916, + 5445=>916, 5446=>916, 5447=>916, 5448=>603, 5449=>603, 5450=>603, 5451=>603, 5452=>603, 5453=>603, 5454=>834, 5455=>754, 5456=>418, 5458=>729, 5459=>684, 5460=>684, 5461=>684, + 5462=>684, 5463=>726, 5464=>726, 5465=>726, 5466=>726, 5467=>924, 5468=>1007, 5469=>508, 5470=>732, 5471=>732, 5472=>732, 5473=>732, 5474=>732, 5475=>732, 5476=>730, 5477=>730, + 5478=>730, 5479=>730, 5480=>947, 5481=>900, 5482=>508, 5492=>831, 5493=>831, 5494=>831, 5495=>831, 5496=>831, 5497=>831, 5498=>831, 5499=>563, 5500=>752, 5501=>484, 5502=>1047, + 5503=>1047, 5504=>1047, 5505=>1047, 5506=>1047, 5507=>1047, 5508=>1047, 5509=>825, 5514=>831, 5515=>831, 5516=>831, 5517=>831, 5518=>1259, 5519=>1259, 5520=>1259, 5521=>1002, 5522=>1002, + 5523=>1259, 5524=>1259, 5525=>700, 5526=>1073, 5536=>852, 5537=>852, 5538=>852, 5539=>852, 5540=>852, 5541=>852, 5542=>600, 5543=>643, 5544=>643, 5545=>643, 5546=>643, 5547=>643, + 5548=>643, 5549=>643, 5550=>418, 5551=>628, 5598=>770, 5601=>767, 5702=>468, 5703=>468, 5742=>444, 5743=>1047, 5744=>1310, 5745=>1632, 5746=>1632, 5747=>1375, 5748=>1375, 5749=>1632, + 5750=>1632, 7424=>592, 7425=>717, 7426=>982, 7427=>586, 7428=>550, 7429=>605, 7430=>605, 7431=>491, 7432=>541, 7433=>278, 7434=>395, 7435=>579, 7436=>583, 7437=>754, 7438=>650, + 7439=>612, 7440=>550, 7441=>684, 7442=>684, 7443=>684, 7444=>1023, 7446=>612, 7447=>612, 7448=>524, 7449=>602, 7450=>602, 7451=>583, 7452=>574, 7453=>737, 7454=>948, 7455=>638, + 7456=>592, 7457=>818, 7458=>525, 7459=>526, 7462=>583, 7463=>592, 7464=>564, 7465=>524, 7466=>590, 7467=>639, 7468=>431, 7469=>613, 7470=>432, 7472=>485, 7473=>398, 7474=>398, + 7475=>488, 7476=>474, 7477=>186, 7478=>186, 7479=>413, 7480=>351, 7481=>543, 7482=>471, 7483=>471, 7484=>496, 7485=>439, 7486=>380, 7487=>438, 7488=>385, 7489=>461, 7490=>623, + 7491=>392, 7492=>392, 7493=>405, 7494=>648, 7495=>428, 7496=>405, 7497=>417, 7498=>417, 7499=>360, 7500=>359, 7501=>405, 7502=>179, 7503=>426, 7504=>623, 7505=>409, 7506=>414, + 7507=>370, 7508=>414, 7509=>414, 7510=>428, 7511=>295, 7512=>405, 7513=>470, 7514=>623, 7515=>417, 7517=>402, 7518=>373, 7519=>385, 7520=>416, 7521=>364, 7522=>179, 7523=>259, + 7524=>405, 7525=>417, 7526=>402, 7527=>373, 7528=>385, 7529=>416, 7530=>364, 7543=>635, 7544=>474, 7547=>372, 7557=>278, 7579=>405, 7580=>370, 7581=>370, 7582=>414, 7583=>360, + 7584=>296, 7585=>233, 7586=>405, 7587=>405, 7588=>261, 7589=>250, 7590=>261, 7591=>261, 7592=>234, 7593=>250, 7594=>235, 7595=>376, 7596=>623, 7597=>623, 7598=>411, 7599=>479, + 7600=>409, 7601=>414, 7602=>414, 7603=>360, 7604=>287, 7605=>295, 7606=>508, 7607=>418, 7608=>361, 7609=>406, 7610=>417, 7611=>366, 7612=>437, 7613=>366, 7614=>392, 7615=>414, + 7620=>0, 7621=>0, 7622=>0, 7623=>0, 7624=>0, 7625=>0, 7680=>684, 7681=>613, 7682=>686, 7683=>635, 7684=>686, 7685=>635, 7686=>686, 7687=>635, 7688=>698, 7689=>550, + 7690=>770, 7691=>635, 7692=>770, 7693=>635, 7694=>770, 7695=>635, 7696=>770, 7697=>635, 7698=>770, 7699=>635, 7700=>632, 7701=>615, 7702=>632, 7703=>615, 7704=>632, 7705=>615, + 7706=>632, 7707=>615, 7708=>632, 7709=>615, 7710=>575, 7711=>352, 7712=>775, 7713=>635, 7714=>752, 7715=>634, 7716=>752, 7717=>634, 7718=>752, 7719=>634, 7720=>752, 7721=>634, + 7722=>752, 7723=>634, 7724=>295, 7725=>278, 7726=>295, 7727=>278, 7728=>656, 7729=>579, 7730=>656, 7731=>579, 7732=>656, 7733=>579, 7734=>557, 7735=>288, 7736=>557, 7737=>288, + 7738=>557, 7739=>278, 7740=>557, 7741=>278, 7742=>863, 7743=>974, 7744=>863, 7745=>974, 7746=>863, 7747=>974, 7748=>748, 7749=>634, 7750=>748, 7751=>634, 7752=>748, 7753=>634, + 7754=>748, 7755=>634, 7756=>787, 7757=>612, 7758=>787, 7759=>612, 7760=>787, 7761=>612, 7762=>787, 7763=>612, 7764=>603, 7765=>635, 7766=>603, 7767=>635, 7768=>695, 7769=>411, + 7770=>695, 7771=>411, 7772=>695, 7773=>411, 7774=>695, 7775=>411, 7776=>635, 7777=>521, 7778=>635, 7779=>521, 7780=>635, 7781=>521, 7782=>635, 7783=>521, 7784=>635, 7785=>521, + 7786=>611, 7787=>392, 7788=>611, 7789=>392, 7790=>611, 7791=>392, 7792=>611, 7793=>392, 7794=>732, 7795=>634, 7796=>732, 7797=>634, 7798=>732, 7799=>634, 7800=>732, 7801=>634, + 7802=>732, 7803=>634, 7804=>684, 7805=>592, 7806=>684, 7807=>592, 7808=>989, 7809=>818, 7810=>989, 7811=>818, 7812=>989, 7813=>818, 7814=>989, 7815=>818, 7816=>989, 7817=>818, + 7818=>685, 7819=>592, 7820=>685, 7821=>592, 7822=>611, 7823=>592, 7824=>685, 7825=>525, 7826=>685, 7827=>525, 7828=>685, 7829=>525, 7830=>634, 7831=>392, 7832=>818, 7833=>592, + 7834=>613, 7835=>352, 7840=>684, 7841=>613, 7842=>684, 7843=>613, 7844=>684, 7845=>613, 7846=>684, 7847=>613, 7848=>684, 7849=>613, 7850=>684, 7851=>613, 7852=>684, 7853=>613, + 7854=>684, 7855=>613, 7856=>684, 7857=>613, 7858=>684, 7859=>613, 7860=>684, 7861=>613, 7862=>684, 7863=>613, 7864=>632, 7865=>615, 7866=>632, 7867=>615, 7868=>632, 7869=>615, + 7870=>632, 7871=>615, 7872=>632, 7873=>615, 7874=>632, 7875=>615, 7876=>632, 7877=>615, 7878=>632, 7879=>615, 7880=>295, 7881=>278, 7882=>295, 7883=>278, 7884=>787, 7885=>612, + 7886=>787, 7887=>612, 7888=>787, 7889=>612, 7890=>787, 7891=>612, 7892=>787, 7893=>612, 7894=>787, 7895=>612, 7896=>787, 7897=>612, 7898=>913, 7899=>612, 7900=>913, 7901=>612, + 7902=>913, 7903=>612, 7904=>913, 7905=>612, 7906=>913, 7907=>612, 7908=>732, 7909=>634, 7910=>732, 7911=>634, 7912=>858, 7913=>634, 7914=>858, 7915=>634, 7916=>858, 7917=>634, + 7918=>858, 7919=>634, 7920=>858, 7921=>634, 7922=>611, 7923=>592, 7924=>611, 7925=>592, 7926=>611, 7927=>592, 7928=>611, 7929=>592, 7936=>659, 7937=>659, 7938=>659, 7939=>659, + 7940=>659, 7941=>659, 7942=>659, 7943=>659, 7944=>684, 7945=>684, 7946=>877, 7947=>877, 7948=>769, 7949=>801, 7950=>708, 7951=>743, 7952=>541, 7953=>541, 7954=>541, 7955=>541, + 7956=>541, 7957=>541, 7960=>711, 7961=>711, 7962=>966, 7963=>975, 7964=>898, 7965=>928, 7968=>634, 7969=>634, 7970=>634, 7971=>634, 7972=>634, 7973=>634, 7974=>634, 7975=>634, + 7976=>837, 7977=>835, 7978=>1086, 7979=>1089, 7980=>1027, 7981=>1051, 7982=>934, 7983=>947, 7984=>338, 7985=>338, 7986=>338, 7987=>338, 7988=>338, 7989=>338, 7990=>338, 7991=>338, + 7992=>380, 7993=>374, 7994=>635, 7995=>635, 7996=>570, 7997=>600, 7998=>489, 7999=>493, 8000=>612, 8001=>612, 8002=>612, 8003=>612, 8004=>612, 8005=>612, 8008=>804, 8009=>848, + 8010=>1095, 8011=>1100, 8012=>938, 8013=>970, 8016=>579, 8017=>579, 8018=>579, 8019=>579, 8020=>579, 8021=>579, 8022=>579, 8023=>579, 8025=>784, 8027=>998, 8029=>1012, 8031=>897, + 8032=>837, 8033=>837, 8034=>837, 8035=>837, 8036=>837, 8037=>837, 8038=>837, 8039=>837, 8040=>802, 8041=>843, 8042=>1089, 8043=>1095, 8044=>946, 8045=>972, 8046=>921, 8047=>952, + 8048=>659, 8049=>659, 8050=>541, 8051=>548, 8052=>634, 8053=>654, 8054=>338, 8055=>338, 8056=>612, 8057=>612, 8058=>579, 8059=>579, 8060=>837, 8061=>837, 8064=>659, 8065=>659, + 8066=>659, 8067=>659, 8068=>659, 8069=>659, 8070=>659, 8071=>659, 8072=>684, 8073=>684, 8074=>877, 8075=>877, 8076=>769, 8077=>801, 8078=>708, 8079=>743, 8080=>634, 8081=>634, + 8082=>634, 8083=>634, 8084=>634, 8085=>634, 8086=>634, 8087=>634, 8088=>837, 8089=>835, 8090=>1086, 8091=>1089, 8092=>1027, 8093=>1051, 8094=>934, 8095=>947, 8096=>837, 8097=>837, + 8098=>837, 8099=>837, 8100=>837, 8101=>837, 8102=>837, 8103=>837, 8104=>802, 8105=>843, 8106=>1089, 8107=>1095, 8108=>946, 8109=>972, 8110=>921, 8111=>952, 8112=>659, 8113=>659, + 8114=>659, 8115=>659, 8116=>659, 8118=>659, 8119=>659, 8120=>684, 8121=>684, 8122=>716, 8123=>692, 8124=>684, 8125=>500, 8126=>500, 8127=>500, 8128=>500, 8129=>500, 8130=>634, + 8131=>634, 8132=>654, 8134=>634, 8135=>634, 8136=>805, 8137=>746, 8138=>931, 8139=>871, 8140=>752, 8141=>500, 8142=>500, 8143=>500, 8144=>338, 8145=>338, 8146=>338, 8147=>338, + 8150=>338, 8151=>338, 8152=>295, 8153=>295, 8154=>475, 8155=>408, 8157=>500, 8158=>500, 8159=>500, 8160=>579, 8161=>579, 8162=>579, 8163=>579, 8164=>635, 8165=>635, 8166=>579, + 8167=>579, 8168=>611, 8169=>611, 8170=>845, 8171=>825, 8172=>685, 8173=>500, 8174=>500, 8175=>500, 8178=>837, 8179=>837, 8180=>837, 8182=>837, 8183=>837, 8184=>941, 8185=>813, + 8186=>922, 8187=>826, 8188=>764, 8189=>500, 8190=>500, 8192=>500, 8193=>1000, 8194=>500, 8195=>1000, 8196=>330, 8197=>250, 8198=>167, 8199=>636, 8200=>318, 8201=>200, 8202=>100, + 8203=>0, 8204=>0, 8205=>0, 8206=>0, 8207=>0, 8208=>361, 8209=>361, 8210=>636, 8213=>1000, 8214=>500, 8215=>500, 8219=>318, 8223=>518, 8227=>590, 8228=>334, 8229=>667, + 8231=>318, 8234=>0, 8235=>0, 8236=>0, 8237=>0, 8238=>0, 8239=>200, 8241=>1735, 8242=>227, 8243=>374, 8244=>520, 8245=>227, 8246=>374, 8247=>520, 8248=>339, 8251=>838, + 8252=>485, 8253=>531, 8254=>500, 8255=>804, 8256=>804, 8257=>250, 8258=>1000, 8259=>500, 8260=>167, 8261=>390, 8262=>390, 8263=>922, 8264=>733, 8265=>733, 8266=>497, 8267=>636, + 8268=>500, 8269=>500, 8270=>500, 8271=>337, 8272=>804, 8273=>500, 8274=>450, 8275=>838, 8276=>804, 8277=>838, 8278=>586, 8279=>663, 8280=>838, 8281=>838, 8282=>318, 8283=>797, + 8284=>838, 8285=>318, 8286=>318, 8287=>222, 8288=>0, 8289=>0, 8290=>0, 8291=>0, 8298=>0, 8299=>0, 8300=>0, 8301=>0, 8302=>0, 8303=>0, 8304=>401, 8305=>179, + 8308=>401, 8309=>401, 8310=>401, 8311=>401, 8312=>401, 8313=>401, 8314=>528, 8315=>528, 8316=>528, 8317=>246, 8318=>246, 8319=>398, 8320=>401, 8321=>401, 8322=>401, 8323=>401, + 8324=>401, 8325=>401, 8326=>401, 8327=>401, 8328=>401, 8329=>401, 8330=>528, 8331=>528, 8332=>528, 8333=>246, 8334=>246, 8336=>392, 8337=>417, 8338=>414, 8339=>444, 8340=>417, + 8352=>877, 8353=>636, 8354=>636, 8355=>636, 8356=>636, 8357=>974, 8358=>748, 8359=>1272, 8360=>1074, 8361=>989, 8362=>784, 8363=>636, 8365=>636, 8366=>636, 8367=>1272, 8368=>636, + 8369=>636, 8370=>636, 8371=>636, 8372=>774, 8373=>641, 8400=>0, 8401=>0, 8406=>0, 8407=>0, 8448=>1019, 8449=>1019, 8450=>698, 8451=>1123, 8452=>642, 8453=>1019, 8454=>1067, + 8455=>614, 8456=>698, 8457=>952, 8459=>988, 8460=>754, 8461=>850, 8462=>634, 8463=>634, 8464=>470, 8465=>697, 8466=>720, 8467=>413, 8468=>818, 8469=>801, 8470=>1040, 8471=>1000, + 8472=>697, 8473=>702, 8474=>787, 8475=>798, 8476=>814, 8477=>792, 8478=>896, 8479=>684, 8480=>1020, 8481=>1074, 8483=>684, 8484=>745, 8485=>578, 8486=>764, 8487=>764, 8488=>616, + 8489=>338, 8490=>656, 8491=>684, 8492=>786, 8493=>703, 8494=>854, 8495=>592, 8496=>605, 8497=>786, 8498=>575, 8499=>1069, 8500=>462, 8501=>745, 8502=>674, 8503=>469, 8504=>648, + 8505=>380, 8506=>926, 8507=>1194, 8508=>702, 8509=>728, 8510=>655, 8511=>849, 8512=>811, 8513=>775, 8514=>557, 8515=>557, 8516=>611, 8517=>819, 8518=>708, 8519=>615, 8520=>351, + 8521=>351, 8523=>780, 8526=>526, 8531=>969, 8532=>969, 8533=>969, 8534=>969, 8535=>969, 8536=>969, 8537=>969, 8538=>969, 8539=>969, 8540=>969, 8541=>969, 8542=>969, 8543=>568, + 8544=>295, 8545=>492, 8546=>689, 8547=>923, 8548=>684, 8549=>922, 8550=>1120, 8551=>1317, 8552=>917, 8553=>685, 8554=>933, 8555=>1131, 8556=>557, 8557=>698, 8558=>770, 8559=>863, + 8560=>278, 8561=>458, 8562=>637, 8563=>812, 8564=>592, 8565=>811, 8566=>991, 8567=>1170, 8568=>819, 8569=>592, 8570=>822, 8571=>1002, 8572=>278, 8573=>550, 8574=>635, 8575=>974, + 8576=>1245, 8577=>770, 8578=>1245, 8579=>703, 8580=>549, 8592=>838, 8593=>838, 8594=>838, 8595=>838, 8596=>838, 8597=>838, 8598=>838, 8599=>838, 8600=>838, 8601=>838, 8602=>838, + 8603=>838, 8604=>838, 8605=>838, 8606=>838, 8607=>838, 8608=>838, 8609=>838, 8610=>838, 8611=>838, 8612=>838, 8613=>838, 8614=>838, 8615=>838, 8616=>838, 8617=>838, 8618=>838, + 8619=>838, 8620=>838, 8621=>838, 8622=>838, 8623=>838, 8624=>838, 8625=>838, 8626=>838, 8627=>838, 8628=>838, 8629=>838, 8630=>838, 8631=>838, 8632=>838, 8633=>838, 8634=>838, + 8635=>838, 8636=>838, 8637=>838, 8638=>838, 8639=>838, 8640=>838, 8641=>838, 8642=>838, 8643=>838, 8644=>838, 8645=>838, 8646=>838, 8647=>838, 8648=>838, 8649=>838, 8650=>838, + 8651=>838, 8652=>838, 8653=>838, 8654=>838, 8655=>838, 8656=>838, 8657=>838, 8658=>838, 8659=>838, 8660=>838, 8661=>838, 8662=>838, 8663=>838, 8664=>838, 8665=>838, 8666=>838, + 8667=>838, 8668=>838, 8669=>838, 8670=>838, 8671=>838, 8672=>838, 8673=>838, 8674=>838, 8675=>838, 8676=>838, 8677=>838, 8678=>838, 8679=>838, 8680=>838, 8681=>838, 8682=>838, + 8683=>838, 8684=>838, 8685=>838, 8686=>838, 8687=>838, 8688=>838, 8689=>838, 8690=>838, 8691=>838, 8692=>838, 8693=>838, 8694=>838, 8695=>838, 8696=>838, 8697=>838, 8698=>838, + 8699=>838, 8700=>838, 8701=>838, 8702=>838, 8703=>838, 8704=>684, 8705=>636, 8706=>517, 8707=>632, 8708=>632, 8709=>871, 8710=>669, 8711=>669, 8712=>871, 8713=>871, 8714=>718, + 8715=>871, 8716=>871, 8717=>718, 8718=>636, 8719=>757, 8720=>757, 8721=>674, 8722=>838, 8723=>838, 8724=>838, 8725=>167, 8726=>637, 8727=>838, 8728=>626, 8729=>318, 8730=>637, + 8731=>637, 8732=>637, 8733=>677, 8734=>833, 8735=>838, 8736=>896, 8737=>896, 8738=>838, 8739=>500, 8740=>500, 8741=>500, 8742=>500, 8743=>732, 8744=>732, 8745=>732, 8746=>732, + 8747=>521, 8748=>789, 8749=>1057, 8750=>521, 8751=>789, 8752=>1057, 8753=>521, 8754=>521, 8755=>521, 8756=>636, 8757=>636, 8758=>260, 8759=>636, 8760=>838, 8761=>838, 8762=>838, + 8763=>838, 8764=>838, 8765=>838, 8766=>838, 8767=>838, 8768=>375, 8769=>838, 8770=>838, 8771=>838, 8772=>838, 8773=>838, 8774=>838, 8775=>838, 8776=>838, 8777=>838, 8778=>838, + 8779=>838, 8780=>838, 8781=>838, 8782=>838, 8783=>838, 8784=>838, 8785=>838, 8786=>839, 8787=>839, 8788=>1000, 8789=>1000, 8790=>838, 8791=>838, 8792=>838, 8793=>838, 8794=>838, + 8795=>838, 8796=>838, 8797=>838, 8798=>838, 8799=>838, 8800=>838, 8801=>838, 8802=>838, 8803=>838, 8804=>838, 8805=>838, 8806=>838, 8807=>838, 8808=>838, 8809=>838, 8810=>1047, + 8811=>1047, 8812=>464, 8813=>838, 8814=>838, 8815=>838, 8816=>838, 8817=>838, 8818=>838, 8819=>838, 8820=>838, 8821=>838, 8822=>838, 8823=>838, 8824=>838, 8825=>838, 8826=>838, + 8827=>838, 8828=>838, 8829=>838, 8830=>838, 8831=>838, 8832=>838, 8833=>838, 8834=>838, 8835=>838, 8836=>838, 8837=>838, 8838=>838, 8839=>838, 8840=>838, 8841=>838, 8842=>838, + 8843=>838, 8844=>732, 8845=>732, 8846=>732, 8847=>838, 8848=>838, 8849=>838, 8850=>838, 8851=>722, 8852=>722, 8853=>838, 8854=>838, 8855=>838, 8856=>838, 8857=>838, 8858=>838, + 8859=>838, 8860=>838, 8861=>838, 8862=>838, 8863=>838, 8864=>838, 8865=>838, 8866=>871, 8867=>871, 8868=>871, 8869=>871, 8870=>521, 8871=>521, 8872=>871, 8873=>871, 8874=>871, + 8875=>871, 8876=>871, 8877=>871, 8878=>871, 8879=>871, 8882=>838, 8883=>838, 8884=>838, 8885=>838, 8886=>1000, 8887=>1000, 8888=>838, 8889=>838, 8890=>521, 8891=>732, 8892=>732, + 8893=>732, 8896=>820, 8897=>820, 8898=>820, 8899=>820, 8900=>494, 8901=>318, 8902=>626, 8904=>1000, 8905=>1000, 8906=>1000, 8907=>1000, 8908=>1000, 8909=>838, 8918=>838, 8919=>838, + 8920=>1422, 8921=>1422, 8922=>838, 8923=>838, 8924=>838, 8925=>838, 8926=>838, 8927=>838, 8928=>838, 8929=>838, 8930=>838, 8931=>838, 8932=>838, 8933=>838, 8934=>838, 8935=>838, + 8936=>838, 8937=>838, 8938=>838, 8939=>838, 8940=>838, 8941=>838, 8946=>1000, 8947=>871, 8948=>718, 8949=>871, 8950=>871, 8951=>718, 8952=>871, 8953=>871, 8954=>1000, 8955=>871, + 8956=>718, 8957=>871, 8958=>718, 8959=>871, 8962=>635, 8966=>871, 8968=>390, 8969=>390, 8970=>390, 8971=>390, 8976=>838, 8977=>513, 8984=>1000, 8985=>838, 8992=>521, 8993=>521, + 8997=>1000, 9000=>1443, 9085=>757, 9115=>500, 9116=>500, 9117=>500, 9118=>500, 9119=>500, 9120=>500, 9121=>500, 9122=>500, 9123=>500, 9124=>500, 9125=>500, 9126=>500, 9127=>750, + 9128=>750, 9129=>750, 9130=>750, 9131=>750, 9132=>750, 9133=>750, 9134=>521, 9166=>838, 9167=>945, 9250=>635, 9251=>635, 9312=>896, 9313=>896, 9314=>896, 9315=>896, 9316=>896, + 9317=>896, 9318=>896, 9319=>896, 9320=>896, 9321=>896, 9600=>769, 9601=>769, 9602=>769, 9603=>769, 9604=>769, 9605=>769, 9606=>769, 9607=>769, 9608=>769, 9609=>769, 9610=>769, + 9611=>769, 9612=>769, 9613=>769, 9614=>769, 9615=>769, 9616=>769, 9617=>769, 9618=>769, 9619=>769, 9620=>769, 9621=>769, 9622=>769, 9623=>769, 9624=>769, 9625=>769, 9626=>769, + 9627=>769, 9628=>769, 9629=>769, 9630=>769, 9631=>769, 9632=>945, 9633=>945, 9634=>945, 9635=>945, 9636=>945, 9637=>945, 9638=>945, 9639=>945, 9640=>945, 9641=>945, 9642=>678, + 9643=>678, 9644=>945, 9645=>945, 9646=>550, 9647=>550, 9648=>769, 9649=>769, 9650=>769, 9651=>769, 9652=>502, 9653=>502, 9654=>769, 9655=>769, 9656=>502, 9657=>502, 9658=>769, + 9659=>769, 9660=>769, 9661=>769, 9662=>502, 9663=>502, 9664=>769, 9665=>769, 9666=>502, 9667=>502, 9668=>769, 9669=>769, 9670=>769, 9671=>769, 9672=>769, 9673=>873, 9674=>494, + 9675=>873, 9676=>873, 9677=>873, 9678=>873, 9679=>873, 9680=>873, 9681=>873, 9682=>873, 9683=>873, 9684=>873, 9685=>873, 9686=>527, 9687=>527, 9688=>791, 9689=>970, 9690=>970, + 9691=>970, 9692=>387, 9693=>387, 9694=>387, 9695=>387, 9696=>873, 9697=>873, 9698=>769, 9699=>769, 9700=>769, 9701=>769, 9702=>590, 9703=>945, 9704=>945, 9705=>945, 9706=>945, + 9707=>945, 9708=>769, 9709=>769, 9710=>769, 9711=>1119, 9712=>945, 9713=>945, 9714=>945, 9715=>945, 9716=>873, 9717=>873, 9718=>873, 9719=>873, 9720=>769, 9721=>769, 9722=>769, + 9723=>830, 9724=>830, 9725=>732, 9726=>732, 9727=>769, 9728=>896, 9729=>1000, 9730=>896, 9731=>896, 9732=>896, 9733=>896, 9734=>896, 9735=>573, 9736=>896, 9737=>896, 9738=>888, + 9739=>888, 9740=>671, 9741=>1013, 9742=>1246, 9743=>1250, 9744=>896, 9745=>896, 9746=>896, 9747=>532, 9748=>896, 9749=>896, 9750=>896, 9751=>896, 9752=>896, 9753=>896, 9754=>896, + 9755=>896, 9756=>896, 9757=>609, 9758=>896, 9759=>609, 9760=>896, 9761=>896, 9762=>896, 9763=>896, 9764=>669, 9765=>746, 9766=>649, 9767=>784, 9768=>545, 9769=>896, 9770=>896, + 9771=>896, 9772=>710, 9773=>896, 9774=>896, 9775=>896, 9776=>896, 9777=>896, 9778=>896, 9779=>896, 9780=>896, 9781=>896, 9782=>896, 9783=>896, 9784=>896, 9785=>896, 9786=>896, + 9787=>896, 9788=>896, 9789=>896, 9790=>896, 9791=>614, 9792=>731, 9793=>731, 9794=>896, 9795=>896, 9796=>896, 9797=>896, 9798=>896, 9799=>896, 9800=>896, 9801=>896, 9802=>896, + 9803=>896, 9804=>896, 9805=>896, 9806=>896, 9807=>896, 9808=>896, 9809=>896, 9810=>896, 9811=>896, 9812=>896, 9813=>896, 9814=>896, 9815=>896, 9816=>896, 9817=>896, 9818=>896, + 9819=>896, 9820=>896, 9821=>896, 9822=>896, 9823=>896, 9824=>896, 9825=>896, 9826=>896, 9827=>896, 9828=>896, 9829=>896, 9830=>896, 9831=>896, 9832=>896, 9833=>472, 9834=>638, + 9835=>896, 9836=>896, 9837=>472, 9838=>357, 9839=>484, 9840=>748, 9841=>766, 9842=>896, 9843=>896, 9844=>896, 9845=>896, 9846=>896, 9847=>896, 9848=>896, 9849=>896, 9850=>896, + 9851=>896, 9852=>896, 9853=>896, 9854=>896, 9855=>896, 9856=>869, 9857=>869, 9858=>869, 9859=>869, 9860=>869, 9861=>869, 9862=>896, 9863=>896, 9864=>896, 9865=>896, 9866=>896, + 9867=>896, 9868=>896, 9869=>896, 9870=>896, 9871=>896, 9872=>896, 9873=>896, 9874=>896, 9875=>896, 9876=>896, 9877=>541, 9878=>896, 9879=>896, 9880=>896, 9881=>896, 9882=>896, + 9883=>896, 9884=>896, 9888=>896, 9889=>702, 9890=>838, 9891=>838, 9892=>838, 9893=>838, 9894=>838, 9895=>838, 9896=>838, 9897=>838, 9898=>838, 9899=>838, 9900=>838, 9901=>838, + 9902=>838, 9903=>838, 9904=>844, 9905=>838, 9906=>731, 9985=>838, 9986=>838, 9987=>838, 9988=>838, 9990=>838, 9991=>838, 9992=>838, 9993=>838, 9996=>838, 9997=>838, 9998=>838, + 9999=>838, 10000=>838, 10001=>838, 10002=>838, 10003=>838, 10004=>838, 10005=>838, 10006=>838, 10007=>838, 10008=>838, 10009=>838, 10010=>838, 10011=>838, 10012=>838, 10013=>838, 10014=>838, + 10015=>838, 10016=>838, 10017=>838, 10018=>838, 10019=>838, 10020=>838, 10021=>838, 10022=>838, 10023=>838, 10025=>838, 10026=>838, 10027=>838, 10028=>838, 10029=>838, 10030=>838, 10031=>838, + 10032=>838, 10033=>838, 10034=>838, 10035=>838, 10036=>838, 10037=>838, 10038=>838, 10039=>838, 10040=>838, 10041=>838, 10042=>838, 10043=>838, 10044=>838, 10045=>838, 10046=>838, 10047=>838, + 10048=>838, 10049=>838, 10050=>838, 10051=>838, 10052=>838, 10053=>838, 10054=>838, 10055=>838, 10056=>838, 10057=>838, 10058=>838, 10059=>838, 10061=>896, 10063=>896, 10064=>896, 10065=>896, + 10066=>896, 10070=>896, 10072=>838, 10073=>838, 10074=>838, 10075=>322, 10076=>322, 10077=>538, 10078=>538, 10081=>838, 10082=>838, 10083=>838, 10084=>838, 10085=>838, 10086=>838, 10087=>838, + 10088=>838, 10089=>838, 10090=>838, 10091=>838, 10092=>838, 10093=>838, 10094=>838, 10095=>838, 10096=>838, 10097=>838, 10098=>838, 10099=>838, 10100=>838, 10101=>838, 10102=>896, 10103=>896, + 10104=>896, 10105=>896, 10106=>896, 10107=>896, 10108=>896, 10109=>896, 10110=>896, 10111=>896, 10112=>838, 10113=>838, 10114=>838, 10115=>838, 10116=>838, 10117=>838, 10118=>838, 10119=>838, + 10120=>838, 10121=>838, 10122=>838, 10123=>838, 10124=>838, 10125=>838, 10126=>838, 10127=>838, 10128=>838, 10129=>838, 10130=>838, 10131=>838, 10132=>838, 10136=>838, 10137=>838, 10138=>838, + 10139=>838, 10140=>838, 10141=>838, 10142=>838, 10143=>838, 10144=>838, 10145=>838, 10146=>838, 10147=>838, 10148=>838, 10149=>838, 10150=>838, 10151=>838, 10152=>838, 10153=>838, 10154=>838, + 10155=>838, 10156=>838, 10157=>838, 10158=>838, 10159=>838, 10161=>838, 10162=>838, 10163=>838, 10164=>838, 10165=>838, 10166=>838, 10167=>838, 10168=>838, 10169=>838, 10170=>838, 10171=>838, + 10172=>838, 10173=>838, 10174=>838, 10208=>494, 10214=>495, 10215=>495, 10216=>390, 10217=>390, 10218=>556, 10219=>556, 10224=>838, 10225=>838, 10226=>838, 10227=>838, 10228=>1157, 10229=>1434, + 10230=>1434, 10231=>1434, 10232=>1434, 10233=>1434, 10234=>1434, 10235=>1434, 10236=>1434, 10237=>1434, 10238=>1434, 10239=>1434, 10240=>732, 10241=>732, 10242=>732, 10243=>732, 10244=>732, 10245=>732, + 10246=>732, 10247=>732, 10248=>732, 10249=>732, 10250=>732, 10251=>732, 10252=>732, 10253=>732, 10254=>732, 10255=>732, 10256=>732, 10257=>732, 10258=>732, 10259=>732, 10260=>732, 10261=>732, + 10262=>732, 10263=>732, 10264=>732, 10265=>732, 10266=>732, 10267=>732, 10268=>732, 10269=>732, 10270=>732, 10271=>732, 10272=>732, 10273=>732, 10274=>732, 10275=>732, 10276=>732, 10277=>732, + 10278=>732, 10279=>732, 10280=>732, 10281=>732, 10282=>732, 10283=>732, 10284=>732, 10285=>732, 10286=>732, 10287=>732, 10288=>732, 10289=>732, 10290=>732, 10291=>732, 10292=>732, 10293=>732, + 10294=>732, 10295=>732, 10296=>732, 10297=>732, 10298=>732, 10299=>732, 10300=>732, 10301=>732, 10302=>732, 10303=>732, 10304=>732, 10305=>732, 10306=>732, 10307=>732, 10308=>732, 10309=>732, + 10310=>732, 10311=>732, 10312=>732, 10313=>732, 10314=>732, 10315=>732, 10316=>732, 10317=>732, 10318=>732, 10319=>732, 10320=>732, 10321=>732, 10322=>732, 10323=>732, 10324=>732, 10325=>732, + 10326=>732, 10327=>732, 10328=>732, 10329=>732, 10330=>732, 10331=>732, 10332=>732, 10333=>732, 10334=>732, 10335=>732, 10336=>732, 10337=>732, 10338=>732, 10339=>732, 10340=>732, 10341=>732, + 10342=>732, 10343=>732, 10344=>732, 10345=>732, 10346=>732, 10347=>732, 10348=>732, 10349=>732, 10350=>732, 10351=>732, 10352=>732, 10353=>732, 10354=>732, 10355=>732, 10356=>732, 10357=>732, + 10358=>732, 10359=>732, 10360=>732, 10361=>732, 10362=>732, 10363=>732, 10364=>732, 10365=>732, 10366=>732, 10367=>732, 10368=>732, 10369=>732, 10370=>732, 10371=>732, 10372=>732, 10373=>732, + 10374=>732, 10375=>732, 10376=>732, 10377=>732, 10378=>732, 10379=>732, 10380=>732, 10381=>732, 10382=>732, 10383=>732, 10384=>732, 10385=>732, 10386=>732, 10387=>732, 10388=>732, 10389=>732, + 10390=>732, 10391=>732, 10392=>732, 10393=>732, 10394=>732, 10395=>732, 10396=>732, 10397=>732, 10398=>732, 10399=>732, 10400=>732, 10401=>732, 10402=>732, 10403=>732, 10404=>732, 10405=>732, + 10406=>732, 10407=>732, 10408=>732, 10409=>732, 10410=>732, 10411=>732, 10412=>732, 10413=>732, 10414=>732, 10415=>732, 10416=>732, 10417=>732, 10418=>732, 10419=>732, 10420=>732, 10421=>732, + 10422=>732, 10423=>732, 10424=>732, 10425=>732, 10426=>732, 10427=>732, 10428=>732, 10429=>732, 10430=>732, 10431=>732, 10432=>732, 10433=>732, 10434=>732, 10435=>732, 10436=>732, 10437=>732, + 10438=>732, 10439=>732, 10440=>732, 10441=>732, 10442=>732, 10443=>732, 10444=>732, 10445=>732, 10446=>732, 10447=>732, 10448=>732, 10449=>732, 10450=>732, 10451=>732, 10452=>732, 10453=>732, + 10454=>732, 10455=>732, 10456=>732, 10457=>732, 10458=>732, 10459=>732, 10460=>732, 10461=>732, 10462=>732, 10463=>732, 10464=>732, 10465=>732, 10466=>732, 10467=>732, 10468=>732, 10469=>732, + 10470=>732, 10471=>732, 10472=>732, 10473=>732, 10474=>732, 10475=>732, 10476=>732, 10477=>732, 10478=>732, 10479=>732, 10480=>732, 10481=>732, 10482=>732, 10483=>732, 10484=>732, 10485=>732, + 10486=>732, 10487=>732, 10488=>732, 10489=>732, 10490=>732, 10491=>732, 10492=>732, 10493=>732, 10494=>732, 10495=>732, 10502=>838, 10503=>838, 10506=>838, 10507=>838, 10560=>683, 10561=>683, + 10702=>838, 10703=>1000, 10704=>1000, 10705=>1000, 10706=>1000, 10707=>1000, 10708=>1000, 10709=>1000, 10731=>494, 10752=>1000, 10753=>1000, 10754=>1000, 10764=>1325, 10765=>521, 10766=>521, 10767=>521, + 10768=>521, 10769=>521, 10770=>521, 10771=>521, 10772=>521, 10773=>521, 10774=>521, 10775=>521, 10776=>521, 10777=>521, 10778=>521, 10779=>521, 10780=>521, 10877=>838, 10878=>838, 10879=>838, + 10880=>838, 10881=>838, 10882=>838, 10883=>838, 10884=>838, 10885=>838, 10886=>838, 10887=>838, 10888=>838, 10889=>838, 10890=>838, 10891=>838, 10892=>838, 10893=>838, 10894=>838, 10895=>838, + 10896=>838, 10897=>838, 10898=>838, 10899=>838, 10900=>838, 10901=>838, 10902=>838, 10903=>838, 10904=>838, 10905=>838, 10906=>838, 10907=>838, 10908=>838, 10909=>838, 10910=>838, 10911=>838, + 10912=>838, 10926=>838, 10927=>838, 10928=>838, 10929=>838, 10930=>838, 10931=>838, 10932=>838, 10933=>838, 10934=>838, 10935=>838, 10936=>838, 10937=>838, 10938=>838, 11001=>838, 11002=>838, + 11008=>838, 11009=>838, 11010=>838, 11011=>838, 11012=>838, 11013=>838, 11014=>838, 11015=>838, 11016=>838, 11017=>838, 11018=>838, 11019=>838, 11020=>838, 11021=>838, 11022=>836, 11023=>836, + 11024=>836, 11025=>836, 11026=>945, 11027=>945, 11028=>945, 11029=>945, 11030=>769, 11031=>769, 11032=>769, 11033=>769, 11034=>945, 11040=>869, 11041=>873, 11042=>873, 11043=>873, 11360=>557, + 11361=>278, 11362=>557, 11363=>603, 11364=>695, 11365=>613, 11366=>392, 11367=>752, 11368=>634, 11369=>656, 11370=>579, 11371=>685, 11372=>525, 11380=>592, 11381=>654, 11382=>568, 11383=>660, + 61440=>977, 61441=>977, 61960=>781, 62047=>592, 63173=>612, 64256=>689, 64257=>630, 64258=>630, 64259=>967, 64260=>967, 64261=>686, 64262=>861, 64275=>1202, 64276=>1202, 64277=>1196, 64278=>1186, + 64279=>1529, 64285=>296, 64287=>494, 64288=>636, 64297=>838, 64298=>799, 64299=>799, 64300=>799, 64301=>799, 64302=>663, 64303=>663, 64304=>663, 64305=>655, 64306=>454, 64307=>607, 64308=>690, + 64309=>336, 64310=>437, 64312=>683, 64313=>336, 64314=>642, 64315=>666, 64316=>635, 64318=>736, 64320=>456, 64321=>771, 64323=>651, 64324=>666, 64326=>639, 64327=>688, 64328=>642, 64329=>799, + 64330=>726, 64331=>272, 64332=>655, 64333=>666, 64334=>666, 64338=>941, 64339=>982, 64340=>278, 64341=>302, 64342=>941, 64343=>982, 64344=>278, 64345=>302, 64346=>941, 64347=>982, 64348=>278, + 64349=>302, 64350=>941, 64351=>982, 64352=>278, 64353=>302, 64354=>941, 64355=>982, 64356=>278, 64357=>302, 64358=>941, 64359=>982, 64360=>278, 64361=>302, 64362=>1037, 64363=>1035, 64364=>478, + 64365=>506, 64366=>1037, 64367=>1035, 64368=>478, 64369=>506, 64370=>646, 64371=>646, 64372=>618, 64373=>646, 64374=>646, 64375=>646, 64376=>618, 64377=>646, 64378=>646, 64379=>646, 64380=>618, + 64381=>646, 64382=>646, 64383=>646, 64384=>618, 64385=>646, 64394=>483, 64395=>552, 64396=>483, 64397=>552, 64398=>895, 64399=>895, 64400=>476, 64401=>552, 64402=>895, 64403=>895, 64404=>476, + 64405=>552, 64414=>734, 64415=>761, 64473=>483, 64474=>517, 64488=>278, 64489=>302, 64508=>783, 64509=>833, 64510=>278, 64511=>302, 65024=>0, 65025=>0, 65026=>0, 65027=>0, 65028=>0, + 65029=>0, 65030=>0, 65031=>0, 65032=>0, 65033=>0, 65034=>0, 65035=>0, 65036=>0, 65037=>0, 65038=>0, 65039=>0, 65136=>293, 65137=>293, 65138=>293, 65139=>262, 65140=>293, + 65142=>293, 65143=>293, 65144=>293, 65145=>293, 65146=>293, 65147=>293, 65148=>293, 65149=>293, 65150=>293, 65151=>293, 65152=>470, 65153=>278, 65154=>305, 65155=>278, 65156=>305, 65157=>483, + 65158=>517, 65159=>278, 65160=>305, 65161=>783, 65162=>833, 65163=>278, 65164=>302, 65165=>278, 65166=>305, 65167=>941, 65168=>982, 65169=>278, 65170=>302, 65171=>524, 65172=>536, 65173=>941, + 65174=>982, 65175=>278, 65176=>302, 65177=>941, 65178=>982, 65179=>278, 65180=>302, 65181=>646, 65182=>646, 65183=>618, 65184=>646, 65185=>646, 65186=>646, 65187=>618, 65188=>646, 65189=>646, + 65190=>646, 65191=>618, 65192=>646, 65193=>445, 65194=>525, 65195=>445, 65196=>525, 65197=>483, 65198=>552, 65199=>483, 65200=>552, 65201=>1221, 65202=>1275, 65203=>838, 65204=>892, 65205=>1221, + 65206=>1275, 65207=>838, 65208=>892, 65209=>1209, 65210=>1225, 65211=>849, 65212=>867, 65213=>1209, 65214=>1225, 65215=>849, 65216=>867, 65217=>925, 65218=>949, 65219=>796, 65220=>820, 65221=>925, + 65222=>949, 65223=>796, 65224=>820, 65225=>597, 65226=>532, 65227=>597, 65228=>482, 65229=>597, 65230=>532, 65231=>523, 65232=>482, 65233=>1037, 65234=>1035, 65235=>478, 65236=>506, 65237=>776, + 65238=>834, 65239=>478, 65240=>506, 65241=>824, 65242=>843, 65243=>476, 65244=>552, 65245=>727, 65246=>757, 65247=>305, 65248=>331, 65249=>619, 65250=>666, 65251=>536, 65252=>578, 65253=>734, + 65254=>761, 65255=>278, 65256=>302, 65257=>524, 65258=>536, 65259=>527, 65260=>461, 65261=>483, 65262=>517, 65263=>783, 65264=>833, 65265=>783, 65266=>833, 65267=>278, 65268=>302, 65269=>570, + 65270=>597, 65271=>570, 65272=>597, 65273=>570, 65274=>597, 65275=>570, 65276=>597, 65279=>0, 65533=>1025}; + font[:enc]=''; + font[:diff]=''; + font[:file]='DejaVuSans.z'; + font[:ctg]='DejaVuSans.ctg.z'; + font[:originalsize]=520788; +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/dejavusansb.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/dejavusansb.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,287 @@ +TCPDFFontDescriptor.define('dejavusansb') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='DejaVuSans-Bold'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>32,'FontBBox'=>'[-1069 -388 1975 1123]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600}; + font[:up]=-42; + font[:ut]=44; + font[:cw]={ + 0=>600, 32=>348, 33=>456, 34=>521, 35=>838, 36=>696, 37=>1002, 38=>872, 39=>306, 40=>457, 41=>457, 42=>523, 43=>838, 44=>380, 45=>415, 46=>380, + 47=>365, 48=>696, 49=>696, 50=>696, 51=>696, 52=>696, 53=>696, 54=>696, 55=>696, 56=>696, 57=>696, 58=>400, 59=>400, 60=>838, 61=>838, 62=>838, + 63=>580, 64=>1000, 65=>774, 66=>762, 67=>734, 68=>830, 69=>683, 70=>683, 71=>821, 72=>837, 73=>372, 74=>372, 75=>775, 76=>637, 77=>995, 78=>837, + 79=>850, 80=>733, 81=>850, 82=>770, 83=>720, 84=>682, 85=>812, 86=>774, 87=>1103, 88=>771, 89=>724, 90=>725, 91=>457, 92=>365, 93=>457, 94=>838, + 95=>500, 96=>500, 97=>675, 98=>716, 99=>593, 100=>716, 101=>678, 102=>435, 103=>716, 104=>712, 105=>343, 106=>343, 107=>665, 108=>343, 109=>1042, 110=>712, + 111=>687, 112=>716, 113=>716, 114=>493, 115=>595, 116=>478, 117=>712, 118=>652, 119=>924, 120=>645, 121=>652, 122=>582, 123=>712, 124=>365, 125=>712, 126=>838, + 8364=>696, 1027=>637, 8218=>380, 402=>435, 8222=>657, 8230=>1000, 8224=>500, 8225=>500, 710=>500, 8240=>1440, 352=>720, 8249=>412, 338=>1167, 1036=>817, 381=>725, 1039=>837, + 8216=>380, 8217=>380, 8220=>657, 8221=>657, 8226=>639, 8211=>500, 8212=>1000, 732=>500, 8482=>1000, 353=>595, 8250=>412, 339=>1094, 1116=>679, 382=>582, 376=>724, 160=>348, + 161=>456, 162=>696, 163=>696, 164=>636, 165=>696, 166=>365, 167=>500, 168=>500, 169=>1000, 170=>564, 171=>646, 172=>838, 173=>415, 174=>1000, 175=>500, 176=>500, + 177=>838, 178=>438, 179=>438, 180=>500, 181=>736, 182=>636, 183=>380, 184=>500, 185=>438, 186=>564, 187=>646, 188=>1035, 189=>1035, 190=>1035, 191=>580, 192=>774, + 193=>774, 194=>774, 195=>774, 196=>774, 197=>774, 198=>1085, 199=>734, 200=>683, 201=>683, 202=>683, 203=>683, 204=>372, 205=>372, 206=>372, 207=>372, 208=>838, + 209=>837, 210=>850, 211=>850, 212=>850, 213=>850, 214=>850, 215=>838, 216=>850, 217=>812, 218=>812, 219=>812, 220=>812, 221=>724, 222=>738, 223=>719, 224=>675, + 225=>675, 226=>675, 227=>675, 228=>675, 229=>675, 230=>1048, 231=>593, 232=>678, 233=>678, 234=>678, 235=>678, 236=>343, 237=>343, 238=>343, 239=>343, 240=>687, + 241=>712, 242=>687, 243=>687, 244=>687, 245=>687, 246=>687, 247=>838, 248=>687, 249=>712, 250=>712, 251=>712, 252=>712, 253=>652, 254=>716, 255=>652, 256=>774, + 257=>675, 258=>774, 259=>675, 260=>774, 261=>675, 262=>734, 263=>593, 264=>734, 265=>593, 266=>734, 267=>593, 268=>734, 269=>593, 270=>830, 271=>716, 272=>838, + 273=>716, 274=>683, 275=>678, 276=>683, 277=>678, 278=>683, 279=>678, 280=>683, 281=>678, 282=>683, 283=>678, 284=>821, 285=>716, 286=>821, 287=>716, 288=>821, + 289=>716, 290=>821, 291=>716, 292=>837, 293=>712, 294=>974, 295=>790, 296=>372, 297=>343, 298=>372, 299=>343, 300=>372, 301=>343, 302=>372, 303=>343, 304=>372, + 305=>343, 306=>744, 307=>686, 308=>372, 309=>343, 310=>775, 311=>665, 312=>665, 313=>637, 314=>343, 315=>637, 316=>343, 317=>637, 318=>479, 319=>637, 320=>557, + 321=>642, 322=>371, 323=>837, 324=>712, 325=>837, 326=>712, 327=>837, 328=>712, 329=>983, 330=>837, 331=>712, 332=>850, 333=>687, 334=>850, 335=>687, 336=>850, + 337=>687, 340=>770, 341=>493, 342=>770, 343=>493, 344=>770, 345=>493, 346=>720, 347=>595, 348=>720, 349=>595, 350=>720, 351=>595, 354=>682, 355=>478, 356=>682, + 357=>478, 358=>682, 359=>478, 360=>812, 361=>712, 362=>812, 363=>712, 364=>812, 365=>712, 366=>812, 367=>712, 368=>812, 369=>712, 370=>812, 371=>712, 372=>1103, + 373=>924, 374=>724, 375=>652, 377=>725, 378=>582, 379=>725, 380=>582, 383=>435, 384=>716, 385=>811, 386=>762, 387=>716, 388=>762, 389=>716, 390=>734, 391=>734, + 392=>593, 393=>838, 394=>879, 395=>757, 396=>716, 397=>688, 398=>683, 399=>849, 400=>696, 401=>683, 403=>821, 404=>793, 405=>1045, 406=>436, 407=>389, 408=>775, + 409=>665, 410=>360, 411=>592, 412=>1042, 413=>837, 414=>712, 415=>850, 416=>874, 417=>687, 418=>1114, 419=>962, 420=>782, 421=>716, 422=>770, 423=>720, 424=>595, + 425=>683, 426=>552, 427=>478, 428=>707, 429=>478, 430=>682, 431=>835, 432=>712, 433=>769, 434=>813, 435=>797, 436=>778, 437=>725, 438=>582, 439=>772, 440=>772, + 441=>641, 442=>582, 443=>696, 444=>772, 445=>641, 446=>573, 447=>716, 448=>372, 449=>659, 450=>544, 451=>372, 452=>1555, 453=>1412, 454=>1298, 455=>1009, 456=>980, + 457=>686, 458=>1209, 459=>1180, 460=>1055, 461=>774, 462=>675, 463=>372, 464=>343, 465=>850, 466=>687, 467=>812, 468=>712, 469=>812, 470=>712, 471=>812, 472=>712, + 473=>812, 474=>712, 475=>812, 476=>712, 477=>678, 478=>774, 479=>675, 480=>774, 481=>675, 482=>1085, 483=>1048, 484=>821, 485=>716, 486=>821, 487=>716, 488=>775, + 489=>665, 490=>850, 491=>687, 492=>850, 493=>687, 494=>772, 495=>582, 496=>343, 497=>1555, 498=>1412, 499=>1298, 500=>821, 501=>716, 502=>1289, 503=>787, 504=>837, + 505=>712, 506=>774, 507=>675, 508=>1085, 509=>1048, 510=>850, 511=>687, 512=>774, 513=>675, 514=>774, 515=>675, 516=>683, 517=>678, 518=>683, 519=>678, 520=>372, + 521=>343, 522=>372, 523=>343, 524=>850, 525=>687, 526=>850, 527=>687, 528=>770, 529=>493, 530=>770, 531=>493, 532=>812, 533=>712, 534=>812, 535=>712, 536=>720, + 537=>595, 538=>682, 539=>478, 540=>690, 541=>607, 542=>837, 543=>712, 544=>837, 545=>865, 546=>809, 547=>659, 548=>725, 549=>582, 550=>774, 551=>675, 552=>683, + 553=>678, 554=>850, 555=>687, 556=>850, 557=>687, 558=>850, 559=>687, 560=>850, 561=>687, 562=>724, 563=>652, 564=>492, 565=>867, 566=>512, 567=>343, 568=>1088, + 569=>1088, 570=>774, 571=>734, 572=>593, 573=>637, 574=>682, 575=>595, 576=>582, 577=>782, 578=>614, 579=>762, 580=>812, 581=>774, 582=>683, 583=>678, 584=>372, + 585=>343, 586=>860, 587=>791, 588=>770, 589=>493, 590=>724, 591=>652, 592=>675, 593=>716, 594=>716, 595=>716, 596=>593, 597=>593, 598=>717, 599=>792, 600=>678, + 601=>678, 602=>876, 603=>557, 604=>545, 605=>815, 606=>731, 607=>343, 608=>792, 609=>716, 610=>627, 611=>735, 612=>635, 613=>712, 614=>712, 615=>712, 616=>545, + 617=>440, 618=>545, 619=>559, 620=>693, 621=>343, 622=>841, 623=>1042, 624=>1042, 625=>1042, 626=>712, 627=>793, 628=>642, 629=>687, 630=>909, 631=>681, 632=>796, + 633=>538, 634=>538, 635=>650, 636=>493, 637=>493, 638=>596, 639=>596, 640=>642, 641=>642, 642=>595, 643=>415, 644=>435, 645=>605, 646=>552, 647=>478, 648=>478, + 649=>920, 650=>769, 651=>670, 652=>652, 653=>924, 654=>652, 655=>724, 656=>694, 657=>684, 658=>641, 659=>641, 660=>573, 661=>573, 662=>573, 663=>573, 664=>850, + 665=>633, 666=>731, 667=>685, 668=>691, 669=>343, 670=>732, 671=>539, 672=>792, 673=>573, 674=>573, 675=>1156, 676=>1214, 677=>1155, 678=>974, 679=>769, 680=>929, + 681=>1026, 682=>792, 683=>780, 684=>591, 685=>415, 686=>677, 687=>789, 688=>456, 689=>456, 690=>219, 691=>315, 692=>315, 693=>315, 694=>411, 695=>591, 696=>417, + 697=>302, 698=>521, 699=>380, 700=>380, 701=>380, 702=>366, 703=>366, 704=>326, 705=>326, 706=>500, 707=>500, 708=>500, 709=>500, 711=>500, 712=>306, 713=>500, + 714=>500, 715=>500, 716=>306, 717=>500, 718=>500, 719=>500, 720=>337, 721=>337, 722=>366, 723=>366, 724=>500, 725=>500, 726=>500, 727=>500, 728=>500, 729=>500, + 730=>500, 731=>500, 733=>500, 734=>351, 735=>500, 736=>412, 737=>219, 738=>381, 739=>413, 740=>326, 741=>500, 742=>500, 743=>500, 744=>500, 745=>500, 748=>500, + 749=>500, 750=>500, 755=>500, 759=>500, 768=>0, 769=>0, 770=>0, 771=>0, 772=>0, 773=>0, 774=>0, 775=>0, 776=>0, 777=>0, 778=>0, 779=>0, + 780=>0, 781=>0, 782=>0, 783=>0, 784=>0, 785=>0, 786=>0, 787=>0, 788=>0, 789=>0, 790=>0, 791=>0, 792=>0, 793=>0, 794=>0, 795=>0, + 796=>0, 797=>0, 798=>0, 799=>0, 800=>0, 801=>0, 802=>0, 803=>0, 804=>0, 805=>0, 806=>0, 807=>0, 808=>0, 809=>0, 810=>0, 811=>0, + 812=>0, 813=>0, 814=>0, 815=>0, 816=>0, 817=>0, 818=>0, 819=>0, 820=>0, 821=>0, 822=>0, 823=>0, 824=>0, 825=>0, 826=>0, 827=>0, + 828=>0, 829=>0, 830=>0, 831=>0, 832=>0, 833=>0, 834=>0, 835=>0, 836=>0, 837=>0, 838=>0, 839=>0, 840=>0, 841=>0, 842=>0, 843=>0, + 844=>0, 845=>0, 846=>0, 847=>0, 849=>0, 850=>0, 851=>0, 855=>0, 856=>0, 860=>0, 861=>0, 862=>0, 863=>0, 864=>0, 865=>0, 866=>0, + 884=>302, 885=>302, 890=>500, 891=>593, 892=>550, 893=>549, 894=>337, 900=>441, 901=>500, 902=>797, 903=>380, 904=>846, 905=>1009, 906=>563, 908=>891, 910=>980, + 911=>894, 912=>390, 913=>774, 914=>762, 915=>637, 916=>774, 917=>683, 918=>725, 919=>837, 920=>850, 921=>372, 922=>775, 923=>774, 924=>995, 925=>837, 926=>632, + 927=>850, 928=>837, 929=>733, 931=>683, 932=>682, 933=>724, 934=>850, 935=>771, 936=>850, 937=>850, 938=>372, 939=>724, 940=>687, 941=>557, 942=>712, 943=>390, + 944=>675, 945=>687, 946=>716, 947=>681, 948=>687, 949=>557, 950=>591, 951=>712, 952=>687, 953=>390, 954=>710, 955=>633, 956=>736, 957=>681, 958=>591, 959=>687, + 960=>791, 961=>716, 962=>593, 963=>779, 964=>638, 965=>675, 966=>782, 967=>645, 968=>794, 969=>869, 970=>390, 971=>675, 972=>687, 973=>675, 974=>869, 976=>651, + 977=>661, 978=>746, 979=>981, 980=>746, 981=>796, 982=>869, 983=>744, 984=>850, 985=>687, 986=>734, 987=>593, 988=>683, 989=>494, 990=>702, 991=>660, 992=>919, + 993=>627, 994=>1093, 995=>837, 996=>832, 997=>716, 998=>928, 999=>744, 1000=>733, 1001=>650, 1002=>789, 1003=>671, 1004=>752, 1005=>716, 1006=>682, 1007=>590, 1008=>744, + 1009=>716, 1010=>593, 1011=>343, 1012=>850, 1013=>645, 1014=>644, 1015=>738, 1016=>716, 1017=>734, 1018=>995, 1019=>732, 1020=>716, 1021=>698, 1022=>734, 1023=>698, 1024=>683, + 1025=>683, 1026=>878, 1028=>734, 1029=>720, 1030=>372, 1031=>372, 1032=>372, 1033=>1154, 1034=>1130, 1035=>878, 1037=>837, 1038=>771, 1040=>774, 1041=>762, 1042=>762, 1043=>637, + 1044=>891, 1045=>683, 1046=>1224, 1047=>710, 1048=>837, 1049=>837, 1050=>817, 1051=>831, 1052=>995, 1053=>837, 1054=>850, 1055=>837, 1056=>733, 1057=>734, 1058=>682, 1059=>771, + 1060=>992, 1061=>771, 1062=>928, 1063=>808, 1064=>1235, 1065=>1326, 1066=>939, 1067=>1036, 1068=>762, 1069=>734, 1070=>1174, 1071=>770, 1072=>675, 1073=>698, 1074=>633, 1075=>522, + 1076=>808, 1077=>678, 1078=>995, 1079=>581, 1080=>701, 1081=>701, 1082=>679, 1083=>732, 1084=>817, 1085=>691, 1086=>687, 1087=>691, 1088=>716, 1089=>593, 1090=>580, 1091=>652, + 1092=>992, 1093=>645, 1094=>741, 1095=>687, 1096=>1062, 1097=>1105, 1098=>751, 1099=>904, 1100=>632, 1101=>593, 1102=>972, 1103=>642, 1104=>678, 1105=>678, 1106=>714, 1107=>522, + 1108=>593, 1109=>595, 1110=>343, 1111=>343, 1112=>343, 1113=>991, 1114=>956, 1115=>734, 1117=>701, 1118=>652, 1119=>691, 1120=>1093, 1121=>869, 1122=>840, 1123=>736, 1124=>1012, + 1125=>839, 1126=>992, 1127=>832, 1128=>1358, 1129=>1121, 1130=>850, 1131=>687, 1132=>1236, 1133=>1007, 1134=>696, 1135=>557, 1136=>1075, 1137=>1061, 1138=>850, 1139=>667, 1140=>850, + 1141=>695, 1142=>850, 1143=>695, 1144=>1148, 1145=>1043, 1146=>1074, 1147=>863, 1148=>1405, 1149=>1173, 1150=>1093, 1151=>869, 1152=>734, 1153=>593, 1154=>652, 1155=>0, 1156=>0, + 1157=>0, 1158=>0, 1160=>418, 1161=>418, 1162=>957, 1163=>807, 1164=>762, 1165=>611, 1166=>733, 1167=>716, 1168=>637, 1169=>522, 1170=>666, 1171=>543, 1172=>808, 1173=>669, + 1174=>1224, 1175=>995, 1176=>710, 1177=>581, 1178=>775, 1179=>679, 1180=>817, 1181=>679, 1182=>817, 1183=>679, 1184=>1015, 1185=>826, 1186=>956, 1187=>808, 1188=>1103, 1189=>874, + 1190=>1273, 1191=>1017, 1192=>875, 1193=>710, 1194=>734, 1195=>593, 1196=>682, 1197=>580, 1198=>724, 1199=>652, 1200=>724, 1201=>652, 1202=>771, 1203=>645, 1204=>1112, 1205=>1000, + 1206=>808, 1207=>687, 1208=>808, 1209=>687, 1210=>808, 1211=>712, 1212=>1026, 1213=>810, 1214=>1026, 1215=>810, 1216=>372, 1217=>1224, 1218=>995, 1219=>775, 1220=>630, 1221=>951, + 1222=>805, 1223=>837, 1224=>691, 1225=>957, 1226=>807, 1227=>808, 1228=>687, 1229=>1115, 1230=>933, 1231=>343, 1232=>774, 1233=>675, 1234=>774, 1235=>675, 1236=>1085, 1237=>1048, + 1238=>683, 1239=>678, 1240=>849, 1241=>678, 1242=>849, 1243=>678, 1244=>1224, 1245=>995, 1246=>710, 1247=>581, 1248=>772, 1249=>641, 1250=>837, 1251=>701, 1252=>837, 1253=>701, + 1254=>850, 1255=>687, 1256=>850, 1257=>687, 1258=>850, 1259=>687, 1260=>734, 1261=>593, 1262=>771, 1263=>652, 1264=>771, 1265=>652, 1266=>771, 1267=>652, 1268=>808, 1269=>687, + 1270=>637, 1271=>522, 1272=>1036, 1273=>904, 1274=>666, 1275=>543, 1276=>771, 1277=>645, 1278=>771, 1279=>645, 1280=>762, 1281=>608, 1282=>1159, 1283=>893, 1284=>1119, 1285=>920, + 1286=>828, 1287=>693, 1288=>1242, 1289=>1017, 1290=>1248, 1291=>1013, 1292=>839, 1293=>638, 1294=>938, 1295=>803, 1296=>696, 1297=>557, 1298=>831, 1299=>732, 1329=>984, 1330=>812, + 1331=>984, 1332=>984, 1333=>812, 1334=>777, 1335=>812, 1336=>812, 1337=>975, 1338=>984, 1339=>812, 1340=>710, 1341=>1078, 1342=>1136, 1343=>812, 1344=>710, 1345=>757, 1346=>984, + 1347=>876, 1348=>984, 1349=>793, 1350=>984, 1351=>812, 1352=>812, 1353=>812, 1354=>958, 1355=>777, 1356=>984, 1357=>812, 1358=>984, 1359=>720, 1360=>812, 1361=>793, 1362=>895, + 1363=>850, 1364=>936, 1365=>850, 1366=>720, 1369=>366, 1370=>380, 1371=>550, 1372=>550, 1373=>380, 1374=>546, 1375=>521, 1377=>1042, 1378=>712, 1379=>866, 1380=>868, 1381=>712, + 1382=>817, 1383=>653, 1384=>712, 1385=>811, 1386=>817, 1387=>712, 1388=>498, 1389=>1018, 1390=>716, 1391=>712, 1392=>712, 1393=>716, 1394=>819, 1395=>712, 1396=>751, 1397=>343, + 1398=>882, 1399=>559, 1400=>712, 1401=>559, 1402=>1042, 1403=>559, 1404=>863, 1405=>712, 1406=>813, 1407=>1042, 1408=>712, 1409=>716, 1410=>571, 1411=>1042, 1412=>778, 1413=>687, + 1414=>720, 1415=>862, 1417=>400, 1418=>487, 1456=>0, 1457=>0, 1458=>0, 1459=>0, 1460=>0, 1461=>0, 1462=>0, 1463=>0, 1464=>0, 1465=>0, 1467=>0, 1468=>0, + 1469=>0, 1471=>0, 1472=>372, 1473=>0, 1474=>0, 1475=>372, 1478=>532, 1479=>0, 1488=>751, 1489=>731, 1490=>537, 1491=>684, 1492=>778, 1493=>372, 1494=>521, 1495=>778, + 1496=>770, 1497=>372, 1498=>778, 1499=>750, 1500=>718, 1501=>778, 1502=>856, 1503=>372, 1504=>532, 1505=>855, 1506=>720, 1507=>802, 1508=>777, 1509=>628, 1510=>751, 1511=>803, + 1512=>778, 1513=>963, 1514=>822, 1520=>692, 1521=>692, 1522=>692, 1548=>380, 1557=>0, 1563=>400, 1567=>580, 1569=>511, 1570=>343, 1571=>343, 1572=>622, 1573=>343, 1574=>917, + 1575=>343, 1576=>1005, 1577=>590, 1578=>1005, 1579=>1005, 1580=>721, 1581=>721, 1582=>721, 1583=>513, 1584=>513, 1585=>576, 1586=>576, 1587=>1380, 1588=>1380, 1589=>1345, 1590=>1345, + 1591=>1039, 1592=>1039, 1593=>683, 1594=>683, 1600=>342, 1601=>1162, 1602=>894, 1603=>917, 1604=>868, 1605=>733, 1606=>854, 1607=>590, 1608=>622, 1609=>917, 1610=>917, 1611=>0, + 1612=>0, 1613=>0, 1614=>0, 1615=>0, 1616=>0, 1617=>0, 1618=>0, 1619=>0, 1620=>0, 1621=>0, 1626=>500, 1632=>610, 1633=>610, 1634=>610, 1635=>610, 1636=>610, + 1637=>610, 1638=>610, 1639=>610, 1640=>610, 1641=>610, 1642=>610, 1643=>374, 1644=>380, 1645=>545, 1646=>1005, 1647=>894, 1652=>292, 1657=>1005, 1658=>1005, 1659=>1005, 1660=>1005, + 1661=>1005, 1662=>1005, 1663=>1005, 1664=>1005, 1665=>721, 1666=>721, 1667=>721, 1668=>721, 1669=>721, 1670=>721, 1671=>721, 1681=>576, 1682=>576, 1685=>681, 1688=>576, 1697=>1162, + 1700=>1162, 1702=>1162, 1705=>1024, 1711=>1024, 1717=>868, 1722=>854, 1727=>721, 1734=>622, 1740=>917, 1742=>917, 1749=>590, 1776=>610, 1777=>610, 1778=>610, 1779=>610, 1780=>610, + 1781=>610, 1782=>610, 1783=>610, 1784=>610, 1785=>610, 3647=>743, 3713=>790, 3714=>748, 3716=>749, 3719=>569, 3720=>742, 3722=>744, 3725=>761, 3732=>706, 3733=>704, 3734=>747, + 3735=>819, 3737=>730, 3738=>727, 3739=>727, 3740=>922, 3741=>827, 3742=>866, 3743=>866, 3745=>836, 3746=>761, 3747=>770, 3749=>769, 3751=>713, 3754=>827, 3755=>1031, 3757=>724, + 3758=>784, 3759=>934, 3760=>688, 3761=>0, 3762=>610, 3763=>610, 3764=>0, 3765=>0, 3766=>0, 3767=>0, 3768=>0, 3769=>0, 3771=>0, 3772=>0, 3773=>670, 3776=>516, + 3777=>860, 3778=>516, 3779=>650, 3780=>632, 3782=>759, 3784=>0, 3785=>0, 3786=>0, 3787=>0, 3788=>0, 3789=>0, 3804=>1363, 3805=>1363, 5121=>774, 5122=>774, 5123=>774, + 5124=>774, 5125=>905, 5126=>905, 5127=>905, 5129=>905, 5130=>905, 5131=>905, 5132=>1018, 5133=>1009, 5134=>1018, 5135=>1009, 5136=>1018, 5137=>1009, 5138=>1149, 5139=>1140, 5140=>1149, + 5141=>1140, 5142=>905, 5143=>1149, 5144=>1142, 5145=>1149, 5146=>1142, 5147=>905, 5149=>310, 5150=>529, 5151=>425, 5152=>425, 5153=>395, 5154=>395, 5155=>395, 5156=>395, 5157=>564, + 5158=>470, 5159=>310, 5160=>395, 5161=>395, 5162=>395, 5163=>1213, 5164=>986, 5165=>1216, 5166=>1297, 5167=>774, 5168=>774, 5169=>774, 5170=>774, 5171=>886, 5172=>886, 5173=>886, + 5175=>886, 5176=>886, 5177=>886, 5178=>1018, 5179=>1009, 5180=>1018, 5181=>1009, 5182=>1018, 5183=>1009, 5184=>1149, 5185=>1140, 5186=>1149, 5187=>1140, 5188=>1149, 5189=>1142, 5190=>1149, + 5191=>1142, 5192=>886, 5193=>576, 5194=>229, 5196=>812, 5197=>812, 5198=>812, 5199=>812, 5200=>815, 5201=>815, 5202=>815, 5204=>815, 5205=>815, 5206=>815, 5207=>1056, 5208=>1048, + 5209=>1056, 5210=>1048, 5211=>1056, 5212=>1048, 5213=>1060, 5214=>1054, 5215=>1060, 5216=>1054, 5217=>1060, 5218=>1052, 5219=>1060, 5220=>1052, 5221=>1060, 5222=>483, 5223=>1005, 5224=>1005, + 5225=>1023, 5226=>1017, 5227=>743, 5228=>743, 5229=>743, 5230=>743, 5231=>743, 5232=>755, 5233=>743, 5234=>743, 5235=>743, 5236=>1029, 5237=>975, 5238=>980, 5239=>975, 5240=>980, + 5241=>975, 5242=>1029, 5243=>975, 5244=>1029, 5245=>975, 5246=>980, 5247=>975, 5248=>980, 5249=>975, 5250=>980, 5251=>501, 5252=>501, 5253=>938, 5254=>938, 5255=>938, 5256=>938, + 5257=>743, 5258=>743, 5259=>743, 5260=>743, 5261=>743, 5262=>755, 5263=>743, 5264=>743, 5265=>743, 5266=>1029, 5267=>975, 5268=>1029, 5269=>975, 5270=>1029, 5271=>975, 5272=>1029, + 5273=>975, 5274=>1029, 5275=>975, 5276=>1029, 5277=>975, 5278=>1029, 5279=>975, 5280=>1029, 5281=>501, 5282=>501, 5283=>626, 5284=>626, 5285=>626, 5286=>626, 5287=>626, 5288=>667, + 5289=>626, 5290=>626, 5291=>626, 5292=>881, 5293=>854, 5294=>863, 5295=>874, 5296=>863, 5297=>874, 5298=>881, 5299=>874, 5300=>881, 5301=>874, 5302=>863, 5303=>874, 5304=>863, + 5305=>874, 5306=>863, 5307=>436, 5308=>548, 5309=>436, 5312=>988, 5313=>988, 5314=>988, 5315=>988, 5316=>931, 5317=>931, 5318=>931, 5319=>931, 5320=>931, 5321=>1238, 5322=>1247, + 5323=>1200, 5324=>1228, 5325=>1200, 5326=>1228, 5327=>931, 5328=>660, 5329=>497, 5330=>660, 5331=>988, 5332=>988, 5333=>988, 5334=>988, 5335=>931, 5336=>931, 5337=>931, 5338=>931, + 5339=>931, 5340=>1231, 5341=>1247, 5342=>1283, 5343=>1228, 5344=>1283, 5345=>1228, 5346=>1228, 5347=>1214, 5348=>1228, 5349=>1214, 5350=>1283, 5351=>1228, 5352=>1283, 5353=>1228, 5354=>660, + 5356=>886, 5357=>730, 5358=>730, 5359=>730, 5360=>730, 5361=>730, 5362=>755, 5363=>730, 5364=>730, 5365=>730, 5366=>998, 5367=>958, 5368=>967, 5369=>989, 5370=>967, 5371=>989, + 5372=>998, 5373=>958, 5374=>998, 5375=>958, 5376=>967, 5377=>989, 5378=>967, 5379=>989, 5380=>967, 5381=>493, 5382=>460, 5383=>493, 5392=>923, 5393=>923, 5394=>923, 5395=>1136, + 5396=>1136, 5397=>1136, 5398=>1136, 5399=>1209, 5400=>1202, 5401=>1209, 5402=>1202, 5403=>1209, 5404=>1202, 5405=>1431, 5406=>1420, 5407=>1431, 5408=>1420, 5409=>1431, 5410=>1420, 5411=>1431, + 5412=>1420, 5413=>746, 5414=>776, 5415=>776, 5416=>776, 5417=>776, 5418=>776, 5419=>776, 5420=>776, 5421=>776, 5422=>776, 5423=>1003, 5424=>1003, 5425=>1013, 5426=>996, 5427=>1013, + 5428=>996, 5429=>1003, 5430=>1003, 5431=>1003, 5432=>1003, 5433=>1013, 5434=>996, 5435=>1013, 5436=>996, 5437=>1013, 5438=>495, 5440=>395, 5441=>510, 5442=>1033, 5443=>1033, 5444=>976, + 5445=>976, 5446=>976, 5447=>976, 5448=>733, 5449=>733, 5450=>733, 5451=>733, 5452=>733, 5453=>733, 5454=>1003, 5455=>959, 5456=>495, 5458=>886, 5459=>774, 5460=>774, 5461=>774, + 5462=>774, 5463=>928, 5464=>928, 5465=>928, 5466=>928, 5467=>1172, 5468=>1142, 5469=>602, 5470=>812, 5471=>812, 5472=>812, 5473=>812, 5474=>812, 5475=>812, 5476=>815, 5477=>815, + 5478=>815, 5479=>815, 5480=>1060, 5481=>1052, 5482=>548, 5492=>977, 5493=>977, 5494=>977, 5495=>977, 5496=>977, 5497=>977, 5498=>977, 5499=>618, 5500=>837, 5501=>510, 5502=>1238, + 5503=>1238, 5504=>1238, 5505=>1238, 5506=>1238, 5507=>1238, 5508=>1238, 5509=>989, 5514=>977, 5515=>977, 5516=>977, 5517=>977, 5518=>1591, 5519=>1591, 5520=>1591, 5521=>1295, 5522=>1295, + 5523=>1591, 5524=>1591, 5525=>848, 5526=>1273, 5536=>988, 5537=>988, 5538=>931, 5539=>931, 5540=>931, 5541=>931, 5542=>660, 5543=>776, 5544=>776, 5545=>776, 5546=>776, 5547=>776, + 5548=>776, 5549=>776, 5550=>495, 5551=>743, 5598=>830, 5601=>830, 5702=>496, 5703=>496, 5742=>413, 5743=>1238, 5744=>1591, 5745=>2016, 5746=>2016, 5747=>1720, 5748=>1678, 5749=>2016, + 5750=>2016, 7424=>652, 7425=>833, 7426=>1048, 7427=>608, 7428=>593, 7429=>676, 7430=>676, 7431=>559, 7432=>557, 7433=>343, 7434=>494, 7435=>665, 7436=>539, 7437=>817, 7438=>701, + 7439=>687, 7440=>593, 7441=>660, 7442=>660, 7443=>660, 7444=>1094, 7446=>687, 7447=>687, 7448=>556, 7449=>642, 7450=>642, 7451=>580, 7452=>634, 7453=>737, 7454=>948, 7455=>695, + 7456=>652, 7457=>924, 7458=>582, 7459=>646, 7462=>539, 7463=>652, 7464=>691, 7465=>556, 7466=>781, 7467=>732, 7468=>487, 7469=>683, 7470=>480, 7472=>523, 7473=>430, 7474=>430, + 7475=>517, 7476=>527, 7477=>234, 7478=>234, 7479=>488, 7480=>401, 7481=>626, 7482=>527, 7483=>527, 7484=>535, 7485=>509, 7486=>461, 7487=>485, 7488=>430, 7489=>511, 7490=>695, + 7491=>458, 7492=>458, 7493=>479, 7494=>712, 7495=>479, 7496=>479, 7497=>479, 7498=>479, 7499=>386, 7500=>386, 7501=>479, 7502=>219, 7503=>487, 7504=>664, 7505=>456, 7506=>488, + 7507=>414, 7508=>488, 7509=>488, 7510=>479, 7511=>388, 7512=>456, 7513=>462, 7514=>664, 7515=>501, 7517=>451, 7518=>429, 7519=>433, 7520=>493, 7521=>406, 7522=>219, 7523=>315, + 7524=>456, 7525=>501, 7526=>451, 7527=>429, 7528=>433, 7529=>493, 7530=>406, 7543=>716, 7544=>527, 7547=>545, 7557=>514, 7579=>479, 7580=>414, 7581=>414, 7582=>488, 7583=>386, + 7584=>377, 7585=>348, 7586=>479, 7587=>456, 7588=>347, 7589=>281, 7590=>347, 7591=>347, 7592=>431, 7593=>326, 7594=>330, 7595=>370, 7596=>664, 7597=>664, 7598=>562, 7599=>562, + 7600=>448, 7601=>488, 7602=>542, 7603=>422, 7604=>396, 7605=>388, 7606=>583, 7607=>494, 7608=>399, 7609=>451, 7610=>501, 7611=>417, 7612=>523, 7613=>470, 7614=>455, 7615=>425, + 7620=>0, 7621=>0, 7622=>0, 7623=>0, 7624=>0, 7625=>0, 7680=>774, 7681=>675, 7682=>762, 7683=>716, 7684=>762, 7685=>716, 7686=>762, 7687=>716, 7688=>734, 7689=>593, + 7690=>830, 7691=>716, 7692=>830, 7693=>716, 7694=>830, 7695=>716, 7696=>830, 7697=>716, 7698=>830, 7699=>716, 7700=>683, 7701=>678, 7702=>683, 7703=>678, 7704=>683, 7705=>678, + 7706=>683, 7707=>678, 7708=>683, 7709=>678, 7710=>683, 7711=>435, 7712=>821, 7713=>716, 7714=>837, 7715=>712, 7716=>837, 7717=>712, 7718=>837, 7719=>712, 7720=>837, 7721=>712, + 7722=>837, 7723=>712, 7724=>372, 7725=>343, 7726=>372, 7727=>343, 7728=>775, 7729=>665, 7730=>775, 7731=>665, 7732=>775, 7733=>665, 7734=>637, 7735=>343, 7736=>637, 7737=>343, + 7738=>637, 7739=>343, 7740=>637, 7741=>343, 7742=>995, 7743=>1042, 7744=>995, 7745=>1042, 7746=>995, 7747=>1042, 7748=>837, 7749=>712, 7750=>837, 7751=>712, 7752=>837, 7753=>712, + 7754=>837, 7755=>712, 7756=>850, 7757=>687, 7758=>850, 7759=>687, 7760=>850, 7761=>687, 7762=>850, 7763=>687, 7764=>733, 7765=>716, 7766=>733, 7767=>716, 7768=>770, 7769=>493, + 7770=>770, 7771=>493, 7772=>770, 7773=>493, 7774=>770, 7775=>493, 7776=>720, 7777=>595, 7778=>720, 7779=>595, 7780=>720, 7781=>595, 7782=>720, 7783=>595, 7784=>720, 7785=>595, + 7786=>682, 7787=>478, 7788=>682, 7789=>478, 7790=>682, 7791=>478, 7792=>682, 7793=>478, 7794=>812, 7795=>712, 7796=>812, 7797=>712, 7798=>812, 7799=>712, 7800=>812, 7801=>712, + 7802=>812, 7803=>712, 7804=>774, 7805=>652, 7806=>774, 7807=>652, 7808=>1103, 7809=>924, 7810=>1103, 7811=>924, 7812=>1103, 7813=>924, 7814=>1103, 7815=>924, 7816=>1103, 7817=>924, + 7818=>771, 7819=>645, 7820=>771, 7821=>645, 7822=>724, 7823=>652, 7824=>725, 7825=>582, 7826=>725, 7827=>582, 7828=>725, 7829=>582, 7830=>712, 7831=>478, 7832=>924, 7833=>652, + 7834=>675, 7835=>435, 7840=>774, 7841=>675, 7842=>774, 7843=>675, 7844=>774, 7845=>675, 7846=>774, 7847=>675, 7848=>774, 7849=>675, 7850=>774, 7851=>675, 7852=>774, 7853=>675, + 7854=>774, 7855=>675, 7856=>774, 7857=>675, 7858=>774, 7859=>675, 7860=>774, 7861=>675, 7862=>774, 7863=>675, 7864=>683, 7865=>678, 7866=>683, 7867=>678, 7868=>683, 7869=>678, + 7870=>683, 7871=>678, 7872=>683, 7873=>678, 7874=>683, 7875=>678, 7876=>683, 7877=>678, 7878=>683, 7879=>678, 7880=>372, 7881=>343, 7882=>372, 7883=>343, 7884=>850, 7885=>687, + 7886=>850, 7887=>687, 7888=>850, 7889=>687, 7890=>850, 7891=>687, 7892=>850, 7893=>687, 7894=>850, 7895=>687, 7896=>850, 7897=>687, 7898=>874, 7899=>687, 7900=>874, 7901=>687, + 7902=>874, 7903=>687, 7904=>874, 7905=>687, 7906=>874, 7907=>687, 7908=>812, 7909=>712, 7910=>812, 7911=>712, 7912=>835, 7913=>712, 7914=>835, 7915=>712, 7916=>835, 7917=>712, + 7918=>835, 7919=>712, 7920=>835, 7921=>712, 7922=>724, 7923=>652, 7924=>724, 7925=>652, 7926=>724, 7927=>652, 7928=>724, 7929=>652, 7936=>687, 7937=>687, 7938=>687, 7939=>687, + 7940=>687, 7941=>687, 7942=>687, 7943=>687, 7944=>774, 7945=>774, 7946=>1041, 7947=>1043, 7948=>935, 7949=>963, 7950=>835, 7951=>859, 7952=>557, 7953=>557, 7954=>557, 7955=>557, + 7956=>557, 7957=>557, 7960=>792, 7961=>794, 7962=>1100, 7963=>1096, 7964=>1023, 7965=>1052, 7968=>712, 7969=>712, 7970=>712, 7971=>712, 7972=>712, 7973=>712, 7974=>712, 7975=>712, + 7976=>945, 7977=>951, 7978=>1250, 7979=>1250, 7980=>1180, 7981=>1206, 7982=>1054, 7983=>1063, 7984=>390, 7985=>390, 7986=>390, 7987=>390, 7988=>390, 7989=>390, 7990=>390, 7991=>390, + 7992=>483, 7993=>489, 7994=>777, 7995=>785, 7996=>712, 7997=>738, 7998=>604, 7999=>604, 8000=>687, 8001=>687, 8002=>687, 8003=>687, 8004=>687, 8005=>687, 8008=>892, 8009=>933, + 8010=>1221, 8011=>1224, 8012=>1053, 8013=>1082, 8016=>675, 8017=>675, 8018=>675, 8019=>675, 8020=>675, 8021=>675, 8022=>675, 8023=>675, 8025=>930, 8027=>1184, 8029=>1199, 8031=>1049, + 8032=>869, 8033=>869, 8034=>869, 8035=>869, 8036=>869, 8037=>869, 8038=>869, 8039=>869, 8040=>909, 8041=>958, 8042=>1246, 8043=>1251, 8044=>1076, 8045=>1105, 8046=>1028, 8047=>1076, + 8048=>687, 8049=>687, 8050=>557, 8051=>557, 8052=>712, 8053=>712, 8054=>390, 8055=>390, 8056=>687, 8057=>687, 8058=>675, 8059=>675, 8060=>869, 8061=>869, 8064=>687, 8065=>687, + 8066=>687, 8067=>687, 8068=>687, 8069=>687, 8070=>687, 8071=>687, 8072=>774, 8073=>774, 8074=>1041, 8075=>1043, 8076=>935, 8077=>963, 8078=>835, 8079=>859, 8080=>712, 8081=>712, + 8082=>712, 8083=>712, 8084=>712, 8085=>712, 8086=>712, 8087=>712, 8088=>945, 8089=>951, 8090=>1250, 8091=>1250, 8092=>1180, 8093=>1206, 8094=>1054, 8095=>1063, 8096=>869, 8097=>869, + 8098=>869, 8099=>869, 8100=>869, 8101=>869, 8102=>869, 8103=>869, 8104=>909, 8105=>958, 8106=>1246, 8107=>1251, 8108=>1076, 8109=>1105, 8110=>1028, 8111=>1076, 8112=>687, 8113=>687, + 8114=>687, 8115=>687, 8116=>687, 8118=>687, 8119=>687, 8120=>774, 8121=>774, 8122=>876, 8123=>797, 8124=>774, 8125=>500, 8126=>500, 8127=>500, 8128=>500, 8129=>500, 8130=>712, + 8131=>712, 8132=>712, 8134=>712, 8135=>712, 8136=>929, 8137=>846, 8138=>1080, 8139=>1009, 8140=>837, 8141=>500, 8142=>500, 8143=>500, 8144=>390, 8145=>390, 8146=>390, 8147=>390, + 8150=>390, 8151=>390, 8152=>372, 8153=>372, 8154=>621, 8155=>563, 8157=>500, 8158=>500, 8159=>500, 8160=>675, 8161=>675, 8162=>675, 8163=>675, 8164=>716, 8165=>716, 8166=>675, + 8167=>675, 8168=>724, 8169=>724, 8170=>1020, 8171=>980, 8172=>838, 8173=>500, 8174=>500, 8175=>500, 8178=>869, 8179=>869, 8180=>869, 8182=>869, 8183=>869, 8184=>1065, 8185=>891, + 8186=>1084, 8187=>894, 8188=>850, 8189=>500, 8190=>500, 8192=>500, 8193=>1000, 8194=>500, 8195=>1000, 8196=>330, 8197=>250, 8198=>167, 8199=>696, 8200=>380, 8201=>200, 8202=>100, + 8203=>0, 8204=>0, 8205=>0, 8206=>0, 8207=>0, 8208=>415, 8209=>415, 8210=>696, 8213=>1000, 8214=>500, 8215=>500, 8219=>380, 8223=>657, 8227=>639, 8228=>333, 8229=>667, + 8231=>348, 8234=>0, 8235=>0, 8236=>0, 8237=>0, 8238=>0, 8239=>200, 8241=>1887, 8242=>264, 8243=>447, 8244=>630, 8245=>264, 8246=>447, 8247=>630, 8248=>733, 8251=>972, + 8252=>627, 8253=>580, 8254=>500, 8255=>828, 8256=>828, 8257=>329, 8258=>1023, 8259=>500, 8260=>456, 8261=>457, 8262=>457, 8263=>1030, 8264=>829, 8265=>829, 8266=>513, 8267=>636, + 8268=>500, 8269=>500, 8270=>523, 8271=>400, 8272=>828, 8273=>523, 8274=>556, 8275=>838, 8276=>828, 8277=>838, 8278=>684, 8279=>813, 8280=>838, 8281=>838, 8282=>380, 8283=>872, + 8284=>838, 8285=>380, 8286=>380, 8287=>222, 8288=>0, 8289=>0, 8290=>0, 8291=>0, 8298=>0, 8299=>0, 8300=>0, 8301=>0, 8302=>0, 8303=>0, 8304=>438, 8305=>219, + 8308=>438, 8309=>438, 8310=>438, 8311=>438, 8312=>438, 8313=>438, 8314=>528, 8315=>528, 8316=>528, 8317=>288, 8318=>288, 8319=>456, 8320=>438, 8321=>438, 8322=>438, 8323=>438, + 8324=>438, 8325=>438, 8326=>438, 8327=>438, 8328=>438, 8329=>438, 8330=>528, 8331=>528, 8332=>528, 8333=>288, 8334=>288, 8336=>458, 8337=>479, 8338=>488, 8339=>413, 8340=>479, + 8352=>929, 8353=>696, 8354=>696, 8355=>696, 8356=>696, 8357=>1042, 8358=>837, 8359=>1518, 8360=>1205, 8361=>1103, 8362=>904, 8363=>696, 8365=>696, 8366=>682, 8367=>1392, 8368=>696, + 8369=>696, 8370=>696, 8371=>696, 8372=>859, 8373=>696, 8400=>0, 8401=>0, 8406=>0, 8407=>0, 8448=>1120, 8449=>1170, 8450=>734, 8451=>1211, 8452=>896, 8453=>1091, 8454=>1144, + 8455=>614, 8456=>698, 8457=>1086, 8459=>1073, 8460=>913, 8461=>850, 8462=>712, 8463=>712, 8464=>604, 8465=>694, 8466=>868, 8467=>472, 8468=>974, 8469=>837, 8470=>1203, 8471=>1000, + 8472=>697, 8473=>702, 8474=>850, 8475=>876, 8476=>814, 8477=>792, 8478=>896, 8479=>710, 8480=>1020, 8481=>1281, 8483=>755, 8484=>725, 8485=>578, 8486=>850, 8487=>769, 8488=>763, + 8489=>338, 8490=>775, 8491=>774, 8492=>928, 8493=>776, 8494=>854, 8495=>636, 8496=>738, 8497=>811, 8498=>683, 8499=>1193, 8500=>465, 8501=>794, 8502=>736, 8503=>503, 8504=>695, + 8505=>380, 8506=>945, 8507=>1348, 8508=>790, 8509=>737, 8510=>652, 8511=>845, 8512=>840, 8513=>775, 8514=>557, 8515=>637, 8516=>760, 8517=>830, 8518=>716, 8519=>678, 8520=>343, + 8521=>343, 8523=>872, 8526=>547, 8531=>1035, 8532=>1035, 8533=>1035, 8534=>1035, 8535=>1035, 8536=>1035, 8537=>1035, 8538=>1035, 8539=>1035, 8540=>1035, 8541=>1035, 8542=>1035, 8543=>615, + 8544=>372, 8545=>659, 8546=>945, 8547=>1099, 8548=>774, 8549=>1099, 8550=>1386, 8551=>1672, 8552=>1121, 8553=>771, 8554=>1120, 8555=>1407, 8556=>637, 8557=>734, 8558=>830, 8559=>995, + 8560=>343, 8561=>607, 8562=>872, 8563=>984, 8564=>652, 8565=>962, 8566=>1227, 8567=>1491, 8568=>969, 8569=>645, 8570=>969, 8571=>1233, 8572=>343, 8573=>593, 8574=>716, 8575=>1042, + 8576=>1289, 8577=>830, 8578=>1289, 8579=>734, 8580=>593, 8592=>838, 8593=>838, 8594=>838, 8595=>838, 8596=>838, 8597=>838, 8598=>838, 8599=>838, 8600=>838, 8601=>838, 8602=>838, + 8603=>838, 8604=>838, 8605=>838, 8606=>838, 8607=>838, 8608=>838, 8609=>838, 8610=>838, 8611=>838, 8612=>838, 8613=>838, 8614=>838, 8615=>838, 8616=>838, 8617=>838, 8618=>838, + 8619=>838, 8620=>838, 8621=>838, 8622=>838, 8623=>838, 8624=>838, 8625=>838, 8626=>838, 8627=>838, 8628=>838, 8629=>838, 8630=>838, 8631=>838, 8632=>838, 8633=>838, 8634=>838, + 8635=>838, 8636=>838, 8637=>838, 8638=>838, 8639=>838, 8640=>838, 8641=>838, 8642=>838, 8643=>838, 8644=>838, 8645=>838, 8646=>838, 8647=>838, 8648=>838, 8649=>838, 8650=>838, + 8651=>838, 8652=>838, 8653=>838, 8654=>838, 8655=>838, 8656=>838, 8657=>838, 8658=>838, 8659=>838, 8660=>838, 8661=>838, 8662=>838, 8663=>838, 8664=>838, 8665=>838, 8666=>838, + 8667=>838, 8668=>838, 8669=>838, 8670=>838, 8671=>838, 8672=>838, 8673=>838, 8674=>838, 8675=>838, 8676=>838, 8677=>838, 8678=>838, 8679=>838, 8680=>838, 8681=>838, 8682=>838, + 8683=>838, 8684=>838, 8685=>838, 8686=>838, 8687=>838, 8688=>838, 8689=>838, 8690=>838, 8691=>838, 8692=>838, 8693=>838, 8694=>838, 8695=>838, 8696=>838, 8697=>838, 8698=>838, + 8699=>838, 8700=>838, 8701=>838, 8702=>838, 8703=>838, 8704=>774, 8705=>696, 8706=>544, 8707=>683, 8708=>683, 8709=>856, 8710=>697, 8711=>697, 8712=>896, 8713=>896, 8714=>750, + 8715=>896, 8716=>896, 8717=>750, 8718=>636, 8719=>787, 8720=>787, 8721=>718, 8722=>838, 8723=>838, 8724=>696, 8725=>167, 8726=>696, 8727=>838, 8728=>626, 8729=>380, 8730=>667, + 8731=>667, 8732=>667, 8733=>669, 8734=>833, 8735=>838, 8736=>896, 8737=>896, 8738=>838, 8739=>500, 8740=>500, 8741=>500, 8742=>500, 8743=>812, 8744=>812, 8745=>812, 8746=>812, + 8747=>610, 8748=>929, 8749=>1295, 8750=>563, 8751=>977, 8752=>1313, 8753=>563, 8754=>563, 8755=>563, 8756=>696, 8757=>696, 8758=>294, 8759=>696, 8760=>838, 8761=>838, 8762=>838, + 8763=>838, 8764=>838, 8765=>838, 8766=>838, 8767=>838, 8768=>375, 8769=>838, 8770=>838, 8771=>838, 8772=>838, 8773=>838, 8774=>838, 8775=>838, 8776=>838, 8777=>838, 8778=>838, + 8779=>838, 8780=>838, 8781=>838, 8782=>838, 8783=>838, 8784=>838, 8785=>838, 8786=>838, 8787=>838, 8788=>1063, 8789=>1063, 8790=>838, 8791=>838, 8792=>838, 8793=>838, 8794=>838, + 8795=>838, 8796=>838, 8797=>838, 8798=>838, 8799=>838, 8800=>838, 8801=>838, 8802=>838, 8803=>838, 8804=>838, 8805=>838, 8806=>838, 8807=>838, 8808=>841, 8809=>841, 8810=>1047, + 8811=>1047, 8812=>500, 8813=>838, 8814=>838, 8815=>838, 8816=>838, 8817=>838, 8818=>838, 8819=>838, 8820=>838, 8821=>838, 8822=>838, 8823=>838, 8824=>838, 8825=>838, 8826=>838, + 8827=>838, 8828=>838, 8829=>838, 8830=>838, 8831=>838, 8832=>838, 8833=>838, 8834=>838, 8835=>838, 8836=>838, 8837=>838, 8838=>838, 8839=>838, 8840=>838, 8841=>838, 8842=>838, + 8843=>838, 8844=>812, 8845=>812, 8846=>812, 8847=>838, 8848=>838, 8849=>838, 8850=>838, 8851=>754, 8852=>754, 8853=>838, 8854=>838, 8855=>838, 8856=>838, 8857=>838, 8858=>838, + 8859=>838, 8860=>838, 8861=>838, 8862=>838, 8863=>838, 8864=>838, 8865=>838, 8866=>914, 8867=>914, 8868=>914, 8869=>914, 8870=>542, 8871=>542, 8872=>914, 8873=>914, 8874=>914, + 8875=>914, 8876=>914, 8877=>914, 8878=>914, 8879=>914, 8882=>838, 8883=>838, 8884=>838, 8885=>838, 8886=>1000, 8887=>1000, 8888=>838, 8889=>838, 8890=>542, 8891=>812, 8892=>812, + 8893=>812, 8896=>843, 8897=>843, 8898=>843, 8899=>843, 8900=>494, 8901=>380, 8902=>626, 8904=>1000, 8905=>1000, 8906=>1000, 8907=>1000, 8908=>1000, 8909=>838, 8918=>838, 8919=>838, + 8920=>1422, 8921=>1422, 8922=>838, 8923=>838, 8924=>838, 8925=>838, 8926=>838, 8927=>838, 8928=>838, 8929=>838, 8930=>838, 8931=>838, 8932=>838, 8933=>838, 8934=>838, 8935=>838, + 8936=>838, 8937=>838, 8938=>838, 8939=>838, 8940=>838, 8941=>838, 8946=>1158, 8947=>896, 8948=>750, 8949=>896, 8950=>896, 8951=>750, 8952=>896, 8953=>896, 8954=>1158, 8955=>896, + 8956=>750, 8957=>896, 8958=>750, 8959=>896, 8962=>716, 8966=>917, 8968=>457, 8969=>457, 8970=>457, 8971=>457, 8976=>838, 8977=>539, 8984=>928, 8985=>838, 8992=>610, 8993=>610, + 8997=>1000, 9000=>1443, 9085=>863, 9115=>500, 9116=>500, 9117=>500, 9118=>500, 9119=>500, 9120=>500, 9121=>500, 9122=>500, 9123=>500, 9124=>500, 9125=>500, 9126=>500, 9127=>750, + 9128=>750, 9129=>750, 9130=>750, 9131=>750, 9132=>750, 9133=>750, 9134=>610, 9166=>838, 9167=>945, 9250=>716, 9251=>716, 9312=>847, 9313=>847, 9314=>847, 9315=>847, 9316=>847, + 9317=>847, 9318=>847, 9319=>847, 9320=>847, 9321=>847, 9600=>769, 9601=>769, 9602=>769, 9603=>769, 9604=>769, 9605=>769, 9606=>769, 9607=>769, 9608=>769, 9609=>769, 9610=>769, + 9611=>769, 9612=>769, 9613=>769, 9614=>769, 9615=>769, 9616=>769, 9617=>769, 9618=>769, 9619=>769, 9620=>769, 9621=>769, 9622=>769, 9623=>769, 9624=>769, 9625=>769, 9626=>769, + 9627=>769, 9628=>769, 9629=>769, 9630=>769, 9631=>769, 9632=>945, 9633=>945, 9634=>945, 9635=>945, 9636=>945, 9637=>945, 9638=>945, 9639=>945, 9640=>945, 9641=>945, 9642=>678, + 9643=>678, 9644=>945, 9645=>945, 9646=>550, 9647=>550, 9648=>769, 9649=>769, 9650=>769, 9651=>769, 9652=>502, 9653=>502, 9654=>769, 9655=>769, 9656=>502, 9657=>502, 9658=>769, + 9659=>769, 9660=>769, 9661=>769, 9662=>502, 9663=>502, 9664=>769, 9665=>769, 9666=>502, 9667=>502, 9668=>769, 9669=>769, 9670=>769, 9671=>769, 9672=>769, 9673=>873, 9674=>494, + 9675=>873, 9676=>873, 9677=>873, 9678=>873, 9679=>873, 9680=>873, 9681=>873, 9682=>873, 9683=>873, 9684=>873, 9685=>873, 9686=>527, 9687=>527, 9688=>840, 9689=>970, 9690=>970, + 9691=>970, 9692=>387, 9693=>387, 9694=>387, 9695=>387, 9696=>769, 9697=>769, 9698=>769, 9699=>769, 9700=>769, 9701=>769, 9702=>639, 9703=>945, 9704=>945, 9705=>945, 9706=>945, + 9707=>945, 9708=>769, 9709=>769, 9710=>769, 9711=>1119, 9712=>945, 9713=>945, 9714=>945, 9715=>945, 9716=>873, 9717=>873, 9718=>873, 9719=>873, 9720=>769, 9721=>769, 9722=>769, + 9723=>830, 9724=>830, 9725=>732, 9726=>732, 9727=>769, 9728=>896, 9729=>1000, 9730=>896, 9731=>896, 9732=>896, 9733=>896, 9734=>896, 9735=>573, 9736=>896, 9737=>896, 9738=>888, + 9739=>888, 9740=>671, 9741=>1013, 9742=>1246, 9743=>1250, 9744=>896, 9745=>896, 9746=>896, 9747=>532, 9748=>896, 9749=>896, 9750=>896, 9751=>896, 9752=>896, 9753=>896, 9754=>896, + 9755=>896, 9756=>896, 9757=>609, 9758=>896, 9759=>609, 9760=>896, 9761=>896, 9762=>896, 9763=>896, 9764=>669, 9765=>746, 9766=>649, 9767=>784, 9768=>545, 9769=>896, 9770=>896, + 9771=>896, 9772=>710, 9773=>896, 9774=>896, 9775=>896, 9776=>896, 9777=>896, 9778=>896, 9779=>896, 9780=>896, 9781=>896, 9782=>896, 9783=>896, 9784=>896, 9785=>896, 9786=>896, + 9787=>896, 9788=>896, 9789=>896, 9790=>896, 9791=>614, 9792=>731, 9793=>731, 9794=>896, 9795=>896, 9796=>896, 9797=>896, 9798=>896, 9799=>896, 9800=>896, 9801=>896, 9802=>896, + 9803=>896, 9804=>896, 9805=>896, 9806=>896, 9807=>896, 9808=>896, 9809=>896, 9810=>896, 9811=>896, 9812=>896, 9813=>896, 9814=>896, 9815=>896, 9816=>896, 9817=>896, 9818=>896, + 9819=>896, 9820=>896, 9821=>896, 9822=>896, 9823=>896, 9824=>896, 9825=>896, 9826=>896, 9827=>896, 9828=>896, 9829=>896, 9830=>896, 9831=>896, 9832=>896, 9833=>472, 9834=>638, + 9835=>896, 9836=>896, 9837=>472, 9838=>357, 9839=>484, 9840=>748, 9841=>766, 9842=>896, 9843=>896, 9844=>896, 9845=>896, 9846=>896, 9847=>896, 9848=>896, 9849=>896, 9850=>896, + 9851=>896, 9852=>896, 9853=>896, 9854=>896, 9855=>896, 9856=>869, 9857=>869, 9858=>869, 9859=>869, 9860=>869, 9861=>869, 9862=>896, 9863=>896, 9864=>896, 9865=>896, 9866=>896, + 9867=>896, 9868=>896, 9869=>896, 9870=>896, 9871=>896, 9872=>896, 9873=>896, 9874=>896, 9875=>896, 9876=>896, 9877=>541, 9878=>896, 9879=>896, 9880=>896, 9881=>896, 9882=>896, + 9883=>896, 9884=>896, 9888=>896, 9889=>702, 9890=>838, 9891=>838, 9892=>838, 9893=>838, 9894=>838, 9895=>838, 9896=>838, 9897=>838, 9898=>838, 9899=>838, 9900=>838, 9901=>838, + 9902=>838, 9903=>838, 9904=>844, 9905=>838, 9906=>731, 9985=>838, 9986=>838, 9987=>838, 9988=>838, 9990=>838, 9991=>838, 9992=>838, 9993=>838, 9996=>838, 9997=>838, 9998=>838, + 9999=>838, 10000=>838, 10001=>838, 10002=>838, 10003=>838, 10004=>838, 10005=>838, 10006=>838, 10007=>838, 10008=>838, 10009=>838, 10010=>838, 10011=>838, 10012=>838, 10013=>838, 10014=>838, + 10015=>838, 10016=>838, 10017=>838, 10018=>838, 10019=>838, 10020=>838, 10021=>838, 10022=>838, 10023=>838, 10025=>838, 10026=>838, 10027=>838, 10028=>838, 10029=>838, 10030=>838, 10031=>838, + 10032=>838, 10033=>838, 10034=>838, 10035=>838, 10036=>838, 10037=>838, 10038=>838, 10039=>838, 10040=>838, 10041=>838, 10042=>838, 10043=>838, 10044=>838, 10045=>838, 10046=>838, 10047=>838, + 10048=>838, 10049=>838, 10050=>838, 10051=>838, 10052=>838, 10053=>838, 10054=>838, 10055=>838, 10056=>838, 10057=>838, 10058=>838, 10059=>838, 10061=>896, 10063=>896, 10064=>896, 10065=>896, + 10066=>896, 10070=>896, 10072=>838, 10073=>838, 10074=>838, 10075=>347, 10076=>347, 10077=>587, 10078=>587, 10081=>838, 10082=>838, 10083=>838, 10084=>838, 10085=>838, 10086=>838, 10087=>838, + 10088=>838, 10089=>838, 10090=>838, 10091=>838, 10092=>838, 10093=>838, 10094=>838, 10095=>838, 10096=>838, 10097=>838, 10098=>838, 10099=>838, 10100=>838, 10101=>838, 10102=>847, 10103=>847, + 10104=>847, 10105=>847, 10106=>847, 10107=>847, 10108=>847, 10109=>847, 10110=>847, 10111=>847, 10112=>838, 10113=>838, 10114=>838, 10115=>838, 10116=>838, 10117=>838, 10118=>838, 10119=>838, + 10120=>838, 10121=>838, 10122=>838, 10123=>838, 10124=>838, 10125=>838, 10126=>838, 10127=>838, 10128=>838, 10129=>838, 10130=>838, 10131=>838, 10132=>838, 10136=>838, 10137=>838, 10138=>838, + 10139=>838, 10140=>838, 10141=>838, 10142=>838, 10143=>838, 10144=>838, 10145=>838, 10146=>838, 10147=>838, 10148=>838, 10149=>838, 10150=>838, 10151=>838, 10152=>838, 10153=>838, 10154=>838, + 10155=>838, 10156=>838, 10157=>838, 10158=>838, 10159=>838, 10161=>838, 10162=>838, 10163=>838, 10164=>838, 10165=>838, 10166=>838, 10167=>838, 10168=>838, 10169=>838, 10170=>838, 10171=>838, + 10172=>838, 10173=>838, 10174=>838, 10208=>494, 10214=>487, 10215=>487, 10216=>457, 10217=>457, 10218=>721, 10219=>721, 10224=>838, 10225=>838, 10226=>838, 10227=>838, 10228=>1157, 10229=>1434, + 10230=>1434, 10231=>1434, 10232=>1434, 10233=>1434, 10234=>1434, 10235=>1434, 10236=>1434, 10237=>1434, 10238=>1434, 10239=>1434, 10240=>781, 10241=>781, 10242=>781, 10243=>781, 10244=>781, 10245=>781, + 10246=>781, 10247=>781, 10248=>781, 10249=>781, 10250=>781, 10251=>781, 10252=>781, 10253=>781, 10254=>781, 10255=>781, 10256=>781, 10257=>781, 10258=>781, 10259=>781, 10260=>781, 10261=>781, + 10262=>781, 10263=>781, 10264=>781, 10265=>781, 10266=>781, 10267=>781, 10268=>781, 10269=>781, 10270=>781, 10271=>781, 10272=>781, 10273=>781, 10274=>781, 10275=>781, 10276=>781, 10277=>781, + 10278=>781, 10279=>781, 10280=>781, 10281=>781, 10282=>781, 10283=>781, 10284=>781, 10285=>781, 10286=>781, 10287=>781, 10288=>781, 10289=>781, 10290=>781, 10291=>781, 10292=>781, 10293=>781, + 10294=>781, 10295=>781, 10296=>781, 10297=>781, 10298=>781, 10299=>781, 10300=>781, 10301=>781, 10302=>781, 10303=>781, 10304=>781, 10305=>781, 10306=>781, 10307=>781, 10308=>781, 10309=>781, + 10310=>781, 10311=>781, 10312=>781, 10313=>781, 10314=>781, 10315=>781, 10316=>781, 10317=>781, 10318=>781, 10319=>781, 10320=>781, 10321=>781, 10322=>781, 10323=>781, 10324=>781, 10325=>781, + 10326=>781, 10327=>781, 10328=>781, 10329=>781, 10330=>781, 10331=>781, 10332=>781, 10333=>781, 10334=>781, 10335=>781, 10336=>781, 10337=>781, 10338=>781, 10339=>781, 10340=>781, 10341=>781, + 10342=>781, 10343=>781, 10344=>781, 10345=>781, 10346=>781, 10347=>781, 10348=>781, 10349=>781, 10350=>781, 10351=>781, 10352=>781, 10353=>781, 10354=>781, 10355=>781, 10356=>781, 10357=>781, + 10358=>781, 10359=>781, 10360=>781, 10361=>781, 10362=>781, 10363=>781, 10364=>781, 10365=>781, 10366=>781, 10367=>781, 10368=>781, 10369=>781, 10370=>781, 10371=>781, 10372=>781, 10373=>781, + 10374=>781, 10375=>781, 10376=>781, 10377=>781, 10378=>781, 10379=>781, 10380=>781, 10381=>781, 10382=>781, 10383=>781, 10384=>781, 10385=>781, 10386=>781, 10387=>781, 10388=>781, 10389=>781, + 10390=>781, 10391=>781, 10392=>781, 10393=>781, 10394=>781, 10395=>781, 10396=>781, 10397=>781, 10398=>781, 10399=>781, 10400=>781, 10401=>781, 10402=>781, 10403=>781, 10404=>781, 10405=>781, + 10406=>781, 10407=>781, 10408=>781, 10409=>781, 10410=>781, 10411=>781, 10412=>781, 10413=>781, 10414=>781, 10415=>781, 10416=>781, 10417=>781, 10418=>781, 10419=>781, 10420=>781, 10421=>781, + 10422=>781, 10423=>781, 10424=>781, 10425=>781, 10426=>781, 10427=>781, 10428=>781, 10429=>781, 10430=>781, 10431=>781, 10432=>781, 10433=>781, 10434=>781, 10435=>781, 10436=>781, 10437=>781, + 10438=>781, 10439=>781, 10440=>781, 10441=>781, 10442=>781, 10443=>781, 10444=>781, 10445=>781, 10446=>781, 10447=>781, 10448=>781, 10449=>781, 10450=>781, 10451=>781, 10452=>781, 10453=>781, + 10454=>781, 10455=>781, 10456=>781, 10457=>781, 10458=>781, 10459=>781, 10460=>781, 10461=>781, 10462=>781, 10463=>781, 10464=>781, 10465=>781, 10466=>781, 10467=>781, 10468=>781, 10469=>781, + 10470=>781, 10471=>781, 10472=>781, 10473=>781, 10474=>781, 10475=>781, 10476=>781, 10477=>781, 10478=>781, 10479=>781, 10480=>781, 10481=>781, 10482=>781, 10483=>781, 10484=>781, 10485=>781, + 10486=>781, 10487=>781, 10488=>781, 10489=>781, 10490=>781, 10491=>781, 10492=>781, 10493=>781, 10494=>781, 10495=>781, 10502=>838, 10503=>838, 10506=>838, 10507=>838, 10560=>838, 10561=>838, + 10702=>838, 10703=>1046, 10704=>1046, 10705=>1000, 10706=>1000, 10707=>1000, 10708=>1000, 10709=>1000, 10731=>494, 10752=>1000, 10753=>1000, 10754=>1000, 10764=>1661, 10765=>563, 10766=>563, 10767=>563, + 10768=>563, 10769=>563, 10770=>563, 10771=>563, 10772=>563, 10773=>563, 10774=>563, 10775=>563, 10776=>563, 10777=>563, 10778=>563, 10779=>563, 10780=>563, 10877=>838, 10878=>838, 10879=>838, + 10880=>838, 10881=>838, 10882=>838, 10883=>838, 10884=>838, 10885=>838, 10886=>838, 10887=>838, 10888=>838, 10889=>838, 10890=>838, 10891=>838, 10892=>838, 10893=>838, 10894=>838, 10895=>838, + 10896=>838, 10897=>838, 10898=>838, 10899=>838, 10900=>838, 10901=>838, 10902=>838, 10903=>838, 10904=>838, 10905=>838, 10906=>838, 10907=>838, 10908=>838, 10909=>838, 10910=>838, 10911=>838, + 10912=>838, 10926=>838, 10927=>838, 10928=>838, 10929=>838, 10930=>838, 10931=>838, 10932=>838, 10933=>838, 10934=>838, 10935=>838, 10936=>838, 10937=>838, 10938=>838, 11001=>838, 11002=>838, + 11008=>838, 11009=>838, 11010=>838, 11011=>838, 11012=>838, 11013=>838, 11014=>838, 11015=>838, 11016=>838, 11017=>838, 11018=>838, 11019=>838, 11020=>838, 11021=>838, 11022=>838, 11023=>838, + 11024=>838, 11025=>838, 11026=>945, 11027=>945, 11028=>945, 11029=>945, 11030=>769, 11031=>769, 11032=>769, 11033=>769, 11034=>945, 11040=>869, 11041=>873, 11042=>873, 11043=>873, 11360=>637, + 11361=>360, 11362=>637, 11363=>733, 11364=>770, 11365=>675, 11366=>478, 11367=>956, 11368=>712, 11369=>775, 11370=>665, 11371=>725, 11372=>582, 11380=>652, 11381=>649, 11382=>516, 11383=>782, + 61960=>860, 62047=>720, 63173=>687, 64256=>810, 64257=>741, 64258=>741, 64259=>1115, 64260=>1116, 64261=>808, 64262=>1020, 64275=>1388, 64276=>1384, 64277=>1378, 64278=>1384, 64279=>1713, 64285=>372, + 64287=>692, 64288=>720, 64297=>838, 64298=>963, 64299=>963, 64300=>963, 64301=>963, 64302=>751, 64303=>751, 64304=>751, 64305=>731, 64306=>537, 64307=>684, 64308=>778, 64309=>467, 64310=>521, + 64312=>770, 64313=>467, 64314=>778, 64315=>750, 64316=>718, 64318=>856, 64320=>532, 64321=>855, 64323=>802, 64324=>777, 64326=>751, 64327=>803, 64328=>778, 64329=>963, 64330=>822, 64331=>372, + 64332=>731, 64333=>754, 64334=>777, 64338=>1005, 64339=>1059, 64340=>375, 64341=>408, 64342=>1005, 64343=>1059, 64344=>375, 64345=>408, 64346=>1005, 64347=>1059, 64348=>375, 64349=>408, 64350=>1005, + 64351=>1059, 64352=>375, 64353=>408, 64354=>1005, 64355=>1059, 64356=>375, 64357=>408, 64358=>1005, 64359=>1059, 64360=>375, 64361=>408, 64362=>1162, 64363=>1191, 64364=>655, 64365=>720, 64366=>1162, + 64367=>1191, 64368=>655, 64369=>720, 64370=>721, 64371=>721, 64372=>721, 64373=>721, 64374=>721, 64375=>721, 64376=>721, 64377=>721, 64378=>721, 64379=>721, 64380=>721, 64381=>721, 64382=>721, + 64383=>721, 64384=>721, 64385=>721, 64394=>576, 64395=>622, 64396=>576, 64397=>622, 64398=>1024, 64399=>1024, 64400=>582, 64401=>582, 64402=>1024, 64403=>1024, 64404=>582, 64405=>582, 64414=>854, + 64415=>900, 64473=>622, 64474=>627, 64488=>375, 64489=>408, 64508=>917, 64509=>1012, 64510=>375, 64511=>408, 65024=>0, 65025=>0, 65026=>0, 65027=>0, 65028=>0, 65029=>0, 65030=>0, + 65031=>0, 65032=>0, 65033=>0, 65034=>0, 65035=>0, 65036=>0, 65037=>0, 65038=>0, 65039=>0, 65136=>342, 65137=>342, 65138=>342, 65139=>346, 65140=>342, 65142=>342, 65143=>342, + 65144=>342, 65145=>342, 65146=>342, 65147=>342, 65148=>342, 65149=>342, 65150=>342, 65151=>342, 65152=>511, 65153=>343, 65154=>375, 65155=>343, 65156=>375, 65157=>622, 65158=>627, 65159=>343, + 65160=>375, 65161=>917, 65162=>917, 65163=>375, 65164=>408, 65165=>343, 65166=>375, 65167=>1005, 65168=>1059, 65169=>375, 65170=>408, 65171=>590, 65172=>606, 65173=>1005, 65174=>1059, 65175=>375, + 65176=>408, 65177=>1005, 65178=>1059, 65179=>375, 65180=>408, 65181=>721, 65182=>721, 65183=>721, 65184=>721, 65185=>721, 65186=>721, 65187=>721, 65188=>721, 65189=>721, 65190=>721, 65191=>721, + 65192=>721, 65193=>513, 65194=>578, 65195=>513, 65196=>578, 65197=>576, 65198=>622, 65199=>576, 65200=>622, 65201=>1380, 65202=>1414, 65203=>983, 65204=>1018, 65205=>1380, 65206=>1414, 65207=>983, + 65208=>1018, 65209=>1345, 65210=>1364, 65211=>966, 65212=>985, 65213=>1345, 65214=>1364, 65215=>966, 65216=>985, 65217=>1039, 65218=>1071, 65219=>942, 65220=>974, 65221=>1039, 65222=>1071, 65223=>942, + 65224=>974, 65225=>683, 65226=>683, 65227=>683, 65228=>564, 65229=>683, 65230=>683, 65231=>683, 65232=>564, 65233=>1162, 65234=>1191, 65235=>655, 65236=>720, 65237=>894, 65238=>901, 65239=>655, + 65240=>720, 65241=>917, 65242=>931, 65243=>582, 65244=>582, 65245=>868, 65246=>893, 65247=>375, 65248=>408, 65249=>733, 65250=>784, 65251=>619, 65252=>670, 65253=>854, 65254=>900, 65255=>375, + 65256=>408, 65257=>590, 65258=>606, 65259=>693, 65260=>660, 65261=>622, 65262=>627, 65263=>917, 65264=>1012, 65265=>917, 65266=>1012, 65267=>375, 65268=>408, 65269=>745, 65270=>759, 65271=>745, + 65272=>759, 65273=>745, 65274=>759, 65275=>745, 65276=>759, 65279=>0, 65533=>1113}; + font[:enc]=''; + font[:diff]=''; + font[:file]='DejaVuSans-Bold.z'; + font[:ctg]='DejaVuSans-Bold.ctg.z'; + font[:originalsize]=494260; +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/dejavusansi.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/dejavusansi.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,267 @@ +TCPDFFontDescriptor.define('dejavusansi') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='DejaVuSans-Oblique'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>96,'FontBBox'=>'[-1016 -385 1659 1068]','ItalicAngle'=>-11,'StemV'=>70,'MissingWidth'=>600}; + font[:up]=-42; + font[:ut]=44; + font[:cw]={ + 0=>600, 32=>318, 33=>401, 34=>460, 35=>838, 36=>636, 37=>950, 38=>780, 39=>275, 40=>390, 41=>390, 42=>500, 43=>838, 44=>318, 45=>361, 46=>318, + 47=>337, 48=>636, 49=>636, 50=>636, 51=>636, 52=>636, 53=>636, 54=>636, 55=>636, 56=>636, 57=>636, 58=>337, 59=>337, 60=>838, 61=>838, 62=>838, + 63=>531, 64=>1000, 65=>684, 66=>686, 67=>698, 68=>770, 69=>632, 70=>575, 71=>775, 72=>752, 73=>295, 74=>295, 75=>656, 76=>557, 77=>863, 78=>748, + 79=>787, 80=>603, 81=>787, 82=>695, 83=>635, 84=>611, 85=>732, 86=>684, 87=>989, 88=>685, 89=>611, 90=>685, 91=>390, 92=>337, 93=>390, 94=>838, + 95=>500, 96=>500, 97=>613, 98=>635, 99=>550, 100=>635, 101=>615, 102=>352, 103=>635, 104=>634, 105=>278, 106=>278, 107=>579, 108=>278, 109=>974, 110=>634, + 111=>612, 112=>635, 113=>635, 114=>411, 115=>521, 116=>392, 117=>634, 118=>592, 119=>818, 120=>592, 121=>592, 122=>525, 123=>636, 124=>337, 125=>636, 126=>838, + 8364=>636, 1027=>557, 8218=>318, 402=>352, 8222=>518, 8230=>1000, 8224=>500, 8225=>500, 710=>500, 8240=>1350, 352=>635, 8249=>400, 338=>1070, 1036=>710, 381=>685, 1039=>752, + 8216=>318, 8217=>318, 8220=>518, 8221=>518, 8226=>590, 8211=>500, 8212=>1000, 732=>500, 8482=>1000, 353=>521, 8250=>400, 339=>1028, 1116=>604, 382=>525, 376=>611, 160=>318, + 161=>401, 162=>636, 163=>636, 164=>636, 165=>636, 166=>337, 167=>500, 168=>500, 169=>1000, 170=>471, 171=>617, 172=>838, 173=>361, 174=>1000, 175=>500, 176=>500, + 177=>838, 178=>401, 179=>401, 180=>500, 181=>636, 182=>636, 183=>318, 184=>500, 185=>401, 186=>471, 187=>617, 188=>969, 189=>969, 190=>969, 191=>531, 192=>684, + 193=>684, 194=>684, 195=>684, 196=>684, 197=>684, 198=>974, 199=>698, 200=>632, 201=>632, 202=>632, 203=>632, 204=>295, 205=>295, 206=>295, 207=>295, 208=>775, + 209=>748, 210=>787, 211=>787, 212=>787, 213=>787, 214=>787, 215=>838, 216=>787, 217=>732, 218=>732, 219=>732, 220=>732, 221=>611, 222=>608, 223=>630, 224=>613, + 225=>613, 226=>613, 227=>613, 228=>613, 229=>613, 230=>995, 231=>550, 232=>615, 233=>615, 234=>615, 235=>615, 236=>278, 237=>278, 238=>278, 239=>278, 240=>612, + 241=>634, 242=>612, 243=>612, 244=>612, 245=>612, 246=>612, 247=>838, 248=>612, 249=>634, 250=>634, 251=>634, 252=>634, 253=>592, 254=>635, 255=>592, 256=>684, + 257=>613, 258=>684, 259=>613, 260=>684, 261=>613, 262=>698, 263=>550, 264=>698, 265=>550, 266=>698, 267=>550, 268=>698, 269=>550, 270=>770, 271=>635, 272=>775, + 273=>635, 274=>632, 275=>615, 276=>632, 277=>615, 278=>632, 279=>615, 280=>632, 281=>615, 282=>632, 283=>615, 284=>775, 285=>635, 286=>775, 287=>635, 288=>775, + 289=>635, 290=>775, 291=>635, 292=>752, 293=>634, 294=>916, 295=>695, 296=>295, 297=>278, 298=>295, 299=>278, 300=>295, 301=>278, 302=>295, 303=>278, 304=>295, + 305=>278, 306=>590, 307=>556, 308=>295, 309=>278, 310=>656, 311=>579, 312=>579, 313=>557, 314=>278, 315=>557, 316=>278, 317=>557, 318=>329, 319=>557, 320=>596, + 321=>562, 322=>287, 323=>748, 324=>634, 325=>748, 326=>634, 327=>748, 328=>634, 329=>813, 330=>748, 331=>634, 332=>787, 333=>612, 334=>787, 335=>612, 336=>787, + 337=>612, 340=>695, 341=>411, 342=>695, 343=>411, 344=>695, 345=>411, 346=>635, 347=>521, 348=>635, 349=>521, 350=>635, 351=>521, 354=>611, 355=>392, 356=>611, + 357=>392, 358=>611, 359=>392, 360=>732, 361=>634, 362=>732, 363=>634, 364=>732, 365=>634, 366=>732, 367=>634, 368=>732, 369=>634, 370=>732, 371=>634, 372=>989, + 373=>818, 374=>611, 375=>592, 377=>685, 378=>525, 379=>685, 380=>525, 383=>352, 384=>635, 385=>735, 386=>686, 387=>635, 388=>686, 389=>635, 390=>703, 391=>698, + 392=>550, 393=>775, 394=>819, 395=>686, 396=>635, 397=>612, 398=>632, 399=>787, 400=>614, 401=>575, 403=>775, 404=>687, 405=>984, 406=>354, 407=>295, 408=>746, + 409=>579, 410=>278, 411=>592, 412=>974, 413=>748, 414=>634, 415=>787, 416=>913, 417=>612, 418=>938, 419=>737, 420=>652, 421=>635, 422=>695, 423=>635, 424=>521, + 425=>632, 426=>336, 427=>392, 428=>611, 429=>392, 430=>611, 431=>838, 432=>634, 433=>764, 434=>721, 435=>744, 436=>729, 437=>685, 438=>525, 439=>666, 440=>666, + 441=>578, 442=>525, 443=>636, 444=>666, 445=>578, 446=>510, 447=>635, 448=>295, 449=>492, 450=>459, 451=>295, 452=>1455, 453=>1295, 454=>1160, 455=>852, 456=>835, + 457=>556, 458=>1043, 459=>1026, 460=>912, 461=>684, 462=>613, 463=>295, 464=>278, 465=>787, 466=>612, 467=>732, 468=>634, 469=>732, 470=>634, 471=>732, 472=>634, + 473=>732, 474=>634, 475=>732, 476=>634, 477=>615, 478=>684, 479=>613, 480=>684, 481=>613, 482=>974, 483=>995, 484=>775, 485=>635, 486=>775, 487=>635, 488=>656, + 489=>579, 490=>787, 491=>612, 492=>787, 493=>612, 494=>666, 495=>525, 496=>278, 497=>1455, 498=>1295, 499=>1160, 500=>775, 501=>635, 502=>1113, 503=>682, 504=>748, + 505=>634, 506=>684, 507=>613, 508=>974, 509=>995, 510=>787, 511=>612, 512=>684, 513=>613, 514=>684, 515=>613, 516=>632, 517=>615, 518=>632, 519=>615, 520=>295, + 521=>278, 522=>295, 523=>278, 524=>787, 525=>612, 526=>787, 527=>612, 528=>695, 529=>411, 530=>695, 531=>411, 532=>732, 533=>634, 534=>732, 535=>634, 536=>635, + 537=>521, 538=>611, 539=>392, 540=>627, 541=>521, 542=>752, 543=>634, 544=>735, 545=>838, 546=>698, 547=>610, 548=>685, 549=>525, 550=>684, 551=>613, 552=>632, + 553=>615, 554=>787, 555=>612, 556=>787, 557=>612, 558=>787, 559=>612, 560=>787, 561=>612, 562=>611, 563=>592, 564=>475, 565=>843, 566=>477, 567=>278, 568=>998, + 569=>998, 570=>684, 571=>698, 572=>550, 573=>557, 574=>611, 575=>521, 576=>525, 577=>603, 578=>479, 579=>686, 580=>732, 581=>684, 582=>632, 583=>615, 584=>295, + 585=>278, 586=>781, 587=>635, 588=>695, 589=>411, 590=>611, 591=>592, 592=>613, 593=>635, 594=>635, 595=>635, 596=>550, 597=>550, 598=>635, 599=>727, 600=>615, + 601=>615, 602=>844, 603=>545, 604=>545, 605=>775, 606=>664, 607=>326, 608=>696, 609=>635, 610=>629, 611=>596, 612=>596, 613=>634, 614=>634, 615=>634, 616=>372, + 617=>387, 618=>372, 619=>396, 620=>487, 621=>278, 622=>706, 623=>974, 624=>974, 625=>974, 626=>646, 627=>642, 628=>634, 629=>612, 630=>858, 631=>728, 632=>660, + 633=>469, 634=>469, 635=>469, 636=>469, 637=>469, 638=>530, 639=>530, 640=>602, 641=>602, 642=>521, 643=>336, 644=>336, 645=>461, 646=>336, 647=>392, 648=>392, + 649=>634, 650=>618, 651=>598, 652=>592, 653=>818, 654=>592, 655=>611, 656=>525, 657=>525, 658=>578, 659=>578, 660=>510, 661=>510, 662=>510, 663=>510, 664=>787, + 665=>580, 666=>664, 667=>708, 668=>654, 669=>292, 670=>667, 671=>507, 672=>727, 673=>510, 674=>510, 675=>1014, 676=>1058, 677=>1013, 678=>824, 679=>610, 680=>778, + 681=>848, 682=>641, 683=>654, 684=>515, 685=>515, 686=>570, 687=>664, 688=>399, 689=>399, 690=>175, 691=>259, 692=>295, 693=>296, 694=>379, 695=>515, 696=>373, + 697=>278, 698=>460, 699=>318, 700=>318, 701=>318, 702=>307, 703=>307, 704=>370, 705=>370, 706=>500, 707=>500, 708=>500, 709=>500, 711=>500, 712=>275, 713=>500, + 714=>500, 715=>500, 716=>275, 717=>500, 718=>500, 719=>500, 720=>337, 721=>337, 722=>307, 723=>307, 724=>500, 725=>500, 726=>413, 727=>500, 728=>500, 729=>500, + 730=>500, 731=>500, 733=>500, 734=>315, 735=>500, 736=>426, 737=>166, 738=>373, 739=>444, 740=>370, 741=>493, 742=>493, 743=>493, 744=>493, 745=>493, 748=>500, + 749=>500, 750=>500, 755=>500, 759=>500, 768=>0, 769=>0, 770=>0, 771=>0, 772=>0, 773=>0, 774=>0, 775=>0, 776=>0, 777=>0, 778=>0, 779=>0, + 780=>0, 781=>0, 782=>0, 783=>0, 784=>0, 785=>0, 786=>0, 787=>0, 788=>0, 789=>0, 790=>0, 791=>0, 792=>0, 793=>0, 794=>0, 795=>0, + 796=>0, 797=>0, 798=>0, 799=>0, 800=>0, 801=>0, 802=>0, 803=>0, 804=>0, 805=>0, 806=>0, 807=>0, 808=>0, 809=>0, 810=>0, 811=>0, + 812=>0, 813=>0, 814=>0, 815=>0, 816=>0, 817=>0, 818=>0, 819=>0, 820=>0, 821=>0, 822=>0, 823=>0, 824=>0, 825=>0, 826=>0, 827=>0, + 828=>0, 829=>0, 830=>0, 831=>0, 832=>0, 833=>0, 834=>0, 835=>0, 836=>0, 837=>0, 838=>0, 839=>0, 840=>0, 841=>0, 842=>0, 843=>0, + 844=>0, 845=>0, 846=>0, 847=>0, 849=>0, 855=>0, 856=>0, 860=>0, 861=>0, 862=>0, 863=>0, 864=>0, 865=>0, 866=>0, 884=>278, 885=>278, + 890=>500, 891=>549, 892=>550, 893=>549, 894=>337, 900=>500, 901=>500, 902=>695, 903=>318, 904=>767, 905=>903, 906=>435, 908=>839, 910=>860, 911=>905, 912=>338, + 913=>684, 914=>686, 915=>557, 916=>684, 917=>632, 918=>685, 919=>752, 920=>787, 921=>295, 922=>656, 923=>684, 924=>863, 925=>748, 926=>632, 927=>787, 928=>752, + 929=>603, 931=>632, 932=>611, 933=>611, 934=>787, 935=>685, 936=>787, 937=>764, 938=>295, 939=>611, 940=>659, 941=>543, 942=>631, 943=>338, 944=>579, 945=>659, + 946=>638, 947=>592, 948=>612, 949=>541, 950=>544, 951=>634, 952=>612, 953=>338, 954=>589, 955=>592, 956=>636, 957=>559, 958=>558, 959=>612, 960=>602, 961=>635, + 962=>587, 963=>634, 964=>602, 965=>579, 966=>660, 967=>592, 968=>660, 969=>837, 970=>338, 971=>579, 972=>612, 973=>579, 974=>837, 976=>614, 977=>619, 978=>699, + 979=>842, 980=>699, 981=>660, 982=>837, 983=>664, 984=>787, 985=>612, 986=>648, 987=>587, 988=>575, 989=>458, 990=>660, 991=>660, 992=>865, 993=>627, 994=>934, + 995=>837, 996=>758, 997=>659, 998=>792, 999=>615, 1000=>687, 1001=>607, 1002=>768, 1003=>625, 1004=>699, 1005=>612, 1006=>611, 1007=>536, 1008=>664, 1009=>635, 1010=>550, + 1011=>278, 1012=>787, 1013=>615, 1014=>615, 1015=>608, 1016=>635, 1017=>698, 1018=>863, 1019=>651, 1020=>635, 1021=>703, 1022=>698, 1023=>703, 1024=>632, 1025=>632, 1026=>786, + 1028=>698, 1029=>635, 1030=>295, 1031=>295, 1032=>295, 1033=>1094, 1034=>1045, 1035=>786, 1037=>748, 1038=>609, 1040=>684, 1041=>686, 1042=>686, 1043=>557, 1044=>781, 1045=>632, + 1046=>1077, 1047=>641, 1048=>748, 1049=>748, 1050=>710, 1051=>752, 1052=>863, 1053=>752, 1054=>787, 1055=>752, 1056=>603, 1057=>698, 1058=>611, 1059=>609, 1060=>861, 1061=>685, + 1062=>776, 1063=>686, 1064=>1069, 1065=>1094, 1066=>833, 1067=>818, 1068=>686, 1069=>698, 1070=>1080, 1071=>695, 1072=>613, 1073=>617, 1074=>589, 1075=>525, 1076=>691, 1077=>615, + 1078=>901, 1079=>532, 1080=>650, 1081=>650, 1082=>604, 1083=>639, 1084=>754, 1085=>654, 1086=>612, 1087=>654, 1088=>635, 1089=>550, 1090=>583, 1091=>592, 1092=>855, 1093=>592, + 1094=>681, 1095=>591, 1096=>915, 1097=>942, 1098=>707, 1099=>790, 1100=>589, 1101=>549, 1102=>842, 1103=>602, 1104=>615, 1105=>615, 1106=>625, 1107=>525, 1108=>549, 1109=>521, + 1110=>278, 1111=>278, 1112=>278, 1113=>902, 1114=>898, 1115=>652, 1117=>650, 1118=>592, 1119=>654, 1120=>934, 1121=>837, 1122=>771, 1123=>672, 1124=>942, 1125=>749, 1126=>879, + 1127=>783, 1128=>1160, 1129=>1001, 1130=>787, 1131=>612, 1132=>1027, 1133=>824, 1134=>636, 1135=>541, 1136=>856, 1137=>876, 1138=>787, 1139=>592, 1140=>781, 1141=>665, 1142=>781, + 1143=>665, 1144=>992, 1145=>904, 1146=>953, 1147=>758, 1148=>1180, 1149=>1028, 1150=>934, 1151=>837, 1152=>698, 1153=>550, 1154=>502, 1155=>0, 1156=>0, 1157=>0, 1158=>0, + 1160=>418, 1161=>418, 1162=>748, 1163=>657, 1164=>686, 1165=>589, 1166=>603, 1167=>635, 1168=>610, 1169=>525, 1170=>675, 1171=>556, 1172=>557, 1173=>491, 1174=>1077, 1175=>901, + 1176=>641, 1177=>532, 1178=>710, 1179=>604, 1180=>710, 1181=>604, 1182=>710, 1183=>604, 1184=>856, 1185=>832, 1186=>752, 1187=>661, 1188=>1014, 1189=>877, 1190=>1113, 1191=>950, + 1192=>796, 1193=>651, 1194=>698, 1195=>550, 1196=>611, 1197=>529, 1198=>611, 1199=>592, 1200=>611, 1201=>592, 1202=>685, 1203=>592, 1204=>934, 1205=>807, 1206=>686, 1207=>591, + 1208=>686, 1209=>591, 1210=>686, 1211=>634, 1212=>929, 1213=>731, 1214=>929, 1215=>731, 1216=>295, 1217=>1077, 1218=>901, 1219=>655, 1220=>604, 1221=>752, 1222=>639, 1223=>752, + 1224=>661, 1225=>752, 1226=>661, 1227=>686, 1228=>591, 1229=>863, 1230=>754, 1231=>278, 1232=>684, 1233=>613, 1234=>684, 1235=>613, 1236=>974, 1237=>995, 1238=>632, 1239=>615, + 1240=>787, 1241=>615, 1242=>787, 1243=>615, 1244=>1077, 1245=>901, 1246=>641, 1247=>532, 1248=>666, 1249=>578, 1250=>748, 1251=>650, 1252=>748, 1253=>650, 1254=>787, 1255=>612, + 1256=>787, 1257=>612, 1258=>787, 1259=>612, 1260=>698, 1261=>549, 1262=>609, 1263=>592, 1264=>609, 1265=>592, 1266=>609, 1267=>592, 1268=>686, 1269=>591, 1270=>557, 1271=>491, + 1272=>818, 1273=>790, 1274=>675, 1275=>556, 1276=>685, 1277=>592, 1278=>685, 1279=>592, 1280=>686, 1281=>589, 1282=>1006, 1283=>897, 1284=>975, 1285=>869, 1286=>679, 1287=>588, + 1288=>1072, 1289=>957, 1290=>1072, 1291=>967, 1292=>775, 1293=>660, 1294=>773, 1295=>711, 1296=>614, 1297=>541, 1298=>752, 1299=>639, 1329=>867, 1330=>732, 1331=>882, 1332=>882, + 1333=>732, 1334=>644, 1335=>682, 1336=>732, 1337=>851, 1338=>882, 1339=>732, 1340=>557, 1341=>824, 1342=>986, 1343=>732, 1344=>707, 1345=>644, 1346=>882, 1347=>777, 1348=>882, + 1349=>732, 1350=>840, 1351=>732, 1352=>732, 1353=>732, 1354=>791, 1355=>644, 1356=>882, 1357=>732, 1358=>882, 1359=>635, 1360=>732, 1361=>732, 1362=>799, 1363=>861, 1364=>790, + 1365=>787, 1366=>635, 1369=>307, 1370=>318, 1371=>500, 1372=>500, 1373=>392, 1374=>526, 1375=>500, 1377=>974, 1378=>634, 1379=>762, 1380=>767, 1381=>634, 1382=>697, 1383=>533, + 1384=>634, 1385=>700, 1386=>697, 1387=>634, 1388=>404, 1389=>894, 1390=>641, 1391=>634, 1392=>634, 1393=>635, 1394=>702, 1395=>634, 1396=>659, 1397=>278, 1398=>760, 1399=>516, + 1400=>634, 1401=>453, 1402=>974, 1403=>516, 1404=>769, 1405=>634, 1406=>696, 1407=>974, 1408=>634, 1409=>690, 1410=>501, 1411=>974, 1412=>648, 1413=>612, 1414=>629, 1415=>763, + 1417=>337, 1418=>433, 1456=>0, 1457=>0, 1458=>0, 1459=>0, 1460=>0, 1461=>0, 1462=>0, 1463=>0, 1464=>0, 1465=>0, 1467=>0, 1468=>0, 1469=>0, 1471=>0, + 1472=>295, 1473=>0, 1474=>0, 1475=>295, 1478=>456, 1479=>0, 1488=>629, 1489=>608, 1490=>448, 1491=>594, 1492=>640, 1493=>272, 1494=>423, 1495=>640, 1496=>648, 1497=>272, + 1498=>592, 1499=>556, 1500=>599, 1501=>640, 1502=>659, 1503=>272, 1504=>441, 1505=>700, 1506=>636, 1507=>640, 1508=>604, 1509=>521, 1510=>581, 1511=>663, 1512=>592, 1513=>808, + 1514=>657, 1520=>471, 1521=>454, 1522=>471, 3647=>652, 3713=>670, 3714=>684, 3716=>688, 3719=>482, 3720=>628, 3722=>684, 3725=>688, 3732=>642, 3733=>642, 3734=>672, 3735=>655, + 3737=>641, 3738=>592, 3739=>592, 3740=>745, 3741=>767, 3742=>687, 3743=>687, 3745=>702, 3746=>688, 3747=>684, 3749=>649, 3751=>632, 3754=>703, 3755=>819, 3757=>633, 3758=>684, + 3759=>788, 3760=>632, 3761=>0, 3762=>539, 3763=>539, 3764=>0, 3765=>0, 3766=>0, 3767=>0, 3768=>0, 3769=>0, 3771=>0, 3772=>0, 3773=>663, 3776=>360, 3777=>679, + 3778=>460, 3779=>547, 3780=>491, 3782=>674, 3784=>0, 3785=>0, 3786=>0, 3787=>0, 3788=>0, 3789=>0, 3804=>1028, 3805=>1028, 5121=>684, 5122=>684, 5123=>684, 5124=>684, + 5125=>769, 5126=>809, 5127=>809, 5129=>809, 5130=>769, 5131=>719, 5132=>835, 5133=>834, 5134=>835, 5135=>834, 5136=>835, 5137=>834, 5138=>967, 5139=>1007, 5140=>967, 5141=>1007, + 5142=>809, 5143=>967, 5144=>1007, 5145=>967, 5146=>1007, 5147=>719, 5149=>256, 5150=>543, 5151=>423, 5152=>423, 5153=>389, 5154=>389, 5155=>393, 5156=>389, 5157=>466, 5158=>385, + 5159=>256, 5160=>389, 5161=>389, 5162=>389, 5163=>1090, 5164=>909, 5165=>953, 5166=>1117, 5167=>684, 5168=>684, 5169=>684, 5170=>684, 5171=>729, 5172=>629, 5173=>629, 5175=>629, + 5176=>729, 5177=>629, 5178=>835, 5179=>684, 5180=>835, 5181=>834, 5182=>835, 5183=>834, 5184=>967, 5185=>1007, 5186=>967, 5187=>1007, 5188=>967, 5189=>1007, 5190=>967, 5191=>1007, + 5192=>729, 5193=>508, 5194=>192, 5196=>732, 5197=>732, 5198=>732, 5199=>732, 5200=>730, 5201=>730, 5202=>730, 5204=>730, 5205=>730, 5206=>730, 5207=>921, 5208=>889, 5209=>921, + 5210=>889, 5211=>921, 5212=>889, 5213=>928, 5214=>900, 5215=>928, 5216=>900, 5217=>947, 5218=>900, 5219=>947, 5220=>900, 5221=>947, 5222=>434, 5223=>877, 5224=>877, 5225=>866, + 5226=>890, 5227=>628, 5228=>628, 5229=>628, 5230=>628, 5231=>628, 5232=>628, 5233=>628, 5234=>628, 5235=>628, 5236=>860, 5237=>771, 5238=>815, 5239=>816, 5240=>815, 5241=>816, + 5242=>860, 5243=>771, 5244=>860, 5245=>771, 5246=>815, 5247=>816, 5248=>815, 5249=>816, 5250=>815, 5251=>407, 5252=>407, 5253=>750, 5254=>775, 5255=>750, 5256=>775, 5257=>628, + 5258=>628, 5259=>628, 5260=>628, 5261=>628, 5262=>628, 5263=>628, 5264=>628, 5265=>628, 5266=>860, 5267=>771, 5268=>815, 5269=>816, 5270=>815, 5271=>816, 5272=>860, 5273=>771, + 5274=>860, 5275=>771, 5276=>815, 5277=>816, 5278=>815, 5279=>816, 5280=>815, 5281=>435, 5282=>435, 5283=>610, 5284=>522, 5285=>557, 5286=>522, 5287=>610, 5288=>610, 5289=>522, + 5290=>557, 5291=>557, 5292=>749, 5293=>769, 5294=>746, 5295=>764, 5296=>746, 5297=>764, 5298=>749, 5299=>769, 5300=>749, 5301=>769, 5302=>746, 5303=>764, 5304=>746, 5305=>764, + 5306=>746, 5307=>386, 5308=>508, 5309=>386, 5312=>852, 5313=>852, 5314=>852, 5315=>852, 5316=>852, 5317=>799, 5318=>799, 5319=>852, 5320=>799, 5321=>1069, 5322=>1035, 5323=>1059, + 5324=>852, 5325=>1059, 5326=>799, 5327=>852, 5328=>600, 5329=>453, 5330=>600, 5331=>852, 5332=>852, 5333=>852, 5334=>852, 5335=>852, 5336=>799, 5337=>799, 5338=>852, 5339=>799, + 5340=>1069, 5341=>1035, 5342=>1059, 5343=>1030, 5344=>1059, 5345=>1030, 5346=>1069, 5347=>1035, 5348=>1069, 5349=>1035, 5350=>1083, 5351=>1030, 5352=>1083, 5353=>1030, 5354=>600, 5356=>729, + 5357=>603, 5358=>603, 5359=>603, 5360=>603, 5361=>603, 5362=>603, 5363=>603, 5364=>603, 5365=>603, 5366=>834, 5367=>754, 5368=>792, 5369=>771, 5370=>792, 5371=>771, 5372=>834, + 5373=>754, 5374=>834, 5375=>754, 5376=>792, 5377=>771, 5378=>792, 5379=>771, 5380=>792, 5381=>418, 5382=>420, 5383=>418, 5392=>712, 5393=>712, 5394=>712, 5395=>892, 5396=>892, + 5397=>892, 5398=>892, 5399=>910, 5400=>872, 5401=>910, 5402=>872, 5403=>910, 5404=>872, 5405=>1140, 5406=>1100, 5407=>1140, 5408=>1100, 5409=>1140, 5410=>1100, 5411=>1140, 5412=>1100, + 5413=>641, 5414=>627, 5415=>627, 5416=>627, 5417=>627, 5418=>627, 5419=>627, 5420=>627, 5421=>627, 5422=>627, 5423=>844, 5424=>781, 5425=>816, 5426=>818, 5427=>816, 5428=>818, + 5429=>844, 5430=>781, 5431=>844, 5432=>781, 5433=>816, 5434=>818, 5435=>816, 5436=>818, 5437=>816, 5438=>418, 5440=>389, 5441=>484, 5442=>916, 5443=>916, 5444=>863, 5445=>916, + 5446=>863, 5447=>863, 5448=>603, 5449=>603, 5450=>603, 5451=>603, 5452=>603, 5453=>603, 5454=>834, 5455=>754, 5456=>418, 5458=>729, 5459=>684, 5460=>684, 5461=>684, 5462=>684, + 5463=>726, 5464=>672, 5465=>726, 5466=>726, 5467=>924, 5468=>1007, 5469=>508, 5470=>732, 5471=>732, 5472=>732, 5473=>732, 5474=>732, 5475=>732, 5476=>730, 5477=>730, 5478=>730, + 5479=>730, 5480=>947, 5481=>900, 5482=>508, 5492=>831, 5493=>831, 5494=>831, 5495=>831, 5496=>831, 5497=>831, 5498=>831, 5499=>563, 5500=>752, 5501=>484, 5502=>1047, 5503=>1047, + 5504=>1047, 5505=>1047, 5506=>1047, 5507=>1047, 5508=>1047, 5509=>825, 5514=>831, 5515=>831, 5516=>831, 5517=>831, 5518=>1259, 5519=>1259, 5520=>1259, 5521=>1002, 5522=>1002, 5523=>1259, + 5524=>1259, 5525=>700, 5526=>1073, 5536=>852, 5537=>852, 5538=>799, 5539=>799, 5540=>799, 5541=>799, 5542=>600, 5543=>643, 5544=>643, 5545=>643, 5546=>643, 5547=>643, 5548=>643, + 5549=>643, 5550=>418, 5551=>628, 5598=>770, 5601=>770, 5702=>468, 5703=>468, 5742=>444, 5743=>1047, 5744=>1310, 5745=>1632, 5746=>1632, 5747=>1375, 5748=>1375, 5749=>1632, 5750=>1632, + 7424=>592, 7425=>717, 7426=>982, 7427=>586, 7428=>550, 7429=>605, 7430=>605, 7431=>491, 7432=>541, 7433=>278, 7434=>395, 7435=>579, 7436=>583, 7437=>754, 7438=>650, 7439=>612, + 7440=>550, 7441=>684, 7442=>684, 7443=>684, 7444=>1023, 7446=>612, 7447=>612, 7448=>524, 7449=>602, 7450=>602, 7451=>583, 7452=>574, 7453=>737, 7454=>948, 7455=>638, 7456=>592, + 7457=>818, 7458=>525, 7459=>526, 7462=>583, 7463=>592, 7464=>564, 7465=>524, 7466=>590, 7467=>639, 7468=>431, 7469=>613, 7470=>432, 7472=>485, 7473=>398, 7474=>398, 7475=>488, + 7476=>474, 7477=>186, 7478=>186, 7479=>413, 7480=>351, 7481=>543, 7482=>471, 7483=>471, 7484=>496, 7485=>439, 7486=>380, 7487=>438, 7488=>385, 7489=>461, 7490=>623, 7491=>392, + 7492=>392, 7493=>405, 7494=>648, 7495=>428, 7496=>405, 7497=>417, 7498=>417, 7499=>360, 7500=>359, 7501=>405, 7502=>179, 7503=>426, 7504=>623, 7505=>409, 7506=>414, 7507=>370, + 7508=>414, 7509=>414, 7510=>428, 7511=>295, 7512=>405, 7513=>470, 7514=>623, 7515=>417, 7516=>1000, 7517=>402, 7518=>373, 7519=>385, 7520=>416, 7521=>364, 7522=>179, 7523=>259, + 7524=>405, 7525=>417, 7526=>402, 7527=>373, 7528=>385, 7529=>416, 7530=>364, 7543=>635, 7544=>474, 7547=>372, 7557=>278, 7579=>405, 7580=>370, 7581=>370, 7582=>414, 7583=>360, + 7584=>296, 7585=>233, 7586=>405, 7587=>405, 7588=>261, 7589=>250, 7590=>261, 7591=>261, 7592=>234, 7593=>250, 7594=>235, 7595=>376, 7596=>623, 7597=>623, 7598=>411, 7599=>479, + 7600=>409, 7601=>414, 7602=>414, 7603=>360, 7604=>287, 7605=>295, 7606=>508, 7607=>418, 7608=>361, 7609=>406, 7610=>417, 7611=>366, 7612=>437, 7613=>366, 7614=>392, 7615=>414, + 7620=>0, 7621=>0, 7622=>0, 7623=>0, 7624=>0, 7625=>0, 7680=>684, 7681=>613, 7682=>686, 7683=>635, 7684=>686, 7685=>635, 7686=>686, 7687=>635, 7688=>698, 7689=>550, + 7690=>770, 7691=>635, 7692=>770, 7693=>635, 7694=>770, 7695=>635, 7696=>770, 7697=>635, 7698=>770, 7699=>635, 7700=>632, 7701=>615, 7702=>632, 7703=>615, 7704=>632, 7705=>615, + 7706=>632, 7707=>615, 7708=>632, 7709=>615, 7710=>575, 7711=>352, 7712=>775, 7713=>635, 7714=>752, 7715=>634, 7716=>752, 7717=>634, 7718=>752, 7719=>634, 7720=>752, 7721=>634, + 7722=>752, 7723=>634, 7724=>295, 7725=>278, 7726=>295, 7727=>278, 7728=>656, 7729=>579, 7730=>656, 7731=>579, 7732=>656, 7733=>579, 7734=>557, 7735=>278, 7736=>557, 7737=>278, + 7738=>557, 7739=>278, 7740=>557, 7741=>278, 7742=>863, 7743=>974, 7744=>863, 7745=>974, 7746=>863, 7747=>974, 7748=>748, 7749=>634, 7750=>748, 7751=>634, 7752=>748, 7753=>634, + 7754=>748, 7755=>634, 7756=>787, 7757=>612, 7758=>787, 7759=>612, 7760=>787, 7761=>612, 7762=>787, 7763=>612, 7764=>603, 7765=>635, 7766=>603, 7767=>635, 7768=>695, 7769=>411, + 7770=>695, 7771=>411, 7772=>695, 7773=>411, 7774=>695, 7775=>411, 7776=>635, 7777=>521, 7778=>635, 7779=>521, 7780=>635, 7781=>521, 7782=>635, 7783=>521, 7784=>635, 7785=>521, + 7786=>611, 7787=>392, 7788=>611, 7789=>392, 7790=>611, 7791=>392, 7792=>611, 7793=>392, 7794=>732, 7795=>634, 7796=>732, 7797=>634, 7798=>732, 7799=>634, 7800=>732, 7801=>634, + 7802=>732, 7803=>634, 7804=>684, 7805=>592, 7806=>684, 7807=>592, 7808=>989, 7809=>818, 7810=>989, 7811=>818, 7812=>989, 7813=>818, 7814=>989, 7815=>818, 7816=>989, 7817=>818, + 7818=>685, 7819=>592, 7820=>685, 7821=>592, 7822=>611, 7823=>592, 7824=>685, 7825=>525, 7826=>685, 7827=>525, 7828=>685, 7829=>525, 7830=>634, 7831=>392, 7832=>818, 7833=>592, + 7834=>613, 7835=>352, 7840=>684, 7841=>613, 7842=>684, 7843=>613, 7844=>684, 7845=>613, 7846=>684, 7847=>613, 7848=>684, 7849=>613, 7850=>684, 7851=>613, 7852=>684, 7853=>613, + 7854=>684, 7855=>613, 7856=>684, 7857=>613, 7858=>684, 7859=>613, 7860=>684, 7861=>613, 7862=>684, 7863=>613, 7864=>632, 7865=>615, 7866=>632, 7867=>615, 7868=>632, 7869=>615, + 7870=>632, 7871=>615, 7872=>632, 7873=>615, 7874=>632, 7875=>615, 7876=>632, 7877=>615, 7878=>632, 7879=>615, 7880=>295, 7881=>278, 7882=>295, 7883=>278, 7884=>787, 7885=>612, + 7886=>787, 7887=>612, 7888=>787, 7889=>612, 7890=>787, 7891=>612, 7892=>787, 7893=>612, 7894=>787, 7895=>612, 7896=>787, 7897=>612, 7898=>913, 7899=>612, 7900=>913, 7901=>612, + 7902=>913, 7903=>612, 7904=>913, 7905=>612, 7906=>913, 7907=>612, 7908=>732, 7909=>634, 7910=>732, 7911=>634, 7912=>838, 7913=>634, 7914=>838, 7915=>634, 7916=>838, 7917=>634, + 7918=>838, 7919=>634, 7920=>838, 7921=>634, 7922=>611, 7923=>592, 7924=>611, 7925=>592, 7926=>611, 7927=>592, 7928=>611, 7929=>592, 7936=>659, 7937=>659, 7938=>659, 7939=>659, + 7940=>659, 7941=>659, 7942=>659, 7943=>659, 7944=>684, 7945=>684, 7946=>877, 7947=>877, 7948=>769, 7949=>801, 7950=>708, 7951=>743, 7952=>541, 7953=>541, 7954=>541, 7955=>541, + 7956=>541, 7957=>541, 7960=>711, 7961=>711, 7962=>966, 7963=>975, 7964=>898, 7965=>928, 7968=>634, 7969=>634, 7970=>634, 7971=>634, 7972=>634, 7973=>634, 7974=>634, 7975=>634, + 7976=>837, 7977=>835, 7978=>1086, 7979=>1089, 7980=>1027, 7981=>1051, 7982=>934, 7983=>947, 7984=>338, 7985=>338, 7986=>338, 7987=>338, 7988=>338, 7989=>338, 7990=>338, 7991=>338, + 7992=>380, 7993=>374, 7994=>635, 7995=>635, 7996=>570, 7997=>600, 7998=>489, 7999=>493, 8000=>612, 8001=>612, 8002=>612, 8003=>612, 8004=>612, 8005=>612, 8008=>804, 8009=>848, + 8010=>1095, 8011=>1100, 8012=>938, 8013=>970, 8016=>579, 8017=>579, 8018=>579, 8019=>579, 8020=>579, 8021=>579, 8022=>579, 8023=>579, 8025=>784, 8027=>998, 8029=>1012, 8031=>897, + 8032=>837, 8033=>837, 8034=>837, 8035=>837, 8036=>837, 8037=>837, 8038=>837, 8039=>837, 8040=>802, 8041=>843, 8042=>1089, 8043=>1095, 8044=>946, 8045=>972, 8046=>921, 8047=>952, + 8048=>659, 8049=>659, 8050=>541, 8051=>548, 8052=>634, 8053=>654, 8054=>338, 8055=>338, 8056=>612, 8057=>612, 8058=>579, 8059=>579, 8060=>837, 8061=>837, 8064=>659, 8065=>659, + 8066=>659, 8067=>659, 8068=>659, 8069=>659, 8070=>659, 8071=>659, 8072=>684, 8073=>684, 8074=>877, 8075=>877, 8076=>769, 8077=>801, 8078=>708, 8079=>743, 8080=>634, 8081=>634, + 8082=>634, 8083=>634, 8084=>634, 8085=>634, 8086=>634, 8087=>634, 8088=>837, 8089=>835, 8090=>1086, 8091=>1089, 8092=>1027, 8093=>1051, 8094=>934, 8095=>947, 8096=>837, 8097=>837, + 8098=>837, 8099=>837, 8100=>837, 8101=>837, 8102=>837, 8103=>837, 8104=>802, 8105=>843, 8106=>1089, 8107=>1095, 8108=>946, 8109=>972, 8110=>921, 8111=>952, 8112=>659, 8113=>659, + 8114=>659, 8115=>659, 8116=>659, 8118=>659, 8119=>659, 8120=>684, 8121=>684, 8122=>716, 8123=>692, 8124=>684, 8125=>500, 8126=>500, 8127=>500, 8128=>500, 8129=>500, 8130=>634, + 8131=>634, 8132=>654, 8134=>634, 8135=>634, 8136=>805, 8137=>746, 8138=>931, 8139=>871, 8140=>752, 8141=>500, 8142=>500, 8143=>500, 8144=>338, 8145=>338, 8146=>338, 8147=>338, + 8150=>338, 8151=>338, 8152=>295, 8153=>295, 8154=>475, 8155=>408, 8157=>500, 8158=>500, 8159=>500, 8160=>579, 8161=>579, 8162=>579, 8163=>579, 8164=>635, 8165=>635, 8166=>579, + 8167=>579, 8168=>611, 8169=>611, 8170=>845, 8171=>825, 8172=>685, 8173=>500, 8174=>500, 8175=>500, 8178=>837, 8179=>837, 8180=>837, 8182=>837, 8183=>837, 8184=>941, 8185=>813, + 8186=>922, 8187=>826, 8188=>764, 8189=>500, 8190=>500, 8192=>500, 8193=>1000, 8194=>500, 8195=>1000, 8196=>330, 8197=>250, 8198=>167, 8199=>636, 8200=>318, 8201=>200, 8202=>100, + 8203=>0, 8204=>0, 8205=>0, 8206=>0, 8207=>0, 8208=>361, 8209=>361, 8210=>636, 8213=>1000, 8214=>0, 8215=>500, 8219=>318, 8223=>518, 8227=>590, 8228=>333, 8229=>667, + 8231=>318, 8234=>0, 8235=>0, 8236=>0, 8237=>0, 8238=>0, 8239=>200, 8241=>1690, 8242=>227, 8243=>374, 8244=>520, 8245=>227, 8246=>374, 8247=>520, 8248=>339, 8251=>838, + 8252=>485, 8253=>531, 8254=>500, 8255=>804, 8256=>804, 8257=>250, 8258=>1000, 8259=>500, 8260=>167, 8261=>390, 8262=>390, 8263=>922, 8264=>733, 8265=>733, 8266=>497, 8267=>636, + 8268=>500, 8269=>500, 8270=>500, 8271=>337, 8272=>804, 8273=>500, 8274=>450, 8275=>838, 8276=>804, 8277=>838, 8278=>586, 8279=>663, 8280=>838, 8281=>838, 8282=>318, 8283=>797, + 8284=>838, 8285=>318, 8286=>318, 8287=>222, 8288=>0, 8289=>0, 8290=>0, 8291=>0, 8298=>0, 8299=>0, 8300=>0, 8301=>0, 8302=>0, 8303=>0, 8304=>401, 8305=>179, + 8308=>401, 8309=>401, 8310=>401, 8311=>401, 8312=>401, 8313=>401, 8314=>528, 8315=>528, 8316=>528, 8317=>246, 8318=>246, 8319=>399, 8320=>401, 8321=>401, 8322=>401, 8323=>401, + 8324=>401, 8325=>401, 8326=>401, 8327=>401, 8328=>401, 8329=>401, 8330=>528, 8331=>528, 8332=>528, 8333=>246, 8334=>246, 8336=>392, 8337=>417, 8338=>414, 8339=>444, 8340=>417, + 8352=>877, 8353=>636, 8354=>636, 8355=>636, 8356=>636, 8357=>974, 8358=>748, 8359=>1271, 8360=>1074, 8361=>989, 8362=>838, 8363=>636, 8365=>656, 8366=>611, 8367=>1272, 8368=>636, + 8369=>636, 8370=>636, 8371=>636, 8372=>774, 8373=>641, 8400=>0, 8401=>0, 8406=>0, 8407=>0, 8448=>970, 8449=>970, 8450=>698, 8451=>1123, 8452=>896, 8453=>969, 8454=>1032, + 8455=>614, 8456=>698, 8457=>952, 8459=>988, 8460=>720, 8461=>850, 8462=>634, 8463=>634, 8464=>470, 8465=>697, 8466=>720, 8467=>413, 8468=>818, 8469=>801, 8470=>1040, 8471=>1000, + 8472=>697, 8473=>702, 8474=>787, 8475=>798, 8476=>814, 8477=>792, 8478=>896, 8479=>684, 8480=>1020, 8481=>1014, 8483=>684, 8484=>745, 8485=>578, 8486=>764, 8487=>764, 8488=>616, + 8489=>338, 8490=>656, 8491=>684, 8492=>786, 8493=>703, 8494=>854, 8495=>592, 8496=>605, 8497=>786, 8498=>575, 8499=>1069, 8500=>462, 8501=>745, 8502=>674, 8503=>450, 8504=>695, + 8505=>380, 8506=>926, 8507=>1157, 8508=>702, 8509=>728, 8510=>655, 8511=>849, 8512=>811, 8513=>775, 8514=>557, 8515=>557, 8516=>611, 8517=>819, 8518=>708, 8519=>615, 8520=>351, + 8521=>351, 8523=>780, 8526=>526, 8531=>969, 8532=>969, 8533=>969, 8534=>969, 8535=>969, 8536=>969, 8537=>969, 8538=>969, 8539=>969, 8540=>969, 8541=>969, 8542=>969, 8543=>568, + 8544=>295, 8545=>492, 8546=>689, 8547=>923, 8548=>684, 8549=>922, 8550=>1120, 8551=>1317, 8552=>917, 8553=>685, 8554=>933, 8555=>1131, 8556=>557, 8557=>698, 8558=>770, 8559=>863, + 8560=>278, 8561=>458, 8562=>637, 8563=>812, 8564=>592, 8565=>811, 8566=>991, 8567=>1170, 8568=>819, 8569=>592, 8570=>822, 8571=>1002, 8572=>278, 8573=>550, 8574=>635, 8575=>974, + 8576=>1245, 8577=>770, 8578=>1245, 8579=>703, 8580=>549, 8592=>838, 8593=>838, 8594=>838, 8595=>838, 8596=>838, 8597=>838, 8598=>838, 8599=>838, 8600=>838, 8601=>838, 8602=>838, + 8603=>838, 8604=>838, 8605=>838, 8606=>838, 8607=>838, 8608=>838, 8609=>838, 8610=>838, 8611=>838, 8612=>838, 8613=>838, 8614=>838, 8615=>838, 8616=>838, 8617=>838, 8618=>838, + 8619=>838, 8620=>838, 8621=>838, 8622=>838, 8623=>838, 8624=>838, 8625=>838, 8626=>838, 8627=>838, 8628=>838, 8629=>838, 8630=>838, 8631=>838, 8632=>838, 8633=>838, 8634=>838, + 8635=>838, 8636=>838, 8637=>838, 8638=>838, 8639=>838, 8640=>838, 8641=>838, 8642=>838, 8643=>838, 8644=>838, 8645=>838, 8646=>838, 8647=>838, 8648=>838, 8649=>838, 8650=>838, + 8651=>838, 8652=>838, 8653=>838, 8654=>838, 8655=>838, 8656=>838, 8657=>838, 8658=>838, 8659=>838, 8660=>838, 8661=>838, 8662=>838, 8663=>838, 8664=>838, 8665=>838, 8666=>838, + 8667=>838, 8668=>838, 8669=>838, 8670=>838, 8671=>838, 8672=>838, 8673=>838, 8674=>838, 8675=>838, 8676=>838, 8677=>838, 8678=>838, 8679=>838, 8680=>838, 8681=>838, 8682=>838, + 8683=>838, 8684=>838, 8685=>838, 8686=>838, 8687=>838, 8688=>838, 8689=>838, 8690=>838, 8691=>838, 8692=>838, 8693=>838, 8694=>838, 8695=>838, 8696=>838, 8697=>838, 8698=>838, + 8699=>838, 8700=>838, 8701=>838, 8702=>838, 8703=>838, 8704=>684, 8705=>636, 8706=>517, 8707=>632, 8708=>632, 8709=>871, 8710=>669, 8711=>669, 8712=>871, 8713=>871, 8714=>718, + 8715=>871, 8716=>871, 8717=>718, 8718=>636, 8719=>757, 8720=>757, 8721=>674, 8722=>838, 8723=>838, 8724=>838, 8725=>167, 8726=>637, 8727=>838, 8728=>626, 8729=>318, 8730=>637, + 8731=>637, 8732=>637, 8733=>677, 8734=>833, 8735=>838, 8736=>896, 8737=>896, 8738=>838, 8739=>500, 8740=>500, 8741=>500, 8742=>500, 8743=>732, 8744=>732, 8745=>732, 8746=>732, + 8747=>521, 8748=>789, 8749=>1057, 8750=>521, 8751=>789, 8752=>1057, 8753=>521, 8754=>521, 8755=>521, 8756=>636, 8757=>636, 8758=>260, 8759=>636, 8760=>838, 8761=>838, 8762=>838, + 8763=>838, 8764=>838, 8765=>838, 8766=>838, 8767=>838, 8768=>375, 8769=>838, 8770=>838, 8771=>838, 8772=>838, 8773=>838, 8774=>838, 8775=>838, 8776=>838, 8777=>838, 8778=>838, + 8779=>838, 8780=>838, 8781=>838, 8782=>838, 8783=>838, 8784=>838, 8785=>838, 8786=>838, 8787=>838, 8788=>1000, 8789=>1000, 8790=>838, 8791=>838, 8792=>838, 8793=>838, 8794=>838, + 8795=>838, 8796=>838, 8797=>838, 8798=>838, 8799=>838, 8800=>838, 8801=>838, 8802=>838, 8803=>838, 8804=>838, 8805=>838, 8806=>838, 8807=>838, 8808=>838, 8809=>838, 8810=>1047, + 8811=>1047, 8812=>464, 8813=>838, 8814=>838, 8815=>838, 8816=>838, 8817=>838, 8818=>838, 8819=>838, 8820=>838, 8821=>838, 8822=>838, 8823=>838, 8824=>838, 8825=>838, 8826=>838, + 8827=>838, 8828=>838, 8829=>838, 8830=>838, 8831=>838, 8832=>838, 8833=>838, 8834=>838, 8835=>838, 8836=>838, 8837=>838, 8838=>838, 8839=>838, 8840=>838, 8841=>838, 8842=>838, + 8843=>838, 8844=>732, 8845=>732, 8846=>732, 8847=>838, 8848=>838, 8849=>838, 8850=>838, 8851=>722, 8852=>722, 8853=>838, 8854=>838, 8855=>838, 8856=>838, 8857=>838, 8858=>838, + 8859=>838, 8860=>838, 8861=>838, 8862=>838, 8863=>838, 8864=>838, 8865=>838, 8866=>871, 8867=>871, 8868=>871, 8869=>871, 8870=>521, 8871=>521, 8872=>871, 8873=>871, 8874=>871, + 8875=>871, 8876=>871, 8877=>871, 8878=>871, 8879=>871, 8882=>838, 8883=>838, 8884=>838, 8885=>838, 8886=>1000, 8887=>1000, 8888=>838, 8889=>838, 8890=>521, 8891=>732, 8892=>732, + 8893=>732, 8896=>820, 8897=>820, 8898=>820, 8899=>820, 8900=>494, 8901=>318, 8902=>626, 8904=>1000, 8905=>1000, 8906=>1000, 8907=>1000, 8908=>1000, 8909=>838, 8918=>838, 8919=>838, + 8920=>1422, 8921=>1422, 8922=>838, 8923=>838, 8924=>838, 8925=>838, 8926=>838, 8927=>838, 8928=>838, 8929=>838, 8930=>838, 8931=>838, 8932=>838, 8933=>838, 8934=>838, 8935=>838, + 8936=>838, 8937=>838, 8938=>838, 8939=>838, 8940=>838, 8941=>838, 8946=>1000, 8947=>871, 8948=>718, 8949=>871, 8950=>871, 8951=>718, 8952=>871, 8953=>871, 8954=>1000, 8955=>871, + 8956=>718, 8957=>871, 8958=>718, 8959=>871, 8962=>635, 8966=>871, 8968=>390, 8969=>390, 8970=>390, 8971=>390, 8976=>838, 8977=>513, 8984=>1000, 8985=>838, 8992=>521, 8993=>521, + 8997=>1000, 9000=>1443, 9085=>757, 9115=>500, 9116=>500, 9117=>500, 9118=>500, 9119=>500, 9120=>500, 9121=>500, 9122=>500, 9123=>500, 9124=>500, 9125=>500, 9126=>500, 9127=>750, + 9128=>750, 9129=>750, 9130=>750, 9131=>750, 9132=>750, 9133=>750, 9134=>521, 9166=>838, 9167=>945, 9250=>635, 9251=>635, 9312=>896, 9313=>896, 9314=>896, 9315=>896, 9316=>896, + 9317=>896, 9318=>896, 9319=>896, 9320=>896, 9321=>896, 9600=>769, 9601=>769, 9602=>769, 9603=>769, 9604=>769, 9605=>769, 9606=>769, 9607=>769, 9608=>769, 9609=>769, 9610=>769, + 9611=>769, 9612=>769, 9613=>769, 9614=>769, 9615=>769, 9616=>769, 9617=>769, 9618=>769, 9619=>769, 9620=>769, 9621=>769, 9622=>769, 9623=>769, 9624=>769, 9625=>769, 9626=>769, + 9627=>769, 9628=>769, 9629=>769, 9630=>769, 9631=>769, 9632=>945, 9633=>945, 9634=>945, 9635=>945, 9636=>945, 9637=>945, 9638=>945, 9639=>945, 9640=>945, 9641=>945, 9642=>678, + 9643=>678, 9644=>945, 9645=>945, 9646=>550, 9647=>550, 9648=>769, 9649=>769, 9650=>769, 9651=>769, 9652=>502, 9653=>502, 9654=>769, 9655=>769, 9656=>502, 9657=>502, 9658=>769, + 9659=>769, 9660=>769, 9661=>769, 9662=>502, 9663=>502, 9664=>769, 9665=>769, 9666=>502, 9667=>502, 9668=>769, 9669=>769, 9670=>769, 9671=>769, 9672=>769, 9673=>873, 9674=>494, + 9675=>873, 9676=>873, 9677=>873, 9678=>873, 9679=>873, 9680=>873, 9681=>873, 9682=>873, 9683=>873, 9684=>873, 9685=>873, 9686=>527, 9687=>527, 9688=>791, 9689=>970, 9690=>970, + 9691=>970, 9692=>387, 9693=>387, 9694=>387, 9695=>387, 9696=>769, 9697=>769, 9698=>769, 9699=>769, 9700=>769, 9701=>769, 9702=>590, 9703=>945, 9704=>945, 9705=>945, 9706=>945, + 9707=>945, 9708=>769, 9709=>769, 9710=>769, 9711=>1119, 9712=>945, 9713=>945, 9714=>945, 9715=>945, 9716=>873, 9717=>873, 9718=>873, 9719=>873, 9720=>769, 9721=>769, 9722=>769, + 9723=>830, 9724=>830, 9725=>732, 9726=>732, 9727=>769, 9728=>896, 9729=>1000, 9730=>896, 9731=>896, 9732=>896, 9733=>896, 9734=>896, 9735=>573, 9736=>896, 9737=>896, 9738=>888, + 9739=>888, 9740=>671, 9741=>1013, 9742=>1246, 9743=>1250, 9744=>896, 9745=>896, 9746=>896, 9747=>532, 9748=>896, 9749=>896, 9750=>896, 9751=>896, 9752=>896, 9753=>896, 9754=>896, + 9755=>896, 9756=>896, 9757=>609, 9758=>896, 9759=>609, 9760=>896, 9761=>896, 9762=>896, 9763=>896, 9764=>669, 9765=>746, 9766=>649, 9767=>784, 9768=>545, 9769=>896, 9770=>896, + 9771=>896, 9772=>710, 9773=>896, 9774=>896, 9775=>896, 9776=>896, 9777=>896, 9778=>896, 9779=>896, 9780=>896, 9781=>896, 9782=>896, 9783=>896, 9784=>896, 9785=>896, 9786=>896, + 9787=>896, 9788=>896, 9789=>896, 9790=>896, 9791=>614, 9792=>731, 9793=>731, 9794=>896, 9795=>896, 9796=>896, 9797=>896, 9798=>896, 9799=>896, 9800=>896, 9801=>896, 9802=>896, + 9803=>896, 9804=>896, 9805=>896, 9806=>896, 9807=>896, 9808=>896, 9809=>896, 9810=>896, 9811=>896, 9812=>896, 9813=>896, 9814=>896, 9815=>896, 9816=>896, 9817=>896, 9818=>896, + 9819=>896, 9820=>896, 9821=>896, 9822=>896, 9823=>896, 9824=>896, 9825=>896, 9826=>896, 9827=>896, 9828=>896, 9829=>896, 9830=>896, 9831=>896, 9832=>896, 9833=>472, 9834=>638, + 9835=>896, 9836=>896, 9837=>472, 9838=>357, 9839=>484, 9840=>748, 9841=>766, 9842=>896, 9843=>896, 9844=>896, 9845=>896, 9846=>896, 9847=>896, 9848=>896, 9849=>896, 9850=>896, + 9851=>896, 9852=>896, 9853=>896, 9854=>896, 9855=>896, 9856=>869, 9857=>869, 9858=>869, 9859=>869, 9860=>869, 9861=>869, 9862=>890, 9863=>890, 9864=>890, 9865=>890, 9866=>890, + 9867=>890, 9868=>890, 9869=>890, 9870=>890, 9871=>890, 9872=>750, 9873=>750, 9874=>890, 9875=>816, 9876=>716, 9877=>537, 9878=>852, 9879=>890, 9880=>684, 9881=>890, 9882=>708, + 9883=>890, 9884=>890, 9888=>890, 9889=>890, 9890=>838, 9891=>838, 9892=>838, 9893=>838, 9894=>838, 9895=>838, 9896=>838, 9897=>838, 9898=>838, 9899=>838, 9900=>838, 9901=>838, + 9902=>838, 9903=>838, 9904=>844, 9905=>838, 9906=>731, 9985=>838, 9986=>838, 9987=>838, 9988=>838, 9990=>838, 9991=>838, 9992=>838, 9993=>838, 9996=>838, 9997=>838, 9998=>838, + 9999=>838, 10000=>838, 10001=>838, 10002=>838, 10003=>838, 10004=>838, 10005=>838, 10006=>838, 10007=>838, 10008=>838, 10009=>838, 10010=>838, 10011=>838, 10012=>838, 10013=>838, 10014=>838, + 10015=>838, 10016=>838, 10017=>838, 10018=>838, 10019=>838, 10020=>838, 10021=>838, 10022=>838, 10023=>838, 10025=>838, 10026=>838, 10027=>838, 10028=>838, 10029=>838, 10030=>838, 10031=>838, + 10032=>838, 10033=>838, 10034=>838, 10035=>838, 10036=>838, 10037=>838, 10038=>838, 10039=>838, 10040=>838, 10041=>838, 10042=>838, 10043=>838, 10044=>838, 10045=>838, 10046=>838, 10047=>838, + 10048=>838, 10049=>838, 10050=>838, 10051=>838, 10052=>838, 10053=>838, 10054=>838, 10055=>838, 10056=>838, 10057=>838, 10058=>838, 10059=>838, 10061=>896, 10063=>896, 10064=>896, 10065=>896, + 10066=>896, 10070=>896, 10072=>838, 10073=>838, 10074=>838, 10075=>322, 10076=>322, 10077=>538, 10078=>538, 10081=>838, 10082=>838, 10083=>838, 10084=>838, 10085=>838, 10086=>838, 10087=>838, + 10088=>838, 10089=>838, 10090=>838, 10091=>838, 10092=>838, 10093=>838, 10094=>838, 10095=>838, 10096=>838, 10097=>838, 10098=>838, 10099=>838, 10100=>838, 10101=>838, 10102=>896, 10103=>896, + 10104=>896, 10105=>896, 10106=>896, 10107=>896, 10108=>896, 10109=>896, 10110=>896, 10111=>896, 10112=>838, 10113=>838, 10114=>838, 10115=>838, 10116=>838, 10117=>838, 10118=>838, 10119=>838, + 10120=>838, 10121=>838, 10122=>838, 10123=>838, 10124=>838, 10125=>838, 10126=>838, 10127=>838, 10128=>838, 10129=>838, 10130=>838, 10131=>838, 10132=>838, 10136=>838, 10137=>838, 10138=>838, + 10139=>838, 10140=>838, 10141=>838, 10142=>838, 10143=>838, 10144=>838, 10145=>838, 10146=>838, 10147=>838, 10148=>838, 10149=>838, 10150=>838, 10151=>838, 10152=>838, 10153=>838, 10154=>838, + 10155=>838, 10156=>838, 10157=>838, 10158=>838, 10159=>838, 10161=>838, 10162=>838, 10163=>838, 10164=>838, 10165=>838, 10166=>838, 10167=>838, 10168=>838, 10169=>838, 10170=>838, 10171=>838, + 10172=>838, 10173=>838, 10174=>838, 10208=>494, 10214=>495, 10215=>495, 10216=>390, 10217=>390, 10218=>556, 10219=>556, 10224=>838, 10225=>838, 10226=>838, 10227=>838, 10228=>1157, 10229=>1434, + 10230=>1434, 10231=>1434, 10232=>1434, 10233=>1434, 10234=>1434, 10235=>1434, 10236=>1434, 10237=>1434, 10238=>1434, 10239=>1434, 10240=>732, 10241=>732, 10242=>732, 10243=>732, 10244=>732, 10245=>732, + 10246=>732, 10247=>732, 10248=>732, 10249=>732, 10250=>732, 10251=>732, 10252=>732, 10253=>732, 10254=>732, 10255=>732, 10256=>732, 10257=>732, 10258=>732, 10259=>732, 10260=>732, 10261=>732, + 10262=>732, 10263=>732, 10264=>732, 10265=>732, 10266=>732, 10267=>732, 10268=>732, 10269=>732, 10270=>732, 10271=>732, 10272=>732, 10273=>732, 10274=>732, 10275=>732, 10276=>732, 10277=>732, + 10278=>732, 10279=>732, 10280=>732, 10281=>732, 10282=>732, 10283=>732, 10284=>732, 10285=>732, 10286=>732, 10287=>732, 10288=>732, 10289=>732, 10290=>732, 10291=>732, 10292=>732, 10293=>732, + 10294=>732, 10295=>732, 10296=>732, 10297=>732, 10298=>732, 10299=>732, 10300=>732, 10301=>732, 10302=>732, 10303=>732, 10304=>732, 10305=>732, 10306=>732, 10307=>732, 10308=>732, 10309=>732, + 10310=>732, 10311=>732, 10312=>732, 10313=>732, 10314=>732, 10315=>732, 10316=>732, 10317=>732, 10318=>732, 10319=>732, 10320=>732, 10321=>732, 10322=>732, 10323=>732, 10324=>732, 10325=>732, + 10326=>732, 10327=>732, 10328=>732, 10329=>732, 10330=>732, 10331=>732, 10332=>732, 10333=>732, 10334=>732, 10335=>732, 10336=>732, 10337=>732, 10338=>732, 10339=>732, 10340=>732, 10341=>732, + 10342=>732, 10343=>732, 10344=>732, 10345=>732, 10346=>732, 10347=>732, 10348=>732, 10349=>732, 10350=>732, 10351=>732, 10352=>732, 10353=>732, 10354=>732, 10355=>732, 10356=>732, 10357=>732, + 10358=>732, 10359=>732, 10360=>732, 10361=>732, 10362=>732, 10363=>732, 10364=>732, 10365=>732, 10366=>732, 10367=>732, 10368=>732, 10369=>732, 10370=>732, 10371=>732, 10372=>732, 10373=>732, + 10374=>732, 10375=>732, 10376=>732, 10377=>732, 10378=>732, 10379=>732, 10380=>732, 10381=>732, 10382=>732, 10383=>732, 10384=>732, 10385=>732, 10386=>732, 10387=>732, 10388=>732, 10389=>732, + 10390=>732, 10391=>732, 10392=>732, 10393=>732, 10394=>732, 10395=>732, 10396=>732, 10397=>732, 10398=>732, 10399=>732, 10400=>732, 10401=>732, 10402=>732, 10403=>732, 10404=>732, 10405=>732, + 10406=>732, 10407=>732, 10408=>732, 10409=>732, 10410=>732, 10411=>732, 10412=>732, 10413=>732, 10414=>732, 10415=>732, 10416=>732, 10417=>732, 10418=>732, 10419=>732, 10420=>732, 10421=>732, + 10422=>732, 10423=>732, 10424=>732, 10425=>732, 10426=>732, 10427=>732, 10428=>732, 10429=>732, 10430=>732, 10431=>732, 10432=>732, 10433=>732, 10434=>732, 10435=>732, 10436=>732, 10437=>732, + 10438=>732, 10439=>732, 10440=>732, 10441=>732, 10442=>732, 10443=>732, 10444=>732, 10445=>732, 10446=>732, 10447=>732, 10448=>732, 10449=>732, 10450=>732, 10451=>732, 10452=>732, 10453=>732, + 10454=>732, 10455=>732, 10456=>732, 10457=>732, 10458=>732, 10459=>732, 10460=>732, 10461=>732, 10462=>732, 10463=>732, 10464=>732, 10465=>732, 10466=>732, 10467=>732, 10468=>732, 10469=>732, + 10470=>732, 10471=>732, 10472=>732, 10473=>732, 10474=>732, 10475=>732, 10476=>732, 10477=>732, 10478=>732, 10479=>732, 10480=>732, 10481=>732, 10482=>732, 10483=>732, 10484=>732, 10485=>732, + 10486=>732, 10487=>732, 10488=>732, 10489=>732, 10490=>732, 10491=>732, 10492=>732, 10493=>732, 10494=>732, 10495=>732, 10502=>838, 10503=>838, 10506=>838, 10507=>838, 10560=>683, 10561=>683, + 10702=>838, 10703=>1000, 10704=>1000, 10705=>1000, 10706=>1000, 10707=>1000, 10708=>1000, 10709=>1000, 10731=>494, 10752=>1000, 10753=>1000, 10754=>1000, 10764=>1325, 10765=>521, 10766=>521, 10767=>521, + 10768=>521, 10769=>521, 10770=>521, 10771=>521, 10772=>521, 10773=>521, 10774=>521, 10775=>521, 10776=>521, 10777=>521, 10778=>521, 10779=>521, 10780=>521, 10877=>838, 10878=>838, 10879=>838, + 10880=>838, 10881=>838, 10882=>838, 10883=>838, 10884=>838, 10885=>838, 10886=>838, 10887=>838, 10888=>838, 10889=>838, 10890=>838, 10891=>838, 10892=>838, 10893=>838, 10894=>838, 10895=>838, + 10896=>838, 10897=>838, 10898=>838, 10899=>838, 10900=>838, 10901=>838, 10902=>838, 10903=>838, 10904=>838, 10905=>838, 10906=>838, 10907=>838, 10908=>838, 10909=>838, 10910=>838, 10911=>838, + 10912=>838, 10926=>838, 10927=>838, 10928=>838, 10929=>838, 10930=>838, 10931=>838, 10932=>838, 10933=>838, 10934=>838, 10935=>838, 10936=>838, 10937=>838, 10938=>838, 11001=>838, 11002=>838, + 11008=>838, 11009=>838, 11010=>838, 11011=>838, 11012=>838, 11013=>838, 11014=>838, 11015=>838, 11016=>838, 11017=>838, 11018=>838, 11019=>838, 11020=>838, 11021=>838, 11022=>836, 11023=>836, + 11024=>836, 11025=>836, 11026=>945, 11027=>945, 11028=>945, 11029=>945, 11030=>769, 11031=>769, 11032=>769, 11033=>769, 11034=>945, 11040=>869, 11041=>873, 11042=>873, 11043=>873, 11360=>557, + 11361=>278, 11362=>557, 11363=>603, 11364=>695, 11365=>613, 11366=>392, 11367=>752, 11368=>634, 11369=>656, 11370=>579, 11371=>685, 11372=>525, 11380=>592, 11381=>654, 11382=>568, 11383=>660, + 61960=>781, 62047=>592, 63173=>612, 64256=>722, 64257=>646, 64258=>646, 64259=>1000, 64260=>1000, 64261=>686, 64262=>861, 64275=>1202, 64276=>1202, 64277=>1196, 64278=>1186, 64279=>1529, 64285=>296, + 64287=>494, 64288=>636, 64297=>838, 64298=>799, 64299=>799, 64300=>799, 64301=>799, 64302=>663, 64303=>663, 64304=>663, 64305=>655, 64306=>454, 64307=>607, 64308=>690, 64309=>336, 64310=>437, + 64311=>1000, 64312=>683, 64313=>336, 64314=>642, 64315=>666, 64316=>635, 64318=>736, 64320=>456, 64321=>771, 64323=>651, 64324=>666, 64326=>639, 64327=>688, 64328=>642, 64329=>799, 64330=>726, + 64331=>272, 64332=>655, 64333=>666, 64334=>666, 65024=>0, 65025=>0, 65026=>0, 65027=>0, 65028=>0, 65029=>0, 65030=>0, 65031=>0, 65032=>0, 65033=>0, 65034=>0, 65035=>0, + 65036=>0, 65037=>0, 65038=>0, 65039=>0, 65533=>1025}; + font[:enc]=''; + font[:diff]=''; + font[:file]='DejaVuSans-Oblique.z'; + font[:ctg]='DejaVuSans-Oblique.ctg.z'; + font[:originalsize]=461680; +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/freefont/AUTHORS --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/freefont/AUTHORS Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,143 @@ +-*-text-*- +$Id: AUTHORS,v 1.5 2003/10/08 12:22:24 peterlin Exp $ + +The free UCS scalable font collection is being maintained by Primo +Peterlin . The folowing list +cites the other contributors that contributed to particular ISO 10646 +blocks. + +# URW++ Design & Development GmbH + + Basic Latin (U+0041-U+007A) + Latin-1 Supplement (U+00C0-U+00FF) (most) + Latin Extended-A (U+0100-U+017F) + Spacing Modifier Letters (U+02B0-U+02FF) + Mathematical Operators (U+2200-U+22FF) (parts) + Block Elements (U+2580-U+259F) + Dingbats (U+2700-U+27BF) + +# Yannis Haralambous and John + Plaice + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + Greek (U+0370-U+03FF) + Armenian (U+0530-U+058F) + Hebrew (U+0590-U+05FF) + Arabic (U+0600-U+06FF) + Currency Symbols (U+20A0-U+20CF) + Arabic Presentation Forms-A (U+FB50-U+FDFF) + Arabic Presentation Forms-B (U+FE70-U+FEFF) + +# Young U. Ryu + + Arrows (U+2190-U+21FF) + Mathematical Symbols (U+2200-U+22FF) + +# Valek Filippov + + Cyrillic (U+0400-U+04FF) + +# Wadalab Kanji Comittee + + Hiragana (U+3040-U+309F) + Katakana (U+30A0-U+30FF) + +# Angelo Haritsis + + Greek (U+0370-U+03FF) + +# Yannis Haralambous and Virach Sornlertlamvanich + + Thai (U+0E00-U+0E7F) + +# Shaheed R. Haque + + Bengali (U+0980-U+09FF) + +# Sam Stepanyan + + Armenian (U+0530-U+058F) + +# Mohamed Ishan + + Thaana (U+0780-U+07BF) + +# Sushant Kumar Dash + + Oriya (U+0B00-U+0B7F) + +# Harsh Kumar + + Devanagari (U+0900-U+097F) + Bengali (U+0980-U+09FF) + Gurmukhi (U+0A00-U+0A7F) + Gujarati (U+0A80-U+0AFF) + +# Prasad A. Chodavarapu + + Telugu (U+0C00-U+0C7F) + +# Frans Velthuis and Anshuman Pandey + + + Devanagari (U+0900-U+097F) + +# Hardip Singh Pannu + + Gurmukhi (U+0A00-U+0A7F) + +# Jeroen Hellingman + + Oriya (U+0B00-U+0B7F) + Malayalam (U+0D00-U+0D7F) + +# Thomas Ridgeway + + Tamil (U+0B80-U+0BFF) + +# Berhanu Beyene <1beyene AT informatik.uni-hamburg.de>, + Prof. Dr. Manfred Kudlek , Olaf + Kummer , and Jochen Metzinger < + + Ethiopic (U+1200-U+137F) + +# Maxim Iorsh + + Hebrew (U+0590-U+05FF) + + +# Vyacheslav Dikonov + + Syriac (U+0700-U+074A) + Braille (U+2800-U+28FF) + +# M.S. Sridhar + + Devanagari (U+0900-U+097F) + Bengali (U+0980-U+09FF) + Gurmukhi (U+0A00-U+0A7F) + Gujarati (U+0A80-U+0AFF) + Oriya (U+0B00-U+0B7F) + Tamil (U+0B80-U+0BFF) + Telugu (U+0C00-U+0C7F) + Kannada (U+0C80-U+0CFF) + Malayalam (U+0D00-U+0D7F) + +# DMS Electronics, The Sri Lanka Tipitaka Project, and Noah Levitt + + + Sinhala (U+0D80-U+0DFF) + +# Dan Shurovich Chirkov + + Cyrillic (U+0400-U+04FF) + +# Abbas Izad + + Arabic (U+0600-U+06FF) + Arabic Presentation Forms-A (U+FB50-U+FDFF) + Arabic Presentation Forms-B (U+FE70-U+FEFF) + +Please see the CREDITS file for details on who contributed particular +subsets of the glyphs in font files. diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/freefont/CREDITS --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/freefont/CREDITS Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,389 @@ +-*-text-*- +$Id: CREDITS,v 1.4 2003/03/27 08:40:03 peterlin Exp $ + +This file lists the contributors and contributions to the free UCS +scalable font project. + + +# URW++ Design & Development GmbH + +URW++ donated a set of 35 core PostScript Type 1 fonts to the +Ghostscript project , to be available +under the terms of GNU General Public License (GPL). + + Basic Latin (U+0041-U+007A) + Latin-1 Supplement (U+00C0-U+00FF) + Latin Extended-A (U+0100-U+017F) + Spacing Modifier Letters (U+02B0-U+02FF) + Mathematical Operators (U+2200-U+22FF) + Block Elements (U+2580-U+259F) + Dingbats (U+2700-U+27BF) + + +# Yannis Haralambous and John + Plaice + +Yannis Haralambous and John Plaice are the authors of Omega +typesetting system, . Omega is an +extension of TeX. Its first release, aims primarily at improving TeX's +multilingual abilities. In Omega all characters and pointers into +data-structures are 16-bit wide, instead of 8-bit, thereby eliminating +many of the trivial limitations of TeX. Omega also allows multiple +input and output character sets, and uses programmable filters to +translate from one encoding to another, to perform contextual +analysis, etc. Internally, Omega uses the universal 16-bit Unicode +standard character set, based on ISO-10646. These improvements not +only make it a lot easier for TeX users to cope with multiple or +complex languages, like Arabic, Indic, Khmer, Chinese, Japanese or +Korean, in one document, but will also form the basis for future +developments in other areas, such as native color support and +hypertext features. ... Fonts for UT1 (omlgc family) and UT2 (omah +family) are under development: these fonts are in PostScript format +and visually close to Times and Helvetica font families. (from the +Omega WWW site). Omega fonts are available subject to GPL +. + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + Greek (U+0370-U+03FF) + Armenian (U+0530-U+058F) + Hebrew (U+0590-U+05FF) + Arabic (U+0600-U+06FF) + Currency Symbols (U+20A0-U+20CF) + Arabic Presentation Forms-A (U+FB50-U+FDFF) + Arabic Presentation Forms-B (U+FE70-U+FEFF) + + +# Valek Filippov + +Valek Filippov added Cyrillic glyphs and composite Latin Extended A to +the whole set of the abovementioned URW set of 35 PostScript core +fonts, . The fonts are available under +GPL. + + Latin Extended-A (U+0100-U+017F) + Cyrillic (U+0400-U+04FF) + + +# Wadalab Kanji Comittee + +Between April 1990 and March 1992, Wadalab Kanji Comittee put together +a series of scalable font files with Japanese scripts, in four forms: +Sai Micho, Chu Mincho, Cho Kaku and Saimaru. The font files are +written in custom file format, while tools for conversion into +Metafont and PostScript Type 1 are also supplied. The Wadalab Kanji +Comittee has later been dismissed, and the resulting files can be now +found on the FTP server of the Depertment of Mathematical Engineering +and Information Physics, Faculty of Engineering, University of Tokyo +. + + Hiragana (U+3040-U+309F) + Katakana (U+30A0-U+30FF) + + +# Young U. Ryu + +Young Ryu is the author of Txfonts, a set of mathematical symbols +designed to accompany text typeset in Times or its variants. In the +documentation, Young adresses the design of mathematical symbols: "The +Adobe Times fonts are thicker than the CM fonts. Designing math fonts +for Times based on the rule thickness of Times = , , + , / , < , +etc. would result in too thick math symbols, in my opinion. In the TX +fonts, these glyphs are thinner than those of original Times +fonts. That is, the rule thickness of these glyphs is around 85% of +that of the Times fonts, but still thicker than that of the CM fonts." +TX fonts are are distributed under the GNU public license +(GPL). Pointers to their location are available on +. + + Arrows (U+2190-U+21FF) + Mathematical Symbols (U+2200-U+22FF) + + +# Angelo Haritsis + +Angelo Haritsis has compiled a set of Greek Type 1 fonts, available on +. +The glyphs from this source has been used to compose Greek glyphs in +FreeSans and FreeMono. + +Angelo's licence says: "You can enjoy free use of these fonts for +educational or commercial purposes. All derived works should include +this paragraph. If you want to change something please let me have +your changes (via email) so that they can go into the next +version. You can also send comments etc to the above address." + + Greek (U+0370-U+03FF) + + +# Yannis Haralambous and Virach Sornlertlamvanich + +In 1999, Yannis Haralambous and Virach Sornlertlamvanich made a set of +glyphs covering the Thai national standard NF3, in both upright and +slanted shape. The collection of glyphs have been made part of GNU +intlfonts 1.2 package and is available on + under GPL. + + Thai (U+0E00-U+0E7F) + + +# Shaheed R. Haque + +Shaheed Haque has developed a basic set of basic Bengali glyphs +(without ligatures), using ISO10646 encoding. They are available under +the XFree86 license at . + +Copyright (C) 2001 S.R.Haque . All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL S.R.HAQUE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of S.R.Haque shall not be +used in advertising or otherwise to promote the sale, use or other +dealings in this Software without prior written authorization from +S.R.Haque. + + Bengali (U+0980-U+09FF) + + +# Sam Stepanyan + +Sam Stepanyan created a set of Armenian sans serif glyphs visually +compatible with Helvetica or Arial. Available on +. On +2002-01-24, Sam writes: "Arial Armenian font is free for +non-commercial use, so it is OK to use under GPL license." + + Armenian (U+0530-U+058F) + + +# Mohamed Ishan + +Mohamed Ishan has started a Thaana Unicode Project + and among other things created a +couple of Thaana fonts, available under FDL or BDF license. + + Thaana (U+0780-U+07BF) + + +# Sushant Kumar Dash (*) + +Sushant Dash has created a font in his mother tongue, Oriya. As he +states on his web page : +"Please feel free to foreword this mail to your Oriya friends. No +copyright law is applied for this font. It is totally free!!! Feel +free to modify this using any font editing tools. This is designed for +people like me, who are away from Orissa and want to write letters +home using Computers, but suffer due to unavailability of Oriya +fonts.(Or the cost of the available packages are too much)." + + Oriya (U+0B00-U+0B7F) + + +# Harsh Kumar + +Harsh Kumar has started BharatBhasha - +an effort to provide "FREE software, Tutorial, Source Codes +etc. available for working in Hindi, Marathi, Gujarati, Gurmukhi and +Bangla. You can type text, write Web pages or develop Indian Languages +Applications on Windows and on Linux. We also offer FREE help to +users, enthusiasts and software developers for their work in Indian +languages." + + Devanagari (U+0900-U+097F) + Bengali (U+0980-U+09FF) + Gurmukhi (U+0A00-U+0A7F) + Gujarati (U+0A80-U+0AFF) + + +# Prasad A. Chodavarapu + +Prasad A. Chodavarapu created Tikkana, a Telugu font available in Type +1 and TrueType format on . +Tikkana exceeds the Unicode Telugu range with some composite glyphs. +Available under the GNU General Public License. + + Telugu (U+0C00-U+0C7F) + + +# Frans Velthuis and Anshuman Pandey + + +In 1991, Frans Velthuis from the Groningen University, The +Netherlands, released a Devanagari font as Metafont source, available +under the terms of GNU GPL. Later, Anshuman Pandey from the Washington +University, Seattle, USA, took over the maintenance of font. Fonts can +be found on CTAN, . I +converted the font to Type 1 format using Pter Szab's TeXtrace +program and removed some +redundant control points with PfaEdit. + + Devanagari (U+0900-U+097F) + + +# Hardip Singh Pannu + +In 1991, Hardip Singh Pannu has created a free Gurmukhi TrueType font, +available as regular, bold, oblique and bold oblique form. Its license +says "Please remember that these fonts are copyrighted (by me) and are +for non-profit use only." + + Gurmukhi (U+0A00-U+0A7F) + + +# Jeroen Hellingman + +Jeroen Hellingman created a set of Malayalam metafonts in 1994, and a +set of Oriya metafonts in 1996. Malayalam fonts were created as +uniform stroke only, while Oriya metafonts exist in both uniform and +modulated stroke. From private communication: "It is my intention to +release the fonts under GPL, but not all copies around have this +notice on them." Metafonts can be found on CTAN, + and +. + + Oriya (U+0B00-U+0B7F) + Malayalam (U+0D00-U+0D7F) + + +# Thomas Ridgeway <> (*) + +Thomas Ridgeway, then at the Humanities And Arts Computing Center, +Washington University, Seattle, USA, (now defunct), created a Tamil +metafont in 1990. Anshuman Pandey from the same university took over +the maintenance of font. Fonts can be found at CTAN, +. + + Tamil (U+0B80-U+0BFF) + + +# Berhanu Beyene <1beyene AT informatik.uni-hamburg.de>, + Prof. Dr. Manfred Kudlek , Olaf + Kummer , and Jochen Metzinger < + +Beyene, Kudlek, Kummer and Metzinger from the Theoretical Foundations +of Computer Science, University of Hamburg, prepared a set of Ethiopic +metafonts, found on +. They also +maintain home page on the Ethiopic font project, +, +and can be reached at . The current +version of fonts is 0.7 (1998), and they are released under GNU GPL. I +converted the fonts to Type 1 format using Pter Szab's TeXtrace +program and removed some +redundant control points with PfaEdit. + + Ethiopic (U+1200-U+137F) + + +# Maxim Iorsh + +In 2002, Maxim Iorsh started the Culmus project, aiming at providing +Hebrew-speaking Linux and Unix community with a basic collection of +Hebrew fonts for X Windows. The fonts are visually compatible with +URW++ Century Schoolbook L, URW++ Nimbus Sans L and URW++ Nimbus Mono +L families, respectively, and are released under GNU GPL license. See +also . + + Hebrew (U+0590-U+05FF) + + +# Vyacheslav Dikonov + +Vyacheslav Dikonov made a braille unicode font that could be merged +with the UCS fonts to fill the 2800-28FF range completely. (uniform +scaling is possible to adapt it to any cell size). He also contributed +a free syriac font, whose glyphs (about half of them) are borrowed +from the "Carlo Ator" font freely downloadable from +. Vyacheslav also filled in a few missing +spots in the U+2000-U+27FF area, e.g. the box drawing section, sets of +subscript and superscript digits and capital Roman numbers. + + Syriac (U+0700-U+074A) + Box Drawing (U+2500-U+257F) + Braille (U+2800-U+28FF) + + +# M.S. Sridhar + +M/S Cyberscape Multimedia Limited, Mumbai, developers of Akruti +Software for Indian Languages (http://www.akruti.com/), have released +a set of TTF fonts for nine Indian scripts (Devanagari, Gujarati, +Telugu, Tamil, Malayalam, Kannada, Bengali, Oriya, and Gurumukhi) +under the GNU General Public License (GPL). You can download the fonts +from the Free Software Foundation of India WWW site +(http://www.gnu.org.in/software/software.html#akruti) or from the +Akruti website. + +For any further information or assistance regarding these fonts, +please contact mssridhar AT vsnl.com. + + Devanagari (U+0900-U+097F) + Bengali (U+0980-U+09FF) + Gurmukhi (U+0A00-U+0A7F) + Gujarati (U+0A80-U+0AFF) + Oriya (U+0B00-U+0B7F) + Tamil (U+0B80-U+0BFF) + Telugu (U+0C00-U+0C7F) + Kannada (U+0C80-U+0CFF) + Malayalam (U+0D00-U+0D7F) + + +# DMS Electronics, The Sri Lanka Tipitaka Project, and Noah Levitt + + +Noah Levitt found out that the Sinhalese fonts available on the site + are released under GNU GPL, or, +precisely, "Public Domain under GNU Licence + Produced by DMS +Electronics for The Sri Lanka Tipitaka Project" (taken from the font +comment), and took the effort of recoding the font to Unicode. + + Sinhala (U+0D80-U+0DFF) + + +# Daniel Shurovich Chirkov + +Dan Chirkov updated the FreeSerif font with the missing Cyrillic +glyphs needed for conformance to Unicode 3.2. The effort is part of +the Slavjanskij package for Mac OS X, +. + + Cyrillic (U+0400-U+04FF) + + +# Primo Peterlin + +Primo Peterlin filled in missing glyphs here and there (e.g. Latin +Extended-B and IPA Extensions ranges in the FreeMono familiy), and +created the following UCS blocks: + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + Arrows (U+2190-U+21FF) + Box Drawing (U+2500-U+257F) + Block Elements (U+2580-U+259F) + Geometrical Shapes (U+25A0-U+25FF) + + +Notes: + +*: The glyph collection looks license-compatible, but its author has + not yet replied and agreed on his/her work being used in part of + this glyph collection. diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/freefont/ChangeLog --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/freefont/ChangeLog Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,630 @@ +2003-10-08 Primoz Peterlin + + # FreeMonoOblique.sfd, FreeSerifBoldItalic.sfd, + FreeSerifItalic.sfd - applied Josef Segur's corrections from + Oct. 5. + +2003-10-02 Primoz Peterlin + + # sfd/FreeSerif.sfd - Abbas Izad's contributed Arabic/Farsi + characters added. + + # sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - Combining characters (U+0300 - + U+036F) moved left, so that they have negative horizontal values + and zero advance width. + +2003-09-15 Primoz Peterlin + + # sfd/FreeSerifBold.sfd, sfd/FreeSerifItalic.sfd - Started working + on super- and subscripts. + +2003-09-12 Primoz Peterlin + + # sfd/FreeSans.sfd, sfd/FreeSerif.sfd - Added some missing + Hiragana and Katakana characters. + + # sfd/FreeSansBold.sfd - Cleared background characters in Latin + Extended-A. Added some automatically constructed characters in + Latin Extended-B. Started with superscripts and subscripts. + + # sfd/FreeSans.sfd - Subscript numerals (U+2080-U+2089) completed. + +2003-05-19 Primoz Peterlin + + # sfd/FreeSerif.sfd - Thai characters po pla and bo baimai + swapped; Thai character fongman corrected; all courtesy Theppitak + Karoonboonyanan. + +2003-05-17 Panayotis Katsaloulis + + # sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - Full support + of all ancient greek glyphs + +2003-05-15 Primoz Peterlin + + # tools/KerningNumerals.pl - A Perl script for moving kerning + information from ASCII numerals (U+0030...) to characters in the + Adobe corporate use area (U+F6xx). + + # sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd, + sfd/FreeSansBoldOblique.sfd - Created kerned numerals in the Adobe + corporate use area (U+F6xx) and moved kerning information from + ASCII numerals to the kerned numerals. + +2003-05-14 Primoz Peterlin + + # sfd/FreeSans.sfd - First approximation of super- and subscript + numerals and vulgar fractions. + + # sfd/FreeSerif.sfd - Super- and subscript numerals complete, + vulgar fractions completed and redone as references rather than + outlines. + +2003-05-12 Primoz Peterlin + + # sfd/FreeSerif.sfd - Clean-up of the Cyrillic letters added on + March 27; super- and subscripts, vulgar fractions. + +2003-05-09 Primoz Peterlin + + # sfd/FreeMonoBold.sfd - Added a couple of characters to + the Latin Extended-B area and the IPA extensions area. + +2003-05-08 Primoz Peterlin + + # sfd/FreeSerifBoldItalic.sfd - Added a couple of characters to + the Latin Extended-B area. + + # sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - ASCII + numerals now monospaced; kerned numerals moved to Adobe corporate + use area + (U+F6xx). + +2003-05-07 Primoz Peterlin + + # sfd/FreeSerif.sfd - Roman numerals now more complete. + + # sfd/FreeSansOblique.sfd, sfd/FreeSansBoldOblique.sfd - Accented + characters added in the Latin Extended-B area. + + # sfd/FreeSans.sfd - Greek accents added in the Greek Extended + area, characters added in the Latin Extended-B area, Roman + numerals added. + + # sfd/FreeMonoOblique.sfd - Kerning pairs removed (what were they + doing in a monospaced font, anyway?). + + # sfd/FreeMonoBoldOblique.sfd - Additions in Latin Extended-B and + Basic Greek. + + # sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd, sfd/FreeMonoOblique.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd, + sfd/FreeSansBoldOblique.sfd - Major cleanup (fixed widths, open + paths, path directions (clockwise/counter-clockwise), points + rounded to integer values; outlines simplified etc.) + +2003-05-06 Primoz Peterlin + + # tools/OS2UnicodeRange - A simple script to display OS/2 Unicode + range table in TrueType fonts. + + # sfd/FreeSans.sfd, sfd/FreeSansBold.sfd - ASCII numerals now + monospaced; kerned numerals moved to Adobe corporate use area + (U+F6xx). FreeSans is done, FreeSansBold half-way. + + # sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - Added 2003 in copyright info. + +2003-03-27 Primoz Peterlin + + # sfd/FreeSerif.sfd - Cyrillic and Cyrillic Supplement blocks + brought to conformance with Unicode 3.2, courtesy Daniel Shurovich + Chirkov. + +2003-03-19 Primoz Peterlin + + # sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd - somewhat wider + germandbls (U+00DF), due to complaints by Walter Schmidt. + +2003-03-18 Primoz Peterlin + + # sfd/FreeSans.sfd - Added Sinhala glyphs from the Tipitaka + project , recoded to Unicode by Noah Levitt. + +2003-02-19 Primoz Peterlin + + # sfd/FreeSans.sfd - Minor changes on mathematical operators. + +2003-02-18 Primoz Peterlin + + # sfd/FreeMono.sfd - minor cleanup of glyph backgrounds; changed + integral signs (U+222B - U+2230) + +2003-02-05 Primoz Peterlin + + # sfd/FreeSans.sfd - added a couple of glyphs in the IPA and + African Latin ranges. + +2003-01-30 Primoz Peterlin + + # sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd - Corrected Maltese Hbar (U+0126) + and/or hbar (U+0127). + +2003-01-28 Primoz Peterlin + + # sfd/FreeSerifItalic.sfd - Corrected Maltese hbar (U+0127). + +2002-12-18 Primoz Peterlin + + # tools/ConvertFont - PfaEdit script for converting SFD files to + TrueType fonts. + + # sfd/FreeSans.sfd - Added Tamil and Kannada glyphs from the + Akruti Indic fonts. + +2002-12-17 Primoz Peterlin + + # sfd/FreeSans.sfd - Added Devanagari and Gujarati glyphs from the + Akruti Indic fonts. + + # www/index.html - Added information on Rogier van Dalen's tools. + + # AUTHORS - Added M.S. Sridhar. + + # CREDITS - Correct spelling of Culmus project. Added M.S. Sridhar. + +2002-12-06 Primoz Peterlin + + # sfd/FreeMono.sfd - Added Braille glyphs, courtesy Vyacheslav + Dikonov. + + # sfd/FreeSans.sfd - Added Unicode Syriac glyphs, courtesy + Vyacheslav Dikonov. + +2002-10-11 Primoz Peterlin + + # www/index.html - Added information on the availability of the + Debian GNU/Linux package. + + # sfd/FreeSerif.sfd, sfd/FreeSans.sfd - added some kern pairs + beyond Latin-1 area. + + # sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - re-introduced + all the emtpy glyph slots (changes from Sep 23 made PfaEdit + crash). + +2002-09-23 Primoz Peterlin + + # sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - imported + kerning information from the URW++ AFM files + +2002-09-11 Primoz Peterlin + + # sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoOblique.sfd - updated Hebrew parts to comply with + Culmus v0.6. + + # sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansOblique.sfd - Added Danilo Segan's Serbian Cyrillic + glyphs; updated Hebrew parts to comply with Culmus v0.6. + +2002-09-09 Primoz Peterlin + + # sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansOblique.sfd - Updated Cyrillic part to match + Filippov's 1.0.7pre14 + + # sfd/FreeSansOblique.sfd - added Sam Stepanyan's Armenian glyphs + from FreeSans (skewed for 12 degrees). + +2002-09-06 Primoz Peterlin + + # sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd, + sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd - Added Maxim + Iorsh's Hebrew characters. + +2002-08-29 Primoz Peterlin + + # sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, + sfd/FreeMonoBold.sfd, sfd/FreeMonoOblique.sfd - Added Maxim + Iorsh's Hebrew characters. + + # AUTHORS, CREDITS - Added Maxim Iorsh as author. + +2002-08-28 Primoz Peterlin + + # www/index.html - Added information of Microsoft's withdrawal of + freely available Unicode TrueType fonts + + # www/resources.html - Added link to Maxim Iorsh's Culmus project. + +2002-07-26 Primoz Peterlin + + # sfd/FreeMono.sfd - Added a couple of characters (Arrows area). + +2002-06-11 Primoz Peterlin + + # sfd/FreeMono.sfd - Applied Michalis Kabrianis's patch concerning + perispomeni in Greek politoniko. + +2002-05-23 Primoz Peterlin + + # sfd/FreeMono.sfd - Applied Michalis Kabrianis's patch concerning + psili in Greek politoniko. Also added two working variants of + chars in the IPA range. + +2002-05-15 Primoz Peterlin + + # sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifBold.sfd - Deleted explicit ".notdef" character with + no contours. + +2002-05-14 Primoz Peterlin + + # sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - The new version of PfaEdit saves + correctly formed Panose and LineGap lines. + + # sfd/FreeSansBoldOblique.sfd - Filled-in the missing TTFWidth and + TTFWeight values. + +2002-05-09 Primoz Peterlin + + # sfd/FreeSans.sfd - Added diacritics to the Spacing Modifier + Letters and Combining Diacritical Marks areas. Added composed + glyphs to the Latin Extended-B area. + +2002-05-07 Primoz Peterlin + + # sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - Updated Panose information with data + provided by Josef W. Segur. Updated TTF headers with English and + Slovenian text. + +2002-04-30 Primoz Peterlin + + # sfd/FreeMonoBold.sfd - Working on Greek small letters. Several + minor changes (lower carons etc.) + +2002-04-29 Primoz Peterlin + + # FreeMonoBoldOblique.sfd - Started adding Greek. + + # sfd/FreeMonoBold.sfd - Added glyphs in the Geometrical Shapes + and Miscellaneous Symbols area. Harmonizing Greek with Latin. Done + with capitals. + + # sfd/FreeMono.sfd - Deleted the explicit .notdef character. Added + one glyph to the Geometrical Shapes area, which is now completed; + added three glyphs to the Miscellaneous Symbols area. Harmonizing + Greek with Latin. Done with the capitals. + +2002-04-26 Primoz Peterlin + + # sfd/FreeSans.sfd - Adjusted accent positions on several glyphs + in the Latin Extended-A area. + +2002-04-25 Primoz Peterlin + + # sfd/FreeMonoBold.sfd - Box Drawing area completed. Added a + couple of glyphs in the Geometrical Shapes area. + + # sfd/FreeMono.sfd - Small corrections in the Box Drawing area. + +2002-04-24 Primoz Peterlin + + # sfd/FreeMono.sfd - Box Drawing area completed. + +2002-04-23 Primoz Peterlin + + # tools/WGL4.lst - corrected. + + # sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd - Working on Box Drawing + area. + +2002-04-22 Primoz Peterlin + + # sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd - Working on Latin + Extended-B and Greek. + +2002-04-19 Primoz Peterlin + + # sfd/FreeSerif.sfd - Somewhat cleaner chess figures. + + # tools/MES-2.txt, tools/MES-2.lst - Corrected list (it is not + 203C-203E, it is 203C and 203E). + + # sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - Changed "Family Name" from Free to + FreeSerif, FreeSans and FreeMono, as appropriate. Changed Font + Modifiers from MonoBold etc. to Bold, Italic, Oblique, BoldOblique + and BoldItalic. + +2002-04-18 Primoz Peterlin + + # sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd - Corrected metrics; now all character + widths are set to 600. + +2002-04-17 Primoz Peterlin + + # sfd/FreeSerif.sfd - Corrected glyphs in the Box Drawing area and + Block Elements area, which should extend through the ascender#and + descender# height. + + # sfd/FreeMonoBold.sfd - Continued working on harmonizing Greek + letters with Latin and Cyrillic. + + # sfd/FreeMonoBold.sfd - Added some box drawing characters. + +2002-04-16 Primoz Peterlin + + # www/design-notes.html - Updated notes on stroke width for + symbols in Free Mono Bold. + + # sfd/FreeMono.sfd - Added a handful of characters in the + Miscellaneous Symbols area. + + # sfd/FreeMonoBoldOblique.sfd - Added subscripts, superscripts and + vulgar fractions. + + # sfd/FreeMonoBold.sfd - Started harmonizing Greek letters with + Latin and Cyrillic. + + # sfd/FreeMonoBold.sfd - Added subscripts, superscripts and vulgar + fractions. + +2002-04-15 Primoz Peterlin + + # www/design-notes.html - Updated notes on super-/subscripts in + Free Mono Bold. Separate subsections for Free Mono regular and + Free Mono Bold. + +2002-04-12 Primoz Peterlin + + # sfd/FreeSerif.sfd - Added Ethiopian glyphs, converted from the + Metafont sources from TGI, Universitt Hamburg (authors Berhanu + Beyene, Prof. Dr. Manfred Kudlek, Olaf Kummer, and Jochen + Metzinger) using Szabo's TeXtrace and retouched using + PfaEdit. Ethiopian metafonts are released under GNU GPL, + . + + # sfd/FreeMonoBold.sfd - Added 40 characters, mostly in the Latin + Extended-B and IPA Extensions areas. + +2002-04-11 Primoz Peterlin + + # sfd/FreeMono.sfd - Added a handful of characters in the Latin + Extended-B, IPA Extensions, Currency Symbols and Miscellaneous + Symbols areas. + +2002-04-09 Primoz Peterlin + + # sfd/FreeMono.sfd - Correcting accent positioning in the Extended + Greek area; adding a couple of characters here and there. Still 20 + characters short of MES-2 conformance. + +2002-04-08 Primoz Peterlin + + # sfd/FreeMono.sfd - Added some characters in the Arrows area; + more or less completed Extended Greek area (accents still need to + be fine-tuned). + +2002-04-05 Primoz Peterlin + + # sfd/FreeMono.sfd - Modern non-Russian Cyrilic mostly completed. + + # sfd/FreeMonoOblique.sfd - Synchronized with FreeMono. + + # sfd/FreeSerif.sfd - Added Thomas Ridgeway's Tamil characters + (converted from Metafont and edited somehwat). + +2002-04-04 Primoz Peterlin + + # sfd/FreeMonoOblique.sfd - Armenian letters added. + + # sfd/FreeMonoBold.sfd - Serbian Cyrillic letters dje, tshe, lje + and nje corrected. + + # sfd/FreeMono.sfd - Serbian Cyrillic letters dje and tshe + corrected. Some other non-Russian Cyrillic letters modified and + "welded together". + +2002-04-03 Primoz Peterlin + + # sfd/FreeMono.sfd - Added more or less complete Armenian + area. The glyphs are a tidied-up version based on the Armenian + Courier on the . Now we have + 1673 characters. + +2002-03-28 Primoz Peterlin + + # sfd/FreeMono.sfd - Added some mathematical symbols. + +2002-03-26 Primoz Peterlin + + # sfd/FreeSans.sfd - took H.S. Pannu's Gurmukhi from FreeSerif. It + actually fits to FreeSans much better. It seems I'll have to look + for another Gurmukhi font with modulated stroke for FreeSerif. + + # sfd/FreeSerifItalic.sfd - replaced existing Hebrew glyphs by + those from FreeSerif (slanted for 15.5 degrees). + + # sfd/FreeSerif.sfd - Added dotted Hebrew letters. Changed barred H. + + # sfd/FreeMono.sfd - Completed vulgar fractions; minor changes in + Greek; added some mathematical operators. + + # sfd/FreeMonoBold.sfd - added 12 characters to Latin Extended-B + and IPA Extensions areas (total 984). + +2002-03-25 Primoz Peterlin + + # sfd/FreeMonoBold.sfd - started adding Latin Extended-B and IPA + Extensions. + + # sfd/FreeMono.sfd - Minor cosmetic changes; cleaning up Greek + (removing redundant control points), added some non-European + Cyrillic glyphs as a test. + +2002-03-22 Primoz Peterlin + + # sfd/FreeMono.sfd - Some minor modifications; letters in Latin + Extended-B area "welded" together. + +2002-03-20 Primoz Peterlin + + # www/index.html - finally linked the resources and design notes + pages. + + # www/design-notes.html - added scaling information for super- and + subscript numerals in FreeMono. + +2002-03-19 Primoz Peterlin + + # sfd/FreeMono.sfd - the Latin Extended-B and IPA Extension area + characters moved from FreeMono and skewed for 12 degrees. + +2002-03-18 Primoz Peterlin + + # sfd/FreeMono.sfd - added a dozen or two of new characters, in + particular in the Latin Extended-B and IPA Extension area. + +2002-03-15 Primoz Peterlin + + # sfd/FreeMono.sfd - added a dozen of two of new characters, in + particular in the IPA Extension area. + + # www/design-notes.html - Corrected data for x-height in FreeMono; + information on constructing small caps. + +2002-03-14 Primoz Peterlin + + # sfd/FreeMono.sfd - added three smiley characters to the + Miscallaneous Symbols area. + +2002-03-10 Primoz Peterlin + + # sfd/FreeSerif.sfd - Anshuman Pandey has only converted Gurmukhi + from TrueType to Metafont; the original author of Gurkmukhi font + is Hardip Singh Pannu . + Got the permission from him to include the Gurmukhi glyph set. + +2002-03-08 Primoz Peterlin + + # sfd/FreeSerif.sfd - Added some more glyphs in the Mathematical + Symbols area to a total number of 3374. + +2002-03-06 Primoz Peterlin + + # sfd/FreeSerif.sfd - Added a basic Gurmukhi set. + + # www/design-notes.html - started a page on design notes + + # sfd/FreeMono.sfd - realized that glyphs in the Box Drawing area + and Block Elements area should extend through the ascender#and + descender# height, and corrected it. + + # sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd - added some musical + glyphs, linking "no-break space" to space, "soft hyphen" to + hyphen-minus etc. + +2002-03-05 Primoz Peterlin + + # tools/WGL4.lst - Added Windows Glyph List 4.0 + + # tools/LigatureList.pl - Wrote a Perl script, which lists the + GSUB list (ligature list) of a OpenType font. + + # sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd, + sfd/FreeSerifItalic.sfd - auxilliary Hebrew glyphs added. They are + too light compared with Latin and will be substituted with better + ones. + +2002-03-04 Primoz Peterlin + + # sfd/FreeSerif.sfd - Added some more glyphs to the Mathematical + Operators area (page 0x22). + + # sfd/FreeSerif.sfd - Incomplete and fragmentary support for + Devanagari, originating from Harsh Kumar's Shusha fonts was + replaced by Frans Velthuis' Devanagari metafont, now maintained by + Anshuman Pandey and available under + GPL. Until I figure out how to provide glyph substitution table in + OpenType, only the Unicode part is there. + +2002-02-28 Primoz Peterlin + + # ChangeLog file created + + # sfd/FreeSerif.sfd - Added some Telugu glyphs to page 0x0C, + courtesy Prasad A. Chodavarapu + + # sfd/FreeSerif.sfd - Added some glyphs to the Miscellaneous + Symbols page (0x26). + +2002-02-26 Primoz Peterlin + + # mailing lists freefont-announce and freefont-bugs created + +2002-02-25 Primoz Peterlin + + # sfd/FreeSerif.sfd - Added a couple of glyphs in Mathematics + Operators area. + + # sfd/FreeMono.sfd + - Added some more glyphs, in particular in the Mathematical + Operators section. + - Changed FamilyName to Free, FontName to FreeMono, and Full name + to "Free Monospaced". + +2002-02-20 Primoz Peterlin + + # sfd/ directory added containing FreeSerif, FreeSans and FreeMono + families. + + # tools/ directory added containing lists with characters required + for MES (Multilinguag European Subset) compliance. + + # tools/mes-list-expand.pl created - a Perl script for expanding MES + ranges into simple one-char-per-line format + + # tools/CheckConformance.pl created - a Perl script for checking + conformance of a font file with a given coded character set + + # homepage created + +2002-02-19 Primoz Peterlin + + # freefont (Free UCS Scalable Fonts) project approved on + savannah.gnu.org: diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/freefont/INSTALL --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/freefont/INSTALL Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,57 @@ +-*-mode:text;-*- +$Id: INSTALL,v 1.1 2002/12/12 15:09:05 peterlin Exp $ + + + Installing the Free UCS outline fonts + ===================================== + + +These installation notes are supposed to provide a helpful guidance +through the process of installation of free UCS outline fonts. They +can probably be significantly improved. Please direct your comments, +suggestions for improvements, criticisms etc. to Primoz PETERLIN + and thus help improve them. + + +1. UNIX/GNU/Linux/BSD Systems + +The rather awkward "UNIX/GNU/Linux/BSD" agglomeration is used to +denote any system capable of running XFree86 server with FreeType +, a high-quality free font rasterizer. + +1.1 The rough way + +Unfortunately, hardly any other way exists at the moment. + +1) Fetch the freefont-ttf.tar.gz package with Free UCS outline fonts + in the TrueType format. + +2) Unpack TrueType fonts into a suitable directory, + e.g. /usr/share/fonts/default/TrueType/. + +3) If you have chosen any other directory, make sure the directory you + used to install the fonts is listed in the path searched by the X + Font Server. Append the directory to the "catalogue=" in the + /etc/X11/fs/config. + +4) Run ttmkfdir in the directory where you unpacked the fonts. + + +1.2 Debian GNU/Linux + +Users of Debian GNU/Linux system will probably want to use the +pre-packed Debian package, as available from the Debian site, +, or +any of its mirrors. You can install them by issuing the command + +apt-get install ttf-freefont + + +2. Microsoft Windows 95/98/NT/2000/XP + +To be written. + + +3. MacOS + +To be written. diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/freefont/README --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/freefont/README Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,113 @@ +-*-text-*- +$Id: README,v 1.1 2002/11/28 10:10:30 peterlin Exp $ + +Summary: This project aims to privide a set of free scalable +(PostScript Type0, TrueType, OpenType...) fonts covering the ISO +10646/Unicode UCS (Universal Character Set). + + +Why do we need free scalable UCS fonts? + +A large number of free software users switched from free X11 +bitmapped fonts to proprietary Microsoft Truetype fonts, as a) they +used to be freely downloaded from Microsoft Typography page +, b) they contain a more +or less decent subsed of the ISO 10646 UCS (Universal Character Set), +c) they are high-quality, well hinted scalable Truetype fonts, and d) +Freetype , a free high-quality Truetype font +renderer exists and has been integrated into the latest release of +XFree86, the free X11 server. + +Building a dependence on non-free software, even a niche one like +fonts, is dangerous. Microsoft Truetype core fonts are not free, they +are just costless. For now, at least. Citing the TrueType core fonts +for the Web FAQ : +"You may only redistribute the fonts in their original form (.exe or +.sit.hqx) and with their original file name from your Web site or +intranet site. You must not supply the fonts, or any derivative fonts +based on them, in any form that adds value to commercial products, +such as CD-ROM or disk based multimedia programs, application software +or utilities." As of August 2002, however, the fonts are not +anymore available on the Web, which makes the situation clearer. + +Aren't there any free high-quality scalable fonts? Yes, there are. +URW++, a German digital typefoundry, released their own version of the +35 Postscript Type 1 core fonts under GPL as their donation to the +Ghostscript project . The Wadalab +Kanji comittee has produced Type 1 font files with thousands of +filigree Japanese glyphs . +Yannis Haralambous has drawn beautiful glyphs for the Omega +typesetting system . And so +on. Scattered around the internet there are numerous other free +resources for other national scripts, many of them aiming to be a +suitable match for Latin fonts like Times or Helvetica. + + +What do we plan to achieve, and how? + +Our aim is to collect available resources, fill in the missing pieces, +and provide a set of free high-quality scalable (Type 1 and Truetype) +UCS fonts, released under GPL. + +Free UCS scalable fonts will cover the following character sets + +# ISO 8859 parts 1-15 +# CEN MES-3 European Unicode Subset + http://www.evertype.com/standards/iso10646/pdf/cwa13873.pdf +# IBM/Microsoft code pages 437, 850, 852, 1250, 1252 and more +# Microsoft/Adobe Windows Glyph List 4 (WGL4) + http://partners.adobe.com/asn/developer/opentype/appendices/wgl4.html +# KOI8-R and KOI8-RU +# DEC VT100 graphics symbols +# International Phonetic Alphabet +# Arabic, Hebrew, Armenian, Georgian, Ethiopian, Thai and Lao alphabets, + including Arabic presentation forms A/B +# Japanese Katakana and Hiragana +# mathematical symbols, including the whole TeX repertoire of symbols +# APL symbols + etc. + +A free Postscript font editor, George Williams's Pfaedit + will be used for creating new +glyphs. + +Which font shapes should be made? As historical style terms like +Renaissance or Baroque letterforms cannot be applied beyond +Latin/Cyrillic/Greek scripts to any greater extent than Kufi or Nashki +can be applied beyond Arabic script, a smaller subset of styles will +be made: one monospaced and two proportional (one with uniform stroke +and one with modulated) will be made at the start. + +In the beginning, however, we don't believe that Truetype hinting will +be good enough to compete with neither the hand-crafted bitmapped +fonts at small sizes, nor with commercial TrueType fonts. A companion +program for modifying the TrueType font tables, TtfMod, is in the +works, though: . For +applications like xterm, users are referred to the existing UCS bitmap +fonts, . + + +What do the file suffices mean? + +The files with .sfd (Spline Font Database) are in PfaEdit's native +format. Please use these if you plan to modify the font files. PfaEdit +can export these to mostly any existing font file format. + +TrueType fonts for immediate consumption are the files with the .ttf +(TrueType Font) suffix. You can use them directly, e.g. with the X +font server. + +The files with .ps (PostScript) suffix are not font files at all - +they are merely PostScript files with glyph tables, which can be used +for overview, which glyphs are contained in which font file. + +You may have noticed the lacking of PostScript Type 1 (.pfa/.pfb) font +files. Type 1 format does not support large (> 256) encoding vectors, +so they can not be used with ISO 10646 encoding. If your printer +supports it, you can use Type 0 format, though. Please use PfaEdit for +conversion to Type 0. + + +Primoz Peterlin, + +Free UCS scalable fonts: ftp:#biofiz.mf.uni-lj.si/pub/fonts/elbrus/ diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/freemono.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/freemono.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,174 @@ +TCPDFFontDescriptor.define('freemono') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='FreeMono'; + font[:desc]={'Ascent'=>1057,'Descent'=>-319,'CapHeight'=>1057,'Flags'=>32,'FontBBox'=>'[-557 -319 699 1057]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600} + font[:up]=-100; + font[:ut]=50; + font[:cw]={ + 13=>333, 32=>600, 33=>600, 34=>600, 35=>600, 36=>600, 37=>600, 38=>600, 39=>600, 40=>600, 41=>600, 42=>600, 43=>600, 44=>600, 45=>600, 46=>600, + 47=>600, 48=>600, 49=>600, 50=>600, 51=>600, 52=>600, 53=>600, 54=>600, 55=>600, 56=>600, 57=>600, 58=>600, 59=>600, 60=>600, 61=>600, 62=>600, + 63=>600, 64=>600, 65=>600, 66=>600, 67=>600, 68=>600, 69=>600, 70=>600, 71=>600, 72=>600, 73=>600, 74=>600, 75=>600, 76=>600, 77=>600, 78=>600, + 79=>600, 80=>600, 81=>600, 82=>600, 83=>600, 84=>600, 85=>600, 86=>600, 87=>600, 88=>600, 89=>600, 90=>600, 91=>600, 92=>600, 93=>600, 94=>600, + 95=>600, 96=>600, 97=>600, 98=>600, 99=>600, 100=>600, 101=>600, 102=>600, 103=>600, 104=>600, 105=>600, 106=>600, 107=>600, 108=>600, 109=>600, 110=>600, + 111=>600, 112=>600, 113=>600, 114=>600, 115=>600, 116=>600, 117=>600, 118=>600, 119=>600, 120=>600, 121=>600, 122=>600, 123=>600, 124=>600, 125=>600, 126=>600, + 8364=>600, 1027=>600, 8218=>600, 402=>600, 8222=>600, 8230=>600, 8224=>600, 8225=>600, 710=>600, 8240=>600, 352=>600, 8249=>600, 338=>600, 1036=>600, 381=>600, 1039=>600, + 8216=>600, 8217=>600, 8220=>600, 8221=>600, 8226=>600, 8211=>600, 8212=>600, 732=>600, 8482=>600, 353=>600, 8250=>600, 339=>600, 1116=>600, 382=>600, 376=>600, 160=>600, + 161=>600, 162=>600, 163=>600, 164=>600, 165=>600, 166=>600, 167=>600, 168=>600, 169=>600, 170=>600, 171=>600, 172=>600, 173=>600, 174=>600, 175=>600, 176=>600, + 177=>600, 178=>600, 179=>600, 180=>600, 181=>600, 182=>600, 183=>600, 184=>600, 185=>600, 186=>600, 187=>600, 188=>600, 189=>600, 190=>600, 191=>600, 192=>600, + 193=>600, 194=>600, 195=>600, 196=>600, 197=>600, 198=>600, 199=>600, 200=>600, 201=>600, 202=>600, 203=>600, 204=>600, 205=>600, 206=>600, 207=>600, 208=>600, + 209=>600, 210=>600, 211=>600, 212=>600, 213=>600, 214=>600, 215=>600, 216=>600, 217=>600, 218=>600, 219=>600, 220=>600, 221=>600, 222=>600, 223=>600, 224=>600, + 225=>600, 226=>600, 227=>600, 228=>600, 229=>600, 230=>600, 231=>600, 232=>600, 233=>600, 234=>600, 235=>600, 236=>600, 237=>600, 238=>600, 239=>600, 240=>600, + 241=>600, 242=>600, 243=>600, 244=>600, 245=>600, 246=>600, 247=>600, 248=>600, 249=>600, 250=>600, 251=>600, 252=>600, 253=>600, 254=>600, 255=>600, 256=>600, + 257=>600, 258=>600, 259=>600, 260=>600, 261=>600, 262=>600, 263=>600, 264=>600, 265=>600, 266=>600, 267=>600, 268=>600, 269=>600, 270=>600, 271=>600, 272=>600, + 273=>600, 274=>600, 275=>600, 276=>600, 277=>600, 278=>600, 279=>600, 280=>600, 281=>600, 282=>600, 283=>600, 284=>600, 285=>600, 286=>600, 287=>600, 288=>600, + 289=>600, 290=>600, 291=>600, 292=>600, 293=>600, 294=>600, 295=>600, 296=>600, 297=>600, 298=>600, 299=>600, 300=>600, 301=>600, 302=>600, 303=>600, 304=>600, + 305=>600, 306=>600, 307=>600, 308=>600, 309=>600, 310=>600, 311=>600, 312=>600, 313=>600, 314=>600, 315=>600, 316=>600, 317=>600, 318=>600, 319=>600, 320=>600, + 321=>600, 322=>600, 323=>600, 324=>600, 325=>600, 326=>600, 327=>600, 328=>600, 329=>600, 330=>600, 331=>600, 332=>600, 333=>600, 334=>600, 335=>600, 336=>600, + 337=>600, 340=>600, 341=>600, 342=>600, 343=>600, 344=>600, 345=>600, 346=>600, 347=>600, 348=>600, 349=>600, 350=>600, 351=>600, 354=>600, 355=>600, 356=>600, + 357=>600, 358=>600, 359=>600, 360=>600, 361=>600, 362=>600, 363=>600, 364=>600, 365=>600, 366=>600, 367=>600, 368=>600, 369=>600, 370=>600, 371=>600, 372=>600, + 373=>600, 374=>600, 375=>600, 377=>600, 378=>600, 379=>600, 380=>600, 383=>600, 384=>600, 385=>600, 386=>600, 387=>600, 388=>600, 389=>600, 390=>600, 391=>600, + 392=>600, 393=>600, 394=>600, 395=>600, 396=>600, 397=>600, 398=>600, 399=>600, 400=>600, 401=>600, 403=>600, 404=>600, 405=>600, 406=>600, 407=>600, 408=>600, + 409=>600, 410=>600, 411=>600, 412=>600, 413=>600, 414=>600, 415=>600, 416=>600, 417=>600, 418=>600, 419=>600, 420=>600, 421=>600, 422=>600, 423=>600, 424=>600, + 425=>600, 426=>600, 427=>600, 428=>600, 429=>600, 430=>600, 431=>600, 432=>600, 433=>600, 434=>600, 435=>600, 436=>600, 437=>600, 438=>600, 439=>600, 440=>600, + 441=>600, 442=>600, 443=>600, 444=>600, 445=>600, 446=>600, 447=>600, 448=>600, 449=>600, 450=>600, 451=>600, 452=>600, 453=>600, 454=>600, 455=>600, 456=>600, + 457=>600, 458=>600, 459=>600, 460=>600, 461=>600, 462=>600, 463=>600, 464=>600, 465=>600, 466=>600, 467=>600, 468=>600, 469=>600, 470=>600, 471=>600, 472=>600, + 473=>600, 474=>600, 475=>600, 476=>600, 477=>600, 478=>600, 479=>600, 480=>600, 481=>600, 482=>600, 483=>600, 484=>600, 485=>600, 486=>600, 487=>600, 488=>600, + 489=>600, 490=>600, 491=>600, 492=>600, 493=>600, 494=>600, 495=>600, 496=>600, 497=>600, 498=>600, 499=>600, 500=>600, 501=>600, 502=>600, 503=>600, 504=>600, + 505=>600, 506=>600, 507=>600, 508=>600, 509=>600, 510=>600, 511=>600, 512=>600, 513=>600, 514=>600, 515=>600, 516=>600, 517=>600, 518=>600, 519=>600, 520=>600, + 521=>600, 522=>600, 523=>600, 524=>600, 525=>600, 526=>600, 527=>600, 528=>600, 529=>600, 530=>600, 531=>600, 532=>600, 533=>600, 534=>600, 535=>600, 536=>600, + 537=>600, 538=>600, 539=>600, 540=>600, 541=>600, 542=>600, 543=>600, 548=>600, 549=>600, 550=>600, 551=>600, 552=>600, 553=>600, 554=>600, 555=>600, 556=>600, + 557=>600, 558=>600, 559=>600, 560=>600, 561=>600, 562=>600, 563=>600, 577=>600, 578=>600, 592=>600, 593=>600, 594=>600, 595=>600, 596=>600, 597=>600, 598=>600, + 599=>600, 600=>600, 601=>600, 602=>600, 603=>600, 604=>600, 607=>600, 608=>600, 609=>600, 610=>600, 611=>600, 612=>600, 613=>600, 614=>600, 615=>600, 616=>600, + 617=>600, 618=>600, 619=>600, 620=>600, 621=>600, 623=>600, 624=>600, 625=>600, 626=>600, 627=>600, 628=>600, 629=>600, 630=>600, 632=>600, 633=>600, 634=>600, + 635=>600, 636=>600, 637=>600, 638=>600, 639=>600, 640=>600, 641=>600, 642=>600, 643=>600, 644=>600, 645=>600, 646=>600, 647=>600, 648=>600, 649=>600, 652=>600, + 653=>600, 654=>600, 655=>600, 656=>600, 657=>600, 658=>600, 660=>600, 661=>600, 662=>600, 663=>600, 665=>600, 667=>600, 668=>600, 669=>600, 670=>600, 671=>600, + 672=>600, 673=>600, 674=>600, 675=>600, 676=>600, 678=>600, 679=>600, 699=>600, 700=>600, 701=>600, 702=>600, 703=>600, 711=>600, 712=>600, 713=>600, 714=>600, + 715=>600, 720=>600, 721=>600, 722=>600, 723=>600, 724=>600, 725=>600, 726=>600, 727=>600, 728=>600, 729=>600, 730=>600, 731=>600, 733=>600, 735=>600, 750=>600, + 768=>0, 769=>0, 770=>0, 771=>0, 772=>0, 773=>0, 774=>0, 775=>0, 776=>0, 777=>0, 778=>0, 779=>0, 780=>0, 781=>0, 782=>0, 783=>0, + 784=>0, 785=>0, 795=>0, 801=>0, 802=>0, 807=>0, 808=>0, 819=>600, 821=>0, 822=>0, 823=>0, 824=>0, 834=>0, 836=>0, 890=>600, 900=>600, + 901=>600, 902=>600, 903=>600, 904=>600, 905=>600, 906=>600, 908=>600, 910=>600, 911=>600, 912=>600, 913=>600, 914=>600, 915=>600, 916=>600, 917=>600, 918=>600, + 919=>600, 920=>600, 921=>600, 922=>600, 923=>600, 924=>600, 925=>600, 926=>600, 927=>600, 928=>600, 929=>600, 930=>600, 931=>600, 932=>600, 933=>600, 934=>600, + 935=>600, 936=>600, 937=>600, 938=>600, 939=>600, 940=>600, 941=>600, 942=>600, 943=>600, 944=>600, 945=>600, 946=>600, 947=>600, 948=>600, 949=>600, 950=>600, + 951=>600, 952=>600, 953=>600, 954=>600, 955=>600, 956=>600, 957=>600, 958=>600, 959=>600, 960=>600, 961=>600, 962=>600, 963=>600, 964=>600, 965=>600, 966=>600, + 967=>600, 968=>600, 969=>600, 970=>600, 971=>600, 972=>600, 973=>600, 974=>600, 976=>600, 977=>600, 978=>600, 979=>600, 981=>600, 986=>600, 987=>600, 988=>600, + 1024=>600, 1025=>600, 1026=>600, 1028=>600, 1029=>600, 1030=>600, 1031=>600, 1032=>600, 1033=>600, 1034=>600, 1035=>600, 1037=>600, 1038=>600, 1040=>600, 1041=>600, 1042=>600, + 1043=>600, 1044=>600, 1045=>600, 1046=>600, 1047=>600, 1048=>600, 1049=>600, 1050=>600, 1051=>600, 1052=>600, 1053=>600, 1054=>600, 1055=>600, 1056=>600, 1057=>600, 1058=>600, + 1059=>600, 1060=>600, 1061=>600, 1062=>600, 1063=>600, 1064=>600, 1065=>600, 1066=>600, 1067=>600, 1068=>600, 1069=>600, 1070=>600, 1071=>600, 1072=>600, 1073=>600, 1074=>600, + 1075=>600, 1076=>600, 1077=>600, 1078=>600, 1079=>600, 1080=>600, 1081=>600, 1082=>600, 1083=>600, 1084=>600, 1085=>600, 1086=>600, 1087=>600, 1088=>600, 1089=>600, 1090=>600, + 1091=>600, 1092=>600, 1093=>600, 1094=>600, 1095=>600, 1096=>600, 1097=>600, 1098=>600, 1099=>600, 1100=>600, 1101=>600, 1102=>600, 1103=>600, 1104=>600, 1105=>600, 1106=>600, + 1107=>600, 1108=>600, 1109=>600, 1110=>600, 1111=>600, 1112=>600, 1113=>600, 1114=>600, 1115=>600, 1117=>600, 1118=>600, 1119=>600, 1124=>600, 1130=>600, 1132=>600, 1136=>600, + 1137=>600, 1164=>600, 1165=>600, 1166=>600, 1167=>600, 1168=>600, 1169=>600, 1170=>600, 1171=>600, 1172=>600, 1173=>600, 1174=>600, 1175=>600, 1176=>600, 1177=>600, 1178=>600, + 1179=>600, 1180=>600, 1181=>600, 1182=>600, 1183=>600, 1184=>600, 1185=>600, 1186=>600, 1187=>600, 1188=>600, 1189=>600, 1190=>600, 1191=>600, 1192=>600, 1193=>600, 1194=>600, + 1195=>600, 1196=>600, 1197=>600, 1198=>600, 1199=>600, 1200=>600, 1201=>600, 1202=>600, 1203=>600, 1204=>600, 1205=>600, 1206=>600, 1207=>600, 1208=>600, 1209=>600, 1210=>600, + 1211=>600, 1212=>600, 1213=>600, 1214=>600, 1215=>600, 1216=>600, 1217=>600, 1218=>600, 1219=>600, 1220=>600, 1223=>600, 1224=>600, 1227=>600, 1228=>600, 1232=>600, 1233=>600, + 1234=>600, 1235=>600, 1236=>600, 1237=>600, 1238=>600, 1239=>600, 1240=>600, 1241=>600, 1242=>600, 1243=>600, 1244=>600, 1245=>600, 1246=>600, 1247=>600, 1248=>600, 1249=>600, + 1250=>600, 1251=>600, 1252=>600, 1253=>600, 1254=>600, 1255=>600, 1256=>600, 1257=>600, 1258=>600, 1259=>600, 1260=>600, 1261=>600, 1262=>600, 1263=>600, 1264=>600, 1265=>600, + 1266=>600, 1267=>600, 1268=>600, 1269=>600, 1272=>600, 1273=>600, 1329=>600, 1330=>600, 1331=>600, 1332=>600, 1333=>600, 1334=>600, 1335=>600, 1336=>600, 1337=>600, 1338=>600, + 1339=>600, 1340=>600, 1341=>600, 1342=>600, 1343=>600, 1344=>600, 1345=>600, 1346=>600, 1347=>600, 1348=>600, 1349=>600, 1350=>600, 1351=>600, 1352=>600, 1353=>600, 1354=>600, + 1355=>600, 1356=>600, 1357=>600, 1358=>600, 1359=>600, 1360=>600, 1361=>600, 1362=>600, 1363=>600, 1364=>600, 1365=>600, 1366=>600, 1377=>600, 1378=>600, 1379=>600, 1380=>600, + 1381=>600, 1382=>600, 1383=>600, 1384=>600, 1385=>600, 1386=>600, 1387=>600, 1388=>600, 1389=>600, 1390=>600, 1391=>600, 1392=>600, 1393=>600, 1394=>600, 1395=>600, 1396=>600, + 1397=>600, 1398=>600, 1399=>600, 1400=>600, 1401=>600, 1402=>600, 1403=>600, 1404=>600, 1405=>600, 1406=>600, 1407=>600, 1408=>600, 1409=>600, 1410=>600, 1411=>600, 1412=>600, + 1413=>600, 1414=>600, 1418=>600, 1456=>600, 1457=>600, 1458=>600, 1459=>600, 1460=>600, 1461=>600, 1462=>600, 1463=>600, 1464=>600, 1465=>600, 1467=>600, 1468=>600, 1469=>600, + 1470=>600, 1471=>600, 1472=>600, 1473=>600, 1474=>600, 1475=>600, 1476=>600, 1488=>600, 1489=>600, 1490=>600, 1491=>600, 1492=>600, 1493=>600, 1494=>600, 1495=>600, 1496=>600, + 1497=>600, 1498=>600, 1499=>600, 1500=>600, 1501=>600, 1502=>600, 1503=>600, 1504=>600, 1505=>600, 1506=>600, 1507=>600, 1508=>600, 1509=>600, 1510=>600, 1511=>600, 1512=>600, + 1513=>600, 1514=>600, 1520=>600, 1521=>600, 1522=>600, 1523=>600, 1524=>600, 5792=>600, 5793=>600, 5794=>600, 5795=>600, 5796=>600, 5797=>600, 5798=>600, 5799=>600, 5800=>600, + 5801=>600, 5802=>600, 5803=>600, 5804=>600, 5805=>600, 5806=>600, 5807=>600, 5808=>600, 5809=>600, 5810=>600, 5811=>600, 5812=>600, 5813=>600, 5814=>600, 5815=>600, 5816=>600, + 5817=>600, 5818=>600, 5819=>600, 5820=>600, 5821=>600, 5822=>600, 5823=>600, 5824=>600, 5825=>600, 5826=>600, 5827=>600, 5828=>600, 5829=>600, 5830=>600, 5831=>600, 5832=>600, + 5833=>600, 5834=>600, 5835=>600, 5836=>600, 5837=>600, 5838=>600, 5839=>600, 5840=>600, 5841=>600, 5842=>600, 5843=>600, 5844=>600, 5845=>600, 5846=>600, 5847=>600, 5848=>600, + 5849=>600, 5850=>600, 5851=>600, 5852=>600, 5853=>600, 5854=>600, 5855=>600, 5856=>600, 5857=>600, 5858=>600, 5859=>600, 5860=>600, 5861=>600, 5862=>600, 5863=>600, 5864=>600, + 5865=>600, 5866=>600, 5867=>600, 5868=>600, 5869=>600, 5870=>600, 5871=>600, 5872=>600, 7680=>600, 7681=>600, 7682=>600, 7683=>600, 7684=>600, 7685=>600, 7686=>600, 7687=>600, + 7688=>600, 7689=>600, 7690=>600, 7691=>600, 7692=>600, 7693=>600, 7694=>600, 7695=>600, 7696=>600, 7697=>600, 7698=>600, 7699=>600, 7700=>600, 7701=>600, 7702=>600, 7703=>600, + 7704=>600, 7705=>600, 7706=>600, 7707=>600, 7708=>600, 7709=>600, 7710=>600, 7711=>600, 7712=>600, 7713=>600, 7714=>600, 7715=>600, 7716=>600, 7717=>600, 7718=>600, 7719=>600, + 7720=>600, 7721=>600, 7722=>600, 7723=>600, 7724=>600, 7725=>600, 7726=>600, 7727=>600, 7728=>600, 7729=>600, 7730=>600, 7731=>600, 7732=>600, 7733=>600, 7734=>600, 7735=>600, + 7736=>600, 7737=>600, 7738=>600, 7739=>600, 7740=>600, 7741=>600, 7742=>600, 7743=>600, 7744=>600, 7745=>600, 7746=>600, 7747=>600, 7748=>600, 7749=>600, 7750=>600, 7751=>600, + 7752=>600, 7753=>600, 7754=>600, 7755=>600, 7756=>600, 7757=>600, 7758=>600, 7759=>600, 7760=>600, 7761=>600, 7762=>600, 7763=>600, 7764=>600, 7765=>600, 7766=>600, 7767=>600, + 7768=>600, 7769=>600, 7770=>600, 7771=>600, 7772=>600, 7773=>600, 7774=>600, 7775=>600, 7776=>600, 7777=>600, 7778=>600, 7779=>600, 7780=>600, 7781=>600, 7782=>600, 7783=>600, + 7784=>600, 7785=>600, 7786=>600, 7787=>600, 7788=>600, 7789=>600, 7790=>600, 7791=>600, 7792=>600, 7793=>600, 7794=>600, 7795=>600, 7796=>600, 7797=>600, 7798=>600, 7799=>600, + 7800=>600, 7801=>600, 7802=>600, 7803=>600, 7804=>600, 7805=>600, 7806=>600, 7807=>600, 7808=>600, 7809=>600, 7810=>600, 7811=>600, 7812=>600, 7813=>600, 7814=>600, 7815=>600, + 7816=>600, 7817=>600, 7818=>600, 7819=>600, 7820=>600, 7821=>600, 7822=>600, 7823=>600, 7824=>600, 7825=>600, 7826=>600, 7827=>600, 7828=>600, 7829=>600, 7830=>600, 7831=>600, + 7832=>600, 7833=>600, 7834=>600, 7835=>600, 7840=>600, 7841=>600, 7842=>600, 7843=>600, 7844=>600, 7845=>600, 7846=>600, 7847=>600, 7848=>600, 7849=>600, 7850=>600, 7851=>600, + 7852=>600, 7853=>600, 7854=>600, 7855=>600, 7856=>600, 7857=>600, 7858=>600, 7859=>600, 7860=>600, 7861=>600, 7862=>600, 7863=>600, 7864=>600, 7865=>600, 7866=>600, 7867=>600, + 7868=>600, 7869=>600, 7870=>600, 7871=>600, 7872=>600, 7873=>600, 7874=>600, 7875=>600, 7876=>600, 7877=>600, 7878=>600, 7879=>600, 7880=>600, 7881=>600, 7882=>600, 7883=>600, + 7884=>600, 7885=>600, 7886=>600, 7887=>600, 7888=>600, 7889=>600, 7890=>600, 7891=>600, 7892=>600, 7893=>600, 7894=>600, 7895=>600, 7896=>600, 7897=>600, 7898=>600, 7899=>600, + 7900=>600, 7901=>600, 7902=>600, 7903=>600, 7904=>600, 7905=>600, 7906=>600, 7907=>600, 7908=>600, 7909=>600, 7910=>600, 7911=>600, 7912=>600, 7913=>600, 7914=>600, 7915=>600, + 7916=>600, 7917=>600, 7918=>600, 7919=>600, 7920=>600, 7921=>600, 7922=>600, 7923=>600, 7924=>600, 7925=>600, 7926=>600, 7927=>600, 7928=>600, 7929=>600, 7936=>600, 7937=>600, + 7938=>600, 7939=>600, 7940=>600, 7941=>600, 7942=>600, 7943=>600, 7944=>600, 7945=>600, 7946=>600, 7947=>600, 7948=>600, 7949=>600, 7950=>600, 7951=>600, 7952=>600, 7953=>600, + 7954=>600, 7955=>600, 7956=>600, 7957=>600, 7960=>600, 7961=>600, 7962=>600, 7963=>600, 7964=>600, 7965=>600, 7968=>600, 7969=>600, 7970=>600, 7971=>600, 7972=>600, 7973=>600, + 7974=>600, 7975=>600, 7976=>600, 7977=>600, 7978=>600, 7979=>600, 7980=>600, 7981=>600, 7982=>600, 7983=>600, 7984=>600, 7985=>600, 7986=>600, 7987=>600, 7988=>600, 7989=>600, + 7990=>600, 7991=>600, 7992=>600, 7993=>600, 7994=>600, 7995=>600, 7996=>600, 7997=>600, 7998=>600, 7999=>600, 8000=>600, 8001=>600, 8002=>600, 8003=>600, 8004=>600, 8005=>600, + 8008=>600, 8009=>600, 8010=>600, 8011=>600, 8012=>600, 8013=>600, 8016=>600, 8017=>600, 8018=>600, 8019=>600, 8020=>600, 8021=>600, 8022=>600, 8023=>600, 8025=>600, 8027=>600, + 8029=>600, 8031=>600, 8032=>600, 8033=>600, 8034=>600, 8035=>600, 8036=>600, 8037=>600, 8038=>600, 8039=>600, 8040=>600, 8041=>600, 8042=>600, 8043=>600, 8044=>600, 8045=>600, + 8046=>600, 8047=>600, 8048=>600, 8049=>600, 8050=>600, 8051=>600, 8052=>600, 8053=>600, 8054=>600, 8055=>600, 8056=>600, 8057=>600, 8058=>600, 8059=>600, 8060=>600, 8061=>600, + 8064=>600, 8065=>600, 8066=>600, 8067=>600, 8068=>600, 8069=>600, 8070=>600, 8071=>600, 8072=>600, 8073=>600, 8074=>600, 8075=>600, 8076=>600, 8077=>600, 8078=>600, 8079=>600, + 8080=>600, 8081=>600, 8082=>600, 8083=>600, 8084=>600, 8085=>600, 8086=>600, 8087=>600, 8088=>600, 8089=>600, 8090=>600, 8091=>600, 8092=>600, 8093=>600, 8094=>600, 8095=>600, + 8096=>600, 8097=>600, 8098=>600, 8099=>600, 8100=>600, 8101=>600, 8102=>600, 8103=>600, 8104=>600, 8105=>600, 8106=>600, 8107=>600, 8108=>600, 8109=>600, 8110=>600, 8111=>600, + 8112=>600, 8113=>600, 8114=>600, 8115=>600, 8116=>600, 8118=>600, 8119=>600, 8120=>600, 8121=>600, 8122=>600, 8123=>600, 8124=>600, 8125=>600, 8126=>600, 8127=>600, 8128=>600, + 8129=>600, 8130=>600, 8131=>600, 8132=>600, 8134=>600, 8135=>600, 8136=>600, 8137=>600, 8138=>600, 8139=>600, 8140=>600, 8141=>600, 8142=>600, 8143=>600, 8144=>600, 8145=>600, + 8146=>600, 8147=>600, 8150=>600, 8151=>600, 8152=>600, 8153=>600, 8154=>600, 8155=>600, 8157=>600, 8158=>600, 8159=>600, 8160=>600, 8161=>600, 8162=>600, 8163=>600, 8164=>600, + 8165=>600, 8166=>600, 8167=>600, 8168=>600, 8169=>600, 8170=>600, 8171=>600, 8172=>600, 8173=>600, 8175=>600, 8178=>600, 8179=>600, 8180=>600, 8182=>600, 8183=>600, 8184=>600, + 8185=>600, 8186=>600, 8187=>600, 8188=>600, 8189=>600, 8190=>600, 8208=>600, 8213=>600, 8215=>600, 8219=>600, 8223=>600, 8229=>600, 8241=>600, 8242=>600, 8243=>600, 8244=>600, + 8245=>600, 8246=>600, 8247=>600, 8252=>600, 8253=>600, 8254=>600, 8259=>600, 8260=>600, 8261=>600, 8262=>600, 8264=>600, 8265=>600, 8267=>600, 8304=>600, 8305=>600, 8306=>600, + 8307=>600, 8308=>600, 8309=>600, 8310=>600, 8311=>600, 8312=>600, 8313=>600, 8314=>600, 8315=>600, 8316=>600, 8317=>600, 8318=>600, 8319=>600, 8320=>600, 8321=>600, 8322=>600, + 8323=>600, 8324=>600, 8325=>600, 8326=>600, 8327=>600, 8328=>600, 8329=>600, 8330=>600, 8331=>600, 8332=>600, 8333=>600, 8334=>600, 8355=>600, 8356=>600, 8359=>600, 8362=>600, + 8448=>600, 8449=>600, 8450=>600, 8451=>600, 8453=>600, 8454=>600, 8455=>600, 8461=>600, 8464=>600, 8465=>600, 8466=>600, 8467=>600, 8468=>600, 8469=>600, 8470=>600, 8471=>600, + 8472=>600, 8473=>600, 8474=>600, 8477=>600, 8478=>600, 8484=>600, 8485=>600, 8486=>600, 8487=>600, 8490=>600, 8491=>600, 8498=>600, 8501=>600, 8531=>600, 8532=>600, 8533=>600, + 8534=>600, 8535=>600, 8536=>600, 8537=>600, 8538=>600, 8539=>600, 8540=>600, 8541=>600, 8542=>600, 8543=>600, 8544=>600, 8545=>600, 8546=>600, 8547=>600, 8548=>600, 8549=>600, + 8550=>600, 8551=>600, 8552=>600, 8553=>600, 8554=>600, 8555=>600, 8556=>600, 8557=>600, 8558=>600, 8559=>600, 8592=>600, 8593=>600, 8594=>600, 8595=>600, 8596=>600, 8597=>600, + 8598=>600, 8599=>600, 8600=>600, 8601=>600, 8602=>600, 8603=>600, 8604=>600, 8605=>600, 8606=>600, 8607=>600, 8608=>600, 8609=>600, 8610=>600, 8611=>600, 8612=>600, 8613=>600, + 8614=>600, 8615=>600, 8616=>600, 8617=>600, 8618=>600, 8619=>600, 8620=>600, 8621=>600, 8622=>600, 8623=>600, 8624=>600, 8625=>600, 8626=>600, 8627=>600, 8628=>600, 8629=>600, + 8630=>600, 8631=>600, 8632=>600, 8633=>600, 8634=>600, 8635=>600, 8636=>600, 8637=>600, 8638=>600, 8639=>600, 8640=>600, 8641=>600, 8642=>600, 8643=>600, 8644=>600, 8645=>600, + 8646=>600, 8647=>600, 8648=>600, 8649=>600, 8650=>600, 8651=>600, 8652=>600, 8653=>600, 8654=>600, 8655=>600, 8656=>600, 8657=>600, 8658=>600, 8659=>600, 8660=>600, 8661=>600, + 8704=>600, 8705=>600, 8706=>600, 8707=>600, 8708=>600, 8709=>600, 8710=>600, 8711=>600, 8712=>600, 8713=>600, 8714=>600, 8715=>600, 8716=>600, 8717=>600, 8719=>600, 8721=>600, + 8722=>600, 8723=>600, 8724=>600, 8725=>600, 8729=>600, 8730=>600, 8731=>600, 8732=>600, 8733=>600, 8734=>600, 8735=>600, 8743=>600, 8744=>600, 8745=>600, 8746=>600, 8747=>600, + 8748=>600, 8749=>600, 8750=>600, 8751=>600, 8752=>600, 8756=>600, 8757=>600, 8759=>600, 8764=>600, 8765=>600, 8769=>600, 8770=>600, 8771=>600, 8772=>600, 8773=>600, 8776=>600, + 8784=>600, 8785=>600, 8786=>600, 8787=>600, 8793=>600, 8794=>600, 8800=>600, 8801=>600, 8804=>600, 8805=>600, 8806=>600, 8807=>600, 8810=>600, 8811=>600, 8812=>600, 8814=>600, + 8815=>600, 8822=>600, 8823=>600, 8834=>600, 8835=>600, 8838=>600, 8839=>600, 8853=>600, 8854=>600, 8855=>600, 8856=>600, 8857=>600, 8858=>600, 8859=>600, 8860=>600, 8861=>600, + 8866=>600, 8867=>600, 8868=>600, 8869=>600, 8870=>600, 8871=>600, 8872=>600, 8873=>600, 8874=>600, 8875=>600, 8876=>600, 8877=>600, 8878=>600, 8879=>600, 8894=>600, 8901=>600, + 8902=>600, 8960=>600, 8962=>600, 8963=>600, 8968=>600, 8969=>600, 8970=>600, 8971=>600, 8972=>600, 8973=>600, 8974=>600, 8975=>600, 8976=>600, 8981=>600, 8988=>600, 8989=>600, + 8990=>600, 8991=>600, 9001=>600, 9002=>600, 9115=>600, 9116=>600, 9117=>600, 9118=>600, 9119=>600, 9120=>600, 9121=>600, 9122=>600, 9123=>600, 9124=>600, 9125=>600, 9126=>600, + 9127=>600, 9128=>600, 9129=>600, 9130=>600, 9131=>600, 9132=>600, 9133=>600, 9134=>600, 9135=>600, 9136=>600, 9137=>600, 9138=>600, 9139=>600, 9140=>600, 9143=>600, 9146=>600, + 9147=>600, 9148=>600, 9149=>600, 9472=>600, 9473=>600, 9474=>600, 9475=>600, 9476=>600, 9477=>600, 9478=>600, 9479=>600, 9480=>600, 9481=>600, 9482=>600, 9483=>600, 9484=>600, + 9485=>600, 9486=>600, 9487=>600, 9488=>600, 9489=>600, 9490=>600, 9491=>600, 9492=>600, 9493=>600, 9494=>600, 9495=>600, 9496=>600, 9497=>600, 9498=>600, 9499=>600, 9500=>600, + 9501=>600, 9502=>600, 9503=>600, 9504=>600, 9505=>600, 9506=>600, 9507=>600, 9508=>600, 9509=>600, 9510=>600, 9511=>600, 9512=>600, 9513=>600, 9514=>600, 9515=>600, 9516=>600, + 9517=>600, 9518=>600, 9519=>600, 9520=>600, 9521=>600, 9522=>600, 9523=>600, 9524=>600, 9525=>600, 9526=>600, 9527=>600, 9528=>600, 9529=>600, 9530=>600, 9531=>600, 9532=>600, + 9533=>600, 9534=>600, 9535=>600, 9536=>600, 9537=>600, 9538=>600, 9539=>600, 9540=>600, 9541=>600, 9542=>600, 9543=>600, 9544=>600, 9545=>600, 9546=>600, 9547=>600, 9548=>600, + 9549=>600, 9550=>600, 9551=>600, 9552=>600, 9553=>600, 9554=>600, 9555=>600, 9556=>600, 9557=>600, 9558=>600, 9559=>600, 9560=>600, 9561=>600, 9562=>600, 9563=>600, 9564=>600, + 9565=>600, 9566=>600, 9567=>600, 9568=>600, 9569=>600, 9570=>600, 9571=>600, 9572=>600, 9573=>600, 9574=>600, 9575=>600, 9576=>600, 9577=>600, 9578=>600, 9579=>600, 9580=>600, + 9581=>600, 9582=>600, 9583=>600, 9584=>600, 9585=>600, 9586=>600, 9587=>600, 9588=>600, 9589=>600, 9590=>600, 9591=>600, 9592=>600, 9593=>600, 9594=>600, 9595=>600, 9596=>600, + 9597=>600, 9598=>600, 9599=>600, 9600=>600, 9601=>600, 9602=>600, 9603=>600, 9604=>600, 9605=>600, 9606=>600, 9607=>600, 9608=>600, 9609=>600, 9610=>600, 9611=>600, 9612=>600, + 9613=>600, 9614=>600, 9615=>600, 9616=>600, 9617=>600, 9618=>600, 9619=>600, 9620=>600, 9621=>600, 9622=>600, 9623=>600, 9624=>600, 9625=>600, 9626=>600, 9627=>600, 9628=>600, + 9629=>600, 9630=>600, 9631=>600, 9632=>600, 9633=>600, 9634=>600, 9635=>600, 9636=>600, 9637=>600, 9638=>600, 9639=>600, 9640=>600, 9641=>600, 9642=>600, 9643=>600, 9644=>600, + 9645=>600, 9646=>600, 9647=>600, 9648=>600, 9649=>600, 9650=>600, 9651=>600, 9652=>600, 9653=>600, 9654=>600, 9655=>600, 9656=>600, 9657=>600, 9658=>600, 9659=>600, 9660=>600, + 9661=>600, 9662=>600, 9663=>600, 9664=>600, 9665=>600, 9666=>600, 9667=>600, 9668=>600, 9669=>600, 9670=>600, 9671=>600, 9672=>600, 9673=>600, 9674=>600, 9675=>600, 9676=>600, + 9677=>600, 9678=>600, 9679=>600, 9680=>600, 9681=>600, 9682=>600, 9683=>600, 9684=>600, 9685=>600, 9686=>600, 9687=>600, 9688=>600, 9689=>600, 9690=>600, 9691=>600, 9692=>600, + 9693=>600, 9694=>600, 9695=>600, 9696=>600, 9697=>600, 9698=>600, 9699=>600, 9700=>600, 9701=>600, 9702=>600, 9703=>600, 9704=>600, 9705=>600, 9706=>600, 9707=>600, 9708=>600, + 9709=>600, 9710=>600, 9711=>600, 9712=>600, 9713=>600, 9714=>600, 9715=>600, 9716=>600, 9717=>600, 9718=>600, 9719=>600, 9720=>600, 9721=>600, 9722=>600, 9723=>600, 9724=>600, + 9725=>600, 9726=>600, 9727=>600, 9728=>600, 9729=>600, 9730=>600, 9733=>600, 9734=>600, 9735=>600, 9736=>600, 9737=>600, 9744=>600, 9745=>600, 9746=>600, 9756=>600, 9758=>600, + 9766=>600, 9768=>600, 9769=>600, 9774=>600, 9776=>600, 9777=>600, 9778=>600, 9779=>600, 9780=>600, 9781=>600, 9782=>600, 9783=>600, 9785=>600, 9786=>600, 9787=>600, 9788=>600, + 9791=>600, 9792=>600, 9793=>600, 9794=>600, 9833=>600, 9834=>600, 9835=>600, 9836=>600, 9837=>600, 9838=>600, 9839=>600, 10214=>600, 10215=>600, 10216=>600, 10217=>600, 10218=>600, + 10219=>600, 10240=>600, 10241=>600, 10242=>600, 10243=>600, 10244=>600, 10245=>600, 10246=>600, 10247=>600, 10248=>600, 10249=>600, 10250=>600, 10251=>600, 10252=>600, 10253=>600, 10254=>600, + 10255=>600, 10256=>600, 10257=>600, 10258=>600, 10259=>600, 10260=>600, 10261=>600, 10262=>600, 10263=>600, 10264=>600, 10265=>600, 10266=>600, 10267=>600, 10268=>600, 10269=>600, 10270=>600, + 10271=>600, 10272=>600, 10273=>600, 10274=>600, 10275=>600, 10276=>600, 10277=>600, 10278=>600, 10279=>600, 10280=>600, 10281=>600, 10282=>600, 10283=>600, 10284=>600, 10285=>600, 10286=>600, + 10287=>600, 10288=>600, 10289=>600, 10290=>600, 10291=>600, 10292=>600, 10293=>600, 10294=>600, 10295=>600, 10296=>600, 10297=>600, 10298=>600, 10299=>600, 10300=>600, 10301=>600, 10302=>600, + 10303=>600, 10304=>600, 10305=>600, 10306=>600, 10307=>600, 10308=>600, 10309=>600, 10310=>600, 10311=>600, 10312=>600, 10313=>600, 10314=>600, 10315=>600, 10316=>600, 10317=>600, 10318=>600, + 10319=>600, 10320=>600, 10321=>600, 10322=>600, 10323=>600, 10324=>600, 10325=>600, 10326=>600, 10327=>600, 10328=>600, 10329=>600, 10330=>600, 10331=>600, 10332=>600, 10333=>600, 10334=>600, + 10335=>600, 10336=>600, 10337=>600, 10338=>600, 10339=>600, 10340=>600, 10341=>600, 10342=>600, 10343=>600, 10344=>600, 10345=>600, 10346=>600, 10347=>600, 10348=>600, 10349=>600, 10350=>600, + 10351=>600, 10352=>600, 10353=>600, 10354=>600, 10355=>600, 10356=>600, 10357=>600, 10358=>600, 10359=>600, 10360=>600, 10361=>600, 10362=>600, 10363=>600, 10364=>600, 10365=>600, 10366=>600, + 10367=>600, 10368=>600, 10369=>600, 10370=>600, 10371=>600, 10372=>600, 10373=>600, 10374=>600, 10375=>600, 10376=>600, 10377=>600, 10378=>600, 10379=>600, 10380=>600, 10381=>600, 10382=>600, + 10383=>600, 10384=>600, 10385=>600, 10386=>600, 10387=>600, 10388=>600, 10389=>600, 10390=>600, 10391=>600, 10392=>600, 10393=>600, 10394=>600, 10395=>600, 10396=>600, 10397=>600, 10398=>600, + 10399=>600, 10400=>600, 10401=>600, 10402=>600, 10403=>600, 10404=>600, 10405=>600, 10406=>600, 10407=>600, 10408=>600, 10409=>600, 10410=>600, 10411=>600, 10412=>600, 10413=>600, 10414=>600, + 10415=>600, 10416=>600, 10417=>600, 10418=>600, 10419=>600, 10420=>600, 10421=>600, 10422=>600, 10423=>600, 10424=>600, 10425=>600, 10426=>600, 10427=>600, 10428=>600, 10429=>600, 10430=>600, + 10431=>600, 10432=>600, 10433=>600, 10434=>600, 10435=>600, 10436=>600, 10437=>600, 10438=>600, 10439=>600, 10440=>600, 10441=>600, 10442=>600, 10443=>600, 10444=>600, 10445=>600, 10446=>600, + 10447=>600, 10448=>600, 10449=>600, 10450=>600, 10451=>600, 10452=>600, 10453=>600, 10454=>600, 10455=>600, 10456=>600, 10457=>600, 10458=>600, 10459=>600, 10460=>600, 10461=>600, 10462=>600, + 10463=>600, 10464=>600, 10465=>600, 10466=>600, 10467=>600, 10468=>600, 10469=>600, 10470=>600, 10471=>600, 10472=>600, 10473=>600, 10474=>600, 10475=>600, 10476=>600, 10477=>600, 10478=>600, + 10479=>600, 10480=>600, 10481=>600, 10482=>600, 10483=>600, 10484=>600, 10485=>600, 10486=>600, 10487=>600, 10488=>600, 10489=>600, 10490=>600, 10491=>600, 10492=>600, 10493=>600, 10494=>600, + 10495=>600, 63171=>600, 64256=>600, 64257=>600, 64258=>600, 64261=>600, 64262=>600, 64285=>600, 64286=>600, 64287=>600, 64288=>600, 64289=>600, 64290=>600, 64291=>600, 64292=>600, 64293=>600, + 64294=>600, 64295=>600, 64296=>600, 64297=>600, 64298=>600, 64299=>600, 64300=>600, 64301=>600, 64302=>600, 64303=>600, 64304=>600, 64305=>600, 64306=>600, 64307=>600, 64308=>600, 64309=>600, + 64310=>600, 64312=>600, 64313=>600, 64314=>600, 64315=>600, 64316=>600, 64318=>600, 64320=>600, 64321=>600, 64323=>600, 64324=>600, 64326=>600, 64327=>600, 64328=>600, 64329=>600, 64330=>600, + 64331=>600, 64332=>600, 64333=>600, 64334=>600, 64335=>600, 65533=>600, 8174=>600} + font[:enc]=''; + font[:diff]=''; + font[:file]='FreeMono.z'; + font[:ctg]='FreeMono.ctg.z'; + font[:originalsize]=293572; +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/freemonob.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/freemonob.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,107 @@ +TCPDFFontDescriptor.define('freemonob') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='FreeMonoBold'; + font[:desc]={'Ascent'=>1155,'Descent'=>-365,'CapHeight'=>1155,'Flags'=>32,'FontBBox'=>'[-656 -365 950 1155]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600} + font[:up]=-100; + font[:ut]=50; + font[:cw]={ + 13=>333, 32=>600, 33=>600, 34=>600, 35=>600, 36=>600, 37=>600, 38=>600, 39=>600, 40=>600, 41=>600, 42=>600, 43=>600, 44=>600, 45=>600, 46=>600, + 47=>600, 48=>600, 49=>600, 50=>600, 51=>600, 52=>600, 53=>600, 54=>600, 55=>600, 56=>600, 57=>600, 58=>600, 59=>600, 60=>600, 61=>600, 62=>600, + 63=>600, 64=>600, 65=>600, 66=>600, 67=>600, 68=>600, 69=>600, 70=>600, 71=>600, 72=>600, 73=>600, 74=>600, 75=>600, 76=>600, 77=>600, 78=>600, + 79=>600, 80=>600, 81=>600, 82=>600, 83=>600, 84=>600, 85=>600, 86=>600, 87=>600, 88=>600, 89=>600, 90=>600, 91=>600, 92=>600, 93=>600, 94=>600, + 95=>600, 96=>600, 97=>600, 98=>600, 99=>600, 100=>600, 101=>600, 102=>600, 103=>600, 104=>600, 105=>600, 106=>600, 107=>600, 108=>600, 109=>600, 110=>600, + 111=>600, 112=>600, 113=>600, 114=>600, 115=>600, 116=>600, 117=>600, 118=>600, 119=>600, 120=>600, 121=>600, 122=>600, 123=>600, 124=>600, 125=>600, 126=>600, + 8364=>600, 1027=>600, 8218=>600, 402=>600, 8222=>600, 8230=>600, 8224=>600, 8225=>600, 710=>600, 8240=>600, 352=>600, 8249=>600, 338=>600, 1036=>600, 381=>600, 1039=>600, + 8216=>600, 8217=>600, 8220=>600, 8221=>600, 8226=>600, 8211=>600, 8212=>600, 732=>600, 8482=>600, 353=>600, 8250=>600, 339=>600, 1116=>600, 382=>600, 376=>600, 160=>600, + 161=>600, 162=>600, 163=>600, 164=>600, 165=>600, 166=>600, 167=>600, 168=>600, 169=>600, 170=>600, 171=>600, 172=>600, 173=>600, 174=>600, 175=>600, 176=>600, + 177=>600, 178=>600, 179=>600, 180=>600, 181=>600, 182=>600, 183=>600, 184=>600, 185=>600, 186=>600, 187=>600, 188=>600, 189=>600, 190=>600, 191=>600, 192=>600, + 193=>600, 194=>600, 195=>600, 196=>600, 197=>600, 198=>600, 199=>600, 200=>600, 201=>600, 202=>600, 203=>600, 204=>600, 205=>600, 206=>600, 207=>600, 208=>600, + 209=>600, 210=>600, 211=>600, 212=>600, 213=>600, 214=>600, 215=>600, 216=>600, 217=>600, 218=>600, 219=>600, 220=>600, 221=>600, 222=>600, 223=>600, 224=>600, + 225=>600, 226=>600, 227=>600, 228=>600, 229=>600, 230=>600, 231=>600, 232=>600, 233=>600, 234=>600, 235=>600, 236=>600, 237=>600, 238=>600, 239=>600, 240=>600, + 241=>600, 242=>600, 243=>600, 244=>600, 245=>600, 246=>600, 247=>600, 248=>600, 249=>600, 250=>600, 251=>600, 252=>600, 253=>600, 254=>600, 255=>600, 256=>600, + 257=>600, 258=>600, 259=>600, 260=>600, 261=>600, 262=>600, 263=>600, 264=>600, 265=>600, 266=>600, 267=>600, 268=>600, 269=>600, 270=>600, 271=>600, 272=>600, + 273=>600, 274=>600, 275=>600, 276=>600, 277=>600, 278=>600, 279=>600, 280=>600, 281=>600, 282=>600, 283=>600, 284=>600, 285=>600, 286=>600, 287=>600, 288=>600, + 289=>600, 290=>600, 291=>600, 292=>600, 293=>600, 294=>600, 295=>600, 296=>600, 297=>600, 298=>600, 299=>600, 300=>600, 301=>600, 302=>600, 303=>600, 304=>600, + 305=>600, 306=>600, 307=>600, 308=>600, 309=>600, 310=>600, 311=>600, 312=>600, 313=>600, 314=>600, 315=>600, 316=>600, 317=>600, 318=>600, 319=>600, 320=>600, + 321=>600, 322=>600, 323=>600, 324=>600, 325=>600, 326=>600, 327=>600, 328=>600, 329=>600, 330=>600, 331=>600, 332=>600, 333=>600, 334=>600, 335=>600, 336=>600, + 337=>600, 340=>600, 341=>600, 342=>600, 343=>600, 344=>600, 345=>600, 346=>600, 347=>600, 348=>600, 349=>600, 350=>600, 351=>600, 354=>600, 355=>600, 356=>600, + 357=>600, 358=>600, 359=>600, 360=>600, 361=>600, 362=>600, 363=>600, 364=>600, 365=>600, 366=>600, 367=>600, 368=>600, 369=>600, 370=>600, 371=>600, 372=>600, + 373=>600, 374=>600, 375=>600, 377=>600, 378=>600, 379=>600, 380=>600, 383=>600, 384=>600, 385=>600, 386=>600, 387=>600, 390=>600, 391=>600, 392=>600, 393=>600, + 394=>600, 395=>600, 396=>600, 397=>600, 398=>600, 400=>600, 401=>600, 403=>600, 405=>600, 406=>600, 407=>600, 409=>600, 410=>600, 411=>600, 412=>600, 413=>600, + 414=>600, 415=>600, 416=>600, 417=>600, 418=>600, 419=>600, 420=>600, 421=>600, 422=>600, 423=>600, 424=>600, 425=>600, 427=>600, 428=>600, 429=>600, 430=>600, + 431=>600, 432=>600, 435=>600, 436=>600, 437=>600, 438=>600, 439=>600, 440=>600, 443=>600, 448=>600, 449=>600, 451=>600, 455=>600, 456=>600, 457=>600, 459=>600, + 460=>600, 461=>600, 462=>600, 463=>600, 464=>600, 465=>600, 466=>600, 467=>600, 468=>600, 469=>600, 470=>600, 471=>600, 472=>600, 473=>600, 474=>600, 475=>600, + 476=>600, 477=>600, 478=>600, 479=>600, 480=>600, 481=>600, 482=>600, 483=>600, 484=>600, 485=>600, 486=>600, 487=>600, 488=>600, 489=>600, 490=>600, 491=>600, + 492=>600, 493=>600, 494=>600, 496=>600, 500=>600, 501=>600, 502=>600, 504=>600, 505=>600, 506=>600, 507=>600, 508=>600, 509=>600, 510=>600, 511=>600, 512=>600, + 513=>600, 514=>600, 515=>600, 516=>600, 517=>600, 518=>600, 519=>600, 520=>600, 521=>600, 522=>600, 523=>600, 524=>600, 525=>600, 526=>600, 527=>600, 528=>600, + 529=>600, 530=>600, 531=>600, 532=>600, 533=>600, 534=>600, 535=>600, 536=>600, 537=>600, 538=>600, 539=>600, 542=>600, 543=>600, 548=>600, 549=>600, 550=>600, + 551=>600, 552=>600, 553=>600, 554=>600, 555=>600, 556=>600, 557=>600, 558=>600, 559=>600, 560=>600, 561=>600, 562=>600, 563=>600, 592=>600, 593=>600, 594=>600, + 595=>600, 596=>600, 598=>600, 599=>600, 600=>600, 601=>600, 603=>600, 604=>600, 607=>600, 608=>600, 609=>600, 613=>600, 614=>600, 615=>600, 616=>600, 617=>600, + 618=>600, 619=>600, 621=>600, 623=>600, 624=>600, 625=>600, 626=>600, 627=>600, 628=>600, 629=>600, 633=>600, 634=>600, 635=>600, 636=>600, 637=>600, 638=>600, + 639=>600, 640=>600, 641=>600, 642=>600, 643=>600, 644=>600, 645=>600, 647=>600, 648=>600, 649=>600, 652=>600, 653=>600, 654=>600, 656=>600, 660=>600, 661=>600, + 662=>600, 663=>600, 664=>600, 668=>600, 670=>600, 671=>600, 672=>600, 673=>600, 674=>600, 711=>600, 720=>600, 721=>600, 728=>600, 729=>600, 730=>600, 731=>600, + 733=>600, 768=>0, 769=>0, 770=>0, 771=>0, 772=>0, 773=>0, 774=>0, 775=>0, 776=>0, 777=>0, 778=>0, 779=>0, 780=>0, 781=>0, 782=>0, + 783=>0, 784=>0, 785=>0, 795=>0, 801=>0, 802=>0, 807=>0, 808=>0, 823=>0, 884=>600, 885=>600, 890=>600, 894=>600, 900=>600, 901=>600, 902=>600, + 903=>600, 904=>600, 905=>600, 906=>600, 908=>600, 910=>600, 911=>600, 912=>600, 913=>600, 914=>600, 915=>600, 916=>600, 917=>600, 918=>600, 919=>600, 920=>600, + 921=>600, 922=>600, 923=>600, 924=>600, 925=>600, 926=>600, 927=>600, 928=>600, 929=>600, 931=>600, 932=>600, 933=>600, 934=>600, 935=>600, 936=>600, 937=>600, + 938=>600, 939=>600, 940=>600, 941=>600, 942=>600, 943=>600, 944=>600, 945=>600, 946=>600, 947=>600, 948=>600, 949=>600, 950=>600, 951=>600, 952=>600, 953=>600, + 954=>600, 955=>600, 956=>600, 957=>600, 958=>600, 959=>600, 960=>600, 961=>600, 962=>600, 963=>600, 964=>600, 965=>600, 966=>600, 967=>600, 968=>600, 969=>600, + 970=>600, 971=>600, 972=>600, 973=>600, 974=>600, 976=>600, 977=>600, 981=>600, 1009=>600, 1024=>600, 1025=>600, 1026=>600, 1028=>600, 1029=>600, 1030=>600, 1031=>600, + 1032=>600, 1033=>600, 1034=>600, 1035=>600, 1037=>600, 1038=>600, 1040=>600, 1041=>600, 1042=>600, 1043=>600, 1044=>600, 1045=>600, 1046=>600, 1047=>600, 1048=>600, 1049=>600, + 1050=>600, 1051=>600, 1052=>600, 1053=>600, 1054=>600, 1055=>600, 1056=>600, 1057=>600, 1058=>600, 1059=>600, 1060=>600, 1061=>600, 1062=>600, 1063=>600, 1064=>600, 1065=>600, + 1066=>600, 1067=>600, 1068=>600, 1069=>600, 1070=>600, 1071=>600, 1072=>600, 1073=>600, 1074=>600, 1075=>600, 1076=>600, 1077=>600, 1078=>600, 1079=>600, 1080=>600, 1081=>600, + 1082=>600, 1083=>600, 1084=>600, 1085=>600, 1086=>600, 1087=>600, 1088=>600, 1089=>600, 1090=>600, 1091=>600, 1092=>600, 1093=>600, 1094=>600, 1095=>600, 1096=>600, 1097=>600, + 1098=>600, 1099=>600, 1100=>600, 1101=>600, 1102=>600, 1103=>600, 1104=>600, 1105=>600, 1106=>600, 1107=>600, 1108=>600, 1109=>600, 1110=>600, 1111=>600, 1112=>600, 1113=>600, + 1114=>600, 1115=>600, 1117=>600, 1118=>600, 1119=>600, 1164=>600, 1165=>600, 1166=>600, 1167=>600, 1168=>600, 1169=>600, 1170=>600, 1171=>600, 1172=>600, 1173=>600, 1174=>600, + 1175=>600, 1176=>600, 1177=>600, 1178=>600, 1179=>600, 1180=>600, 1181=>600, 1182=>600, 1183=>600, 1184=>600, 1185=>600, 1186=>600, 1187=>600, 1188=>600, 1189=>600, 1190=>600, + 1191=>600, 1192=>600, 1193=>600, 1194=>600, 1195=>600, 1196=>600, 1197=>600, 1198=>600, 1199=>600, 1200=>600, 1201=>600, 1202=>600, 1203=>600, 1204=>600, 1205=>600, 1206=>600, + 1207=>600, 1208=>600, 1209=>600, 1210=>600, 1211=>600, 1212=>600, 1213=>600, 1214=>600, 1215=>600, 1216=>600, 1217=>600, 1218=>600, 1219=>600, 1220=>600, 1221=>600, 1222=>600, + 1223=>600, 1224=>600, 1225=>600, 1226=>600, 1227=>600, 1228=>600, 1229=>600, 1230=>600, 1231=>600, 1232=>600, 1233=>600, 1234=>600, 1235=>600, 1236=>600, 1237=>600, 1238=>600, + 1239=>600, 1240=>600, 1241=>600, 1242=>600, 1243=>600, 1244=>600, 1245=>600, 1246=>600, 1247=>600, 1248=>600, 1249=>600, 1250=>600, 1251=>600, 1252=>600, 1253=>600, 1254=>600, + 1255=>600, 1256=>600, 1257=>600, 1258=>600, 1259=>600, 1260=>600, 1261=>600, 1262=>600, 1263=>600, 1264=>600, 1265=>600, 1266=>600, 1267=>600, 1268=>600, 1269=>600, 1270=>600, + 1271=>600, 1272=>600, 1273=>600, 1456=>600, 1457=>600, 1458=>600, 1459=>600, 1460=>600, 1461=>600, 1462=>600, 1463=>600, 1464=>600, 1465=>600, 1467=>600, 1468=>600, 1469=>600, + 1470=>600, 1471=>600, 1472=>600, 1473=>600, 1474=>600, 1475=>600, 1476=>600, 1488=>600, 1489=>600, 1490=>600, 1491=>600, 1492=>600, 1493=>600, 1494=>600, 1495=>600, 1496=>600, + 1497=>600, 1498=>600, 1499=>600, 1500=>600, 1501=>600, 1502=>600, 1503=>600, 1504=>600, 1505=>600, 1506=>600, 1507=>600, 1508=>600, 1509=>600, 1510=>600, 1511=>600, 1512=>600, + 1513=>600, 1514=>600, 1520=>600, 1521=>600, 1522=>600, 1523=>600, 1524=>600, 7680=>600, 7681=>600, 7682=>600, 7683=>600, 7684=>600, 7685=>600, 7686=>600, 7687=>600, 7688=>600, + 7689=>600, 7690=>600, 7691=>600, 7692=>600, 7693=>600, 7694=>600, 7695=>600, 7696=>600, 7697=>600, 7698=>600, 7699=>600, 7700=>600, 7701=>600, 7702=>600, 7703=>600, 7704=>600, + 7705=>600, 7706=>600, 7707=>600, 7708=>600, 7709=>600, 7710=>600, 7711=>600, 7712=>600, 7713=>600, 7714=>600, 7715=>600, 7716=>600, 7717=>600, 7718=>600, 7719=>600, 7720=>600, + 7721=>600, 7722=>600, 7723=>600, 7724=>600, 7725=>600, 7726=>600, 7727=>600, 7728=>600, 7729=>600, 7730=>600, 7731=>600, 7732=>600, 7733=>600, 7734=>600, 7735=>600, 7736=>600, + 7737=>600, 7738=>600, 7739=>600, 7740=>600, 7741=>600, 7742=>600, 7743=>600, 7744=>600, 7745=>600, 7746=>600, 7747=>600, 7748=>600, 7749=>600, 7750=>600, 7751=>600, 7752=>600, + 7753=>600, 7754=>600, 7755=>600, 7756=>600, 7757=>600, 7758=>600, 7759=>600, 7760=>600, 7761=>600, 7762=>600, 7763=>600, 7764=>600, 7765=>600, 7766=>600, 7767=>600, 7768=>600, + 7769=>600, 7770=>600, 7771=>600, 7772=>600, 7773=>600, 7774=>600, 7775=>600, 7776=>600, 7777=>600, 7778=>600, 7779=>600, 7780=>600, 7781=>600, 7782=>600, 7783=>600, 7784=>600, + 7785=>600, 7786=>600, 7787=>600, 7788=>600, 7789=>600, 7790=>600, 7791=>600, 7792=>600, 7793=>600, 7794=>600, 7795=>600, 7796=>600, 7797=>600, 7798=>600, 7799=>600, 7800=>600, + 7801=>600, 7802=>600, 7803=>600, 7804=>600, 7805=>600, 7806=>600, 7807=>600, 7808=>600, 7809=>600, 7810=>600, 7811=>600, 7812=>600, 7813=>600, 7814=>600, 7815=>600, 7816=>600, + 7817=>600, 7818=>600, 7819=>600, 7820=>600, 7821=>600, 7822=>600, 7823=>600, 7824=>600, 7825=>600, 7826=>600, 7827=>600, 7828=>600, 7829=>600, 7830=>600, 7831=>600, 7832=>600, + 7833=>600, 7835=>600, 7840=>600, 7841=>600, 7842=>600, 7843=>600, 7844=>600, 7845=>600, 7846=>600, 7847=>600, 7848=>600, 7849=>600, 7850=>600, 7851=>600, 7852=>600, 7853=>600, + 7854=>600, 7855=>600, 7856=>600, 7857=>600, 7858=>600, 7859=>600, 7860=>600, 7861=>600, 7862=>600, 7863=>600, 7864=>600, 7865=>600, 7866=>600, 7867=>600, 7868=>600, 7869=>600, + 7870=>600, 7871=>600, 7872=>600, 7873=>600, 7874=>600, 7875=>600, 7876=>600, 7877=>600, 7878=>600, 7879=>600, 7880=>600, 7881=>600, 7882=>600, 7883=>600, 7884=>600, 7885=>600, + 7886=>600, 7887=>600, 7888=>600, 7889=>600, 7890=>600, 7891=>600, 7892=>600, 7893=>600, 7894=>600, 7895=>600, 7896=>600, 7897=>600, 7898=>600, 7899=>600, 7900=>600, 7901=>600, + 7902=>600, 7903=>600, 7904=>600, 7905=>600, 7906=>600, 7907=>600, 7908=>600, 7909=>600, 7910=>600, 7911=>600, 7912=>600, 7913=>600, 7914=>600, 7915=>600, 7916=>600, 7917=>600, + 7918=>600, 7919=>600, 7920=>600, 7921=>600, 7922=>600, 7923=>600, 7924=>600, 7925=>600, 7926=>600, 7927=>600, 7928=>600, 7929=>600, 8209=>600, 8213=>600, 8219=>600, 8223=>600, + 8242=>600, 8243=>600, 8244=>600, 8245=>600, 8246=>600, 8247=>600, 8252=>600, 8260=>600, 8261=>600, 8262=>600, 8264=>600, 8265=>600, 8267=>600, 8292=>600, 8304=>600, 8305=>600, + 8306=>600, 8307=>600, 8308=>600, 8309=>600, 8310=>600, 8311=>600, 8312=>600, 8313=>600, 8314=>600, 8315=>600, 8316=>600, 8317=>600, 8318=>600, 8319=>600, 8320=>600, 8321=>600, + 8322=>600, 8323=>600, 8324=>600, 8325=>600, 8326=>600, 8327=>600, 8328=>600, 8329=>600, 8355=>600, 8356=>600, 8362=>600, 8466=>600, 8470=>600, 8486=>600, 8487=>600, 8490=>600, + 8491=>600, 8531=>600, 8532=>600, 8533=>600, 8534=>600, 8535=>600, 8536=>600, 8537=>600, 8538=>600, 8539=>600, 8540=>600, 8541=>600, 8542=>600, 8543=>600, 8592=>600, 8593=>600, + 8594=>600, 8595=>600, 8706=>600, 8709=>600, 8710=>600, 8711=>600, 8721=>600, 8722=>600, 8725=>600, 8730=>600, 8733=>600, 8734=>600, 8735=>600, 8800=>600, 8801=>600, 8804=>600, + 8805=>600, 8976=>600, 9472=>600, 9473=>600, 9474=>600, 9475=>600, 9476=>600, 9477=>600, 9478=>600, 9479=>600, 9480=>600, 9481=>600, 9482=>600, 9483=>600, 9484=>600, 9485=>600, + 9486=>600, 9487=>600, 9488=>600, 9489=>600, 9490=>600, 9491=>600, 9492=>600, 9493=>600, 9494=>600, 9495=>600, 9496=>600, 9497=>600, 9498=>600, 9499=>600, 9500=>600, 9501=>600, + 9502=>600, 9503=>600, 9504=>600, 9505=>600, 9506=>600, 9507=>600, 9508=>600, 9509=>600, 9510=>600, 9511=>600, 9512=>600, 9513=>600, 9514=>600, 9515=>600, 9516=>600, 9517=>600, + 9518=>600, 9519=>600, 9520=>600, 9521=>600, 9522=>600, 9523=>600, 9524=>600, 9525=>600, 9526=>600, 9527=>600, 9528=>600, 9529=>600, 9530=>600, 9531=>600, 9532=>600, 9533=>600, + 9534=>600, 9535=>600, 9536=>600, 9537=>600, 9538=>600, 9539=>600, 9540=>600, 9541=>600, 9542=>600, 9543=>600, 9544=>600, 9545=>600, 9546=>600, 9547=>600, 9548=>600, 9549=>600, + 9550=>600, 9551=>600, 9552=>600, 9553=>600, 9554=>600, 9555=>600, 9556=>600, 9557=>600, 9558=>600, 9559=>600, 9560=>600, 9561=>600, 9562=>600, 9563=>600, 9564=>600, 9565=>600, + 9566=>600, 9567=>600, 9568=>600, 9569=>600, 9570=>600, 9571=>600, 9572=>600, 9573=>600, 9574=>600, 9575=>600, 9576=>600, 9577=>600, 9578=>600, 9579=>600, 9580=>600, 9581=>600, + 9582=>600, 9583=>600, 9584=>600, 9585=>600, 9586=>600, 9587=>600, 9588=>600, 9589=>600, 9590=>600, 9591=>600, 9592=>600, 9593=>600, 9594=>600, 9595=>600, 9596=>600, 9597=>600, + 9598=>600, 9599=>600, 9600=>600, 9601=>600, 9602=>600, 9603=>600, 9604=>600, 9605=>600, 9606=>600, 9607=>600, 9608=>600, 9609=>600, 9610=>600, 9611=>600, 9612=>600, 9613=>600, + 9614=>600, 9615=>600, 9616=>600, 9617=>600, 9618=>600, 9619=>600, 9620=>600, 9621=>600, 9632=>600, 9633=>600, 9635=>600, 9636=>600, 9637=>600, 9638=>600, 9639=>600, 9640=>600, + 9641=>600, 9642=>600, 9643=>600, 9644=>600, 9645=>600, 9646=>600, 9647=>600, 9648=>600, 9649=>600, 9650=>600, 9651=>600, 9652=>600, 9653=>600, 9654=>600, 9655=>600, 9656=>600, + 9657=>600, 9658=>600, 9660=>600, 9661=>600, 9662=>600, 9663=>600, 9664=>600, 9665=>600, 9666=>600, 9667=>600, 9668=>600, 9669=>600, 9670=>600, 9671=>600, 9673=>600, 9674=>600, + 9675=>600, 9677=>600, 9679=>600, 9680=>600, 9681=>600, 9682=>600, 9683=>600, 9684=>600, 9685=>600, 9686=>600, 9687=>600, 9688=>600, 9689=>600, 9698=>600, 9699=>600, 9700=>600, + 9701=>600, 9702=>600, 9703=>600, 9704=>600, 9705=>600, 9706=>600, 9707=>600, 9708=>600, 9709=>600, 9710=>600, 9712=>600, 9713=>600, 9714=>600, 9715=>600, 9716=>600, 9717=>600, + 9718=>600, 9719=>600, 9735=>600, 9736=>600, 9737=>600, 9776=>600, 9777=>600, 9778=>600, 9779=>600, 9780=>600, 9781=>600, 9782=>600, 9783=>600, 9785=>600, 9786=>600, 9787=>600, + 9833=>600, 9834=>600, 9835=>600, 9836=>600, 63166=>600, 63171=>600, 64256=>600, 64257=>600, 64258=>600} + font[:enc]=''; + font[:diff]=''; + font[:file]='FreeMonoBold.z'; + font[:ctg]='FreeMonoBold.ctg.z'; + font[:originalsize]=175016; +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/freemonobi.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/freemonobi.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,62 @@ +TCPDFFontDescriptor.define('freemonobi') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='FreeMonoBoldOblique'; + font[:desc]={'Ascent'=>1111,'Descent'=>-278,'CapHeight'=>1111,'Flags'=>96,'FontBBox'=>'[-513 -278 840 1111]','ItalicAngle'=>-12,'StemV'=>120,'MissingWidth'=>600} + font[:up]=-100; + font[:ut]=50; + font[:cw]={ + 13=>333, 32=>600, 33=>600, 34=>600, 35=>600, 36=>600, 37=>600, 38=>600, 39=>600, 40=>600, 41=>600, 42=>600, 43=>600, 44=>600, 45=>600, 46=>600, + 47=>600, 48=>600, 49=>600, 50=>600, 51=>600, 52=>600, 53=>600, 54=>600, 55=>600, 56=>600, 57=>600, 58=>600, 59=>600, 60=>600, 61=>600, 62=>600, + 63=>600, 64=>600, 65=>600, 66=>600, 67=>600, 68=>600, 69=>600, 70=>600, 71=>600, 72=>600, 73=>600, 74=>600, 75=>600, 76=>600, 77=>600, 78=>600, + 79=>600, 80=>600, 81=>600, 82=>600, 83=>600, 84=>600, 85=>600, 86=>600, 87=>600, 88=>600, 89=>600, 90=>600, 91=>600, 92=>600, 93=>600, 94=>600, + 95=>600, 96=>600, 97=>600, 98=>600, 99=>600, 100=>600, 101=>600, 102=>600, 103=>600, 104=>600, 105=>600, 106=>600, 107=>600, 108=>600, 109=>600, 110=>600, + 111=>600, 112=>600, 113=>600, 114=>600, 115=>600, 116=>600, 117=>600, 118=>600, 119=>600, 120=>600, 121=>600, 122=>600, 123=>600, 124=>600, 125=>600, 126=>600, + 8364=>600, 1027=>600, 8218=>600, 402=>600, 8222=>600, 8230=>600, 8224=>600, 8225=>600, 710=>600, 8240=>600, 352=>600, 8249=>600, 338=>600, 1036=>600, 381=>600, 1039=>600, + 8216=>600, 8217=>600, 8220=>600, 8221=>600, 8226=>600, 8211=>600, 8212=>600, 732=>600, 8482=>600, 353=>600, 8250=>600, 339=>600, 1116=>600, 382=>600, 376=>600, 160=>600, + 161=>600, 162=>600, 163=>600, 164=>600, 165=>600, 166=>600, 167=>600, 168=>600, 169=>600, 170=>600, 171=>600, 172=>600, 173=>600, 174=>600, 175=>600, 176=>600, + 177=>600, 178=>600, 179=>600, 180=>600, 181=>600, 182=>600, 183=>600, 184=>600, 185=>600, 186=>600, 187=>600, 188=>600, 189=>600, 190=>600, 191=>600, 192=>600, + 193=>600, 194=>600, 195=>600, 196=>600, 197=>600, 198=>600, 199=>600, 200=>600, 201=>600, 202=>600, 203=>600, 204=>600, 205=>600, 206=>600, 207=>600, 208=>600, + 209=>600, 210=>600, 211=>600, 212=>600, 213=>600, 214=>600, 215=>600, 216=>600, 217=>600, 218=>600, 219=>600, 220=>600, 221=>600, 222=>600, 223=>600, 224=>600, + 225=>600, 226=>600, 227=>600, 228=>600, 229=>600, 230=>600, 231=>600, 232=>600, 233=>600, 234=>600, 235=>600, 236=>600, 237=>600, 238=>600, 239=>600, 240=>600, + 241=>600, 242=>600, 243=>600, 244=>600, 245=>600, 246=>600, 247=>600, 248=>600, 249=>600, 250=>600, 251=>600, 252=>600, 253=>600, 254=>600, 255=>600, 256=>600, + 257=>600, 258=>600, 259=>600, 260=>600, 261=>600, 262=>600, 263=>600, 264=>600, 265=>600, 266=>600, 267=>600, 268=>600, 269=>600, 270=>600, 271=>600, 272=>600, + 273=>600, 274=>600, 275=>600, 276=>600, 277=>600, 278=>600, 279=>600, 280=>600, 281=>600, 282=>600, 283=>600, 284=>600, 285=>600, 286=>600, 287=>600, 288=>600, + 289=>600, 290=>600, 291=>600, 292=>600, 293=>600, 294=>600, 295=>600, 296=>600, 297=>600, 298=>600, 299=>600, 300=>600, 301=>600, 302=>600, 303=>600, 304=>600, + 305=>600, 306=>600, 307=>600, 308=>600, 309=>600, 310=>600, 311=>600, 312=>600, 313=>600, 314=>600, 315=>600, 316=>600, 317=>600, 318=>600, 319=>600, 320=>600, + 321=>600, 322=>600, 323=>600, 324=>600, 325=>600, 326=>600, 327=>600, 328=>600, 329=>600, 330=>600, 331=>600, 332=>600, 333=>600, 334=>600, 335=>600, 336=>600, + 337=>600, 340=>600, 341=>600, 342=>600, 343=>600, 344=>600, 345=>600, 346=>600, 347=>600, 348=>600, 349=>600, 350=>600, 351=>600, 354=>600, 355=>600, 356=>600, + 357=>600, 358=>600, 359=>600, 360=>600, 361=>600, 362=>600, 363=>600, 364=>600, 365=>600, 366=>600, 367=>600, 368=>600, 369=>600, 370=>600, 371=>600, 372=>600, + 373=>600, 374=>600, 375=>600, 377=>600, 378=>600, 379=>600, 380=>600, 383=>600, 425=>600, 461=>600, 462=>600, 463=>600, 464=>600, 465=>600, 466=>600, 467=>600, + 468=>600, 469=>600, 470=>600, 471=>600, 472=>600, 473=>600, 474=>600, 475=>600, 476=>600, 477=>600, 478=>600, 479=>600, 482=>600, 483=>600, 486=>600, 487=>600, + 488=>600, 489=>600, 490=>600, 491=>600, 492=>600, 493=>600, 496=>600, 500=>600, 501=>600, 504=>600, 505=>600, 506=>600, 507=>600, 508=>600, 509=>600, 510=>600, + 511=>600, 512=>600, 513=>600, 514=>600, 515=>600, 516=>600, 517=>600, 518=>600, 519=>600, 520=>600, 521=>600, 522=>600, 523=>600, 524=>600, 525=>600, 526=>600, + 527=>600, 528=>600, 529=>600, 530=>600, 531=>600, 532=>600, 533=>600, 534=>600, 535=>600, 536=>600, 537=>600, 538=>600, 539=>600, 593=>600, 617=>600, 711=>600, + 728=>600, 729=>0, 730=>600, 731=>600, 733=>600, 768=>0, 769=>0, 770=>0, 771=>0, 772=>0, 774=>0, 775=>0, 776=>0, 778=>0, 779=>0, 780=>0, + 783=>0, 784=>0, 785=>0, 900=>600, 901=>600, 902=>600, 904=>600, 912=>600, 913=>600, 914=>600, 915=>600, 916=>600, 917=>600, 918=>600, 919=>600, 920=>600, + 921=>600, 922=>600, 923=>600, 924=>600, 925=>600, 926=>600, 927=>600, 928=>600, 929=>600, 931=>600, 932=>600, 933=>600, 934=>600, 935=>600, 936=>600, 937=>600, + 938=>600, 939=>600, 945=>600, 946=>600, 947=>600, 950=>600, 951=>600, 952=>600, 953=>600, 954=>600, 955=>600, 956=>600, 957=>600, 959=>600, 970=>600, 1024=>600, + 1025=>600, 1026=>600, 1028=>600, 1029=>600, 1030=>600, 1031=>600, 1032=>600, 1033=>600, 1034=>600, 1035=>600, 1037=>600, 1038=>600, 1040=>600, 1041=>600, 1042=>600, 1043=>600, + 1044=>600, 1045=>600, 1046=>600, 1047=>600, 1048=>600, 1049=>600, 1050=>600, 1051=>600, 1052=>600, 1053=>600, 1054=>600, 1055=>600, 1056=>600, 1057=>600, 1058=>600, 1059=>600, + 1060=>600, 1061=>600, 1062=>600, 1063=>600, 1064=>600, 1065=>600, 1066=>600, 1067=>600, 1068=>600, 1069=>600, 1070=>600, 1071=>600, 1072=>600, 1073=>600, 1074=>600, 1075=>600, + 1076=>600, 1077=>600, 1078=>600, 1079=>600, 1080=>600, 1081=>600, 1082=>600, 1083=>600, 1084=>600, 1085=>600, 1086=>600, 1087=>600, 1088=>600, 1089=>600, 1090=>600, 1091=>600, + 1092=>600, 1093=>600, 1094=>600, 1095=>600, 1096=>600, 1097=>600, 1098=>600, 1099=>600, 1100=>600, 1101=>600, 1102=>600, 1103=>600, 1104=>600, 1105=>600, 1106=>600, 1107=>600, + 1108=>600, 1109=>600, 1110=>600, 1111=>600, 1112=>600, 1113=>600, 1114=>600, 1115=>600, 1117=>600, 1118=>600, 1119=>600, 1164=>600, 1165=>600, 1166=>600, 1167=>600, 1168=>600, + 1169=>600, 1170=>600, 1171=>600, 1172=>600, 1173=>600, 1174=>600, 1175=>600, 1176=>600, 1177=>600, 1178=>600, 1179=>600, 1180=>600, 1181=>600, 1182=>600, 1183=>600, 1184=>600, + 1185=>600, 1186=>600, 1187=>600, 1188=>600, 1189=>600, 1190=>600, 1191=>600, 1192=>600, 1193=>600, 1194=>600, 1195=>600, 1196=>600, 1197=>600, 1198=>600, 1199=>600, 1200=>600, + 1201=>600, 1202=>600, 1203=>600, 1204=>600, 1205=>600, 1206=>600, 1207=>600, 1208=>600, 1209=>600, 1210=>600, 1211=>600, 1212=>600, 1213=>600, 1214=>600, 1215=>600, 1216=>600, + 1217=>600, 1218=>600, 1219=>600, 1220=>600, 1223=>600, 1224=>600, 1227=>600, 1228=>600, 1232=>600, 1233=>600, 1234=>600, 1235=>600, 1236=>600, 1237=>600, 1238=>600, 1239=>600, + 1240=>600, 1241=>600, 1242=>600, 1243=>600, 1244=>600, 1245=>600, 1246=>600, 1247=>600, 1248=>600, 1249=>600, 1250=>600, 1251=>600, 1252=>600, 1253=>600, 1254=>600, 1255=>600, + 1256=>600, 1257=>600, 1258=>600, 1259=>600, 1260=>600, 1261=>600, 1262=>600, 1263=>600, 1264=>600, 1265=>600, 1266=>600, 1267=>600, 1268=>600, 1269=>600, 1272=>600, 1273=>600, + 1456=>600, 1457=>600, 1458=>600, 1459=>600, 1460=>600, 1461=>600, 1462=>600, 1463=>600, 1464=>600, 1465=>600, 1467=>600, 1468=>600, 1469=>600, 1470=>600, 1471=>600, 1472=>600, + 1473=>600, 1474=>600, 1475=>600, 1476=>600, 1488=>600, 1489=>600, 1490=>600, 1491=>600, 1492=>600, 1493=>600, 1494=>600, 1495=>600, 1496=>600, 1497=>600, 1498=>600, 1499=>600, + 1500=>600, 1501=>600, 1502=>600, 1503=>600, 1504=>600, 1505=>600, 1506=>600, 1507=>600, 1508=>600, 1509=>600, 1510=>600, 1511=>600, 1512=>600, 1513=>600, 1514=>600, 1520=>600, + 1521=>600, 1522=>600, 1523=>600, 1524=>600, 8213=>600, 8260=>600, 8304=>600, 8305=>600, 8306=>600, 8307=>600, 8308=>600, 8309=>600, 8310=>600, 8311=>600, 8312=>600, 8313=>600, + 8320=>600, 8321=>600, 8322=>600, 8323=>600, 8324=>600, 8325=>600, 8326=>600, 8327=>600, 8328=>600, 8329=>600, 8362=>600, 8470=>600, 8486=>600, 8531=>600, 8532=>600, 8533=>600, + 8534=>600, 8535=>600, 8536=>600, 8537=>600, 8538=>600, 8539=>600, 8540=>600, 8541=>600, 8542=>600, 8543=>600, 8592=>600, 8593=>600, 8594=>600, 8595=>600, 8706=>600, 8710=>600, + 8721=>600, 8722=>600, 8730=>600, 8734=>600, 8800=>600, 8804=>600, 8805=>600, 9674=>600, 9833=>600, 9834=>600, 9835=>600, 9836=>600, 63166=>600, 63171=>600, 64257=>600, 64258=>600} + font[:enc]=''; + font[:diff]=''; + font[:file]='FreeMonoBoldOblique.z'; + font[:ctg]='FreeMonoBoldOblique.ctg.z'; + font[:originalsize]=128384; +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/freemonoi.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/freemonoi.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,89 @@ +TCPDFFontDescriptor.define('freemonoi') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='FreeMonoOblique'; + font[:desc]={'Ascent'=>1000,'Descent'=>-273,'CapHeight'=>1000,'Flags'=>96,'FontBBox'=>'[-577 -273 779 1000]','ItalicAngle'=>-12,'StemV'=>70,'MissingWidth'=>600} + font[:up]=-100; + font[:ut]=50; + font[:cw]={ + 13=>333, 32=>600, 33=>600, 34=>600, 35=>600, 36=>600, 37=>600, 38=>600, 39=>600, 40=>600, 41=>600, 42=>600, 43=>600, 44=>600, 45=>600, 46=>600, + 47=>600, 48=>600, 49=>600, 50=>600, 51=>600, 52=>600, 53=>600, 54=>600, 55=>600, 56=>600, 57=>600, 58=>600, 59=>600, 60=>600, 61=>600, 62=>600, + 63=>600, 64=>600, 65=>600, 66=>600, 67=>600, 68=>600, 69=>600, 70=>600, 71=>600, 72=>600, 73=>600, 74=>600, 75=>600, 76=>600, 77=>600, 78=>600, + 79=>600, 80=>600, 81=>600, 82=>600, 83=>600, 84=>600, 85=>600, 86=>600, 87=>600, 88=>600, 89=>600, 90=>600, 91=>600, 92=>600, 93=>600, 94=>600, + 95=>600, 96=>600, 97=>600, 98=>600, 99=>600, 100=>600, 101=>600, 102=>600, 103=>600, 104=>600, 105=>600, 106=>600, 107=>600, 108=>600, 109=>600, 110=>600, + 111=>600, 112=>600, 113=>600, 114=>600, 115=>600, 116=>600, 117=>600, 118=>600, 119=>600, 120=>600, 121=>600, 122=>600, 123=>600, 124=>600, 125=>600, 126=>600, + 8364=>600, 1027=>600, 8218=>600, 402=>600, 8222=>600, 8230=>600, 8224=>600, 8225=>600, 710=>600, 8240=>600, 352=>600, 8249=>600, 338=>600, 1036=>600, 381=>600, 1039=>600, + 8216=>600, 8217=>600, 8220=>600, 8221=>600, 8226=>600, 8211=>600, 8212=>600, 732=>600, 8482=>600, 353=>600, 8250=>600, 339=>600, 1116=>600, 382=>600, 376=>600, 160=>600, + 161=>600, 162=>600, 163=>600, 164=>600, 165=>600, 166=>600, 167=>600, 168=>600, 169=>600, 170=>600, 171=>600, 172=>600, 173=>600, 174=>600, 175=>600, 176=>600, + 177=>600, 178=>600, 179=>600, 180=>600, 181=>600, 182=>600, 183=>600, 184=>600, 185=>600, 186=>600, 187=>600, 188=>600, 189=>600, 190=>600, 191=>600, 192=>600, + 193=>600, 194=>600, 195=>600, 196=>600, 197=>600, 198=>600, 199=>600, 200=>600, 201=>600, 202=>600, 203=>600, 204=>600, 205=>600, 206=>600, 207=>600, 208=>600, + 209=>600, 210=>600, 211=>600, 212=>600, 213=>600, 214=>600, 215=>600, 216=>600, 217=>600, 218=>600, 219=>600, 220=>600, 221=>600, 222=>600, 223=>600, 224=>600, + 225=>600, 226=>600, 227=>600, 228=>600, 229=>600, 230=>600, 231=>600, 232=>600, 233=>600, 234=>600, 235=>600, 236=>600, 237=>600, 238=>600, 239=>600, 240=>600, + 241=>600, 242=>600, 243=>600, 244=>600, 245=>600, 246=>600, 247=>600, 248=>600, 249=>600, 250=>600, 251=>600, 252=>600, 253=>600, 254=>600, 255=>600, 256=>600, + 257=>600, 258=>600, 259=>600, 260=>600, 261=>600, 262=>600, 263=>600, 264=>600, 265=>600, 266=>600, 267=>600, 268=>600, 269=>600, 270=>600, 271=>600, 272=>600, + 273=>600, 274=>600, 275=>600, 276=>600, 277=>600, 278=>600, 279=>600, 280=>600, 281=>600, 282=>600, 283=>600, 284=>600, 285=>600, 286=>600, 287=>600, 288=>600, + 289=>600, 290=>600, 291=>600, 292=>600, 293=>600, 294=>600, 295=>600, 296=>600, 297=>600, 298=>600, 299=>600, 300=>600, 301=>600, 302=>600, 303=>600, 304=>600, + 305=>600, 306=>600, 307=>600, 308=>600, 309=>600, 310=>600, 311=>600, 312=>600, 313=>600, 314=>600, 315=>600, 316=>600, 317=>600, 318=>600, 319=>600, 320=>600, + 321=>600, 322=>600, 323=>600, 324=>600, 325=>600, 326=>600, 327=>600, 328=>600, 329=>600, 330=>600, 331=>600, 332=>600, 333=>600, 334=>600, 335=>600, 336=>600, + 337=>600, 340=>600, 341=>600, 342=>600, 343=>600, 344=>600, 345=>600, 346=>600, 347=>600, 348=>600, 349=>600, 350=>600, 351=>600, 354=>600, 355=>600, 356=>600, + 357=>600, 358=>600, 359=>600, 360=>600, 361=>600, 362=>600, 363=>600, 364=>600, 365=>600, 366=>600, 367=>600, 368=>600, 369=>600, 370=>600, 371=>600, 372=>600, + 373=>600, 374=>600, 375=>600, 377=>600, 378=>600, 379=>600, 380=>600, 383=>600, 384=>600, 385=>600, 386=>600, 387=>600, 388=>600, 389=>600, 390=>600, 391=>600, + 392=>600, 393=>600, 394=>600, 395=>600, 396=>600, 397=>600, 398=>600, 399=>600, 400=>600, 401=>600, 403=>600, 404=>600, 405=>600, 406=>600, 407=>600, 408=>600, + 409=>600, 410=>600, 411=>600, 412=>600, 413=>600, 414=>600, 415=>600, 416=>600, 417=>600, 418=>600, 419=>600, 420=>600, 421=>600, 422=>600, 423=>600, 424=>600, + 425=>600, 426=>600, 427=>600, 428=>600, 429=>600, 430=>600, 431=>600, 432=>600, 433=>600, 434=>600, 435=>600, 436=>600, 437=>600, 438=>600, 439=>600, 440=>600, + 441=>600, 442=>600, 443=>600, 444=>600, 445=>600, 446=>600, 448=>600, 449=>600, 450=>600, 451=>600, 452=>600, 453=>600, 454=>600, 455=>600, 456=>600, 457=>600, + 458=>600, 459=>600, 460=>600, 461=>600, 462=>600, 463=>600, 464=>600, 465=>600, 466=>600, 467=>600, 468=>600, 469=>600, 470=>600, 471=>600, 472=>600, 473=>600, + 474=>600, 475=>600, 476=>600, 477=>600, 478=>600, 479=>600, 480=>600, 481=>600, 482=>600, 483=>600, 484=>600, 485=>600, 486=>600, 487=>600, 488=>600, 489=>600, + 490=>600, 491=>600, 492=>600, 493=>600, 494=>600, 495=>600, 496=>600, 497=>600, 498=>600, 499=>600, 500=>600, 501=>600, 502=>600, 504=>600, 505=>600, 506=>600, + 507=>600, 508=>600, 509=>600, 510=>600, 511=>600, 512=>600, 513=>600, 514=>600, 515=>600, 516=>600, 517=>600, 518=>600, 519=>600, 520=>600, 521=>600, 522=>600, + 523=>600, 524=>600, 525=>600, 526=>600, 527=>600, 528=>600, 529=>600, 530=>600, 531=>600, 532=>600, 533=>600, 534=>600, 535=>600, 536=>600, 537=>600, 538=>600, + 539=>600, 542=>600, 543=>600, 548=>600, 549=>600, 550=>600, 551=>600, 552=>600, 553=>600, 554=>600, 555=>600, 556=>600, 557=>600, 558=>600, 559=>600, 560=>600, + 561=>600, 562=>600, 563=>600, 592=>600, 593=>600, 594=>600, 595=>600, 596=>600, 597=>600, 598=>600, 599=>600, 600=>600, 601=>600, 602=>600, 603=>600, 604=>600, + 605=>600, 606=>600, 607=>600, 608=>600, 609=>600, 610=>600, 611=>600, 612=>600, 613=>600, 614=>600, 615=>600, 616=>600, 617=>600, 618=>600, 619=>600, 620=>600, + 621=>600, 622=>600, 623=>600, 624=>600, 625=>600, 626=>600, 627=>600, 628=>600, 629=>600, 630=>600, 631=>600, 632=>600, 633=>600, 634=>600, 635=>600, 636=>600, + 637=>600, 638=>600, 639=>600, 640=>600, 641=>600, 642=>600, 643=>600, 644=>600, 645=>600, 646=>600, 647=>600, 648=>600, 649=>600, 650=>600, 651=>600, 652=>600, + 653=>600, 654=>600, 655=>600, 656=>600, 657=>600, 658=>600, 659=>600, 660=>600, 661=>600, 662=>600, 663=>600, 664=>600, 665=>600, 666=>600, 667=>600, 668=>600, + 669=>600, 670=>600, 671=>600, 672=>600, 673=>600, 674=>600, 711=>600, 712=>600, 713=>600, 714=>600, 715=>600, 728=>600, 729=>600, 730=>600, 731=>600, 733=>600, + 768=>0, 769=>0, 770=>0, 771=>0, 772=>0, 773=>0, 774=>0, 775=>0, 776=>0, 777=>0, 778=>0, 779=>0, 780=>0, 781=>0, 782=>0, 783=>0, + 807=>0, 808=>0, 821=>0, 822=>0, 823=>0, 824=>0, 901=>600, 902=>600, 904=>600, 905=>600, 906=>600, 908=>600, 910=>600, 911=>600, 912=>600, 913=>600, + 914=>600, 915=>600, 916=>600, 917=>600, 918=>600, 919=>600, 920=>600, 921=>600, 922=>600, 923=>600, 924=>600, 925=>600, 926=>600, 927=>600, 928=>600, 929=>600, + 931=>600, 932=>600, 933=>600, 934=>600, 935=>600, 936=>600, 937=>600, 938=>600, 939=>600, 940=>600, 941=>600, 942=>600, 943=>600, 944=>600, 945=>600, 946=>600, + 947=>600, 948=>600, 949=>600, 950=>600, 951=>600, 952=>600, 953=>600, 954=>600, 955=>600, 956=>600, 957=>600, 958=>600, 959=>600, 960=>600, 961=>600, 962=>600, + 963=>600, 964=>600, 965=>600, 966=>600, 967=>600, 968=>600, 969=>600, 970=>600, 971=>600, 972=>600, 973=>600, 974=>600, 1024=>600, 1025=>600, 1026=>600, 1028=>600, + 1029=>600, 1030=>600, 1031=>600, 1032=>600, 1033=>600, 1034=>600, 1035=>600, 1037=>600, 1038=>600, 1040=>600, 1041=>600, 1042=>600, 1043=>600, 1044=>600, 1045=>600, 1046=>600, + 1047=>600, 1048=>600, 1049=>600, 1050=>600, 1051=>600, 1052=>600, 1053=>600, 1054=>600, 1055=>600, 1056=>600, 1057=>600, 1058=>600, 1059=>600, 1060=>600, 1061=>600, 1062=>600, + 1063=>600, 1064=>600, 1065=>600, 1066=>600, 1067=>600, 1068=>600, 1069=>600, 1070=>600, 1071=>600, 1072=>600, 1073=>600, 1074=>600, 1075=>600, 1076=>600, 1077=>600, 1078=>600, + 1079=>600, 1080=>600, 1081=>600, 1082=>600, 1083=>600, 1084=>600, 1085=>600, 1086=>600, 1087=>600, 1088=>600, 1089=>600, 1090=>600, 1091=>600, 1092=>600, 1093=>600, 1094=>600, + 1095=>600, 1096=>600, 1097=>600, 1098=>600, 1099=>600, 1100=>600, 1101=>600, 1102=>600, 1103=>600, 1104=>600, 1105=>600, 1106=>600, 1107=>600, 1108=>600, 1109=>600, 1110=>600, + 1111=>600, 1112=>600, 1113=>600, 1114=>600, 1115=>600, 1117=>600, 1118=>600, 1119=>600, 1164=>600, 1165=>600, 1166=>600, 1167=>600, 1168=>600, 1169=>600, 1170=>600, 1171=>600, + 1172=>600, 1173=>600, 1174=>600, 1175=>600, 1176=>600, 1177=>600, 1178=>600, 1179=>600, 1180=>600, 1181=>600, 1182=>600, 1183=>600, 1184=>600, 1185=>600, 1186=>600, 1187=>600, + 1188=>600, 1189=>600, 1190=>600, 1191=>600, 1192=>600, 1193=>600, 1194=>600, 1195=>600, 1196=>600, 1197=>600, 1198=>600, 1199=>600, 1200=>600, 1201=>600, 1202=>600, 1203=>600, + 1204=>600, 1205=>600, 1206=>600, 1207=>600, 1208=>600, 1209=>600, 1210=>600, 1211=>600, 1212=>600, 1213=>600, 1214=>600, 1215=>600, 1216=>600, 1217=>600, 1218=>600, 1219=>600, + 1220=>600, 1223=>600, 1224=>600, 1227=>600, 1228=>600, 1232=>600, 1233=>600, 1234=>600, 1235=>600, 1236=>600, 1237=>600, 1238=>600, 1239=>600, 1240=>600, 1241=>600, 1242=>600, + 1243=>600, 1244=>600, 1245=>600, 1246=>600, 1247=>600, 1248=>600, 1249=>600, 1250=>600, 1251=>600, 1252=>600, 1253=>600, 1254=>600, 1255=>600, 1256=>600, 1257=>600, 1258=>600, + 1259=>600, 1260=>600, 1261=>600, 1262=>600, 1263=>600, 1264=>600, 1265=>600, 1266=>600, 1267=>600, 1268=>600, 1269=>600, 1272=>600, 1273=>600, 1328=>600, 1329=>600, 1330=>600, + 1331=>600, 1332=>600, 1333=>600, 1334=>600, 1335=>600, 1336=>600, 1337=>600, 1338=>600, 1339=>600, 1340=>600, 1341=>600, 1342=>600, 1343=>600, 1344=>600, 1345=>600, 1346=>600, + 1347=>600, 1348=>600, 1349=>600, 1350=>600, 1351=>600, 1352=>600, 1353=>600, 1354=>600, 1355=>600, 1356=>600, 1357=>600, 1358=>600, 1359=>600, 1360=>600, 1361=>600, 1362=>600, + 1363=>600, 1364=>600, 1365=>600, 1366=>600, 1367=>600, 1368=>600, 1369=>600, 1370=>600, 1371=>600, 1372=>600, 1373=>600, 1374=>600, 1375=>600, 1376=>600, 1377=>600, 1378=>600, + 1379=>600, 1380=>600, 1381=>600, 1382=>600, 1383=>600, 1384=>600, 1385=>600, 1386=>600, 1387=>600, 1388=>600, 1389=>600, 1390=>600, 1391=>600, 1392=>600, 1393=>600, 1394=>600, + 1395=>600, 1396=>600, 1397=>600, 1398=>600, 1399=>600, 1400=>600, 1401=>600, 1402=>600, 1403=>600, 1404=>600, 1405=>600, 1406=>600, 1407=>600, 1408=>600, 1409=>600, 1410=>600, + 1411=>600, 1412=>600, 1413=>600, 1414=>600, 1415=>600, 1416=>600, 1417=>600, 1418=>600, 1456=>600, 1457=>600, 1458=>600, 1459=>600, 1460=>600, 1461=>600, 1462=>600, 1463=>600, + 1464=>600, 1465=>600, 1467=>600, 1468=>600, 1469=>600, 1470=>600, 1471=>600, 1472=>600, 1473=>600, 1474=>600, 1475=>600, 1476=>600, 1488=>600, 1489=>600, 1490=>600, 1491=>600, + 1492=>600, 1493=>600, 1494=>600, 1495=>600, 1496=>600, 1497=>600, 1498=>600, 1499=>600, 1500=>600, 1501=>600, 1502=>600, 1503=>600, 1504=>600, 1505=>600, 1506=>600, 1507=>600, + 1508=>600, 1509=>600, 1510=>600, 1511=>600, 1512=>600, 1513=>600, 1514=>600, 1520=>600, 1521=>600, 1522=>600, 1523=>600, 1524=>600, 8213=>600, 8241=>600, 8242=>600, 8243=>600, + 8244=>600, 8245=>600, 8246=>600, 8247=>600, 8252=>600, 8253=>600, 8260=>600, 8261=>600, 8262=>600, 8263=>600, 8264=>600, 8265=>600, 8304=>600, 8305=>600, 8306=>600, 8307=>600, + 8308=>600, 8309=>600, 8310=>600, 8311=>600, 8312=>600, 8313=>600, 8314=>600, 8315=>600, 8316=>600, 8317=>600, 8318=>600, 8319=>600, 8320=>600, 8321=>600, 8322=>600, 8323=>600, + 8324=>600, 8325=>600, 8326=>600, 8327=>600, 8328=>600, 8329=>600, 8356=>600, 8362=>600, 8448=>600, 8449=>600, 8450=>600, 8451=>600, 8452=>600, 8453=>600, 8454=>600, 8455=>600, + 8456=>600, 8457=>600, 8458=>600, 8459=>600, 8460=>600, 8461=>600, 8462=>600, 8463=>600, 8464=>600, 8465=>600, 8466=>600, 8467=>600, 8468=>600, 8469=>600, 8470=>600, 8471=>600, + 8472=>600, 8473=>600, 8474=>600, 8475=>600, 8476=>600, 8477=>600, 8478=>600, 8479=>600, 8484=>600, 8486=>600, 8487=>600, 8490=>600, 8491=>600, 8531=>600, 8532=>600, 8533=>600, + 8534=>600, 8535=>600, 8536=>600, 8537=>600, 8538=>600, 8539=>600, 8540=>600, 8541=>600, 8542=>600, 8543=>600, 8592=>600, 8593=>600, 8594=>600, 8595=>600, 8596=>600, 8597=>600, + 8598=>600, 8599=>600, 8600=>600, 8601=>600, 8616=>600, 8706=>600, 8710=>600, 8721=>600, 8722=>600, 8730=>600, 8734=>600, 8800=>600, 8804=>600, 8805=>600, 9674=>600, 9833=>600, + 9834=>600, 9835=>600, 9836=>600, 9837=>600, 9838=>600, 9839=>600, 63171=>600, 64257=>600, 64258=>600, 64285=>600, 64286=>600, 64287=>600, 64288=>600, 64289=>600, 64290=>600, 64291=>600, + 64292=>600, 64293=>600, 64294=>600, 64295=>600, 64296=>600, 64297=>600, 64298=>600, 64299=>600, 64300=>600, 64301=>600, 64302=>600, 64303=>600, 64304=>600, 64305=>600, 64306=>600, 64307=>600, + 64308=>600, 64309=>600, 64310=>600, 64312=>600, 64313=>600, 64314=>600, 64315=>600, 64316=>600, 64318=>600, 64320=>600, 64321=>600, 64323=>600, 64324=>600, 64326=>600, 64327=>600, 64328=>600, + 64329=>600, 64330=>600, 64331=>600, 64332=>600, 64333=>600, 64334=>600, 64335=>600} + font[:enc]=''; + font[:diff]=''; + font[:file]='FreeMonoOblique.z'; + font[:ctg]='FreeMonoOblique.ctg.z'; + font[:originalsize]=175484; +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/freesans.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/freesans.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,149 @@ +TCPDFFontDescriptor.define('freesans') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='FreeSans'; + font[:desc]={'Ascent'=>1141,'Descent'=>-459,'CapHeight'=>1141,'Flags'=>32,'FontBBox'=>'[-797 -459 1632 1141]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600} + font[:up]=-151; + font[:ut]=50; + font[:cw]={ + 13=>333, 32=>278, 33=>278, 34=>355, 35=>556, 36=>556, 37=>889, 38=>667, 39=>191, 40=>333, 41=>333, 42=>389, 43=>584, 44=>278, 45=>333, 46=>278, + 47=>278, 48=>556, 49=>556, 50=>556, 51=>556, 52=>556, 53=>556, 54=>556, 55=>556, 56=>556, 57=>556, 58=>278, 59=>278, 60=>584, 61=>584, 62=>584, + 63=>556, 64=>1015, 65=>667, 66=>667, 67=>722, 68=>722, 69=>667, 70=>611, 71=>778, 72=>722, 73=>278, 74=>500, 75=>667, 76=>556, 77=>833, 78=>722, + 79=>778, 80=>667, 81=>778, 82=>722, 83=>667, 84=>611, 85=>722, 86=>667, 87=>944, 88=>667, 89=>667, 90=>611, 91=>278, 92=>278, 93=>278, 94=>469, + 95=>556, 96=>333, 97=>556, 98=>556, 99=>500, 100=>556, 101=>556, 102=>278, 103=>556, 104=>556, 105=>222, 106=>222, 107=>500, 108=>222, 109=>833, 110=>556, + 111=>556, 112=>556, 113=>556, 114=>333, 115=>500, 116=>278, 117=>556, 118=>500, 119=>722, 120=>500, 121=>500, 122=>500, 123=>334, 124=>260, 125=>334, 126=>584, + 8364=>556, 1027=>611, 8218=>222, 402=>556, 8222=>333, 8230=>1000, 8224=>556, 8225=>556, 710=>333, 8240=>1000, 352=>667, 8249=>333, 338=>1000, 1036=>667, 381=>611, 1039=>722, + 8216=>222, 8217=>221, 8220=>333, 8221=>333, 8226=>350, 8211=>556, 8212=>1000, 732=>333, 8482=>1000, 353=>500, 8250=>333, 339=>944, 1116=>500, 382=>500, 376=>667, 160=>278, + 161=>333, 162=>556, 163=>556, 164=>556, 165=>556, 166=>260, 167=>556, 168=>333, 169=>737, 170=>370, 171=>556, 172=>584, 173=>333, 174=>737, 175=>333, 176=>606, + 177=>584, 178=>351, 179=>351, 180=>333, 181=>556, 182=>537, 183=>278, 184=>333, 185=>351, 186=>365, 187=>556, 188=>869, 189=>869, 190=>869, 191=>611, 192=>667, + 193=>667, 194=>667, 195=>667, 196=>667, 197=>667, 198=>1000, 199=>722, 200=>667, 201=>667, 202=>667, 203=>667, 204=>278, 205=>278, 206=>278, 207=>278, 208=>722, + 209=>722, 210=>778, 211=>778, 212=>778, 213=>778, 214=>778, 215=>584, 216=>778, 217=>722, 218=>722, 219=>722, 220=>722, 221=>666, 222=>666, 223=>611, 224=>556, + 225=>556, 226=>556, 227=>556, 228=>556, 229=>556, 230=>889, 231=>500, 232=>556, 233=>556, 234=>556, 235=>556, 236=>278, 237=>278, 238=>278, 239=>278, 240=>556, + 241=>556, 242=>556, 243=>556, 244=>556, 245=>556, 246=>556, 247=>584, 248=>611, 249=>556, 250=>556, 251=>556, 252=>556, 253=>500, 254=>555, 255=>500, 256=>667, + 257=>556, 258=>667, 259=>556, 260=>667, 261=>556, 262=>722, 263=>500, 264=>722, 265=>500, 266=>722, 267=>500, 268=>722, 269=>500, 270=>722, 271=>635, 272=>722, + 273=>556, 274=>667, 275=>556, 276=>667, 277=>556, 278=>667, 279=>556, 280=>667, 281=>556, 282=>667, 283=>556, 284=>778, 285=>556, 286=>778, 287=>556, 288=>778, + 289=>556, 290=>778, 291=>556, 292=>722, 293=>556, 294=>722, 295=>556, 296=>278, 297=>278, 298=>278, 299=>222, 300=>278, 301=>278, 302=>278, 303=>222, 304=>278, + 305=>278, 306=>700, 307=>374, 308=>500, 309=>222, 310=>667, 311=>500, 312=>500, 313=>556, 314=>222, 315=>556, 316=>222, 317=>556, 318=>292, 319=>556, 320=>500, + 321=>556, 322=>222, 323=>722, 324=>556, 325=>722, 326=>556, 327=>722, 328=>556, 329=>556, 330=>722, 331=>556, 332=>778, 333=>556, 334=>778, 335=>556, 336=>778, + 337=>556, 340=>722, 341=>333, 342=>722, 343=>333, 344=>722, 345=>333, 346=>667, 347=>500, 348=>667, 349=>500, 350=>667, 351=>500, 354=>611, 355=>278, 356=>611, + 357=>308, 358=>611, 359=>278, 360=>722, 361=>556, 362=>722, 363=>556, 364=>722, 365=>556, 366=>722, 367=>556, 368=>722, 369=>556, 370=>722, 371=>556, 372=>944, + 373=>722, 374=>667, 375=>500, 377=>611, 378=>500, 379=>611, 380=>500, 383=>278, 384=>556, 386=>667, 387=>556, 388=>667, 389=>556, 390=>722, 391=>722, 392=>500, + 393=>722, 395=>667, 396=>556, 398=>667, 399=>778, 400=>667, 401=>611, 403=>778, 409=>500, 413=>722, 414=>556, 415=>778, 421=>556, 423=>667, 424=>500, 425=>611, + 427=>278, 429=>278, 430=>611, 452=>1311, 453=>1208, 454=>1056, 455=>1056, 456=>778, 457=>444, 458=>1158, 459=>944, 460=>778, 461=>667, 462=>556, 463=>278, 464=>278, + 465=>778, 466=>556, 467=>722, 468=>556, 469=>722, 470=>556, 471=>722, 472=>556, 473=>722, 474=>556, 475=>722, 476=>556, 477=>556, 478=>667, 479=>556, 480=>667, + 481=>556, 482=>1000, 483=>889, 486=>778, 487=>556, 488=>667, 489=>500, 490=>778, 491=>556, 492=>778, 493=>556, 496=>222, 497=>1333, 498=>1222, 499=>1056, 500=>778, + 501=>556, 504=>722, 505=>556, 506=>667, 507=>556, 508=>1000, 509=>889, 510=>778, 511=>611, 512=>667, 513=>556, 514=>667, 515=>556, 516=>667, 517=>556, 518=>667, + 519=>556, 520=>278, 521=>278, 522=>278, 523=>278, 524=>778, 525=>556, 526=>778, 527=>556, 528=>722, 529=>333, 530=>722, 531=>333, 532=>722, 533=>556, 534=>722, + 535=>556, 536=>667, 537=>500, 538=>611, 539=>278, 542=>722, 543=>556, 550=>667, 551=>556, 552=>667, 553=>556, 554=>778, 555=>556, 556=>778, 557=>556, 558=>778, + 559=>556, 560=>778, 561=>556, 562=>667, 563=>500, 592=>556, 593=>556, 594=>556, 595=>556, 596=>500, 598=>556, 599=>556, 600=>556, 601=>556, 603=>500, 604=>500, + 608=>556, 609=>556, 613=>556, 614=>556, 615=>556, 616=>222, 617=>222, 618=>278, 621=>222, 623=>833, 624=>833, 625=>833, 626=>556, 627=>556, 629=>556, 633=>333, + 634=>333, 635=>333, 636=>333, 637=>333, 638=>278, 639=>278, 642=>500, 643=>278, 644=>278, 645=>278, 647=>278, 648=>278, 649=>556, 652=>500, 653=>722, 654=>500, + 656=>500, 668=>500, 670=>500, 672=>556, 711=>333, 714=>333, 715=>333, 728=>333, 729=>333, 730=>333, 731=>333, 733=>333, 768=>0, 769=>0, 770=>0, 771=>0, + 772=>0, 774=>0, 775=>0, 776=>0, 778=>0, 779=>0, 780=>0, 783=>0, 785=>0, 786=>0, 787=>0, 788=>0, 806=>0, 807=>0, 808=>0, 884=>199, + 885=>199, 890=>332, 894=>278, 900=>414, 901=>747, 902=>730, 903=>278, 904=>664, 905=>681, 906=>230, 908=>792, 910=>710, 911=>758, 912=>286, 913=>684, 914=>628, + 915=>582, 916=>684, 917=>650, 918=>628, 919=>683, 920=>750, 921=>236, 922=>684, 923=>684, 924=>800, 925=>654, 926=>630, 927=>750, 928=>721, 929=>638, 931=>628, + 932=>628, 933=>684, 934=>717, 935=>723, 936=>745, 937=>720, 938=>236, 939=>684, 940=>608, 941=>528, 942=>547, 943=>307, 944=>515, 945=>596, 946=>516, 947=>531, + 948=>560, 949=>510, 950=>462, 951=>526, 952=>526, 953=>286, 954=>516, 955=>560, 956=>574, 957=>504, 958=>470, 959=>550, 960=>661, 961=>566, 962=>535, 963=>616, + 964=>532, 965=>515, 966=>741, 967=>572, 968=>662, 969=>740, 970=>286, 971=>515, 972=>553, 973=>518, 974=>740, 1024=>667, 1025=>667, 1026=>766, 1028=>722, 1029=>667, + 1030=>278, 1031=>278, 1032=>500, 1033=>1080, 1034=>1014, 1035=>766, 1037=>722, 1038=>650, 1040=>667, 1041=>667, 1042=>667, 1043=>611, 1044=>812, 1045=>667, 1046=>1023, 1047=>667, + 1048=>728, 1049=>728, 1050=>667, 1051=>673, 1052=>844, 1053=>719, 1054=>778, 1055=>719, 1056=>667, 1057=>722, 1058=>611, 1059=>650, 1060=>936, 1061=>667, 1062=>741, 1063=>648, + 1064=>828, 1065=>850, 1066=>897, 1067=>872, 1068=>667, 1069=>722, 1070=>1032, 1071=>702, 1072=>556, 1073=>556, 1074=>522, 1075=>430, 1076=>602, 1077=>556, 1078=>837, 1079=>500, + 1080=>567, 1081=>567, 1082=>510, 1083=>557, 1084=>618, 1085=>558, 1086=>556, 1087=>557, 1088=>576, 1089=>500, 1090=>496, 1091=>500, 1092=>912, 1093=>500, 1094=>578, 1095=>520, + 1096=>692, 1097=>712, 1098=>734, 1099=>690, 1100=>552, 1101=>500, 1102=>758, 1103=>543, 1104=>556, 1105=>556, 1106=>568, 1107=>430, 1108=>500, 1109=>500, 1110=>222, 1111=>278, + 1112=>222, 1113=>840, 1114=>850, 1115=>568, 1117=>556, 1118=>500, 1119=>556, 1164=>667, 1165=>552, 1166=>667, 1167=>556, 1168=>611, 1169=>430, 1170=>611, 1171=>430, 1172=>611, + 1173=>430, 1174=>1023, 1175=>837, 1176=>667, 1177=>500, 1178=>667, 1179=>500, 1180=>667, 1181=>500, 1182=>667, 1183=>500, 1184=>667, 1185=>500, 1186=>722, 1187=>556, 1188=>1060, + 1189=>764, 1190=>722, 1191=>556, 1192=>722, 1193=>500, 1194=>722, 1195=>500, 1196=>611, 1197=>496, 1198=>667, 1199=>500, 1200=>667, 1201=>500, 1202=>667, 1203=>500, 1204=>774, + 1205=>608, 1206=>642, 1207=>508, 1208=>642, 1209=>508, 1210=>642, 1211=>508, 1212=>778, 1213=>556, 1214=>688, 1215=>556, 1216=>278, 1217=>1023, 1218=>837, 1219=>667, 1220=>500, + 1223=>722, 1224=>556, 1227=>642, 1228=>508, 1232=>667, 1233=>556, 1234=>667, 1235=>556, 1236=>1000, 1237=>889, 1238=>667, 1239=>556, 1240=>778, 1241=>556, 1242=>778, 1243=>556, + 1244=>1023, 1245=>837, 1246=>667, 1247=>500, 1248=>667, 1249=>500, 1250=>728, 1251=>567, 1252=>728, 1253=>567, 1254=>778, 1255=>556, 1256=>778, 1257=>556, 1258=>778, 1259=>556, + 1260=>722, 1261=>500, 1262=>650, 1263=>500, 1264=>650, 1265=>500, 1266=>650, 1267=>500, 1268=>648, 1269=>520, 1272=>872, 1273=>690, 1329=>722, 1330=>705, 1331=>774, 1332=>754, + 1333=>722, 1334=>751, 1335=>485, 1336=>722, 1337=>782, 1338=>655, 1339=>699, 1340=>417, 1341=>853, 1342=>791, 1343=>711, 1344=>588, 1345=>663, 1346=>665, 1347=>665, 1348=>756, + 1349=>623, 1350=>773, 1351=>603, 1352=>722, 1353=>648, 1354=>722, 1355=>751, 1356=>750, 1357=>722, 1358=>748, 1359=>667, 1360=>699, 1361=>623, 1362=>417, 1363=>785, 1364=>638, + 1365=>778, 1366=>716, 1370=>222, 1371=>133, 1372=>325, 1373=>333, 1374=>344, 1377=>833, 1378=>556, 1379=>572, 1380=>581, 1381=>550, 1382=>588, 1383=>448, 1384=>556, 1385=>568, + 1386=>582, 1387=>545, 1388=>301, 1389=>799, 1390=>556, 1391=>554, 1392=>533, 1393=>548, 1394=>552, 1395=>552, 1396=>544, 1397=>222, 1398=>544, 1399=>456, 1400=>556, 1401=>390, + 1402=>833, 1403=>509, 1404=>547, 1405=>533, 1406=>610, 1407=>887, 1408=>556, 1409=>545, 1410=>352, 1411=>853, 1412=>588, 1413=>579, 1414=>690, 1415=>545, 1417=>278, 1418=>367, + 1456=>70, 1457=>335, 1458=>329, 1459=>329, 1460=>70, 1461=>200, 1462=>200, 1463=>188, 1464=>188, 1465=>70, 1467=>329, 1468=>70, 1469=>70, 1470=>488, 1471=>200, 1472=>212, + 1473=>0, 1474=>0, 1475=>278, 1476=>70, 1488=>640, 1489=>591, 1490=>466, 1491=>598, 1492=>622, 1493=>212, 1494=>351, 1495=>623, 1496=>608, 1497=>200, 1498=>526, 1499=>550, + 1500=>600, 1501=>623, 1502=>621, 1503=>212, 1504=>378, 1505=>607, 1506=>587, 1507=>575, 1508=>568, 1509=>540, 1510=>590, 1511=>606, 1512=>547, 1513=>776, 1514=>687, 1792=>600, + 1793=>201, 1794=>201, 1795=>201, 1796=>201, 1797=>500, 1798=>500, 1799=>500, 1800=>370, 1801=>370, 1802=>574, 1803=>574, 1804=>645, 1805=>574, 1808=>452, 1809=>452, 1810=>574, + 1811=>645, 1812=>645, 1813=>509, 1814=>509, 1815=>682, 1816=>585, 1817=>404, 1818=>627, 1819=>718, 1820=>718, 1821=>484, 1822=>682, 1823=>600, 1824=>660, 1825=>682, 1826=>538, + 1827=>718, 1828=>718, 1829=>718, 1830=>574, 1831=>574, 1832=>638, 1833=>585, 1834=>509, 1835=>682, 1836=>682, 1840=>1, 1841=>1, 1842=>1, 1843=>1, 1844=>1, 1845=>1, + 1846=>1, 1847=>1, 1848=>1, 1849=>1, 1850=>1, 1851=>1, 1852=>1, 1853=>1, 1854=>1, 1855=>1, 1856=>1, 1857=>1, 1858=>1, 1859=>1, 1860=>1, 1861=>1, + 1862=>1, 1863=>1, 1864=>1, 1865=>1, 1866=>1, 2305=>6, 2306=>6, 2309=>644, 2310=>816, 2311=>392, 2312=>392, 2313=>459, 2314=>661, 2315=>641, 2317=>423, 2320=>423, + 2321=>816, 2323=>816, 2324=>816, 2325=>393, 2326=>622, 2327=>424, 2328=>472, 2329=>508, 2330=>517, 2331=>583, 2332=>549, 2333=>503, 2334=>538, 2335=>444, 2336=>480, 2337=>519, + 2338=>479, 2339=>504, 2340=>439, 2341=>542, 2342=>427, 2343=>520, 2344=>415, 2345=>415, 2346=>401, 2347=>401, 2348=>442, 2349=>520, 2350=>463, 2351=>451, 2352=>319, 2353=>319, + 2354=>549, 2355=>641, 2357=>442, 2358=>589, 2359=>398, 2360=>506, 2361=>430, 2364=>6, 2365=>438, 2366=>172, 2367=>172, 2368=>172, 2369=>6, 2370=>6, 2371=>6, 2373=>6, + 2375=>6, 2376=>6, 2377=>172, 2379=>172, 2380=>172, 2381=>6, 2384=>898, 2385=>6, 2406=>584, 2407=>584, 2408=>584, 2409=>584, 2410=>584, 2411=>584, 2412=>584, 2413=>584, + 2414=>584, 2415=>584, 2416=>898, 2433=>300, 2434=>400, 2435=>300, 2437=>640, 2438=>780, 2439=>520, 2440=>520, 2441=>530, 2442=>550, 2443=>620, 2444=>420, 2447=>480, 2448=>620, + 2451=>620, 2452=>720, 2453=>652, 2454=>500, 2455=>490, 2456=>466, 2457=>540, 2458=>490, 2459=>540, 2460=>630, 2461=>590, 2462=>680, 2463=>510, 2464=>490, 2465=>520, 2466=>520, + 2467=>470, 2468=>540, 2469=>490, 2470=>470, 2471=>490, 2472=>452, 2474=>560, 2475=>650, 2476=>480, 2477=>588, 2478=>480, 2479=>470, 2480=>480, 2482=>472, 2486=>512, 2487=>470, + 2488=>470, 2489=>520, 2492=>160, 2494=>180, 2495=>180, 2496=>180, 2497=>320, 2498=>329, 2499=>195, 2500=>260, 2503=>340, 2504=>340, 2507=>740, 2508=>740, 2509=>400, 2519=>180, + 2524=>540, 2525=>520, 2527=>470, 2528=>612, 2529=>420, 2530=>234, 2531=>360, 2534=>460, 2535=>420, 2536=>520, 2537=>540, 2538=>400, 2539=>400, 2540=>560, 2541=>390, 2542=>480, + 2543=>420, 2544=>480, 2545=>470, 2546=>400, 2547=>470, 2548=>400, 2549=>400, 2550=>400, 2551=>120, 2552=>440, 2553=>420, 2554=>420, 2565=>744, 2566=>914, 2567=>690, 2568=>670, + 2569=>596, 2570=>596, 2575=>498, 2576=>744, 2579=>596, 2580=>744, 2581=>550, 2582=>534, 2583=>618, 2584=>690, 2585=>546, 2586=>518, 2587=>592, 2588=>492, 2589=>574, 2590=>514, + 2591=>526, 2592=>556, 2593=>524, 2594=>528, 2595=>574, 2596=>484, 2597=>534, 2598=>504, 2599=>534, 2600=>538, 2602=>534, 2603=>506, 2604=>562, 2605=>516, 2606=>546, 2607=>670, + 2608=>538, 2610=>726, 2611=>726, 2613=>514, 2614=>546, 2616=>546, 2617=>517, 2620=>286, 2622=>172, 2623=>190, 2624=>190, 2625=>1, 2626=>1, 2631=>1, 2632=>1, 2635=>1, + 2636=>1, 2637=>1, 2649=>534, 2650=>618, 2651=>492, 2652=>484, 2654=>506, 2662=>616, 2663=>480, 2664=>560, 2665=>480, 2666=>468, 2667=>492, 2668=>514, 2669=>538, 2670=>572, + 2671=>560, 2672=>1, 2674=>498, 2675=>596, 2676=>900, 2689=>33, 2690=>33, 2693=>767, 2694=>961, 2695=>500, 2696=>495, 2697=>528, 2698=>702, 2699=>885, 2709=>501, 2710=>612, + 2711=>619, 2712=>569, 2713=>532, 2714=>358, 2715=>620, 2716=>606, 2717=>602, 2718=>631, 2719=>495, 2720=>528, 2721=>531, 2722=>511, 2723=>614, 2724=>294, 2725=>344, 2726=>425, + 2727=>345, 2728=>611, 2730=>512, 2731=>578, 2732=>428, 2733=>423, 2734=>231, 2735=>582, 2736=>344, 2738=>558, 2739=>670, 2741=>537, 2742=>592, 2743=>568, 2744=>600, 2745=>544, + 2749=>531, 2750=>232, 2751=>232, 2752=>232, 2753=>33, 2754=>33, 2755=>33, 2759=>33, 2760=>33, 2763=>232, 2764=>232, 2768=>903, 2790=>479, 2791=>416, 2792=>465, 2793=>469, + 2794=>498, 2795=>463, 2796=>451, 2797=>510, 2798=>455, 2799=>488, 2818=>131, 2819=>302, 2821=>560, 2822=>644, 2823=>632, 2825=>630, 2827=>553, 2831=>604, 2835=>520, 2837=>572, + 2838=>570, 2839=>580, 2840=>565, 2842=>580, 2844=>564, 2845=>575, 2847=>565, 2848=>565, 2849=>524, 2858=>572, 2859=>700, 2863=>655, 2864=>620, 2866=>652, 2867=>560, 2870=>565, + 2871=>565, 2872=>545, 2873=>524, 2878=>128, 2879=>1, 2880=>190, 2881=>1, 2882=>1, 2883=>1, 2887=>396, 2912=>563, 2918=>508, 2919=>424, 2920=>440, 2921=>600, 2922=>600, + 2923=>600, 2924=>600, 2925=>600, 2926=>511, 2927=>483, 2946=>479, 2947=>893, 2949=>1018, 2950=>1170, 2951=>916, 2952=>676, 2953=>836, 2954=>1225, 2958=>744, 2959=>744, 2960=>848, + 2962=>813, 2963=>813, 2964=>813, 2965=>688, 2969=>744, 2970=>676, 2972=>848, 2974=>984, 2975=>777, 2979=>1338, 2980=>664, 2984=>561, 2985=>1029, 2986=>607, 2990=>697, 2991=>697, + 2992=>434, 2993=>617, 2994=>869, 2995=>859, 2996=>697, 2997=>869, 2999=>1145, 3000=>1064, 3001=>1316, 3006=>424, 3007=>125, 3008=>596, 3009=>539, 3014=>596, 3015=>650, 3016=>973, + 3018=>1286, 3019=>1286, 3020=>1706, 3021=>333, 3031=>859, 3034=>778, 3035=>881, 3036=>876, 3037=>648, 3041=>744, 3203=>342, 3205=>620, 3206=>591, 3207=>600, 3208=>776, 3209=>1138, + 3210=>1464, 3214=>574, 3215=>570, 3216=>580, 3218=>589, 3219=>597, 3220=>625, 3221=>256, 3222=>565, 3223=>326, 3224=>604, 3225=>651, 3226=>408, 3228=>611, 3230=>843, 3231=>610, + 3232=>258, 3233=>317, 3234=>328, 3235=>803, 3236=>317, 3237=>328, 3238=>352, 3239=>352, 3240=>317, 3248=>248, 3249=>621, 3250=>620, 3251=>620, 3302=>649, 3303=>550, 3304=>573, + 3305=>567, 3306=>562, 3307=>557, 3308=>562, 3309=>567, 3310=>557, 3311=>557, 3458=>468, 3459=>318, 3461=>660, 3465=>778, 3466=>807, 3467=>830, 3473=>838, 3476=>860, 3481=>1000, + 3482=>973, 3483=>860, 3484=>997, 3486=>740, 3488=>838, 3489=>886, 3490=>886, 3492=>1295, 3493=>1295, 3495=>838, 3496=>860, 3497=>860, 3498=>860, 3499=>1403, 3501=>973, 3502=>838, + 3503=>660, 3504=>860, 3505=>973, 3507=>660, 3508=>886, 3509=>838, 3510=>860, 3511=>973, 3512=>838, 3513=>860, 3514=>886, 3515=>807, 3517=>830, 3520=>838, 3521=>973, 3522=>886, + 3523=>886, 3524=>973, 3525=>830, 3526=>973, 3530=>0, 3535=>432, 3536=>380, 3537=>420, 3538=>0, 3539=>0, 3540=>0, 3542=>0, 3544=>501, 3545=>652, 3551=>648, 7936=>596, + 7937=>596, 7938=>596, 7939=>596, 7940=>596, 7941=>596, 7942=>596, 7943=>596, 7944=>684, 7945=>684, 7946=>684, 7947=>684, 7948=>684, 7949=>684, 7950=>684, 7951=>684, 7952=>510, + 7953=>510, 7954=>510, 7955=>510, 7956=>510, 7957=>510, 7960=>650, 7961=>650, 7962=>650, 7963=>650, 7964=>650, 7965=>650, 7968=>526, 7969=>526, 7970=>526, 7971=>526, 7972=>526, + 7973=>526, 7974=>526, 7975=>526, 7976=>683, 7977=>683, 7978=>683, 7979=>683, 7980=>683, 7981=>683, 7982=>683, 7983=>683, 7984=>286, 7985=>286, 7986=>286, 7987=>286, 7988=>286, + 7989=>286, 7990=>286, 7991=>286, 7992=>236, 7993=>236, 7994=>236, 7995=>236, 7996=>236, 7997=>236, 7998=>236, 7999=>236, 8000=>550, 8001=>550, 8002=>550, 8003=>550, 8004=>550, + 8005=>550, 8008=>750, 8009=>750, 8010=>750, 8011=>750, 8012=>750, 8013=>750, 8016=>515, 8017=>515, 8018=>515, 8019=>515, 8020=>515, 8021=>515, 8022=>515, 8023=>515, 8025=>684, + 8027=>684, 8029=>684, 8031=>684, 8032=>740, 8033=>740, 8034=>740, 8035=>740, 8036=>740, 8037=>740, 8038=>740, 8039=>740, 8040=>720, 8041=>720, 8042=>720, 8043=>720, 8044=>720, + 8045=>720, 8046=>720, 8047=>720, 8048=>596, 8049=>596, 8050=>510, 8051=>510, 8052=>526, 8053=>526, 8054=>286, 8055=>286, 8056=>550, 8057=>550, 8058=>515, 8059=>515, 8060=>740, + 8061=>740, 8064=>596, 8065=>596, 8066=>596, 8067=>596, 8068=>596, 8069=>596, 8070=>596, 8071=>596, 8072=>882, 8073=>882, 8074=>882, 8075=>882, 8076=>882, 8077=>882, 8078=>882, + 8079=>882, 8080=>526, 8081=>526, 8082=>526, 8083=>526, 8084=>526, 8085=>526, 8086=>526, 8087=>526, 8088=>857, 8089=>857, 8090=>857, 8091=>857, 8092=>857, 8093=>857, 8094=>857, + 8095=>857, 8096=>740, 8097=>740, 8098=>740, 8099=>740, 8100=>740, 8101=>740, 8102=>740, 8103=>740, 8104=>945, 8105=>945, 8106=>945, 8107=>945, 8108=>945, 8109=>945, 8110=>945, + 8111=>945, 8112=>596, 8113=>596, 8114=>596, 8115=>596, 8116=>596, 8118=>596, 8119=>596, 8120=>684, 8121=>684, 8122=>684, 8123=>684, 8124=>882, 8125=>278, 8126=>201, 8127=>333, + 8128=>278, 8129=>333, 8130=>526, 8131=>526, 8132=>536, 8134=>526, 8135=>526, 8136=>650, 8137=>650, 8138=>683, 8139=>683, 8140=>857, 8141=>582, 8142=>582, 8143=>333, 8144=>286, + 8145=>286, 8146=>286, 8147=>286, 8150=>286, 8151=>312, 8152=>236, 8153=>236, 8154=>236, 8155=>236, 8157=>582, 8158=>582, 8159=>333, 8160=>515, 8161=>515, 8162=>515, 8163=>515, + 8164=>566, 8165=>566, 8166=>515, 8167=>515, 8168=>684, 8169=>684, 8170=>684, 8171=>684, 8172=>638, 8173=>333, 8174=>393, 8175=>333, 8178=>740, 8179=>740, 8180=>740, 8182=>740, + 8183=>740, 8184=>750, 8185=>750, 8186=>720, 8187=>720, 8188=>939, 8189=>333, 8190=>333, 8208=>333, 8219=>221, 8223=>333, 8227=>350, 8241=>1360, 8242=>278, 8243=>469, 8244=>680, + 8245=>278, 8246=>469, 8247=>680, 8251=>622, 8252=>556, 8253=>556, 8260=>167, 8263=>1112, 8264=>834, 8265=>834, 8267=>537, 8304=>351, 8305=>351, 8308=>351, 8309=>351, 8310=>351, + 8311=>351, 8312=>351, 8313=>351, 8320=>351, 8321=>351, 8322=>351, 8323=>351, 8324=>351, 8325=>353, 8326=>351, 8327=>351, 8328=>351, 8329=>351, 8359=>1445, 8360=>1222, 8362=>869, + 8459=>969, 8460=>615, 8464=>809, 8465=>519, 8466=>874, 8470=>1008, 8475=>850, 8476=>644, 8486=>720, 8487=>720, 8488=>512, 8490=>667, 8491=>667, 8492=>908, 8493=>623, 8496=>562, + 8497=>611, 8498=>611, 8499=>1080, 8531=>869, 8532=>869, 8533=>869, 8534=>869, 8535=>869, 8536=>869, 8537=>869, 8538=>869, 8539=>869, 8540=>869, 8541=>869, 8542=>869, 8543=>869, + 8544=>278, 8545=>556, 8546=>834, 8547=>945, 8548=>667, 8549=>945, 8550=>1223, 8551=>1501, 8552=>945, 8553=>667, 8554=>945, 8555=>1223, 8556=>556, 8557=>722, 8558=>722, 8559=>833, + 8560=>222, 8561=>444, 8562=>666, 8563=>722, 8564=>500, 8565=>722, 8566=>944, 8567=>1166, 8568=>722, 8569=>500, 8570=>722, 8571=>944, 8572=>222, 8573=>500, 8574=>556, 8575=>833, + 8592=>987, 8593=>603, 8594=>987, 8595=>603, 8596=>1042, 8597=>1042, 8629=>658, 8656=>987, 8657=>603, 8658=>987, 8659=>603, 8660=>1042, 8704=>667, 8706=>556, 8707=>667, 8709=>556, + 8710=>711, 8711=>711, 8712=>713, 8713=>713, 8719=>823, 8720=>823, 8721=>804, 8722=>584, 8723=>584, 8727=>500, 8730=>542, 8733=>713, 8734=>713, 8736=>768, 8743=>603, 8744=>603, + 8745=>768, 8746=>768, 8747=>556, 8748=>796, 8749=>956, 8750=>556, 8756=>863, 8764=>549, 8766=>584, 8769=>584, 8770=>584, 8771=>584, 8777=>636, 8800=>548, 8804=>584, 8805=>584, + 8853=>768, 8854=>768, 8855=>768, 8869=>658, 8960=>823, 9674=>489, 9834=>555, 12289=>1000, 12290=>1000, 12291=>1000, 12293=>1000, 12295=>1000, 12296=>1000, 12297=>1000, 12298=>1000, 12299=>1000, + 12300=>1000, 12301=>1000, 12302=>1000, 12303=>1000, 12304=>1000, 12305=>1000, 12308=>1000, 12309=>1000, 12353=>1000, 12354=>1000, 12355=>1000, 12356=>1000, 12357=>1000, 12358=>1000, 12359=>1000, 12360=>1000, + 12361=>1000, 12362=>1000, 12363=>1000, 12364=>1000, 12365=>1000, 12366=>1000, 12367=>1000, 12368=>1000, 12369=>1000, 12370=>1000, 12371=>1000, 12372=>1000, 12373=>1000, 12374=>1000, 12375=>1000, 12376=>1000, + 12377=>1000, 12378=>1000, 12379=>1000, 12380=>1000, 12381=>1000, 12382=>1000, 12383=>1000, 12384=>1000, 12385=>1000, 12386=>1000, 12387=>1000, 12388=>1000, 12389=>1000, 12390=>1000, 12391=>1000, 12392=>1000, + 12393=>1000, 12394=>1000, 12395=>1000, 12396=>1000, 12397=>1000, 12398=>1000, 12399=>1000, 12400=>1000, 12401=>1000, 12402=>1000, 12403=>1000, 12404=>1000, 12405=>1000, 12406=>1000, 12407=>1000, 12408=>1000, + 12409=>1000, 12410=>1000, 12411=>1000, 12412=>1000, 12413=>1000, 12414=>1000, 12415=>1000, 12416=>1000, 12417=>1000, 12418=>1000, 12419=>1000, 12420=>1000, 12421=>1000, 12422=>1000, 12423=>1000, 12424=>1000, + 12425=>1000, 12426=>1000, 12427=>1000, 12428=>1000, 12429=>1000, 12430=>1000, 12431=>1000, 12432=>1000, 12433=>1000, 12434=>1000, 12435=>1000, 12441=>1000, 12443=>1000, 12449=>1000, 12450=>1000, 12451=>1000, + 12452=>1000, 12453=>1000, 12454=>1000, 12455=>1000, 12456=>1000, 12457=>1000, 12458=>1000, 12459=>1000, 12460=>1000, 12461=>1000, 12462=>1000, 12463=>1000, 12464=>1000, 12465=>1000, 12466=>1000, 12467=>1000, + 12468=>1000, 12469=>1000, 12470=>1000, 12471=>1000, 12472=>1000, 12473=>1000, 12474=>1000, 12475=>1000, 12476=>1000, 12477=>1000, 12478=>1000, 12479=>1000, 12480=>1000, 12481=>1000, 12482=>1000, 12483=>1000, + 12484=>1000, 12485=>1000, 12486=>1000, 12487=>1000, 12488=>1000, 12489=>1000, 12490=>1000, 12491=>1000, 12492=>1000, 12493=>1000, 12494=>1000, 12495=>1000, 12496=>1000, 12497=>1000, 12498=>1000, 12499=>1000, + 12500=>1000, 12501=>1000, 12502=>1000, 12503=>1000, 12504=>1000, 12505=>1000, 12506=>1000, 12507=>1000, 12508=>1000, 12509=>1000, 12510=>1000, 12511=>1000, 12512=>1000, 12513=>1000, 12514=>1000, 12515=>1000, + 12516=>1000, 12517=>1000, 12518=>1000, 12519=>1000, 12520=>1000, 12521=>1000, 12522=>1000, 12523=>1000, 12524=>1000, 12525=>1000, 12526=>1000, 12527=>1000, 12528=>1000, 12529=>1000, 12530=>1000, 12531=>1000, + 12532=>1000, 12533=>1000, 12534=>1000, 12535=>1000, 12536=>1000, 12537=>1000, 12538=>1000, 12539=>278, 12540=>1000, 12541=>1000, 12542=>1000, 63033=>556, 63034=>556, 63035=>556, 63036=>556, 63037=>556, + 63038=>556, 63039=>556, 63040=>556, 63041=>556, 63166=>222, 63171=>333, 63196=>556, 64256=>556, 64257=>500, 64258=>500, 64259=>778, 64260=>778, 64261=>556, 64262=>778, 64285=>200, 64286=>305, + 64287=>400, 64288=>587, 64289=>890, 64290=>848, 64291=>872, 64292=>800, 64293=>850, 64294=>873, 64295=>797, 64296=>937, 64297=>584, 64298=>776, 64299=>776, 64300=>776, 64301=>776, 64302=>640, + 64303=>640, 64304=>640, 64305=>591, 64306=>466, 64307=>598, 64308=>622, 64309=>262, 64310=>351, 64312=>608, 64313=>270, 64314=>526, 64315=>550, 64316=>600, 64318=>621, 64320=>378, 64321=>607, + 64323=>575, 64324=>568, 64326=>590, 64327=>606, 64328=>547, 64329=>776, 64330=>687, 64331=>212, 64332=>591, 64333=>550, 64334=>568, 64335=>640, 65533=>788} + font[:enc]=''; + font[:diff]=''; + font[:file]='FreeSans.z'; + font[:ctg]='FreeSans.ctg.z'; + font[:originalsize]=264072; +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/freesansb.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/freesansb.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,79 @@ +TCPDFFontDescriptor.define('freesansb') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='FreeSansBold'; + font[:desc]={'Ascent'=>1159,'Descent'=>-355,'CapHeight'=>1159,'Flags'=>32,'FontBBox'=>'[-459 -355 1300 1159]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600}; + font[:up]=-155; + font[:ut]=69; + font[:cw]={ + 13=>333, 32=>278, 33=>333, 34=>474, 35=>556, 36=>556, 37=>889, 38=>722, 39=>238, 40=>333, 41=>333, 42=>389, 43=>584, 44=>278, 45=>333, 46=>278, + 47=>278, 48=>556, 49=>556, 50=>556, 51=>556, 52=>556, 53=>556, 54=>556, 55=>556, 56=>556, 57=>556, 58=>333, 59=>333, 60=>584, 61=>584, 62=>584, + 63=>611, 64=>975, 65=>722, 66=>722, 67=>722, 68=>722, 69=>667, 70=>611, 71=>778, 72=>722, 73=>278, 74=>556, 75=>722, 76=>611, 77=>833, 78=>722, + 79=>778, 80=>667, 81=>778, 82=>722, 83=>667, 84=>611, 85=>722, 86=>667, 87=>944, 88=>667, 89=>667, 90=>611, 91=>333, 92=>278, 93=>333, 94=>584, + 95=>556, 96=>333, 97=>556, 98=>611, 99=>556, 100=>611, 101=>556, 102=>333, 103=>611, 104=>611, 105=>278, 106=>278, 107=>556, 108=>278, 109=>889, 110=>611, + 111=>611, 112=>611, 113=>611, 114=>389, 115=>556, 116=>333, 117=>611, 118=>556, 119=>778, 120=>556, 121=>556, 122=>500, 123=>389, 124=>280, 125=>389, 126=>584, + 8364=>556, 1027=>611, 8218=>278, 402=>556, 8222=>500, 8230=>1000, 8224=>556, 8225=>556, 710=>333, 8240=>1000, 352=>667, 8249=>333, 338=>1000, 1036=>722, 381=>611, 1039=>722, + 8216=>278, 8217=>278, 8220=>500, 8221=>500, 8226=>350, 8211=>556, 8212=>1000, 732=>333, 8482=>1000, 353=>556, 8250=>333, 339=>944, 1116=>573, 382=>500, 376=>667, 161=>333, + 162=>556, 163=>556, 164=>556, 165=>556, 166=>280, 167=>556, 168=>333, 169=>737, 170=>370, 171=>556, 172=>584, 174=>737, 175=>333, 176=>606, 177=>584, 178=>351, + 179=>351, 180=>333, 181=>611, 182=>556, 183=>278, 184=>333, 185=>351, 186=>365, 187=>556, 188=>869, 189=>869, 190=>869, 191=>611, 192=>722, 193=>722, 194=>722, + 195=>722, 196=>722, 197=>722, 198=>1000, 199=>722, 200=>667, 201=>667, 202=>667, 203=>667, 204=>278, 205=>278, 206=>278, 207=>278, 208=>722, 209=>722, 210=>778, + 211=>778, 212=>778, 213=>778, 214=>778, 215=>584, 216=>778, 217=>722, 218=>722, 219=>722, 220=>722, 221=>667, 222=>667, 223=>611, 224=>556, 225=>556, 226=>556, + 227=>556, 228=>556, 229=>556, 230=>889, 231=>556, 232=>556, 233=>556, 234=>556, 235=>556, 236=>278, 237=>278, 238=>278, 239=>278, 240=>611, 241=>611, 242=>611, + 243=>611, 244=>611, 245=>611, 246=>611, 247=>584, 248=>611, 249=>611, 250=>611, 251=>611, 252=>611, 253=>556, 254=>611, 255=>556, 256=>722, 257=>556, 258=>722, + 259=>556, 260=>722, 261=>556, 262=>722, 263=>556, 264=>722, 265=>556, 266=>722, 267=>556, 268=>722, 269=>556, 270=>722, 271=>611, 272=>722, 273=>611, 274=>667, + 275=>556, 276=>667, 277=>556, 278=>667, 279=>556, 280=>667, 281=>556, 282=>667, 283=>556, 284=>778, 285=>611, 286=>778, 287=>611, 288=>778, 289=>611, 290=>778, + 291=>611, 292=>722, 293=>611, 294=>722, 295=>611, 296=>278, 297=>278, 298=>278, 299=>278, 300=>278, 301=>278, 302=>278, 303=>278, 304=>278, 305=>278, 306=>808, + 307=>492, 308=>556, 309=>278, 310=>722, 311=>556, 312=>573, 313=>611, 314=>278, 315=>611, 316=>278, 317=>611, 318=>278, 319=>611, 320=>556, 321=>611, 322=>278, + 323=>722, 324=>611, 325=>722, 326=>611, 327=>722, 328=>611, 329=>611, 330=>722, 331=>611, 332=>778, 333=>611, 334=>778, 335=>611, 336=>778, 337=>611, 340=>722, + 341=>389, 342=>722, 343=>389, 344=>722, 345=>389, 346=>667, 347=>556, 348=>667, 349=>556, 350=>667, 351=>556, 354=>611, 355=>333, 356=>611, 357=>333, 358=>611, + 359=>333, 360=>722, 361=>611, 362=>722, 363=>611, 364=>722, 365=>611, 366=>722, 367=>611, 368=>722, 369=>611, 370=>722, 371=>611, 372=>944, 373=>778, 374=>667, + 375=>556, 377=>611, 378=>500, 379=>611, 380=>500, 383=>333, 452=>1333, 453=>1222, 454=>1111, 455=>1167, 456=>889, 457=>556, 458=>1278, 459=>1000, 460=>889, 461=>722, + 462=>556, 463=>278, 464=>278, 465=>778, 466=>611, 467=>722, 468=>611, 469=>722, 470=>611, 471=>722, 472=>611, 473=>722, 474=>611, 475=>722, 476=>611, 478=>722, + 479=>556, 482=>1000, 483=>889, 486=>778, 487=>611, 488=>722, 489=>556, 490=>778, 491=>611, 492=>778, 493=>611, 497=>1333, 498=>1222, 499=>1111, 504=>722, 505=>611, + 506=>722, 507=>556, 508=>1000, 509=>889, 510=>778, 511=>611, 514=>722, 515=>556, 518=>667, 519=>556, 522=>278, 523=>278, 526=>778, 527=>611, 530=>722, 531=>389, + 534=>722, 535=>611, 536=>667, 537=>556, 538=>611, 539=>333, 711=>333, 728=>333, 729=>333, 730=>333, 731=>333, 733=>333, 884=>379, 885=>379, 890=>332, 894=>333, + 900=>325, 901=>658, 902=>761, 903=>474, 904=>706, 905=>733, 906=>285, 908=>785, 910=>823, 911=>819, 913=>722, 914=>722, 915=>642, 916=>726, 917=>667, 918=>611, + 919=>722, 920=>810, 921=>278, 922=>722, 923=>744, 924=>860, 925=>714, 926=>690, 927=>822, 928=>781, 929=>698, 931=>688, 932=>688, 933=>804, 934=>777, 935=>783, + 936=>805, 937=>780, 938=>278, 939=>804, 940=>660, 941=>559, 942=>560, 943=>356, 944=>575, 945=>656, 946=>576, 947=>591, 948=>620, 949=>570, 950=>522, 951=>586, + 952=>586, 953=>346, 954=>576, 955=>620, 956=>667, 957=>564, 958=>530, 959=>610, 960=>721, 961=>626, 962=>595, 963=>676, 964=>592, 965=>575, 966=>801, 967=>632, + 968=>722, 969=>800, 970=>346, 971=>575, 972=>599, 973=>567, 974=>1125, 1024=>667, 1025=>709, 1026=>790, 1028=>722, 1029=>667, 1030=>278, 1031=>278, 1032=>556, 1033=>1110, + 1034=>1113, 1035=>790, 1037=>726, 1038=>718, 1040=>722, 1041=>722, 1042=>722, 1043=>611, 1044=>900, 1045=>709, 1046=>1093, 1047=>672, 1048=>757, 1049=>757, 1050=>750, 1051=>729, + 1052=>874, 1053=>753, 1054=>778, 1055=>753, 1056=>671, 1057=>722, 1058=>611, 1059=>718, 1060=>892, 1061=>667, 1062=>816, 1063=>685, 1064=>1057, 1065=>1183, 1066=>928, 1067=>949, + 1068=>687, 1069=>722, 1070=>1109, 1071=>698, 1072=>556, 1073=>606, 1074=>572, 1075=>454, 1076=>685, 1077=>556, 1078=>809, 1079=>546, 1080=>615, 1081=>615, 1082=>573, 1083=>577, + 1084=>666, 1085=>603, 1086=>611, 1087=>603, 1088=>611, 1089=>556, 1090=>454, 1091=>556, 1092=>957, 1093=>556, 1094=>652, 1095=>578, 1096=>886, 1097=>968, 1098=>693, 1099=>811, + 1100=>562, 1101=>564, 1102=>908, 1103=>596, 1104=>556, 1105=>556, 1106=>606, 1107=>454, 1108=>556, 1109=>556, 1110=>278, 1111=>278, 1112=>278, 1113=>900, 1114=>611, 1115=>606, + 1117=>608, 1118=>556, 1119=>608, 1164=>687, 1165=>562, 1166=>667, 1167=>611, 1168=>611, 1169=>454, 1170=>611, 1171=>454, 1172=>611, 1173=>454, 1174=>1093, 1175=>809, 1176=>672, + 1177=>546, 1178=>722, 1179=>573, 1180=>722, 1181=>573, 1182=>722, 1183=>573, 1184=>722, 1185=>573, 1186=>722, 1187=>608, 1188=>722, 1189=>608, 1190=>722, 1191=>608, 1192=>722, + 1193=>556, 1194=>722, 1195=>556, 1196=>611, 1197=>454, 1198=>667, 1199=>556, 1200=>667, 1201=>556, 1202=>667, 1203=>556, 1204=>814, 1205=>685, 1206=>675, 1207=>580, 1208=>675, + 1209=>580, 1210=>675, 1211=>580, 1212=>722, 1213=>556, 1214=>722, 1215=>556, 1216=>278, 1217=>1093, 1218=>809, 1219=>722, 1220=>573, 1223=>722, 1224=>608, 1227=>675, 1228=>580, + 1232=>722, 1233=>556, 1234=>722, 1235=>556, 1236=>1000, 1237=>889, 1238=>709, 1239=>556, 1240=>722, 1241=>556, 1242=>722, 1243=>556, 1244=>1093, 1245=>809, 1246=>672, 1247=>546, + 1248=>672, 1249=>546, 1250=>757, 1251=>615, 1252=>757, 1253=>615, 1254=>778, 1255=>611, 1256=>778, 1257=>611, 1258=>778, 1259=>611, 1260=>722, 1261=>564, 1262=>718, 1263=>556, + 1264=>718, 1265=>556, 1266=>718, 1267=>556, 1268=>685, 1269=>578, 1272=>949, 1273=>811, 1456=>82, 1457=>347, 1458=>341, 1459=>341, 1460=>82, 1461=>211, 1462=>211, 1463=>200, + 1464=>200, 1465=>82, 1467=>341, 1468=>82, 1469=>82, 1470=>516, 1471=>200, 1472=>297, 1473=>1038, 1474=>1038, 1475=>333, 1476=>82, 1488=>714, 1489=>651, 1490=>557, 1491=>638, + 1492=>682, 1493=>297, 1494=>443, 1495=>682, 1496=>670, 1497=>284, 1498=>590, 1499=>595, 1500=>667, 1501=>683, 1502=>704, 1503=>297, 1504=>429, 1505=>670, 1506=>653, 1507=>661, + 1508=>660, 1509=>616, 1510=>671, 1511=>672, 1512=>600, 1513=>840, 1514=>756, 1520=>554, 1521=>550, 1522=>542, 1523=>238, 1524=>474, 1559=>556, 1560=>778, 1561=>944, 1562=>611, + 1563=>278, 1564=>889, 1569=>844, 1576=>923, 1578=>922, 1579=>922, 1581=>649, 1582=>704, 1587=>1221, 7936=>656, 7937=>656, 7938=>656, 7939=>656, 7940=>656, 7941=>656, 7942=>656, + 7943=>656, 7944=>722, 7945=>722, 7946=>722, 7947=>722, 7948=>722, 7949=>722, 7950=>722, 7951=>722, 7952=>570, 7953=>570, 7954=>570, 7955=>570, 7956=>570, 7957=>570, 7960=>667, + 7961=>667, 7962=>667, 7963=>667, 7964=>667, 7965=>667, 7968=>586, 7969=>586, 7970=>586, 7971=>586, 7972=>586, 7973=>586, 7974=>586, 7975=>586, 7976=>722, 7977=>722, 7978=>722, + 7979=>722, 7980=>722, 7981=>722, 7982=>722, 7983=>722, 7984=>346, 7985=>346, 7986=>346, 7987=>346, 7988=>346, 7989=>346, 7990=>346, 7991=>346, 7992=>278, 7993=>278, 7994=>278, + 7995=>278, 7996=>278, 7997=>278, 7998=>278, 7999=>278, 8000=>610, 8001=>610, 8002=>610, 8003=>610, 8004=>610, 8005=>610, 8008=>822, 8009=>822, 8010=>822, 8011=>822, 8012=>822, + 8013=>822, 8016=>575, 8017=>575, 8018=>575, 8019=>575, 8020=>575, 8021=>575, 8022=>575, 8023=>575, 8025=>804, 8027=>804, 8029=>804, 8031=>804, 8032=>800, 8033=>800, 8034=>800, + 8035=>800, 8036=>800, 8037=>800, 8038=>800, 8039=>800, 8040=>780, 8041=>780, 8042=>780, 8043=>780, 8044=>780, 8045=>780, 8046=>780, 8047=>780, 8048=>656, 8049=>656, 8050=>570, + 8051=>570, 8052=>586, 8053=>586, 8054=>346, 8055=>346, 8056=>610, 8057=>610, 8058=>575, 8059=>575, 8060=>800, 8061=>800, 8064=>656, 8065=>656, 8066=>656, 8067=>656, 8068=>656, + 8069=>656, 8070=>656, 8071=>656, 8072=>968, 8073=>968, 8074=>968, 8075=>968, 8076=>968, 8077=>968, 8078=>968, 8079=>968, 8080=>586, 8081=>586, 8082=>586, 8083=>586, 8084=>586, + 8085=>586, 8086=>586, 8087=>586, 8088=>968, 8089=>968, 8090=>968, 8091=>968, 8092=>968, 8093=>968, 8094=>968, 8095=>968, 8096=>800, 8097=>800, 8098=>800, 8099=>800, 8100=>800, + 8101=>800, 8102=>800, 8103=>800, 8104=>1026, 8105=>1026, 8106=>1026, 8107=>1026, 8108=>1026, 8109=>1026, 8110=>1026, 8111=>1026, 8112=>656, 8113=>656, 8114=>656, 8115=>656, 8116=>660, + 8118=>656, 8119=>656, 8120=>722, 8121=>722, 8122=>722, 8123=>722, 8124=>968, 8125=>278, 8126=>346, 8127=>278, 8128=>278, 8129=>333, 8130=>586, 8131=>586, 8132=>560, 8134=>586, + 8135=>586, 8136=>667, 8137=>667, 8138=>722, 8139=>722, 8140=>968, 8141=>492, 8142=>489, 8143=>394, 8144=>346, 8145=>346, 8146=>346, 8147=>346, 8150=>346, 8151=>346, 8152=>278, + 8153=>278, 8154=>278, 8155=>278, 8157=>481, 8158=>589, 8159=>333, 8160=>575, 8161=>575, 8162=>575, 8163=>575, 8164=>626, 8165=>626, 8166=>575, 8167=>575, 8168=>804, 8169=>804, + 8170=>804, 8171=>804, 8172=>698, 8173=>333, 8174=>333, 8175=>333, 8178=>800, 8179=>800, 8180=>1125, 8182=>800, 8183=>800, 8184=>822, 8185=>822, 8186=>780, 8187=>780, 8188=>1111, + 8189=>333, 8190=>278, 8260=>167, 8308=>351, 8321=>351, 8322=>351, 8323=>351, 8324=>351, 8362=>1049, 8543=>869, 8706=>490, 8710=>729, 8721=>711, 8722=>584, 8730=>542, 8800=>548, + 8804=>584, 8805=>584, 9674=>489, 63033=>556, 63034=>556, 63035=>556, 63036=>556, 63037=>556, 63038=>556, 63039=>556, 63040=>556, 63041=>556, 63171=>333, 63196=>556, 64257=>611, 64258=>611, + 64285=>284, 64286=>305, 64287=>542, 64288=>653, 64289=>964, 64290=>888, 64291=>932, 64292=>845, 64293=>917, 64294=>933, 64295=>850, 64296=>1006, 64297=>584, 64298=>840, 64299=>840, 64300=>840, + 64301=>840, 64302=>714, 64303=>714, 64304=>714, 64305=>651, 64306=>557, 64307=>638, 64308=>682, 64309=>367, 64310=>443, 64312=>670, 64313=>354, 64314=>590, 64315=>595, 64316=>667, 64318=>704, + 64320=>429, 64321=>670, 64323=>661, 64324=>660, 64326=>671, 64327=>672, 64328=>600, 64329=>840, 64330=>756, 64331=>297, 64332=>651, 64333=>595, 64334=>660, 64335=>714, 65182=>636} + font[:enc]=''; + font[:diff]=''; + font[:file]='FreeSansBold.z'; + font[:ctg]='FreeSansBold.ctg.z'; + font[:originalsize]=91432; +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/freesansbi.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/freesansbi.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,76 @@ +TCPDFFontDescriptor.define('freesansbi') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='FreeSansBoldOblique'; + font[:desc]={'Ascent'=>979,'Descent'=>-309,'CapHeight'=>979,'Flags'=>96,'FontBBox'=>'[-379 -309 1283 979]','ItalicAngle'=>-12,'StemV'=>120,'MissingWidth'=>600}; + font[:up]=-111; + font[:ut]=69; + font[:cw]={ + 13=>333, 32=>278, 33=>333, 34=>474, 35=>556, 36=>556, 37=>889, 38=>722, 39=>238, 40=>333, 41=>333, 42=>389, 43=>584, 44=>278, 45=>333, 46=>278, + 47=>278, 48=>556, 49=>556, 50=>556, 51=>556, 52=>556, 53=>556, 54=>556, 55=>556, 56=>556, 57=>556, 58=>333, 59=>333, 60=>584, 61=>584, 62=>584, + 63=>611, 64=>975, 65=>722, 66=>722, 67=>722, 68=>722, 69=>667, 70=>611, 71=>778, 72=>722, 73=>278, 74=>556, 75=>722, 76=>611, 77=>833, 78=>722, + 79=>778, 80=>667, 81=>778, 82=>722, 83=>667, 84=>611, 85=>722, 86=>667, 87=>944, 88=>667, 89=>667, 90=>611, 91=>333, 92=>278, 93=>333, 94=>584, + 95=>556, 96=>333, 97=>556, 98=>611, 99=>556, 100=>611, 101=>556, 102=>333, 103=>611, 104=>611, 105=>278, 106=>278, 107=>556, 108=>278, 109=>889, 110=>611, + 111=>611, 112=>611, 113=>611, 114=>389, 115=>556, 116=>333, 117=>611, 118=>556, 119=>778, 120=>556, 121=>556, 122=>500, 123=>389, 124=>280, 125=>389, 126=>584, + 8364=>556, 1027=>611, 8218=>278, 402=>556, 8222=>500, 8230=>1000, 8224=>556, 8225=>556, 710=>333, 8240=>1000, 352=>667, 8249=>333, 338=>1000, 1036=>722, 381=>611, 1039=>722, + 8216=>278, 8217=>278, 8220=>500, 8221=>500, 8226=>350, 8211=>556, 8212=>1000, 732=>333, 8482=>1000, 353=>556, 8250=>333, 339=>944, 1116=>556, 382=>500, 376=>667, 161=>333, + 162=>556, 163=>556, 164=>556, 165=>556, 166=>280, 167=>556, 168=>333, 169=>737, 170=>370, 171=>556, 172=>584, 174=>737, 175=>333, 176=>606, 177=>584, 178=>444, + 179=>444, 180=>333, 181=>611, 182=>556, 183=>278, 184=>333, 185=>444, 186=>365, 187=>556, 188=>1055, 189=>1055, 190=>1055, 191=>611, 192=>722, 193=>722, 194=>722, + 195=>722, 196=>722, 197=>722, 198=>1000, 199=>722, 200=>667, 201=>667, 202=>667, 203=>667, 204=>278, 205=>278, 206=>278, 207=>278, 208=>722, 209=>722, 210=>778, + 211=>778, 212=>778, 213=>778, 214=>778, 215=>584, 216=>778, 217=>722, 218=>722, 219=>722, 220=>722, 221=>667, 222=>667, 223=>611, 224=>556, 225=>556, 226=>556, + 227=>556, 228=>556, 229=>556, 230=>889, 231=>556, 232=>556, 233=>556, 234=>556, 235=>556, 236=>278, 237=>278, 238=>278, 239=>278, 240=>611, 241=>611, 242=>611, + 243=>611, 244=>611, 245=>611, 246=>611, 247=>584, 248=>611, 249=>611, 250=>611, 251=>611, 252=>611, 253=>556, 254=>611, 255=>556, 256=>722, 257=>556, 258=>722, + 259=>556, 260=>722, 261=>556, 262=>722, 263=>556, 264=>722, 265=>556, 266=>722, 267=>556, 268=>722, 269=>556, 270=>722, 271=>722, 272=>722, 273=>611, 274=>667, + 275=>556, 276=>667, 277=>556, 278=>667, 279=>556, 280=>667, 281=>556, 282=>667, 283=>556, 284=>778, 285=>611, 286=>778, 287=>611, 288=>778, 289=>611, 290=>778, + 291=>611, 292=>722, 293=>611, 294=>722, 295=>611, 296=>278, 297=>278, 298=>278, 299=>278, 300=>278, 301=>278, 302=>278, 303=>268, 304=>278, 305=>278, 306=>278, + 307=>278, 308=>556, 309=>278, 310=>722, 311=>556, 312=>529, 313=>611, 314=>278, 315=>611, 316=>278, 317=>611, 318=>384, 319=>611, 320=>556, 321=>611, 322=>278, + 323=>722, 324=>611, 325=>722, 326=>611, 327=>722, 328=>611, 329=>611, 330=>722, 331=>611, 332=>778, 333=>611, 334=>778, 335=>611, 336=>778, 337=>611, 340=>722, + 341=>389, 342=>722, 343=>389, 344=>722, 345=>389, 346=>667, 347=>556, 348=>667, 349=>556, 350=>667, 351=>556, 354=>611, 355=>333, 356=>611, 357=>404, 358=>611, + 359=>333, 360=>722, 361=>611, 362=>722, 363=>611, 364=>722, 365=>611, 366=>722, 367=>611, 368=>722, 369=>611, 370=>722, 371=>611, 372=>944, 373=>778, 374=>667, + 375=>556, 377=>611, 378=>500, 379=>611, 380=>500, 383=>333, 536=>667, 537=>556, 538=>611, 539=>333, 711=>333, 728=>333, 729=>333, 730=>333, 731=>333, 733=>333, + 768=>0, 769=>0, 770=>0, 771=>0, 772=>0, 774=>0, 775=>0, 776=>0, 778=>0, 779=>0, 780=>0, 783=>0, 785=>0, 787=>0, 788=>0, 884=>208, + 885=>247, 890=>364, 894=>333, 900=>308, 901=>446, 902=>688, 903=>418, 904=>642, 905=>743, 906=>228, 908=>754, 910=>736, 911=>743, 912=>346, 913=>764, 914=>688, + 915=>642, 916=>744, 917=>710, 918=>688, 919=>743, 920=>810, 921=>296, 922=>744, 923=>744, 924=>860, 925=>714, 926=>690, 927=>822, 928=>781, 929=>698, 931=>688, + 932=>688, 933=>744, 934=>777, 935=>783, 936=>805, 937=>780, 938=>296, 939=>744, 940=>640, 941=>530, 942=>597, 943=>339, 944=>575, 945=>656, 946=>576, 947=>591, + 948=>620, 949=>570, 950=>522, 951=>586, 952=>586, 953=>346, 954=>576, 955=>620, 956=>667, 957=>564, 958=>530, 959=>610, 960=>721, 961=>626, 962=>595, 963=>676, + 964=>592, 965=>575, 966=>801, 967=>632, 968=>722, 969=>800, 970=>346, 971=>575, 972=>609, 973=>604, 974=>769, 1024=>666, 1025=>666, 1026=>790, 1028=>722, 1029=>667, + 1030=>278, 1031=>278, 1032=>556, 1033=>1110, 1034=>1088, 1035=>790, 1037=>722, 1038=>718, 1040=>722, 1041=>722, 1042=>723, 1043=>611, 1044=>918, 1045=>666, 1046=>1054, 1047=>659, + 1048=>722, 1049=>722, 1050=>720, 1051=>722, 1052=>843, 1053=>722, 1054=>778, 1055=>722, 1056=>649, 1057=>837, 1058=>611, 1059=>698, 1060=>902, 1061=>664, 1062=>730, 1063=>671, + 1064=>1101, 1065=>1179, 1066=>816, 1067=>939, 1068=>639, 1069=>737, 1070=>1080, 1071=>690, 1072=>554, 1073=>611, 1074=>621, 1075=>475, 1076=>804, 1077=>552, 1078=>775, 1079=>556, + 1080=>636, 1081=>636, 1082=>529, 1083=>608, 1084=>697, 1085=>636, 1086=>611, 1087=>636, 1088=>611, 1089=>554, 1090=>454, 1091=>552, 1092=>989, 1093=>554, 1094=>690, 1095=>606, + 1096=>934, 1097=>987, 1098=>741, 1099=>839, 1100=>619, 1101=>575, 1102=>908, 1103=>636, 1104=>552, 1105=>552, 1106=>606, 1107=>454, 1108=>556, 1109=>556, 1110=>278, 1111=>278, + 1112=>278, 1113=>900, 1114=>611, 1115=>606, 1117=>636, 1118=>556, 1119=>636, 1164=>639, 1165=>619, 1166=>649, 1167=>611, 1168=>611, 1169=>454, 1170=>611, 1171=>475, 1172=>611, + 1173=>475, 1174=>1054, 1175=>775, 1176=>659, 1177=>556, 1178=>720, 1179=>529, 1180=>720, 1181=>529, 1182=>720, 1183=>529, 1184=>720, 1185=>529, 1186=>722, 1187=>636, 1188=>722, + 1189=>636, 1190=>722, 1191=>636, 1192=>837, 1193=>554, 1194=>837, 1195=>554, 1196=>611, 1197=>454, 1198=>667, 1199=>556, 1200=>667, 1201=>556, 1202=>664, 1203=>554, 1204=>730, + 1205=>690, 1206=>671, 1207=>606, 1208=>671, 1209=>606, 1210=>671, 1211=>606, 1212=>837, 1213=>554, 1214=>837, 1215=>554, 1216=>278, 1217=>1054, 1218=>775, 1219=>720, 1220=>529, + 1223=>722, 1224=>636, 1227=>671, 1228=>606, 1232=>722, 1233=>554, 1234=>722, 1235=>554, 1236=>1000, 1237=>889, 1238=>666, 1239=>552, 1240=>837, 1241=>554, 1242=>837, 1243=>554, + 1244=>1054, 1245=>775, 1246=>659, 1247=>556, 1248=>659, 1249=>556, 1250=>722, 1251=>636, 1252=>722, 1253=>636, 1254=>778, 1255=>611, 1256=>778, 1257=>611, 1258=>778, 1259=>611, + 1260=>737, 1261=>575, 1262=>698, 1263=>552, 1264=>698, 1265=>552, 1266=>698, 1267=>552, 1268=>671, 1269=>606, 1272=>939, 1273=>839, 1456=>82, 1457=>347, 1458=>341, 1459=>341, + 1460=>82, 1461=>211, 1462=>211, 1463=>200, 1464=>200, 1465=>82, 1467=>341, 1468=>82, 1469=>82, 1470=>516, 1471=>200, 1472=>297, 1473=>1038, 1474=>1038, 1475=>333, 1476=>82, + 1488=>714, 1489=>651, 1490=>557, 1491=>638, 1492=>682, 1493=>297, 1494=>443, 1495=>682, 1496=>670, 1497=>284, 1498=>590, 1499=>595, 1500=>667, 1501=>683, 1502=>704, 1503=>297, + 1504=>429, 1505=>670, 1506=>653, 1507=>661, 1508=>660, 1509=>616, 1510=>671, 1511=>672, 1512=>600, 1513=>840, 1514=>756, 1520=>554, 1521=>550, 1522=>542, 1523=>238, 1524=>474, + 7936=>656, 7937=>656, 7938=>656, 7939=>656, 7940=>656, 7941=>656, 7942=>656, 7943=>656, 7944=>764, 7945=>764, 7946=>764, 7947=>764, 7948=>764, 7949=>764, 7950=>764, 7951=>764, + 7952=>570, 7953=>570, 7954=>570, 7955=>570, 7956=>570, 7957=>570, 7960=>710, 7961=>710, 7962=>710, 7963=>710, 7964=>710, 7965=>710, 7968=>586, 7969=>586, 7970=>586, 7971=>586, + 7972=>586, 7973=>586, 7974=>586, 7975=>586, 7976=>743, 7977=>743, 7978=>743, 7979=>743, 7980=>743, 7981=>743, 7982=>743, 7983=>743, 7984=>346, 7985=>346, 7986=>346, 7987=>346, + 7988=>346, 7989=>346, 7990=>346, 7991=>346, 7992=>296, 7993=>296, 7994=>296, 7995=>296, 7996=>296, 7997=>296, 7998=>296, 7999=>296, 8000=>610, 8001=>610, 8002=>610, 8003=>610, + 8004=>610, 8005=>610, 8008=>822, 8009=>822, 8010=>822, 8011=>822, 8012=>822, 8013=>822, 8016=>575, 8017=>575, 8018=>575, 8019=>575, 8020=>575, 8021=>575, 8022=>575, 8023=>575, + 8025=>744, 8027=>744, 8029=>744, 8031=>744, 8032=>800, 8033=>800, 8034=>800, 8035=>800, 8036=>800, 8037=>800, 8038=>800, 8039=>800, 8040=>780, 8041=>780, 8042=>780, 8043=>780, + 8044=>780, 8045=>780, 8046=>780, 8047=>780, 8048=>656, 8049=>656, 8050=>570, 8051=>570, 8052=>586, 8053=>586, 8054=>346, 8055=>346, 8056=>610, 8057=>610, 8058=>575, 8059=>575, + 8060=>800, 8061=>800, 8064=>656, 8065=>656, 8066=>656, 8067=>656, 8068=>656, 8069=>656, 8070=>656, 8071=>656, 8072=>1007, 8073=>1007, 8074=>1007, 8075=>1007, 8076=>1007, 8077=>1007, + 8078=>1007, 8079=>1007, 8080=>586, 8081=>586, 8082=>586, 8083=>586, 8084=>586, 8085=>586, 8086=>586, 8087=>586, 8088=>986, 8089=>986, 8090=>986, 8091=>986, 8092=>986, 8093=>986, + 8094=>986, 8095=>986, 8096=>800, 8097=>800, 8098=>800, 8099=>800, 8100=>800, 8101=>800, 8102=>800, 8103=>800, 8104=>1023, 8105=>1023, 8106=>1023, 8107=>1023, 8108=>1023, 8109=>1023, + 8110=>1023, 8111=>1023, 8112=>656, 8113=>656, 8114=>656, 8115=>656, 8116=>640, 8118=>656, 8119=>656, 8120=>764, 8121=>764, 8122=>764, 8123=>764, 8124=>1007, 8125=>278, 8126=>201, + 8127=>147, 8128=>278, 8129=>333, 8130=>586, 8131=>586, 8132=>597, 8134=>586, 8135=>586, 8136=>710, 8137=>710, 8138=>743, 8139=>743, 8140=>986, 8141=>402, 8142=>403, 8143=>147, + 8144=>346, 8145=>346, 8146=>346, 8147=>346, 8150=>346, 8151=>346, 8152=>296, 8153=>296, 8154=>296, 8155=>296, 8157=>434, 8158=>433, 8159=>333, 8160=>575, 8161=>575, 8162=>575, + 8163=>575, 8164=>626, 8165=>626, 8166=>575, 8167=>575, 8168=>744, 8169=>744, 8173=>333, 8174=>351, 8175=>303, 8182=>800, 8183=>800, 8184=>822, 8185=>822, 8186=>780, 8187=>780, + 8188=>1023, 8189=>333, 8190=>159, 8260=>167, 8263=>1222, 8264=>944, 8265=>944, 8362=>1049, 8706=>490, 8710=>729, 8721=>711, 8722=>584, 8730=>542, 8800=>584, 8804=>584, 8805=>584, + 9674=>489, 63033=>556, 63034=>556, 63035=>556, 63036=>556, 63037=>556, 63038=>556, 63039=>556, 63040=>556, 63041=>556, 63166=>278, 63171=>333, 63196=>556, 64256=>666, 64257=>611, 64258=>611, + 64259=>944, 64260=>944, 64261=>666, 64262=>889, 64285=>284, 64286=>305, 64287=>542, 64288=>653, 64289=>964, 64290=>888, 64291=>932, 64292=>845, 64293=>917, 64294=>933, 64295=>850, 64296=>1006, + 64297=>584, 64298=>840, 64299=>840, 64300=>840, 64301=>840, 64302=>714, 64303=>714, 64304=>714, 64305=>651, 64306=>557, 64307=>638, 64308=>682, 64309=>367, 64310=>443, 64312=>670, 64313=>354, + 64314=>590, 64315=>595, 64316=>667, 64318=>704, 64320=>429, 64321=>670, 64323=>661, 64324=>660, 64326=>671, 64327=>672, 64328=>600, 64329=>840, 64330=>756, 64331=>297, 64332=>651, 64333=>595, + 64334=>660, 64335=>714}; + font[:enc]=''; + font[:diff]=''; + font[:file]='FreeSansBoldOblique.z'; + font[:ctg]='FreeSansBoldOblique.ctg.z'; + font[:originalsize]=95508; +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/freesansi.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/freesansi.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,85 @@ +TCPDFFontDescriptor.define('freesansi') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='FreeSansOblique'; + font[:desc]={'Ascent'=>1141,'Descent'=>-419,'CapHeight'=>1141,'Flags'=>96,'FontBBox'=>'[-313 -419 1129 1141]','ItalicAngle'=>-12,'StemV'=>70,'MissingWidth'=>600}; + font[:up]=-151; + font[:ut]=50; + font[:cw]={ + 13=>333, 32=>278, 33=>278, 34=>355, 35=>556, 36=>556, 37=>889, 38=>667, 39=>191, 40=>333, 41=>333, 42=>389, 43=>584, 44=>278, 45=>333, 46=>278, + 47=>278, 48=>556, 49=>556, 50=>556, 51=>556, 52=>556, 53=>556, 54=>556, 55=>556, 56=>556, 57=>556, 58=>278, 59=>278, 60=>584, 61=>584, 62=>584, + 63=>556, 64=>1015, 65=>667, 66=>667, 67=>722, 68=>722, 69=>667, 70=>611, 71=>778, 72=>722, 73=>278, 74=>500, 75=>667, 76=>556, 77=>833, 78=>722, + 79=>778, 80=>667, 81=>778, 82=>722, 83=>667, 84=>611, 85=>722, 86=>667, 87=>944, 88=>667, 89=>667, 90=>611, 91=>278, 92=>278, 93=>278, 94=>469, + 95=>556, 96=>333, 97=>556, 98=>556, 99=>500, 100=>556, 101=>556, 102=>278, 103=>556, 104=>556, 105=>222, 106=>222, 107=>500, 108=>222, 109=>833, 110=>556, + 111=>556, 112=>556, 113=>556, 114=>333, 115=>500, 116=>278, 117=>556, 118=>500, 119=>722, 120=>500, 121=>500, 122=>500, 123=>334, 124=>260, 125=>334, 126=>584, + 8364=>556, 1027=>611, 8218=>222, 402=>556, 8222=>333, 8230=>1000, 8224=>556, 8225=>556, 710=>333, 8240=>1000, 352=>667, 8249=>333, 338=>1000, 1036=>667, 381=>611, 1039=>722, + 8216=>222, 8217=>222, 8220=>333, 8221=>333, 8226=>350, 8211=>556, 8212=>1000, 732=>333, 8482=>1000, 353=>500, 8250=>333, 339=>944, 1116=>500, 382=>500, 376=>667, 161=>333, + 162=>556, 163=>556, 164=>556, 165=>556, 166=>260, 167=>556, 168=>333, 169=>737, 170=>370, 171=>556, 172=>584, 173=>333, 174=>737, 175=>333, 176=>606, 177=>584, + 178=>390, 179=>390, 180=>333, 181=>556, 182=>537, 183=>278, 184=>333, 185=>390, 186=>365, 187=>556, 188=>947, 189=>947, 190=>947, 191=>611, 192=>667, 193=>667, + 194=>667, 195=>667, 196=>667, 197=>667, 198=>1000, 199=>722, 200=>667, 201=>667, 202=>667, 203=>667, 204=>278, 205=>278, 206=>278, 207=>278, 208=>722, 209=>722, + 210=>778, 211=>778, 212=>778, 213=>778, 214=>778, 215=>584, 216=>778, 217=>722, 218=>722, 219=>722, 220=>722, 221=>667, 222=>667, 223=>611, 224=>556, 225=>556, + 226=>556, 227=>556, 228=>556, 229=>556, 230=>889, 231=>500, 232=>556, 233=>556, 234=>556, 235=>556, 236=>278, 237=>278, 238=>278, 239=>278, 240=>556, 241=>556, + 242=>556, 243=>556, 244=>556, 245=>556, 246=>556, 247=>584, 248=>611, 249=>556, 250=>556, 251=>556, 252=>556, 253=>500, 254=>556, 255=>500, 256=>667, 257=>556, + 258=>667, 259=>556, 260=>667, 261=>556, 262=>722, 263=>500, 264=>722, 265=>500, 266=>722, 267=>500, 268=>722, 269=>500, 270=>722, 271=>650, 272=>722, 273=>556, + 274=>667, 275=>556, 276=>667, 277=>556, 278=>667, 279=>556, 280=>667, 281=>556, 282=>667, 283=>556, 284=>778, 285=>556, 286=>778, 287=>556, 288=>778, 289=>556, + 290=>778, 291=>527, 292=>722, 293=>556, 294=>722, 295=>556, 296=>278, 297=>278, 298=>278, 299=>222, 300=>278, 301=>278, 302=>278, 303=>222, 304=>278, 305=>278, + 306=>742, 307=>362, 308=>500, 309=>222, 310=>667, 311=>500, 312=>510, 313=>556, 314=>222, 315=>556, 316=>222, 317=>556, 318=>307, 319=>556, 320=>500, 321=>556, + 322=>222, 323=>722, 324=>556, 325=>722, 326=>556, 327=>722, 328=>556, 329=>556, 330=>722, 331=>556, 332=>778, 333=>556, 334=>778, 335=>556, 336=>778, 337=>556, + 340=>722, 341=>333, 342=>722, 343=>333, 344=>722, 345=>333, 346=>667, 347=>500, 348=>667, 349=>500, 350=>667, 351=>500, 354=>611, 355=>278, 356=>611, 357=>319, + 358=>611, 359=>278, 360=>722, 361=>556, 362=>722, 363=>556, 364=>722, 365=>556, 366=>722, 367=>556, 368=>722, 369=>556, 370=>722, 371=>556, 372=>944, 373=>722, + 374=>667, 375=>500, 377=>611, 378=>500, 379=>611, 380=>500, 383=>278, 461=>667, 462=>556, 463=>278, 464=>278, 465=>778, 466=>556, 467=>722, 468=>556, 469=>722, + 470=>556, 471=>722, 472=>556, 473=>722, 474=>556, 475=>722, 476=>556, 478=>667, 479=>556, 482=>1000, 483=>889, 486=>778, 487=>556, 488=>667, 489=>500, 490=>778, + 491=>556, 492=>778, 493=>556, 496=>222, 500=>778, 501=>556, 504=>722, 505=>556, 506=>667, 507=>556, 508=>1000, 509=>889, 510=>778, 511=>611, 512=>667, 513=>556, + 514=>667, 515=>556, 516=>667, 517=>556, 518=>667, 519=>556, 520=>278, 521=>278, 522=>278, 523=>278, 524=>778, 525=>556, 526=>778, 527=>556, 528=>722, 529=>333, + 530=>722, 531=>333, 532=>722, 533=>556, 534=>722, 535=>556, 536=>667, 537=>500, 538=>611, 539=>278, 711=>333, 728=>333, 729=>333, 730=>333, 731=>333, 733=>333, + 768=>0, 769=>0, 770=>0, 771=>0, 772=>0, 774=>0, 775=>0, 776=>0, 778=>0, 779=>0, 783=>0, 785=>0, 787=>0, 788=>0, 884=>199, 885=>199, + 890=>332, 894=>278, 900=>291, 901=>624, 902=>659, 903=>358, 904=>657, 905=>678, 906=>183, 908=>729, 910=>699, 911=>747, 912=>286, 913=>684, 914=>628, 915=>582, + 916=>684, 917=>650, 918=>628, 919=>683, 920=>750, 921=>236, 922=>684, 923=>684, 924=>800, 925=>654, 926=>630, 927=>750, 928=>721, 929=>638, 931=>628, 932=>628, + 933=>684, 934=>717, 935=>723, 936=>745, 937=>720, 938=>236, 939=>684, 940=>593, 941=>519, 942=>595, 943=>271, 944=>515, 945=>596, 946=>516, 947=>531, 948=>560, + 949=>510, 950=>462, 951=>526, 952=>526, 953=>286, 954=>516, 955=>560, 956=>607, 957=>504, 958=>470, 959=>550, 960=>661, 961=>566, 962=>535, 963=>616, 964=>532, + 965=>515, 966=>741, 967=>572, 968=>662, 969=>740, 970=>286, 971=>515, 972=>535, 973=>503, 974=>725, 1024=>667, 1025=>667, 1026=>766, 1028=>722, 1029=>667, 1030=>278, + 1031=>278, 1032=>500, 1033=>968, 1034=>1173, 1035=>766, 1037=>731, 1038=>650, 1040=>667, 1041=>639, 1042=>667, 1043=>611, 1044=>816, 1045=>667, 1046=>897, 1047=>652, 1048=>731, + 1049=>731, 1050=>664, 1051=>646, 1052=>833, 1053=>722, 1054=>778, 1055=>722, 1056=>667, 1057=>722, 1058=>611, 1059=>530, 1060=>891, 1061=>667, 1062=>722, 1063=>642, 1064=>836, + 1065=>837, 1066=>866, 1067=>886, 1068=>698, 1069=>717, 1070=>1079, 1071=>691, 1072=>556, 1073=>556, 1074=>538, 1075=>430, 1076=>640, 1077=>556, 1078=>818, 1079=>495, 1080=>560, + 1081=>560, 1082=>510, 1083=>556, 1084=>621, 1085=>561, 1086=>556, 1087=>560, 1088=>556, 1089=>500, 1090=>400, 1091=>500, 1092=>916, 1093=>500, 1094=>560, 1095=>497, 1096=>695, + 1097=>695, 1098=>640, 1099=>734, 1100=>523, 1101=>534, 1102=>788, 1103=>564, 1104=>556, 1105=>556, 1106=>568, 1107=>430, 1108=>500, 1109=>500, 1110=>222, 1111=>278, 1112=>222, + 1113=>840, 1114=>850, 1115=>568, 1117=>560, 1118=>500, 1119=>560, 1164=>698, 1165=>523, 1166=>667, 1167=>556, 1168=>611, 1169=>430, 1170=>611, 1171=>430, 1172=>611, 1173=>430, + 1174=>897, 1175=>818, 1176=>652, 1177=>495, 1178=>664, 1179=>510, 1180=>664, 1181=>510, 1182=>664, 1183=>510, 1184=>664, 1185=>510, 1186=>722, 1187=>561, 1188=>722, 1189=>561, + 1190=>722, 1191=>560, 1192=>722, 1193=>495, 1194=>722, 1195=>495, 1196=>611, 1197=>400, 1198=>667, 1199=>500, 1200=>667, 1201=>500, 1202=>665, 1203=>496, 1204=>722, 1205=>560, + 1206=>642, 1207=>497, 1208=>642, 1209=>497, 1210=>642, 1211=>497, 1212=>722, 1213=>495, 1214=>722, 1215=>495, 1216=>278, 1217=>897, 1218=>818, 1219=>664, 1220=>510, 1223=>722, + 1224=>561, 1227=>642, 1228=>497, 1232=>667, 1233=>556, 1234=>667, 1235=>556, 1236=>1000, 1237=>889, 1238=>667, 1239=>556, 1240=>722, 1241=>495, 1242=>722, 1243=>495, 1244=>897, + 1245=>818, 1246=>652, 1247=>495, 1248=>652, 1249=>495, 1250=>731, 1251=>560, 1252=>731, 1253=>560, 1254=>778, 1255=>556, 1256=>780, 1257=>554, 1258=>780, 1259=>554, 1260=>717, + 1261=>534, 1262=>530, 1263=>500, 1264=>530, 1265=>500, 1266=>530, 1267=>500, 1268=>642, 1269=>497, 1272=>886, 1273=>734, 1329=>722, 1330=>705, 1331=>774, 1332=>754, 1333=>722, + 1334=>751, 1335=>485, 1336=>722, 1337=>782, 1338=>655, 1339=>699, 1340=>417, 1341=>853, 1342=>791, 1343=>711, 1344=>588, 1345=>663, 1346=>665, 1347=>665, 1348=>756, 1349=>623, + 1350=>773, 1351=>603, 1352=>722, 1353=>648, 1354=>722, 1355=>751, 1356=>750, 1357=>722, 1358=>748, 1359=>667, 1360=>699, 1361=>623, 1362=>417, 1363=>785, 1364=>638, 1365=>778, + 1366=>716, 1370=>222, 1371=>133, 1372=>325, 1373=>333, 1374=>344, 1377=>833, 1378=>556, 1379=>572, 1380=>581, 1381=>550, 1382=>588, 1383=>448, 1384=>556, 1385=>568, 1386=>582, + 1387=>545, 1388=>301, 1389=>799, 1390=>556, 1391=>554, 1392=>533, 1393=>548, 1394=>552, 1395=>552, 1396=>544, 1397=>222, 1398=>544, 1399=>456, 1400=>556, 1401=>390, 1402=>833, + 1403=>509, 1404=>547, 1405=>533, 1406=>610, 1407=>887, 1408=>556, 1409=>545, 1410=>352, 1411=>853, 1412=>588, 1413=>579, 1414=>690, 1415=>545, 1417=>278, 1418=>367, 1456=>70, + 1457=>335, 1458=>329, 1459=>329, 1460=>70, 1461=>200, 1462=>200, 1463=>188, 1464=>188, 1465=>70, 1467=>329, 1468=>70, 1469=>70, 1470=>488, 1471=>200, 1472=>212, 1473=>0, + 1474=>0, 1475=>278, 1476=>70, 1488=>640, 1489=>591, 1490=>466, 1491=>598, 1492=>622, 1493=>212, 1494=>351, 1495=>623, 1496=>608, 1497=>200, 1498=>526, 1499=>550, 1500=>600, + 1501=>623, 1502=>621, 1503=>212, 1504=>378, 1505=>607, 1506=>587, 1507=>575, 1508=>568, 1509=>540, 1510=>590, 1511=>606, 1512=>547, 1513=>776, 1514=>687, 1520=>424, 1521=>412, + 1522=>400, 1523=>184, 1524=>344, 7936=>596, 7937=>596, 7938=>596, 7939=>596, 7940=>596, 7941=>596, 7942=>596, 7943=>596, 7944=>684, 7945=>684, 7946=>684, 7947=>684, 7948=>684, + 7949=>684, 7950=>684, 7951=>684, 7952=>510, 7953=>510, 7954=>510, 7955=>510, 7956=>510, 7957=>510, 7960=>650, 7961=>650, 7962=>650, 7963=>650, 7964=>650, 7965=>650, 7968=>526, + 7969=>526, 7970=>526, 7971=>526, 7972=>526, 7973=>526, 7974=>526, 7975=>526, 7976=>683, 7977=>683, 7978=>683, 7979=>683, 7980=>683, 7981=>683, 7982=>683, 7983=>683, 7984=>286, + 7985=>286, 7986=>286, 7987=>286, 7988=>286, 7989=>286, 7990=>286, 7991=>286, 7992=>236, 7993=>236, 7994=>236, 7995=>236, 7996=>236, 7997=>236, 7998=>236, 7999=>236, 8000=>550, + 8001=>550, 8002=>550, 8003=>550, 8004=>550, 8005=>550, 8008=>750, 8009=>750, 8010=>750, 8011=>750, 8012=>750, 8013=>750, 8016=>515, 8017=>515, 8018=>515, 8019=>515, 8020=>515, + 8021=>515, 8022=>515, 8023=>515, 8025=>684, 8027=>684, 8029=>684, 8031=>684, 8032=>740, 8033=>740, 8034=>740, 8035=>740, 8036=>740, 8037=>740, 8038=>740, 8039=>740, 8040=>720, + 8041=>720, 8042=>720, 8043=>720, 8044=>720, 8045=>720, 8046=>720, 8047=>720, 8048=>596, 8049=>596, 8050=>510, 8051=>510, 8052=>526, 8053=>526, 8054=>286, 8055=>286, 8056=>550, + 8057=>550, 8058=>515, 8059=>515, 8060=>740, 8061=>740, 8064=>596, 8065=>596, 8066=>596, 8067=>596, 8068=>596, 8069=>596, 8070=>596, 8071=>596, 8072=>900, 8073=>900, 8074=>900, + 8075=>900, 8076=>900, 8077=>900, 8078=>900, 8079=>900, 8080=>526, 8081=>526, 8082=>526, 8083=>526, 8084=>526, 8085=>526, 8086=>526, 8087=>526, 8088=>899, 8089=>899, 8090=>899, + 8091=>899, 8092=>899, 8093=>899, 8094=>899, 8095=>899, 8096=>740, 8097=>740, 8098=>740, 8099=>740, 8100=>740, 8101=>740, 8102=>740, 8103=>740, 8104=>936, 8105=>936, 8106=>936, + 8107=>936, 8108=>936, 8109=>936, 8110=>936, 8111=>936, 8112=>596, 8113=>596, 8114=>596, 8115=>596, 8116=>593, 8118=>596, 8119=>596, 8120=>684, 8121=>684, 8122=>684, 8123=>684, + 8124=>900, 8125=>278, 8126=>201, 8127=>147, 8128=>278, 8129=>333, 8130=>526, 8131=>526, 8132=>595, 8134=>526, 8135=>526, 8136=>650, 8137=>650, 8138=>683, 8139=>683, 8140=>899, + 8141=>602, 8142=>601, 8143=>333, 8144=>286, 8145=>286, 8146=>286, 8147=>286, 8150=>286, 8151=>286, 8152=>236, 8153=>236, 8154=>236, 8155=>236, 8157=>434, 8158=>433, 8159=>333, + 8160=>515, 8161=>515, 8162=>515, 8163=>515, 8164=>566, 8165=>566, 8166=>515, 8167=>515, 8168=>684, 8169=>684, 8170=>684, 8171=>684, 8172=>638, 8173=>333, 8174=>624, 8175=>303, + 8178=>740, 8179=>740, 8180=>725, 8182=>740, 8183=>740, 8184=>750, 8185=>750, 8186=>720, 8187=>720, 8188=>936, 8189=>333, 8190=>159, 8260=>167, 8362=>869, 8706=>490, 8710=>712, + 8721=>711, 8722=>584, 8730=>542, 8800=>584, 8804=>584, 8805=>584, 9674=>489, 63033=>556, 63034=>556, 63035=>556, 63036=>556, 63037=>556, 63038=>556, 63039=>556, 63040=>556, 63041=>556, + 63166=>222, 63171=>333, 63196=>556, 64256=>556, 64257=>500, 64258=>500, 64259=>778, 64260=>778, 64261=>556, 64262=>778, 64285=>200, 64286=>305, 64287=>400, 64288=>587, 64289=>890, 64290=>848, + 64291=>872, 64292=>800, 64293=>850, 64294=>873, 64295=>797, 64296=>937, 64297=>584, 64298=>776, 64299=>776, 64300=>776, 64301=>776, 64302=>640, 64303=>640, 64304=>640, 64305=>591, 64306=>466, + 64307=>598, 64308=>622, 64309=>262, 64310=>351, 64312=>608, 64313=>270, 64314=>526, 64315=>550, 64316=>600, 64318=>621, 64320=>378, 64321=>607, 64323=>575, 64324=>568, 64326=>590, 64327=>606, + 64328=>547, 64329=>776, 64330=>687, 64331=>212, 64332=>591, 64333=>550, 64334=>568, 64335=>640}; + font[:enc]=''; + font[:diff]=''; + font[:file]='FreeSansOblique.z'; + font[:ctg]='FreeSansOblique.ctg.z'; + font[:originalsize]=110740; +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/helvetica.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/helvetica.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,4 @@ +TCPDFFontDescriptor.define('helvetica') do |font| + font[:cw]={ + 0.chr=>278, 1.chr=>278, 2.chr=>278, 3.chr=>278, 4.chr=>278, 5.chr=>278, 6.chr=>278, 7.chr=>278, 8.chr=>278, 9.chr=>278, 10.chr=>278, 11.chr=>278, 12.chr=>278, 13.chr=>278, 14.chr=>278, 15.chr=>278, 16.chr=>278, 17.chr=>278, 18.chr=>278, 19.chr=>278, 20.chr=>278, 21.chr=>278, 22.chr=>278, 23.chr=>278, 24.chr=>278, 25.chr=>278, 26.chr=>278, 27.chr=>278, 28.chr=>278, 29.chr=>278, 30.chr=>278, 31.chr=>278, ' '=>278, '!'=>278, '"'=>355, '#'=>556, '$'=>556, '%'=>889, '&'=>667, '\''=>191, '('=>333, ')'=>333, '*'=>389, '+'=>584, ','=>278, '-'=>333, '.'=>278, '/'=>278, '0'=>556, '1'=>556, '2'=>556, '3'=>556, '4'=>556, '5'=>556, '6'=>556, '7'=>556, '8'=>556, '9'=>556, ':'=>278, ';'=>278, '<'=>584, '='=>584, '>'=>584, '?'=>556, '@'=>1015, 'A'=>667, 'B'=>667, 'C'=>722, 'D'=>722, 'E'=>667, 'F'=>611, 'G'=>778, 'H'=>722, 'I'=>278, 'J'=>500, 'K'=>667, 'L'=>556, 'M'=>833, 'N'=>722, 'O'=>778, 'P'=>667, 'Q'=>778, 'R'=>722, 'S'=>667, 'T'=>611, 'U'=>722, 'V'=>667, 'W'=>944, 'X'=>667, 'Y'=>667, 'Z'=>611, '['=>278, '\\'=>278, ']'=>278, '^'=>469, '_'=>556, '`'=>333, 'a'=>556, 'b'=>556, 'c'=>500, 'd'=>556, 'e'=>556, 'f'=>278, 'g'=>556, 'h'=>556, 'i'=>222, 'j'=>222, 'k'=>500, 'l'=>222, 'm'=>833, 'n'=>556, 'o'=>556, 'p'=>556, 'q'=>556, 'r'=>333, 's'=>500, 't'=>278, 'u'=>556, 'v'=>500, 'w'=>722, 'x'=>500, 'y'=>500, 'z'=>500, '{'=>334, '|'=>260, '}'=>334, '~'=>584, 127.chr=>350, 128.chr=>556, 129.chr=>350, 130.chr=>222, 131.chr=>556, 132.chr=>333, 133.chr=>1000, 134.chr=>556, 135.chr=>556, 136.chr=>333, 137.chr=>1000, 138.chr=>667, 139.chr=>333, 140.chr=>1000, 141.chr=>350, 142.chr=>611, 143.chr=>350, 144.chr=>350, 145.chr=>222, 146.chr=>222, 147.chr=>333, 148.chr=>333, 149.chr=>350, 150.chr=>556, 151.chr=>1000, 152.chr=>333, 153.chr=>1000, 154.chr=>500, 155.chr=>333, 156.chr=>944, 157.chr=>350, 158.chr=>500, 159.chr=>667, 160.chr=>278, 161.chr=>333, 162.chr=>556, 163.chr=>556, 164.chr=>556, 165.chr=>556, 166.chr=>260, 167.chr=>556, 168.chr=>333, 169.chr=>737, 170.chr=>370, 171.chr=>556, 172.chr=>584, 173.chr=>333, 174.chr=>737, 175.chr=>333, 176.chr=>400, 177.chr=>584, 178.chr=>333, 179.chr=>333, 180.chr=>333, 181.chr=>556, 182.chr=>537, 183.chr=>278, 184.chr=>333, 185.chr=>333, 186.chr=>365, 187.chr=>556, 188.chr=>834, 189.chr=>834, 190.chr=>834, 191.chr=>611, 192.chr=>667, 193.chr=>667, 194.chr=>667, 195.chr=>667, 196.chr=>667, 197.chr=>667, 198.chr=>1000, 199.chr=>722, 200.chr=>667, 201.chr=>667, 202.chr=>667, 203.chr=>667, 204.chr=>278, 205.chr=>278, 206.chr=>278, 207.chr=>278, 208.chr=>722, 209.chr=>722, 210.chr=>778, 211.chr=>778, 212.chr=>778, 213.chr=>778, 214.chr=>778, 215.chr=>584, 216.chr=>778, 217.chr=>722, 218.chr=>722, 219.chr=>722, 220.chr=>722, 221.chr=>667, 222.chr=>667, 223.chr=>611, 224.chr=>556, 225.chr=>556, 226.chr=>556, 227.chr=>556, 228.chr=>556, 229.chr=>556, 230.chr=>889, 231.chr=>500, 232.chr=>556, 233.chr=>556, 234.chr=>556, 235.chr=>556, 236.chr=>278, 237.chr=>278, 238.chr=>278, 239.chr=>278, 240.chr=>556, 241.chr=>556, 242.chr=>556, 243.chr=>556, 244.chr=>556, 245.chr=>556, 246.chr=>556, 247.chr=>584, 248.chr=>611, 249.chr=>556, 250.chr=>556, 251.chr=>556, 252.chr=>556, 253.chr=>500, 254.chr=>556, 255.chr=>500} +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/helveticab.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/helveticab.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,15 @@ +TCPDFFontDescriptor.define('helveticab') do |font| + font[:cw]={ + 0.chr=>278,1.chr=>278,2.chr=>278,3.chr=>278,4.chr=>278,5.chr=>278,6.chr=>278,7.chr=>278,8.chr=>278,9.chr=>278,10.chr=>278,11.chr=>278,12.chr=>278,13.chr=>278,14.chr=>278,15.chr=>278,16.chr=>278,17.chr=>278,18.chr=>278,19.chr=>278,20.chr=>278,21.chr=>278, + 22.chr=>278,23.chr=>278,24.chr=>278,25.chr=>278,26.chr=>278,27.chr=>278,28.chr=>278,29.chr=>278,30.chr=>278,31.chr=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722, + 'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889, + 'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,127.chr=>350,128.chr=>556,129.chr=>350,130.chr=>278,131.chr=>556, + 132.chr=>500,133.chr=>1000,134.chr=>556,135.chr=>556,136.chr=>333,137.chr=>1000,138.chr=>667,139.chr=>333,140.chr=>1000,141.chr=>350,142.chr=>611,143.chr=>350,144.chr=>350,145.chr=>278,146.chr=>278,147.chr=>500,148.chr=>500,149.chr=>350,150.chr=>556,151.chr=>1000,152.chr=>333,153.chr=>1000, + 154.chr=>556,155.chr=>333,156.chr=>944,157.chr=>350,158.chr=>500,159.chr=>667,160.chr=>278,161.chr=>333,162.chr=>556,163.chr=>556,164.chr=>556,165.chr=>556,166.chr=>280,167.chr=>556,168.chr=>333,169.chr=>737,170.chr=>370,171.chr=>556,172.chr=>584,173.chr=>333,174.chr=>737,175.chr=>333, + 176.chr=>400,177.chr=>584,178.chr=>333,179.chr=>333,180.chr=>333,181.chr=>611,182.chr=>556,183.chr=>278,184.chr=>333,185.chr=>333,186.chr=>365,187.chr=>556,188.chr=>834,189.chr=>834,190.chr=>834,191.chr=>611,192.chr=>722,193.chr=>722,194.chr=>722,195.chr=>722,196.chr=>722,197.chr=>722, + 198.chr=>1000,199.chr=>722,200.chr=>667,201.chr=>667,202.chr=>667,203.chr=>667,204.chr=>278,205.chr=>278,206.chr=>278,207.chr=>278,208.chr=>722,209.chr=>722,210.chr=>778,211.chr=>778,212.chr=>778,213.chr=>778,214.chr=>778,215.chr=>584,216.chr=>778,217.chr=>722,218.chr=>722,219.chr=>722, + 220.chr=>722,221.chr=>667,222.chr=>667,223.chr=>611,224.chr=>556,225.chr=>556,226.chr=>556,227.chr=>556,228.chr=>556,229.chr=>556,230.chr=>889,231.chr=>556,232.chr=>556,233.chr=>556,234.chr=>556,235.chr=>556,236.chr=>278,237.chr=>278,238.chr=>278,239.chr=>278,240.chr=>611,241.chr=>611, + 242.chr=>611,243.chr=>611,244.chr=>611,245.chr=>611,246.chr=>611,247.chr=>584,248.chr=>611,249.chr=>611,250.chr=>611,251.chr=>611,252.chr=>611,253.chr=>556,254.chr=>611,255.chr=>556} +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/helveticabi.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/helveticabi.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,15 @@ +TCPDFFontDescriptor.define('helveticabi') do |font| + font[:cw]={ + 0.chr=>278,1.chr=>278,2.chr=>278,3.chr=>278,4.chr=>278,5.chr=>278,6.chr=>278,7.chr=>278,8.chr=>278,9.chr=>278,10.chr=>278,11.chr=>278,12.chr=>278,13.chr=>278,14.chr=>278,15.chr=>278,16.chr=>278,17.chr=>278,18.chr=>278,19.chr=>278,20.chr=>278,21.chr=>278, + 22.chr=>278,23.chr=>278,24.chr=>278,25.chr=>278,26.chr=>278,27.chr=>278,28.chr=>278,29.chr=>278,30.chr=>278,31.chr=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722, + 'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889, + 'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,127.chr=>350,128.chr=>556,129.chr=>350,130.chr=>278,131.chr=>556, + 132.chr=>500,133.chr=>1000,134.chr=>556,135.chr=>556,136.chr=>333,137.chr=>1000,138.chr=>667,139.chr=>333,140.chr=>1000,141.chr=>350,142.chr=>611,143.chr=>350,144.chr=>350,145.chr=>278,146.chr=>278,147.chr=>500,148.chr=>500,149.chr=>350,150.chr=>556,151.chr=>1000,152.chr=>333,153.chr=>1000, + 154.chr=>556,155.chr=>333,156.chr=>944,157.chr=>350,158.chr=>500,159.chr=>667,160.chr=>278,161.chr=>333,162.chr=>556,163.chr=>556,164.chr=>556,165.chr=>556,166.chr=>280,167.chr=>556,168.chr=>333,169.chr=>737,170.chr=>370,171.chr=>556,172.chr=>584,173.chr=>333,174.chr=>737,175.chr=>333, + 176.chr=>400,177.chr=>584,178.chr=>333,179.chr=>333,180.chr=>333,181.chr=>611,182.chr=>556,183.chr=>278,184.chr=>333,185.chr=>333,186.chr=>365,187.chr=>556,188.chr=>834,189.chr=>834,190.chr=>834,191.chr=>611,192.chr=>722,193.chr=>722,194.chr=>722,195.chr=>722,196.chr=>722,197.chr=>722, + 198.chr=>1000,199.chr=>722,200.chr=>667,201.chr=>667,202.chr=>667,203.chr=>667,204.chr=>278,205.chr=>278,206.chr=>278,207.chr=>278,208.chr=>722,209.chr=>722,210.chr=>778,211.chr=>778,212.chr=>778,213.chr=>778,214.chr=>778,215.chr=>584,216.chr=>778,217.chr=>722,218.chr=>722,219.chr=>722, + 220.chr=>722,221.chr=>667,222.chr=>667,223.chr=>611,224.chr=>556,225.chr=>556,226.chr=>556,227.chr=>556,228.chr=>556,229.chr=>556,230.chr=>889,231.chr=>556,232.chr=>556,233.chr=>556,234.chr=>556,235.chr=>556,236.chr=>278,237.chr=>278,238.chr=>278,239.chr=>278,240.chr=>611,241.chr=>611, + 242.chr=>611,243.chr=>611,244.chr=>611,245.chr=>611,246.chr=>611,247.chr=>584,248.chr=>611,249.chr=>611,250.chr=>611,251.chr=>611,252.chr=>611,253.chr=>556,254.chr=>611,255.chr=>556} +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/helveticai.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/helveticai.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,15 @@ +TCPDFFontDescriptor.define('helveticai') do |font| + font[:cw]={ + 0.chr=>278,1.chr=>278,2.chr=>278,3.chr=>278,4.chr=>278,5.chr=>278,6.chr=>278,7.chr=>278,8.chr=>278,9.chr=>278,10.chr=>278,11.chr=>278,12.chr=>278,13.chr=>278,14.chr=>278,15.chr=>278,16.chr=>278,17.chr=>278,18.chr=>278,19.chr=>278,20.chr=>278,21.chr=>278, + 22.chr=>278,23.chr=>278,24.chr=>278,25.chr=>278,26.chr=>278,27.chr=>278,28.chr=>278,29.chr=>278,30.chr=>278,31.chr=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667, + 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833, + 'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,127.chr=>350,128.chr=>556,129.chr=>350,130.chr=>222,131.chr=>556, + 132.chr=>333,133.chr=>1000,134.chr=>556,135.chr=>556,136.chr=>333,137.chr=>1000,138.chr=>667,139.chr=>333,140.chr=>1000,141.chr=>350,142.chr=>611,143.chr=>350,144.chr=>350,145.chr=>222,146.chr=>222,147.chr=>333,148.chr=>333,149.chr=>350,150.chr=>556,151.chr=>1000,152.chr=>333,153.chr=>1000, + 154.chr=>500,155.chr=>333,156.chr=>944,157.chr=>350,158.chr=>500,159.chr=>667,160.chr=>278,161.chr=>333,162.chr=>556,163.chr=>556,164.chr=>556,165.chr=>556,166.chr=>260,167.chr=>556,168.chr=>333,169.chr=>737,170.chr=>370,171.chr=>556,172.chr=>584,173.chr=>333,174.chr=>737,175.chr=>333, + 176.chr=>400,177.chr=>584,178.chr=>333,179.chr=>333,180.chr=>333,181.chr=>556,182.chr=>537,183.chr=>278,184.chr=>333,185.chr=>333,186.chr=>365,187.chr=>556,188.chr=>834,189.chr=>834,190.chr=>834,191.chr=>611,192.chr=>667,193.chr=>667,194.chr=>667,195.chr=>667,196.chr=>667,197.chr=>667, + 198.chr=>1000,199.chr=>722,200.chr=>667,201.chr=>667,202.chr=>667,203.chr=>667,204.chr=>278,205.chr=>278,206.chr=>278,207.chr=>278,208.chr=>722,209.chr=>722,210.chr=>778,211.chr=>778,212.chr=>778,213.chr=>778,214.chr=>778,215.chr=>584,216.chr=>778,217.chr=>722,218.chr=>722,219.chr=>722, + 220.chr=>722,221.chr=>667,222.chr=>667,223.chr=>611,224.chr=>556,225.chr=>556,226.chr=>556,227.chr=>556,228.chr=>556,229.chr=>556,230.chr=>889,231.chr=>500,232.chr=>556,233.chr=>556,234.chr=>556,235.chr=>556,236.chr=>278,237.chr=>278,238.chr=>278,239.chr=>278,240.chr=>556,241.chr=>556, + 242.chr=>556,243.chr=>556,244.chr=>556,245.chr=>556,246.chr=>556,247.chr=>584,248.chr=>611,249.chr=>556,250.chr=>556,251.chr=>556,252.chr=>556,253.chr=>500,254.chr=>556,255.chr=>500} +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/old/makefont/cp1250.map --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/cp1250.map Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,251 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!89 U+2030 perthousand +!8A U+0160 Scaron +!8B U+2039 guilsinglleft +!8C U+015A Sacute +!8D U+0164 Tcaron +!8E U+017D Zcaron +!8F U+0179 Zacute +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!99 U+2122 trademark +!9A U+0161 scaron +!9B U+203A guilsinglright +!9C U+015B sacute +!9D U+0165 tcaron +!9E U+017E zcaron +!9F U+017A zacute +!A0 U+00A0 space +!A1 U+02C7 caron +!A2 U+02D8 breve +!A3 U+0141 Lslash +!A4 U+00A4 currency +!A5 U+0104 Aogonek +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+015E Scedilla +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+017B Zdotaccent +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+02DB ogonek +!B3 U+0142 lslash +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00B8 cedilla +!B9 U+0105 aogonek +!BA U+015F scedilla +!BB U+00BB guillemotright +!BC U+013D Lcaron +!BD U+02DD hungarumlaut +!BE U+013E lcaron +!BF U+017C zdotaccent +!C0 U+0154 Racute +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+0102 Abreve +!C4 U+00C4 Adieresis +!C5 U+0139 Lacute +!C6 U+0106 Cacute +!C7 U+00C7 Ccedilla +!C8 U+010C Ccaron +!C9 U+00C9 Eacute +!CA U+0118 Eogonek +!CB U+00CB Edieresis +!CC U+011A Ecaron +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+010E Dcaron +!D0 U+0110 Dcroat +!D1 U+0143 Nacute +!D2 U+0147 Ncaron +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+0150 Ohungarumlaut +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+0158 Rcaron +!D9 U+016E Uring +!DA U+00DA Uacute +!DB U+0170 Uhungarumlaut +!DC U+00DC Udieresis +!DD U+00DD Yacute +!DE U+0162 Tcommaaccent +!DF U+00DF germandbls +!E0 U+0155 racute +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+0103 abreve +!E4 U+00E4 adieresis +!E5 U+013A lacute +!E6 U+0107 cacute +!E7 U+00E7 ccedilla +!E8 U+010D ccaron +!E9 U+00E9 eacute +!EA U+0119 eogonek +!EB U+00EB edieresis +!EC U+011B ecaron +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+010F dcaron +!F0 U+0111 dcroat +!F1 U+0144 nacute +!F2 U+0148 ncaron +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+0151 ohungarumlaut +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+0159 rcaron +!F9 U+016F uring +!FA U+00FA uacute +!FB U+0171 uhungarumlaut +!FC U+00FC udieresis +!FD U+00FD yacute +!FE U+0163 tcommaaccent +!FF U+02D9 dotaccent diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/old/makefont/cp1251.map --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/cp1251.map Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,255 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0402 afii10051 +!81 U+0403 afii10052 +!82 U+201A quotesinglbase +!83 U+0453 afii10100 +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!88 U+20AC Euro +!89 U+2030 perthousand +!8A U+0409 afii10058 +!8B U+2039 guilsinglleft +!8C U+040A afii10059 +!8D U+040C afii10061 +!8E U+040B afii10060 +!8F U+040F afii10145 +!90 U+0452 afii10099 +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!99 U+2122 trademark +!9A U+0459 afii10106 +!9B U+203A guilsinglright +!9C U+045A afii10107 +!9D U+045C afii10109 +!9E U+045B afii10108 +!9F U+045F afii10193 +!A0 U+00A0 space +!A1 U+040E afii10062 +!A2 U+045E afii10110 +!A3 U+0408 afii10057 +!A4 U+00A4 currency +!A5 U+0490 afii10050 +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+0401 afii10023 +!A9 U+00A9 copyright +!AA U+0404 afii10053 +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+0407 afii10056 +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+0406 afii10055 +!B3 U+0456 afii10103 +!B4 U+0491 afii10098 +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+0451 afii10071 +!B9 U+2116 afii61352 +!BA U+0454 afii10101 +!BB U+00BB guillemotright +!BC U+0458 afii10105 +!BD U+0405 afii10054 +!BE U+0455 afii10102 +!BF U+0457 afii10104 +!C0 U+0410 afii10017 +!C1 U+0411 afii10018 +!C2 U+0412 afii10019 +!C3 U+0413 afii10020 +!C4 U+0414 afii10021 +!C5 U+0415 afii10022 +!C6 U+0416 afii10024 +!C7 U+0417 afii10025 +!C8 U+0418 afii10026 +!C9 U+0419 afii10027 +!CA U+041A afii10028 +!CB U+041B afii10029 +!CC U+041C afii10030 +!CD U+041D afii10031 +!CE U+041E afii10032 +!CF U+041F afii10033 +!D0 U+0420 afii10034 +!D1 U+0421 afii10035 +!D2 U+0422 afii10036 +!D3 U+0423 afii10037 +!D4 U+0424 afii10038 +!D5 U+0425 afii10039 +!D6 U+0426 afii10040 +!D7 U+0427 afii10041 +!D8 U+0428 afii10042 +!D9 U+0429 afii10043 +!DA U+042A afii10044 +!DB U+042B afii10045 +!DC U+042C afii10046 +!DD U+042D afii10047 +!DE U+042E afii10048 +!DF U+042F afii10049 +!E0 U+0430 afii10065 +!E1 U+0431 afii10066 +!E2 U+0432 afii10067 +!E3 U+0433 afii10068 +!E4 U+0434 afii10069 +!E5 U+0435 afii10070 +!E6 U+0436 afii10072 +!E7 U+0437 afii10073 +!E8 U+0438 afii10074 +!E9 U+0439 afii10075 +!EA U+043A afii10076 +!EB U+043B afii10077 +!EC U+043C afii10078 +!ED U+043D afii10079 +!EE U+043E afii10080 +!EF U+043F afii10081 +!F0 U+0440 afii10082 +!F1 U+0441 afii10083 +!F2 U+0442 afii10084 +!F3 U+0443 afii10085 +!F4 U+0444 afii10086 +!F5 U+0445 afii10087 +!F6 U+0446 afii10088 +!F7 U+0447 afii10089 +!F8 U+0448 afii10090 +!F9 U+0449 afii10091 +!FA U+044A afii10092 +!FB U+044B afii10093 +!FC U+044C afii10094 +!FD U+044D afii10095 +!FE U+044E afii10096 +!FF U+044F afii10097 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/old/makefont/cp1252.map --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/cp1252.map Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,251 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!83 U+0192 florin +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!88 U+02C6 circumflex +!89 U+2030 perthousand +!8A U+0160 Scaron +!8B U+2039 guilsinglleft +!8C U+0152 OE +!8E U+017D Zcaron +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!98 U+02DC tilde +!99 U+2122 trademark +!9A U+0161 scaron +!9B U+203A guilsinglright +!9C U+0153 oe +!9E U+017E zcaron +!9F U+0178 Ydieresis +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+00AA ordfeminine +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00B8 cedilla +!B9 U+00B9 onesuperior +!BA U+00BA ordmasculine +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00BF questiondown +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+00C3 Atilde +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+00CC Igrave +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+00D0 Eth +!D1 U+00D1 Ntilde +!D2 U+00D2 Ograve +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+00DD Yacute +!DE U+00DE Thorn +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+00E3 atilde +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+00EC igrave +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+00F0 eth +!F1 U+00F1 ntilde +!F2 U+00F2 ograve +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+00FD yacute +!FE U+00FE thorn +!FF U+00FF ydieresis diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/old/makefont/cp1253.map --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/cp1253.map Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,239 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!83 U+0192 florin +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!89 U+2030 perthousand +!8B U+2039 guilsinglleft +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!99 U+2122 trademark +!9B U+203A guilsinglright +!A0 U+00A0 space +!A1 U+0385 dieresistonos +!A2 U+0386 Alphatonos +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+2015 afii00208 +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+0384 tonos +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+0388 Epsilontonos +!B9 U+0389 Etatonos +!BA U+038A Iotatonos +!BB U+00BB guillemotright +!BC U+038C Omicrontonos +!BD U+00BD onehalf +!BE U+038E Upsilontonos +!BF U+038F Omegatonos +!C0 U+0390 iotadieresistonos +!C1 U+0391 Alpha +!C2 U+0392 Beta +!C3 U+0393 Gamma +!C4 U+0394 Delta +!C5 U+0395 Epsilon +!C6 U+0396 Zeta +!C7 U+0397 Eta +!C8 U+0398 Theta +!C9 U+0399 Iota +!CA U+039A Kappa +!CB U+039B Lambda +!CC U+039C Mu +!CD U+039D Nu +!CE U+039E Xi +!CF U+039F Omicron +!D0 U+03A0 Pi +!D1 U+03A1 Rho +!D3 U+03A3 Sigma +!D4 U+03A4 Tau +!D5 U+03A5 Upsilon +!D6 U+03A6 Phi +!D7 U+03A7 Chi +!D8 U+03A8 Psi +!D9 U+03A9 Omega +!DA U+03AA Iotadieresis +!DB U+03AB Upsilondieresis +!DC U+03AC alphatonos +!DD U+03AD epsilontonos +!DE U+03AE etatonos +!DF U+03AF iotatonos +!E0 U+03B0 upsilondieresistonos +!E1 U+03B1 alpha +!E2 U+03B2 beta +!E3 U+03B3 gamma +!E4 U+03B4 delta +!E5 U+03B5 epsilon +!E6 U+03B6 zeta +!E7 U+03B7 eta +!E8 U+03B8 theta +!E9 U+03B9 iota +!EA U+03BA kappa +!EB U+03BB lambda +!EC U+03BC mu +!ED U+03BD nu +!EE U+03BE xi +!EF U+03BF omicron +!F0 U+03C0 pi +!F1 U+03C1 rho +!F2 U+03C2 sigma1 +!F3 U+03C3 sigma +!F4 U+03C4 tau +!F5 U+03C5 upsilon +!F6 U+03C6 phi +!F7 U+03C7 chi +!F8 U+03C8 psi +!F9 U+03C9 omega +!FA U+03CA iotadieresis +!FB U+03CB upsilondieresis +!FC U+03CC omicrontonos +!FD U+03CD upsilontonos +!FE U+03CE omegatonos diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/old/makefont/cp1254.map --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/cp1254.map Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,249 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!83 U+0192 florin +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!88 U+02C6 circumflex +!89 U+2030 perthousand +!8A U+0160 Scaron +!8B U+2039 guilsinglleft +!8C U+0152 OE +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!98 U+02DC tilde +!99 U+2122 trademark +!9A U+0161 scaron +!9B U+203A guilsinglright +!9C U+0153 oe +!9F U+0178 Ydieresis +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+00AA ordfeminine +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00B8 cedilla +!B9 U+00B9 onesuperior +!BA U+00BA ordmasculine +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00BF questiondown +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+00C3 Atilde +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+00CC Igrave +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+011E Gbreve +!D1 U+00D1 Ntilde +!D2 U+00D2 Ograve +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+0130 Idotaccent +!DE U+015E Scedilla +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+00E3 atilde +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+00EC igrave +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+011F gbreve +!F1 U+00F1 ntilde +!F2 U+00F2 ograve +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+0131 dotlessi +!FE U+015F scedilla +!FF U+00FF ydieresis diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/old/makefont/cp1255.map --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/cp1255.map Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,233 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!83 U+0192 florin +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!88 U+02C6 circumflex +!89 U+2030 perthousand +!8B U+2039 guilsinglleft +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!98 U+02DC tilde +!99 U+2122 trademark +!9B U+203A guilsinglright +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+20AA afii57636 +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+00D7 multiply +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD sfthyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 middot +!B8 U+00B8 cedilla +!B9 U+00B9 onesuperior +!BA U+00F7 divide +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00BF questiondown +!C0 U+05B0 afii57799 +!C1 U+05B1 afii57801 +!C2 U+05B2 afii57800 +!C3 U+05B3 afii57802 +!C4 U+05B4 afii57793 +!C5 U+05B5 afii57794 +!C6 U+05B6 afii57795 +!C7 U+05B7 afii57798 +!C8 U+05B8 afii57797 +!C9 U+05B9 afii57806 +!CB U+05BB afii57796 +!CC U+05BC afii57807 +!CD U+05BD afii57839 +!CE U+05BE afii57645 +!CF U+05BF afii57841 +!D0 U+05C0 afii57842 +!D1 U+05C1 afii57804 +!D2 U+05C2 afii57803 +!D3 U+05C3 afii57658 +!D4 U+05F0 afii57716 +!D5 U+05F1 afii57717 +!D6 U+05F2 afii57718 +!D7 U+05F3 gereshhebrew +!D8 U+05F4 gershayimhebrew +!E0 U+05D0 afii57664 +!E1 U+05D1 afii57665 +!E2 U+05D2 afii57666 +!E3 U+05D3 afii57667 +!E4 U+05D4 afii57668 +!E5 U+05D5 afii57669 +!E6 U+05D6 afii57670 +!E7 U+05D7 afii57671 +!E8 U+05D8 afii57672 +!E9 U+05D9 afii57673 +!EA U+05DA afii57674 +!EB U+05DB afii57675 +!EC U+05DC afii57676 +!ED U+05DD afii57677 +!EE U+05DE afii57678 +!EF U+05DF afii57679 +!F0 U+05E0 afii57680 +!F1 U+05E1 afii57681 +!F2 U+05E2 afii57682 +!F3 U+05E3 afii57683 +!F4 U+05E4 afii57684 +!F5 U+05E5 afii57685 +!F6 U+05E6 afii57686 +!F7 U+05E7 afii57687 +!F8 U+05E8 afii57688 +!F9 U+05E9 afii57689 +!FA U+05EA afii57690 +!FD U+200E afii299 +!FE U+200F afii300 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/old/makefont/cp1257.map --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/cp1257.map Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,244 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!89 U+2030 perthousand +!8B U+2039 guilsinglleft +!8D U+00A8 dieresis +!8E U+02C7 caron +!8F U+00B8 cedilla +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!99 U+2122 trademark +!9B U+203A guilsinglright +!9D U+00AF macron +!9E U+02DB ogonek +!A0 U+00A0 space +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00D8 Oslash +!A9 U+00A9 copyright +!AA U+0156 Rcommaaccent +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00C6 AE +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00F8 oslash +!B9 U+00B9 onesuperior +!BA U+0157 rcommaaccent +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00E6 ae +!C0 U+0104 Aogonek +!C1 U+012E Iogonek +!C2 U+0100 Amacron +!C3 U+0106 Cacute +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+0118 Eogonek +!C7 U+0112 Emacron +!C8 U+010C Ccaron +!C9 U+00C9 Eacute +!CA U+0179 Zacute +!CB U+0116 Edotaccent +!CC U+0122 Gcommaaccent +!CD U+0136 Kcommaaccent +!CE U+012A Imacron +!CF U+013B Lcommaaccent +!D0 U+0160 Scaron +!D1 U+0143 Nacute +!D2 U+0145 Ncommaaccent +!D3 U+00D3 Oacute +!D4 U+014C Omacron +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+0172 Uogonek +!D9 U+0141 Lslash +!DA U+015A Sacute +!DB U+016A Umacron +!DC U+00DC Udieresis +!DD U+017B Zdotaccent +!DE U+017D Zcaron +!DF U+00DF germandbls +!E0 U+0105 aogonek +!E1 U+012F iogonek +!E2 U+0101 amacron +!E3 U+0107 cacute +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+0119 eogonek +!E7 U+0113 emacron +!E8 U+010D ccaron +!E9 U+00E9 eacute +!EA U+017A zacute +!EB U+0117 edotaccent +!EC U+0123 gcommaaccent +!ED U+0137 kcommaaccent +!EE U+012B imacron +!EF U+013C lcommaaccent +!F0 U+0161 scaron +!F1 U+0144 nacute +!F2 U+0146 ncommaaccent +!F3 U+00F3 oacute +!F4 U+014D omacron +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+0173 uogonek +!F9 U+0142 lslash +!FA U+015B sacute +!FB U+016B umacron +!FC U+00FC udieresis +!FD U+017C zdotaccent +!FE U+017E zcaron +!FF U+02D9 dotaccent diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/old/makefont/cp1258.map --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/cp1258.map Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,247 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!83 U+0192 florin +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!88 U+02C6 circumflex +!89 U+2030 perthousand +!8B U+2039 guilsinglleft +!8C U+0152 OE +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!98 U+02DC tilde +!99 U+2122 trademark +!9B U+203A guilsinglright +!9C U+0153 oe +!9F U+0178 Ydieresis +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+00AA ordfeminine +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00B8 cedilla +!B9 U+00B9 onesuperior +!BA U+00BA ordmasculine +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00BF questiondown +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+0102 Abreve +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+0300 gravecomb +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+0110 Dcroat +!D1 U+00D1 Ntilde +!D2 U+0309 hookabovecomb +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+01A0 Ohorn +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+01AF Uhorn +!DE U+0303 tildecomb +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+0103 abreve +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+0301 acutecomb +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+0111 dcroat +!F1 U+00F1 ntilde +!F2 U+0323 dotbelowcomb +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+01A1 ohorn +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+01B0 uhorn +!FE U+20AB dong +!FF U+00FF ydieresis diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/old/makefont/cp874.map --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/cp874.map Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,225 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!85 U+2026 ellipsis +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!A0 U+00A0 space +!A1 U+0E01 kokaithai +!A2 U+0E02 khokhaithai +!A3 U+0E03 khokhuatthai +!A4 U+0E04 khokhwaithai +!A5 U+0E05 khokhonthai +!A6 U+0E06 khorakhangthai +!A7 U+0E07 ngonguthai +!A8 U+0E08 chochanthai +!A9 U+0E09 chochingthai +!AA U+0E0A chochangthai +!AB U+0E0B sosothai +!AC U+0E0C chochoethai +!AD U+0E0D yoyingthai +!AE U+0E0E dochadathai +!AF U+0E0F topatakthai +!B0 U+0E10 thothanthai +!B1 U+0E11 thonangmonthothai +!B2 U+0E12 thophuthaothai +!B3 U+0E13 nonenthai +!B4 U+0E14 dodekthai +!B5 U+0E15 totaothai +!B6 U+0E16 thothungthai +!B7 U+0E17 thothahanthai +!B8 U+0E18 thothongthai +!B9 U+0E19 nonuthai +!BA U+0E1A bobaimaithai +!BB U+0E1B poplathai +!BC U+0E1C phophungthai +!BD U+0E1D fofathai +!BE U+0E1E phophanthai +!BF U+0E1F fofanthai +!C0 U+0E20 phosamphaothai +!C1 U+0E21 momathai +!C2 U+0E22 yoyakthai +!C3 U+0E23 roruathai +!C4 U+0E24 ruthai +!C5 U+0E25 lolingthai +!C6 U+0E26 luthai +!C7 U+0E27 wowaenthai +!C8 U+0E28 sosalathai +!C9 U+0E29 sorusithai +!CA U+0E2A sosuathai +!CB U+0E2B hohipthai +!CC U+0E2C lochulathai +!CD U+0E2D oangthai +!CE U+0E2E honokhukthai +!CF U+0E2F paiyannoithai +!D0 U+0E30 saraathai +!D1 U+0E31 maihanakatthai +!D2 U+0E32 saraaathai +!D3 U+0E33 saraamthai +!D4 U+0E34 saraithai +!D5 U+0E35 saraiithai +!D6 U+0E36 sarauethai +!D7 U+0E37 saraueethai +!D8 U+0E38 sarauthai +!D9 U+0E39 sarauuthai +!DA U+0E3A phinthuthai +!DF U+0E3F bahtthai +!E0 U+0E40 saraethai +!E1 U+0E41 saraaethai +!E2 U+0E42 saraothai +!E3 U+0E43 saraaimaimuanthai +!E4 U+0E44 saraaimaimalaithai +!E5 U+0E45 lakkhangyaothai +!E6 U+0E46 maiyamokthai +!E7 U+0E47 maitaikhuthai +!E8 U+0E48 maiekthai +!E9 U+0E49 maithothai +!EA U+0E4A maitrithai +!EB U+0E4B maichattawathai +!EC U+0E4C thanthakhatthai +!ED U+0E4D nikhahitthai +!EE U+0E4E yamakkanthai +!EF U+0E4F fongmanthai +!F0 U+0E50 zerothai +!F1 U+0E51 onethai +!F2 U+0E52 twothai +!F3 U+0E53 threethai +!F4 U+0E54 fourthai +!F5 U+0E55 fivethai +!F6 U+0E56 sixthai +!F7 U+0E57 seventhai +!F8 U+0E58 eightthai +!F9 U+0E59 ninethai +!FA U+0E5A angkhankhuthai +!FB U+0E5B khomutthai diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-1.map --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-1.map Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+00AA ordfeminine +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00B8 cedilla +!B9 U+00B9 onesuperior +!BA U+00BA ordmasculine +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00BF questiondown +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+00C3 Atilde +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+00CC Igrave +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+00D0 Eth +!D1 U+00D1 Ntilde +!D2 U+00D2 Ograve +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+00DD Yacute +!DE U+00DE Thorn +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+00E3 atilde +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+00EC igrave +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+00F0 eth +!F1 U+00F1 ntilde +!F2 U+00F2 ograve +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+00FD yacute +!FE U+00FE thorn +!FF U+00FF ydieresis diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-11.map --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-11.map Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,248 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+0E01 kokaithai +!A2 U+0E02 khokhaithai +!A3 U+0E03 khokhuatthai +!A4 U+0E04 khokhwaithai +!A5 U+0E05 khokhonthai +!A6 U+0E06 khorakhangthai +!A7 U+0E07 ngonguthai +!A8 U+0E08 chochanthai +!A9 U+0E09 chochingthai +!AA U+0E0A chochangthai +!AB U+0E0B sosothai +!AC U+0E0C chochoethai +!AD U+0E0D yoyingthai +!AE U+0E0E dochadathai +!AF U+0E0F topatakthai +!B0 U+0E10 thothanthai +!B1 U+0E11 thonangmonthothai +!B2 U+0E12 thophuthaothai +!B3 U+0E13 nonenthai +!B4 U+0E14 dodekthai +!B5 U+0E15 totaothai +!B6 U+0E16 thothungthai +!B7 U+0E17 thothahanthai +!B8 U+0E18 thothongthai +!B9 U+0E19 nonuthai +!BA U+0E1A bobaimaithai +!BB U+0E1B poplathai +!BC U+0E1C phophungthai +!BD U+0E1D fofathai +!BE U+0E1E phophanthai +!BF U+0E1F fofanthai +!C0 U+0E20 phosamphaothai +!C1 U+0E21 momathai +!C2 U+0E22 yoyakthai +!C3 U+0E23 roruathai +!C4 U+0E24 ruthai +!C5 U+0E25 lolingthai +!C6 U+0E26 luthai +!C7 U+0E27 wowaenthai +!C8 U+0E28 sosalathai +!C9 U+0E29 sorusithai +!CA U+0E2A sosuathai +!CB U+0E2B hohipthai +!CC U+0E2C lochulathai +!CD U+0E2D oangthai +!CE U+0E2E honokhukthai +!CF U+0E2F paiyannoithai +!D0 U+0E30 saraathai +!D1 U+0E31 maihanakatthai +!D2 U+0E32 saraaathai +!D3 U+0E33 saraamthai +!D4 U+0E34 saraithai +!D5 U+0E35 saraiithai +!D6 U+0E36 sarauethai +!D7 U+0E37 saraueethai +!D8 U+0E38 sarauthai +!D9 U+0E39 sarauuthai +!DA U+0E3A phinthuthai +!DF U+0E3F bahtthai +!E0 U+0E40 saraethai +!E1 U+0E41 saraaethai +!E2 U+0E42 saraothai +!E3 U+0E43 saraaimaimuanthai +!E4 U+0E44 saraaimaimalaithai +!E5 U+0E45 lakkhangyaothai +!E6 U+0E46 maiyamokthai +!E7 U+0E47 maitaikhuthai +!E8 U+0E48 maiekthai +!E9 U+0E49 maithothai +!EA U+0E4A maitrithai +!EB U+0E4B maichattawathai +!EC U+0E4C thanthakhatthai +!ED U+0E4D nikhahitthai +!EE U+0E4E yamakkanthai +!EF U+0E4F fongmanthai +!F0 U+0E50 zerothai +!F1 U+0E51 onethai +!F2 U+0E52 twothai +!F3 U+0E53 threethai +!F4 U+0E54 fourthai +!F5 U+0E55 fivethai +!F6 U+0E56 sixthai +!F7 U+0E57 seventhai +!F8 U+0E58 eightthai +!F9 U+0E59 ninethai +!FA U+0E5A angkhankhuthai +!FB U+0E5B khomutthai diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-15.map --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-15.map Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+20AC Euro +!A5 U+00A5 yen +!A6 U+0160 Scaron +!A7 U+00A7 section +!A8 U+0161 scaron +!A9 U+00A9 copyright +!AA U+00AA ordfeminine +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+017D Zcaron +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+017E zcaron +!B9 U+00B9 onesuperior +!BA U+00BA ordmasculine +!BB U+00BB guillemotright +!BC U+0152 OE +!BD U+0153 oe +!BE U+0178 Ydieresis +!BF U+00BF questiondown +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+00C3 Atilde +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+00CC Igrave +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+00D0 Eth +!D1 U+00D1 Ntilde +!D2 U+00D2 Ograve +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+00DD Yacute +!DE U+00DE Thorn +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+00E3 atilde +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+00EC igrave +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+00F0 eth +!F1 U+00F1 ntilde +!F2 U+00F2 ograve +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+00FD yacute +!FE U+00FE thorn +!FF U+00FF ydieresis diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-16.map --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-16.map Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+0104 Aogonek +!A2 U+0105 aogonek +!A3 U+0141 Lslash +!A4 U+20AC Euro +!A5 U+201E quotedblbase +!A6 U+0160 Scaron +!A7 U+00A7 section +!A8 U+0161 scaron +!A9 U+00A9 copyright +!AA U+0218 Scommaaccent +!AB U+00AB guillemotleft +!AC U+0179 Zacute +!AD U+00AD hyphen +!AE U+017A zacute +!AF U+017B Zdotaccent +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+010C Ccaron +!B3 U+0142 lslash +!B4 U+017D Zcaron +!B5 U+201D quotedblright +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+017E zcaron +!B9 U+010D ccaron +!BA U+0219 scommaaccent +!BB U+00BB guillemotright +!BC U+0152 OE +!BD U+0153 oe +!BE U+0178 Ydieresis +!BF U+017C zdotaccent +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+0102 Abreve +!C4 U+00C4 Adieresis +!C5 U+0106 Cacute +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+00CC Igrave +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+0110 Dcroat +!D1 U+0143 Nacute +!D2 U+00D2 Ograve +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+0150 Ohungarumlaut +!D6 U+00D6 Odieresis +!D7 U+015A Sacute +!D8 U+0170 Uhungarumlaut +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+0118 Eogonek +!DE U+021A Tcommaaccent +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+0103 abreve +!E4 U+00E4 adieresis +!E5 U+0107 cacute +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+00EC igrave +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+0111 dcroat +!F1 U+0144 nacute +!F2 U+00F2 ograve +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+0151 ohungarumlaut +!F6 U+00F6 odieresis +!F7 U+015B sacute +!F8 U+0171 uhungarumlaut +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+0119 eogonek +!FE U+021B tcommaaccent +!FF U+00FF ydieresis diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-2.map --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-2.map Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+0104 Aogonek +!A2 U+02D8 breve +!A3 U+0141 Lslash +!A4 U+00A4 currency +!A5 U+013D Lcaron +!A6 U+015A Sacute +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+0160 Scaron +!AA U+015E Scedilla +!AB U+0164 Tcaron +!AC U+0179 Zacute +!AD U+00AD hyphen +!AE U+017D Zcaron +!AF U+017B Zdotaccent +!B0 U+00B0 degree +!B1 U+0105 aogonek +!B2 U+02DB ogonek +!B3 U+0142 lslash +!B4 U+00B4 acute +!B5 U+013E lcaron +!B6 U+015B sacute +!B7 U+02C7 caron +!B8 U+00B8 cedilla +!B9 U+0161 scaron +!BA U+015F scedilla +!BB U+0165 tcaron +!BC U+017A zacute +!BD U+02DD hungarumlaut +!BE U+017E zcaron +!BF U+017C zdotaccent +!C0 U+0154 Racute +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+0102 Abreve +!C4 U+00C4 Adieresis +!C5 U+0139 Lacute +!C6 U+0106 Cacute +!C7 U+00C7 Ccedilla +!C8 U+010C Ccaron +!C9 U+00C9 Eacute +!CA U+0118 Eogonek +!CB U+00CB Edieresis +!CC U+011A Ecaron +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+010E Dcaron +!D0 U+0110 Dcroat +!D1 U+0143 Nacute +!D2 U+0147 Ncaron +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+0150 Ohungarumlaut +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+0158 Rcaron +!D9 U+016E Uring +!DA U+00DA Uacute +!DB U+0170 Uhungarumlaut +!DC U+00DC Udieresis +!DD U+00DD Yacute +!DE U+0162 Tcommaaccent +!DF U+00DF germandbls +!E0 U+0155 racute +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+0103 abreve +!E4 U+00E4 adieresis +!E5 U+013A lacute +!E6 U+0107 cacute +!E7 U+00E7 ccedilla +!E8 U+010D ccaron +!E9 U+00E9 eacute +!EA U+0119 eogonek +!EB U+00EB edieresis +!EC U+011B ecaron +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+010F dcaron +!F0 U+0111 dcroat +!F1 U+0144 nacute +!F2 U+0148 ncaron +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+0151 ohungarumlaut +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+0159 rcaron +!F9 U+016F uring +!FA U+00FA uacute +!FB U+0171 uhungarumlaut +!FC U+00FC udieresis +!FD U+00FD yacute +!FE U+0163 tcommaaccent +!FF U+02D9 dotaccent diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-4.map --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-4.map Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+0104 Aogonek +!A2 U+0138 kgreenlandic +!A3 U+0156 Rcommaaccent +!A4 U+00A4 currency +!A5 U+0128 Itilde +!A6 U+013B Lcommaaccent +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+0160 Scaron +!AA U+0112 Emacron +!AB U+0122 Gcommaaccent +!AC U+0166 Tbar +!AD U+00AD hyphen +!AE U+017D Zcaron +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+0105 aogonek +!B2 U+02DB ogonek +!B3 U+0157 rcommaaccent +!B4 U+00B4 acute +!B5 U+0129 itilde +!B6 U+013C lcommaaccent +!B7 U+02C7 caron +!B8 U+00B8 cedilla +!B9 U+0161 scaron +!BA U+0113 emacron +!BB U+0123 gcommaaccent +!BC U+0167 tbar +!BD U+014A Eng +!BE U+017E zcaron +!BF U+014B eng +!C0 U+0100 Amacron +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+00C3 Atilde +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+012E Iogonek +!C8 U+010C Ccaron +!C9 U+00C9 Eacute +!CA U+0118 Eogonek +!CB U+00CB Edieresis +!CC U+0116 Edotaccent +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+012A Imacron +!D0 U+0110 Dcroat +!D1 U+0145 Ncommaaccent +!D2 U+014C Omacron +!D3 U+0136 Kcommaaccent +!D4 U+00D4 Ocircumflex +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+0172 Uogonek +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+0168 Utilde +!DE U+016A Umacron +!DF U+00DF germandbls +!E0 U+0101 amacron +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+00E3 atilde +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+012F iogonek +!E8 U+010D ccaron +!E9 U+00E9 eacute +!EA U+0119 eogonek +!EB U+00EB edieresis +!EC U+0117 edotaccent +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+012B imacron +!F0 U+0111 dcroat +!F1 U+0146 ncommaaccent +!F2 U+014D omacron +!F3 U+0137 kcommaaccent +!F4 U+00F4 ocircumflex +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+0173 uogonek +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+0169 utilde +!FE U+016B umacron +!FF U+02D9 dotaccent diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-5.map --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-5.map Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+0401 afii10023 +!A2 U+0402 afii10051 +!A3 U+0403 afii10052 +!A4 U+0404 afii10053 +!A5 U+0405 afii10054 +!A6 U+0406 afii10055 +!A7 U+0407 afii10056 +!A8 U+0408 afii10057 +!A9 U+0409 afii10058 +!AA U+040A afii10059 +!AB U+040B afii10060 +!AC U+040C afii10061 +!AD U+00AD hyphen +!AE U+040E afii10062 +!AF U+040F afii10145 +!B0 U+0410 afii10017 +!B1 U+0411 afii10018 +!B2 U+0412 afii10019 +!B3 U+0413 afii10020 +!B4 U+0414 afii10021 +!B5 U+0415 afii10022 +!B6 U+0416 afii10024 +!B7 U+0417 afii10025 +!B8 U+0418 afii10026 +!B9 U+0419 afii10027 +!BA U+041A afii10028 +!BB U+041B afii10029 +!BC U+041C afii10030 +!BD U+041D afii10031 +!BE U+041E afii10032 +!BF U+041F afii10033 +!C0 U+0420 afii10034 +!C1 U+0421 afii10035 +!C2 U+0422 afii10036 +!C3 U+0423 afii10037 +!C4 U+0424 afii10038 +!C5 U+0425 afii10039 +!C6 U+0426 afii10040 +!C7 U+0427 afii10041 +!C8 U+0428 afii10042 +!C9 U+0429 afii10043 +!CA U+042A afii10044 +!CB U+042B afii10045 +!CC U+042C afii10046 +!CD U+042D afii10047 +!CE U+042E afii10048 +!CF U+042F afii10049 +!D0 U+0430 afii10065 +!D1 U+0431 afii10066 +!D2 U+0432 afii10067 +!D3 U+0433 afii10068 +!D4 U+0434 afii10069 +!D5 U+0435 afii10070 +!D6 U+0436 afii10072 +!D7 U+0437 afii10073 +!D8 U+0438 afii10074 +!D9 U+0439 afii10075 +!DA U+043A afii10076 +!DB U+043B afii10077 +!DC U+043C afii10078 +!DD U+043D afii10079 +!DE U+043E afii10080 +!DF U+043F afii10081 +!E0 U+0440 afii10082 +!E1 U+0441 afii10083 +!E2 U+0442 afii10084 +!E3 U+0443 afii10085 +!E4 U+0444 afii10086 +!E5 U+0445 afii10087 +!E6 U+0446 afii10088 +!E7 U+0447 afii10089 +!E8 U+0448 afii10090 +!E9 U+0449 afii10091 +!EA U+044A afii10092 +!EB U+044B afii10093 +!EC U+044C afii10094 +!ED U+044D afii10095 +!EE U+044E afii10096 +!EF U+044F afii10097 +!F0 U+2116 afii61352 +!F1 U+0451 afii10071 +!F2 U+0452 afii10099 +!F3 U+0453 afii10100 +!F4 U+0454 afii10101 +!F5 U+0455 afii10102 +!F6 U+0456 afii10103 +!F7 U+0457 afii10104 +!F8 U+0458 afii10105 +!F9 U+0459 afii10106 +!FA U+045A afii10107 +!FB U+045B afii10108 +!FC U+045C afii10109 +!FD U+00A7 section +!FE U+045E afii10110 +!FF U+045F afii10193 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-7.map --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-7.map Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,250 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+2018 quoteleft +!A2 U+2019 quoteright +!A3 U+00A3 sterling +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AF U+2015 afii00208 +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+0384 tonos +!B5 U+0385 dieresistonos +!B6 U+0386 Alphatonos +!B7 U+00B7 periodcentered +!B8 U+0388 Epsilontonos +!B9 U+0389 Etatonos +!BA U+038A Iotatonos +!BB U+00BB guillemotright +!BC U+038C Omicrontonos +!BD U+00BD onehalf +!BE U+038E Upsilontonos +!BF U+038F Omegatonos +!C0 U+0390 iotadieresistonos +!C1 U+0391 Alpha +!C2 U+0392 Beta +!C3 U+0393 Gamma +!C4 U+0394 Delta +!C5 U+0395 Epsilon +!C6 U+0396 Zeta +!C7 U+0397 Eta +!C8 U+0398 Theta +!C9 U+0399 Iota +!CA U+039A Kappa +!CB U+039B Lambda +!CC U+039C Mu +!CD U+039D Nu +!CE U+039E Xi +!CF U+039F Omicron +!D0 U+03A0 Pi +!D1 U+03A1 Rho +!D3 U+03A3 Sigma +!D4 U+03A4 Tau +!D5 U+03A5 Upsilon +!D6 U+03A6 Phi +!D7 U+03A7 Chi +!D8 U+03A8 Psi +!D9 U+03A9 Omega +!DA U+03AA Iotadieresis +!DB U+03AB Upsilondieresis +!DC U+03AC alphatonos +!DD U+03AD epsilontonos +!DE U+03AE etatonos +!DF U+03AF iotatonos +!E0 U+03B0 upsilondieresistonos +!E1 U+03B1 alpha +!E2 U+03B2 beta +!E3 U+03B3 gamma +!E4 U+03B4 delta +!E5 U+03B5 epsilon +!E6 U+03B6 zeta +!E7 U+03B7 eta +!E8 U+03B8 theta +!E9 U+03B9 iota +!EA U+03BA kappa +!EB U+03BB lambda +!EC U+03BC mu +!ED U+03BD nu +!EE U+03BE xi +!EF U+03BF omicron +!F0 U+03C0 pi +!F1 U+03C1 rho +!F2 U+03C2 sigma1 +!F3 U+03C3 sigma +!F4 U+03C4 tau +!F5 U+03C5 upsilon +!F6 U+03C6 phi +!F7 U+03C7 chi +!F8 U+03C8 psi +!F9 U+03C9 omega +!FA U+03CA iotadieresis +!FB U+03CB upsilondieresis +!FC U+03CC omicrontonos +!FD U+03CD upsilontonos +!FE U+03CE omegatonos diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-9.map --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/iso-8859-9.map Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+00AA ordfeminine +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00B8 cedilla +!B9 U+00B9 onesuperior +!BA U+00BA ordmasculine +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00BF questiondown +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+00C3 Atilde +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+00CC Igrave +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+011E Gbreve +!D1 U+00D1 Ntilde +!D2 U+00D2 Ograve +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+0130 Idotaccent +!DE U+015E Scedilla +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+00E3 atilde +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+00EC igrave +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+011F gbreve +!F1 U+00F1 ntilde +!F2 U+00F2 ograve +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+0131 dotlessi +!FE U+015F scedilla +!FF U+00FF ydieresis diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/old/makefont/koi8-r.map --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/koi8-r.map Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+2500 SF100000 +!81 U+2502 SF110000 +!82 U+250C SF010000 +!83 U+2510 SF030000 +!84 U+2514 SF020000 +!85 U+2518 SF040000 +!86 U+251C SF080000 +!87 U+2524 SF090000 +!88 U+252C SF060000 +!89 U+2534 SF070000 +!8A U+253C SF050000 +!8B U+2580 upblock +!8C U+2584 dnblock +!8D U+2588 block +!8E U+258C lfblock +!8F U+2590 rtblock +!90 U+2591 ltshade +!91 U+2592 shade +!92 U+2593 dkshade +!93 U+2320 integraltp +!94 U+25A0 filledbox +!95 U+2219 periodcentered +!96 U+221A radical +!97 U+2248 approxequal +!98 U+2264 lessequal +!99 U+2265 greaterequal +!9A U+00A0 space +!9B U+2321 integralbt +!9C U+00B0 degree +!9D U+00B2 twosuperior +!9E U+00B7 periodcentered +!9F U+00F7 divide +!A0 U+2550 SF430000 +!A1 U+2551 SF240000 +!A2 U+2552 SF510000 +!A3 U+0451 afii10071 +!A4 U+2553 SF520000 +!A5 U+2554 SF390000 +!A6 U+2555 SF220000 +!A7 U+2556 SF210000 +!A8 U+2557 SF250000 +!A9 U+2558 SF500000 +!AA U+2559 SF490000 +!AB U+255A SF380000 +!AC U+255B SF280000 +!AD U+255C SF270000 +!AE U+255D SF260000 +!AF U+255E SF360000 +!B0 U+255F SF370000 +!B1 U+2560 SF420000 +!B2 U+2561 SF190000 +!B3 U+0401 afii10023 +!B4 U+2562 SF200000 +!B5 U+2563 SF230000 +!B6 U+2564 SF470000 +!B7 U+2565 SF480000 +!B8 U+2566 SF410000 +!B9 U+2567 SF450000 +!BA U+2568 SF460000 +!BB U+2569 SF400000 +!BC U+256A SF540000 +!BD U+256B SF530000 +!BE U+256C SF440000 +!BF U+00A9 copyright +!C0 U+044E afii10096 +!C1 U+0430 afii10065 +!C2 U+0431 afii10066 +!C3 U+0446 afii10088 +!C4 U+0434 afii10069 +!C5 U+0435 afii10070 +!C6 U+0444 afii10086 +!C7 U+0433 afii10068 +!C8 U+0445 afii10087 +!C9 U+0438 afii10074 +!CA U+0439 afii10075 +!CB U+043A afii10076 +!CC U+043B afii10077 +!CD U+043C afii10078 +!CE U+043D afii10079 +!CF U+043E afii10080 +!D0 U+043F afii10081 +!D1 U+044F afii10097 +!D2 U+0440 afii10082 +!D3 U+0441 afii10083 +!D4 U+0442 afii10084 +!D5 U+0443 afii10085 +!D6 U+0436 afii10072 +!D7 U+0432 afii10067 +!D8 U+044C afii10094 +!D9 U+044B afii10093 +!DA U+0437 afii10073 +!DB U+0448 afii10090 +!DC U+044D afii10095 +!DD U+0449 afii10091 +!DE U+0447 afii10089 +!DF U+044A afii10092 +!E0 U+042E afii10048 +!E1 U+0410 afii10017 +!E2 U+0411 afii10018 +!E3 U+0426 afii10040 +!E4 U+0414 afii10021 +!E5 U+0415 afii10022 +!E6 U+0424 afii10038 +!E7 U+0413 afii10020 +!E8 U+0425 afii10039 +!E9 U+0418 afii10026 +!EA U+0419 afii10027 +!EB U+041A afii10028 +!EC U+041B afii10029 +!ED U+041C afii10030 +!EE U+041D afii10031 +!EF U+041E afii10032 +!F0 U+041F afii10033 +!F1 U+042F afii10049 +!F2 U+0420 afii10034 +!F3 U+0421 afii10035 +!F4 U+0422 afii10036 +!F5 U+0423 afii10037 +!F6 U+0416 afii10024 +!F7 U+0412 afii10019 +!F8 U+042C afii10046 +!F9 U+042B afii10045 +!FA U+0417 afii10025 +!FB U+0428 afii10042 +!FC U+042D afii10047 +!FD U+0429 afii10043 +!FE U+0427 afii10041 +!FF U+042A afii10044 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/old/makefont/koi8-u.map --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/koi8-u.map Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+2500 SF100000 +!81 U+2502 SF110000 +!82 U+250C SF010000 +!83 U+2510 SF030000 +!84 U+2514 SF020000 +!85 U+2518 SF040000 +!86 U+251C SF080000 +!87 U+2524 SF090000 +!88 U+252C SF060000 +!89 U+2534 SF070000 +!8A U+253C SF050000 +!8B U+2580 upblock +!8C U+2584 dnblock +!8D U+2588 block +!8E U+258C lfblock +!8F U+2590 rtblock +!90 U+2591 ltshade +!91 U+2592 shade +!92 U+2593 dkshade +!93 U+2320 integraltp +!94 U+25A0 filledbox +!95 U+2022 bullet +!96 U+221A radical +!97 U+2248 approxequal +!98 U+2264 lessequal +!99 U+2265 greaterequal +!9A U+00A0 space +!9B U+2321 integralbt +!9C U+00B0 degree +!9D U+00B2 twosuperior +!9E U+00B7 periodcentered +!9F U+00F7 divide +!A0 U+2550 SF430000 +!A1 U+2551 SF240000 +!A2 U+2552 SF510000 +!A3 U+0451 afii10071 +!A4 U+0454 afii10101 +!A5 U+2554 SF390000 +!A6 U+0456 afii10103 +!A7 U+0457 afii10104 +!A8 U+2557 SF250000 +!A9 U+2558 SF500000 +!AA U+2559 SF490000 +!AB U+255A SF380000 +!AC U+255B SF280000 +!AD U+0491 afii10098 +!AE U+255D SF260000 +!AF U+255E SF360000 +!B0 U+255F SF370000 +!B1 U+2560 SF420000 +!B2 U+2561 SF190000 +!B3 U+0401 afii10023 +!B4 U+0404 afii10053 +!B5 U+2563 SF230000 +!B6 U+0406 afii10055 +!B7 U+0407 afii10056 +!B8 U+2566 SF410000 +!B9 U+2567 SF450000 +!BA U+2568 SF460000 +!BB U+2569 SF400000 +!BC U+256A SF540000 +!BD U+0490 afii10050 +!BE U+256C SF440000 +!BF U+00A9 copyright +!C0 U+044E afii10096 +!C1 U+0430 afii10065 +!C2 U+0431 afii10066 +!C3 U+0446 afii10088 +!C4 U+0434 afii10069 +!C5 U+0435 afii10070 +!C6 U+0444 afii10086 +!C7 U+0433 afii10068 +!C8 U+0445 afii10087 +!C9 U+0438 afii10074 +!CA U+0439 afii10075 +!CB U+043A afii10076 +!CC U+043B afii10077 +!CD U+043C afii10078 +!CE U+043D afii10079 +!CF U+043E afii10080 +!D0 U+043F afii10081 +!D1 U+044F afii10097 +!D2 U+0440 afii10082 +!D3 U+0441 afii10083 +!D4 U+0442 afii10084 +!D5 U+0443 afii10085 +!D6 U+0436 afii10072 +!D7 U+0432 afii10067 +!D8 U+044C afii10094 +!D9 U+044B afii10093 +!DA U+0437 afii10073 +!DB U+0448 afii10090 +!DC U+044D afii10095 +!DD U+0449 afii10091 +!DE U+0447 afii10089 +!DF U+044A afii10092 +!E0 U+042E afii10048 +!E1 U+0410 afii10017 +!E2 U+0411 afii10018 +!E3 U+0426 afii10040 +!E4 U+0414 afii10021 +!E5 U+0415 afii10022 +!E6 U+0424 afii10038 +!E7 U+0413 afii10020 +!E8 U+0425 afii10039 +!E9 U+0418 afii10026 +!EA U+0419 afii10027 +!EB U+041A afii10028 +!EC U+041B afii10029 +!ED U+041C afii10030 +!EE U+041D afii10031 +!EF U+041E afii10032 +!F0 U+041F afii10033 +!F1 U+042F afii10049 +!F2 U+0420 afii10034 +!F3 U+0421 afii10035 +!F4 U+0422 afii10036 +!F5 U+0423 afii10037 +!F6 U+0416 afii10024 +!F7 U+0412 afii10019 +!F8 U+042C afii10046 +!F9 U+042B afii10045 +!FA U+0417 afii10025 +!FB U+0428 afii10042 +!FC U+042D afii10047 +!FD U+0429 afii10043 +!FE U+0427 afii10041 +!FF U+042A afii10044 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/old/makefont/makefont.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/old/makefont/makefont.php Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,411 @@ + +#***************************************************************************** +# Utility to generate font definition files # +# Version: 1.13 # +# Date: 2004-12-31 # +******************************************************************************# + +function ReadMap($enc) +{ + #Read a map file + $file=dirname(__FILE__) + '/' + $enc.downcase + '.map'; + $a=file($file); + if ($a)) + die('Error: encoding not found: '.$enc); + $cc2gn = [] + foreach($a as $l) + { + if ($l{0}=='!') + { + $e=rtrim($l).scan('/[ \\t]+/'); + $cc=hexdec(substr($e[0],1)); + $gn=$e[2]; + $cc2gn[$cc]=$gn; + end + end + for($i=0;$i<=255;$i++) + { + if (!$cc2gn[$i].nil?) + $cc2gn[$i]='.notdef'; + end + return $cc2gn; +} + +function ReadAFM($file,&$map) +{ + #Read a font metric file + $a=file($file); + if ($a.empty?) + die('File not found'); + $widths = [] + $fm = [] + $fix=Hash.new('Edot'=>'Edotaccent','edot'=>'edotaccent','Idot'=>'Idotaccent','Zdot'=>'Zdotaccent','zdot'=>'zdotaccent', + 'Odblacute'=>'Ohungarumlaut','odblacute'=>'ohungarumlaut','Udblacute'=>'Uhungarumlaut','udblacute'=>'uhungarumlaut', + 'Gcedilla'=>'Gcommaaccent','gcedilla'=>'gcommaaccent','Kcedilla'=>'Kcommaaccent','kcedilla'=>'kcommaaccent', + 'Lcedilla'=>'Lcommaaccent','lcedilla'=>'lcommaaccent','Ncedilla'=>'Ncommaaccent','ncedilla'=>'ncommaaccent', + 'Rcedilla'=>'Rcommaaccent','rcedilla'=>'rcommaaccent','Scedilla'=>'Scommaaccent','scedilla'=>'scommaaccent', + 'Tcedilla'=>'Tcommaaccent','tcedilla'=>'tcommaaccent','Dslash'=>'Dcroat','dslash'=>'dcroat','Dmacron'=>'Dcroat','dmacron'=>'dcroat', + 'combininggraveaccent'=>'gravecomb','combininghookabove'=>'hookabovecomb','combiningtildeaccent'=>'tildecomb', + 'combiningacuteaccent'=>'acutecomb','combiningdotbelow'=>'dotbelowcomb','dongsign'=>'dong'); + foreach($a as $l) + { + $e=explode(' ',rtrim($l)); + if ($e.length<2) + continue; + $code=$e[0]; + $param=$e[1]; + if ($code=='C') + { + #Character metrics + $cc=(int)$e[1]; + $w=$e[4]; + $gn=$e[7]; + if (substr($gn,-4)=='20AC') + $gn='Euro'; + if ($fix[$gn].nil?) + { + #Fix incorrect glyph name + foreach($map as $c=>$n) + { + if ($n==$fix[$gn]) + $map[$c]=$gn; + end + end + if ($map.empty?) + { + #Symbolic font: use built-in encoding + $widths[$cc]=$w; + else + { + $widths[$gn]=$w; + if ($gn=='X') + $fm['CapXHeight']=$e[13]; + end + if ($gn=='.notdef') + $fm['MissingWidth']=$w; + elsif ($code=='FontName') + $fm['FontName']=$param; + elsif ($code=='Weight') + $fm['Weight']=$param; + elsif ($code=='ItalicAngle') + $fm['ItalicAngle']=(double)$param; + elsif ($code=='Ascender') + $fm['Ascender']=(int)$param; + elsif ($code=='Descender') + $fm['Descender']=(int)$param; + elsif ($code=='UnderlineThickness') + $fm['UnderlineThickness']=(int)$param; + elsif ($code=='UnderlinePosition') + $fm['UnderlinePosition']=(int)$param; + elsif ($code=='IsFixedPitch') + $fm['IsFixedPitch']=($param=='true'); + elsif ($code=='FontBBox') + $fm['FontBBox']=Hash.new($e[1],$e[2],$e[3],$e[4]); + elsif ($code=='CapHeight') + $fm['CapHeight']=(int)$param; + elsif ($code=='StdVW') + $fm['StdVW']=(int)$param; + end + if (!$fm['FontName'].nil?) + die('FontName not found'); + if (!$map.empty?) + { + if (!$widths['.notdef'].nil?) + $widths['.notdef']=600; + if (!$widths['Delta'].nil? and $widths['increment'].nil?) + $widths['Delta']=$widths['increment']; + #Order widths according to map + for($i=0;$i<=255;$i++) + { + if (!$widths[$map[$i]].nil?) + { + echo 'Warning: character '.$map[$i].' is missing
    '; + $widths[$i]=$widths['.notdef']; + else + $widths[$i]=$widths[$map[$i]]; + end + end + $fm['Widths']=$widths; + return $fm; +} + +function MakeFontDescriptor($fm,$symbolic) +{ + #Ascent + $asc=($fm['Ascender'].nil? ? $fm['Ascender'] : 1000); + $fd="Hash.new('Ascent'=>".$asc; + #Descent + $desc=($fm['Descender'].nil? ? $fm['Descender'] : -200); + $fd<<",'Descent'=>".$desc; + #CapHeight + if ($fm['CapHeight'].nil?) + $ch=$fm['CapHeight']; + elsif ($fm['CapXHeight'].nil?) + $ch=$fm['CapXHeight']; + else + $ch=$asc; + $fd<<",'CapHeight'=>".$ch; + #Flags + $flags=0; + if ($fm['IsFixedPitch'].nil? and $fm['IsFixedPitch']) + $flags+=1<<0; + if ($symbolic) + $flags+=1<<2; + if (!$symbolic) + $flags+=1<<5; + if ($fm['ItalicAngle'].nil? and $fm['ItalicAngle']!=0) + $flags+=1<<6; + $fd<<",'Flags'=>".$flags; + #FontBBox + if ($fm['FontBBox'].nil?) + $fbb=$fm['FontBBox']; + else + $fbb=Hash.new(0,$des-100,1000,$asc+100); + $fd<<",'FontBBox'=>'[".$fbb[0].' '.$fbb[1].' '.$fbb[2].' '.$fbb[3]."]'"; + #ItalicAngle + $ia=($fm['ItalicAngle'].nil? ? $fm['ItalicAngle'] : 0); + $fd<<",'ItalicAngle'=>".$ia; + #StemV + if ($fm['StdVW'].nil?) + $stemv=$fm['StdVW']; + elsif ($fm['Weight'].nil? and eregi('(bold|black)',$fm['Weight'])) + $stemv=120; + else + $stemv=70; + $fd<<",'StemV'=>".$stemv; + #MissingWidth + if ($fm['MissingWidth'].nil?) + $fd<<",'MissingWidth'=>".$fm['MissingWidth']; + $fd<<')'; + return $fd; +} + +function MakeWidthArray($fm) +{ + #Make character width array + $s="Hash.new(\n\t"; + $cw=$fm['Widths']; + for($i=0;$i<=255;$i++) + { + if ($i.chr=="'") + $s<<"'\\''"; + elsif ($i.chr=="\\") + $s<<"'\\\\'"; + elsif ($i>=32 and $i<=126) + $s<<"'".$i.chr."'"; + else + $s<<"$i.chr"; + $s<<'=>'.$fm['Widths'][$i]; + if ($i<255) + $s<<','; + if (($i+1)%22==0) + $s<<"\n\t"; + end + $s<<')'; + return $s; +} + +function MakeFontEncoding($map) +{ + #Build differences from reference encoding + $ref=ReadMap('cp1252'); + $s=''; + $last=0; + for($i=32;$i<=255;$i++) + { + if ($map[$i]!=$ref[$i]) + { + if ($i!=$last+1) + $s<<$i.' '; + $last=$i; + $s<<'/'.$map[$i].' '; + end + end + return rtrim($s); +} + +function SaveToFile($file,$s,$mode='t') +{ + $f=fopen($file,'w'.$mode); + if (!$f) + die('Can\'t write to file '.$file); + fwrite($f,$s,$s.length); + fclose($f); +} + +function ReadShort($f) +{ + $a=unpack('n1n',fread($f,2)); + return $a['n']; +} + +function ReadLong($f) +{ + $a=unpack('N1N',fread($f,4)); + return $a['N']; +} + +function CheckTTF($file) +{ + #Check if font license allows embedding + $f=fopen($file,'rb'); + if (!$f) + die('Error: Can\'t open '.$file); + #Extract number of tables + fseek($f,4,SEEK_CUR); + $nb=ReadShort($f); + fseek($f,6,SEEK_CUR); + #Seek OS/2 table + $found=false; + for($i=0;$i<$nb;$i++) + { + if (fread($f,4)=='OS/2') + { + $found=true; + break; + end + fseek($f,12,SEEK_CUR); + end + if (!$found) + { + fclose($f); + return; + end + fseek($f,4,SEEK_CUR); + $offset=ReadLong($f); + fseek($f,$offset,SEEK_SET); + #Extract fsType flags + fseek($f,8,SEEK_CUR); + $fsType=ReadShort($f); + $rl=($fsType & 0x02)!=0; + $pp=($fsType & 0x04)!=0; + $e=($fsType & 0x08)!=0; + fclose($f); + if ($rl and !$pp and !$e) + echo 'Warning: font license does not allow embedding'; +} + +#***************************************************************************** +# $fontfile : chemin du fichier TTF (ou chane vide si pas d'incorporation) # +# $afmfile : chemin du fichier AFM # +# $enc : encodage (ou chane vide si la police est symbolique) # +# $patch : patch optionnel pour l'encodage # +# $type : type de la police si $fontfile est vide # +******************************************************************************# +function MakeFont($fontfile,$afmfile,$enc='cp1252',$patch=Hash.new(),$type='TrueType') +{ + #Generate a font definition file + set_magic_quotes_runtime(0); + ini_set('auto_detect_line_endings','1'); + if ($enc) + { + $map=ReadMap($enc); + foreach($patch as $cc=>$gn) + $map[$cc]=$gn; + end + else + $map = [] + if (!file_exists($afmfile)) + die('Error: AFM file not found: '.$afmfile); + $fm=ReadAFM($afmfile,$map); + if ($enc) + $diff=MakeFontEncoding($map); + else + $diff=''; + $fd=MakeFontDescriptor($fm,$map.empty?); + #Find font type + if ($fontfile) + { + $ext=strtolower(substr($fontfile,-3)); + if ($ext=='ttf') + $type='TrueType'; + elsif ($ext=='pfb') + $type='Type1'; + else + die('Error: unrecognized font file extension: '.$ext); + end + else + { + if ($type!='TrueType' and $type!='Type1') + die('Error: incorrect font type: '.$type); + end + #Start generation + $s=''."\n"; + $s<<'$type=\''.$type."';\n"; + $s<<'$name=\''.$fm['FontName']."';\n"; + $s<<'$desc='.$fd.";\n"; + if (!$fm['UnderlinePosition'].nil?) + $fm['UnderlinePosition']=-100; + if (!$fm['UnderlineThickness'].nil?) + $fm['UnderlineThickness']=50; + $s<<'$up='.$fm['UnderlinePosition'].";\n"; + $s<<'$ut='.$fm['UnderlineThickness'].";\n"; + $w=MakeWidthArray($fm); + $s<<'$cw='.$w.";\n"; + $s<<'$enc=\''.$enc."';\n"; + $s<<'$diff=\''.$diff."';\n"; + $basename=substr(basename($afmfile),0,-4); + if ($fontfile) + { + #Embedded font + if (!file_exists($fontfile)) + die('Error: font file not found: '.$fontfile); + if ($type=='TrueType') + CheckTTF($fontfile); + $f=fopen($fontfile,'rb'); + if (!$f) + die('Error: Can\'t open '.$fontfile); + $file=fread($f,filesize($fontfile)); + fclose($f); + if ($type=='Type1') + { + #Find first two sections and discard third one + $header=($file[0][0]==128); + if ($header) + { + #Strip first binary header + $file=substr($file,6); + end + $pos=$file.include?('eexec'); + if (!$pos) + die('Error: font file does not seem to be valid Type1'); + $size1=$pos+6; + if ($header and ?($file{$size1})==128) + { + #Strip second binary header + $file=substr($file,0,$size1).substr($file,$size1+6); + end + $pos=$file.include?('00000000'); + if (!$pos) + die('Error: font file does not seem to be valid Type1'); + $size2=$pos-$size1; + $file=substr($file,0,$size1+$size2); + end + if (respond_to('gzcompress')) + { + $cmp=$basename.'.z'; + SaveToFile($cmp,gzcompress($file),'b'); + $s<<'$file=\''.$cmp."';\n"; + echo 'Font file compressed ('.$cmp.')
    '; + else + { + $s<<'$file=\''.basename($fontfile)."';\n"; + echo 'Notice: font file could not be compressed (zlib extension not available)
    '; + end + if ($type=='Type1') + { + $s<<'$size1='.$size1.";\n"; + $s<<'$size2='.$size2.";\n"; + else + $s<<'$originalsize='.filesize($fontfile).";\n"; + end + else + { + #Not embedded font + $s<<'$file='."'';\n"; + end + $s<<"\n"; + SaveToFile($basename.'.rb',$s); + echo 'Font definition file generated ('.$basename.'.rb'.')
    '; +} + diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/sjis.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/sjis.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,834 @@ +TCPDFFontDescriptor.define('sjis') do |font| + font[:type]='Type0'; + font[:name]='KozMinPro-Regular-Acro'; + font[:desc]={'Ascent'=>995,'Descent'=>-203,'CapHeight'=>6,'Flags'=>32,'FontBBox'=>'[-50 -203 1041 995]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>1000} + font[:up]=-120; + font[:ut]=40 + font[:cMap]='90msp-RKSJ-H' + font[:cw]={ + 0=>1000, 32=>500, 33=>500, 34=>500, 35=>500, 36=>500, 37=>500, 38=>500, 39=>500, 40=>500, 41=>500, 42=>500, 43=>500, 44=>500, 45=>500, 46=>500, + 47=>500, 48=>500, 49=>500, 50=>500, 51=>500, 52=>500, 53=>500, 54=>500, 55=>500, 56=>500, 57=>500, 58=>500, 59=>500, 60=>500, 61=>500, 62=>500, + 63=>500, 64=>500, 65=>500, 66=>500, 67=>500, 68=>500, 69=>500, 70=>500, 71=>500, 72=>500, 73=>500, 74=>500, 75=>500, 76=>500, 77=>500, 78=>500, + 79=>500, 80=>500, 81=>500, 82=>500, 83=>500, 84=>500, 85=>500, 86=>500, 87=>500, 88=>500, 89=>500, 90=>500, 91=>500, 92=>500, 93=>500, 94=>500, + 95=>500, 96=>500, 97=>500, 98=>500, 99=>500, 100=>500, 101=>500, 102=>500, 103=>500, 104=>500, 105=>500, 106=>500, 107=>500, 108=>500, 109=>500, 110=>500, + 111=>500, 112=>500, 113=>500, 114=>500, 115=>500, 116=>500, 117=>500, 118=>500, 119=>500, 120=>500, 121=>500, 122=>500, 123=>500, 124=>500, 125=>500, 126=>500, + 8364=>1000, 402=>500, 8230=>1000, 8224=>1000, 8225=>1000, 710=>500, 8240=>1000, 338=>875, 8216=>1000, 8217=>1000, 8220=>1000, 8221=>1000, 732=>500, 339=>875, 160=>446, 161=>500, + 162=>500, 163=>500, 164=>1000, 165=>500, 166=>500, 167=>1000, 168=>1000, 169=>500, 170=>500, 171=>500, 172=>490, 173=>500, 174=>500, 175=>500, 176=>1000, 177=>1000, + 178=>500, 179=>500, 180=>1000, 181=>500, 182=>1000, 183=>500, 184=>500, 185=>500, 186=>500, 187=>500, 188=>500, 189=>500, 190=>500, 191=>500, 192=>500, 193=>500, + 194=>500, 195=>500, 196=>500, 197=>500, 198=>875, 199=>500, 200=>500, 201=>500, 202=>500, 203=>500, 204=>500, 205=>500, 206=>500, 207=>500, 208=>500, 209=>500, + 210=>500, 211=>500, 212=>500, 213=>500, 214=>500, 215=>1000, 216=>500, 217=>500, 218=>500, 219=>500, 220=>500, 221=>500, 222=>500, 223=>500, 224=>500, 225=>500, + 226=>500, 227=>500, 228=>500, 229=>500, 230=>813, 231=>500, 232=>500, 233=>500, 234=>500, 235=>500, 236=>500, 237=>500, 238=>500, 239=>500, 240=>500, 241=>500, + 242=>500, 243=>500, 244=>500, 245=>500, 246=>500, 247=>1000, 248=>500, 249=>500, 250=>500, 251=>500, 252=>500, 253=>500, 254=>500, 255=>500, 305=>500, 321=>500, + 322=>500, 331=>500, 593=>500, 602=>500, 658=>500, 711=>500, 714=>500, 715=>500, 728=>500, 730=>500, 913=>1000, 914=>1000, 915=>1000, 916=>1000, 917=>1000, 918=>1000, + 919=>1000, 920=>1000, 921=>1000, 922=>1000, 923=>1000, 924=>1000, 925=>1000, 926=>1000, 927=>1000, 928=>1000, 929=>1000, 931=>1000, 932=>1000, 933=>1000, 934=>1000, 935=>1000, + 936=>1000, 937=>1000, 945=>1000, 946=>1000, 947=>1000, 948=>1000, 949=>1000, 950=>1000, 951=>1000, 952=>1000, 953=>1000, 954=>1000, 955=>1000, 956=>1000, 957=>1000, 958=>1000, + 959=>1000, 960=>1000, 961=>1000, 962=>1000, 963=>1000, 964=>1000, 965=>1000, 966=>1000, 967=>1000, 968=>1000, 969=>1000, 977=>1000, 981=>1000, 1025=>1000, 1040=>1000, 1041=>1000, + 1042=>1000, 1043=>1000, 1044=>1000, 1045=>1000, 1046=>1000, 1047=>1000, 1048=>1000, 1049=>1000, 1050=>1000, 1051=>1000, 1052=>1000, 1053=>1000, 1054=>1000, 1055=>1000, 1056=>1000, 1057=>1000, + 1058=>1000, 1059=>1000, 1060=>1000, 1061=>1000, 1062=>1000, 1063=>1000, 1064=>1000, 1065=>1000, 1066=>1000, 1067=>1000, 1068=>1000, 1069=>1000, 1070=>1000, 1071=>1000, 1072=>1000, 1073=>1000, + 1074=>1000, 1075=>1000, 1076=>1000, 1077=>1000, 1078=>1000, 1079=>1000, 1080=>1000, 1081=>1000, 1082=>1000, 1083=>1000, 1084=>1000, 1085=>1000, 1086=>1000, 1087=>1000, 1088=>1000, 1089=>1000, + 1090=>1000, 1091=>1000, 1092=>1000, 1093=>1000, 1094=>1000, 1095=>1000, 1096=>1000, 1097=>1000, 1098=>1000, 1099=>1000, 1100=>1000, 1101=>1000, 1102=>1000, 1103=>1000, 1105=>1000, 8195=>915, + 8208=>1000, 8213=>1000, 8214=>915, 8215=>500, 8229=>1000, 8242=>1000, 8243=>1000, 8251=>1000, 8254=>766, 8451=>1000, 8467=>1000, 8470=>915, 8481=>1000, 8491=>1000, 8544=>915, 8545=>915, + 8546=>915, 8547=>915, 8548=>915, 8549=>915, 8550=>915, 8551=>915, 8552=>915, 8553=>915, 8592=>1000, 8593=>1000, 8594=>1000, 8595=>1000, 8658=>1000, 8660=>1000, 8704=>1000, 8706=>1000, + 8707=>1000, 8711=>1000, 8712=>1000, 8715=>1000, 8722=>915, 8730=>1000, 8733=>1000, 8734=>1000, 8735=>915, 8736=>1000, 8741=>1000, 8743=>1000, 8744=>1000, 8745=>1000, 8746=>1000, 8747=>1000, + 8748=>1000, 8749=>1000, 8750=>915, 8756=>1000, 8757=>1000, 8765=>1000, 8771=>1000, 8786=>1000, 8800=>1000, 8801=>1000, 8806=>1000, 8807=>1000, 8810=>1000, 8811=>1000, 8818=>977, 8819=>977, + 8834=>1000, 8835=>1000, 8838=>1000, 8839=>1000, 8869=>1000, 8895=>915, 8978=>1000, 9312=>1000, 9313=>1000, 9314=>1000, 9315=>1000, 9316=>1000, 9317=>1000, 9318=>1000, 9319=>1000, 9320=>1000, + 9321=>1000, 9322=>1000, 9323=>1000, 9324=>1000, 9325=>1000, 9326=>1000, 9327=>1000, 9328=>1000, 9329=>1000, 9330=>1000, 9331=>1000, 9472=>1000, 9473=>1000, 9474=>1000, 9475=>1000, 9484=>1000, + 9487=>1000, 9488=>1000, 9491=>1000, 9492=>1000, 9495=>1000, 9496=>1000, 9499=>1000, 9500=>1000, 9501=>1000, 9504=>1000, 9507=>1000, 9508=>1000, 9509=>1000, 9512=>1000, 9515=>1000, 9516=>1000, + 9519=>1000, 9520=>1000, 9523=>1000, 9524=>1000, 9527=>1000, 9528=>1000, 9531=>1000, 9532=>1000, 9535=>1000, 9538=>1000, 9547=>1000, 9632=>1000, 9633=>1000, 9634=>977, 9650=>1000, 9651=>1000, + 9660=>1000, 9661=>1000, 9670=>1000, 9671=>1000, 9675=>1000, 9678=>1000, 9679=>1000, 9711=>1000, 9733=>1000, 9734=>1000, 9792=>1000, 9794=>1000, 9825=>977, 9826=>977, 9828=>977, 9831=>977, + 9834=>1000, 9837=>1000, 9839=>1000, 12288=>1000, 12289=>1000, 12290=>1000, 12291=>1000, 12293=>1000, 12294=>1000, 12295=>1000, 12296=>1000, 12297=>1000, 12298=>1000, 12299=>1000, 12300=>1000, 12301=>1000, + 12302=>1000, 12303=>1000, 12304=>1000, 12305=>1000, 12306=>1000, 12307=>1000, 12308=>1000, 12309=>1000, 12316=>1000, 12339=>1000, 12340=>1000, 12341=>1000, 12353=>1000, 12354=>1000, 12355=>1000, 12356=>1000, + 12357=>1000, 12358=>1000, 12359=>1000, 12360=>1000, 12361=>1000, 12362=>1000, 12363=>1000, 12364=>1000, 12365=>1000, 12366=>1000, 12367=>1000, 12368=>1000, 12369=>1000, 12370=>1000, 12371=>1000, 12372=>1000, + 12373=>1000, 12374=>1000, 12375=>1000, 12376=>1000, 12377=>1000, 12378=>1000, 12379=>1000, 12380=>1000, 12381=>1000, 12382=>1000, 12383=>1000, 12384=>1000, 12385=>1000, 12386=>1000, 12387=>1000, 12388=>1000, + 12389=>1000, 12390=>1000, 12391=>1000, 12392=>1000, 12393=>1000, 12394=>1000, 12395=>1000, 12396=>1000, 12397=>1000, 12398=>1000, 12399=>1000, 12400=>1000, 12401=>1000, 12402=>1000, 12403=>1000, 12404=>1000, + 12405=>1000, 12406=>1000, 12407=>1000, 12408=>1000, 12409=>1000, 12410=>1000, 12411=>1000, 12412=>1000, 12413=>1000, 12414=>1000, 12415=>1000, 12416=>1000, 12417=>1000, 12418=>1000, 12419=>1000, 12420=>1000, + 12421=>1000, 12422=>1000, 12423=>1000, 12424=>1000, 12425=>1000, 12426=>1000, 12427=>1000, 12428=>1000, 12429=>1000, 12430=>1000, 12431=>1000, 12432=>1000, 12433=>1000, 12434=>1000, 12435=>1000, 12436=>1000, + 12437=>1000, 12438=>1000, 12443=>1000, 12444=>1000, 12445=>1000, 12446=>1000, 12449=>1000, 12450=>1000, 12451=>1000, 12452=>1000, 12453=>1000, 12454=>1000, 12455=>1000, 12456=>1000, 12457=>1000, 12458=>1000, + 12459=>1000, 12460=>1000, 12461=>1000, 12462=>1000, 12463=>1000, 12464=>1000, 12465=>1000, 12466=>1000, 12467=>1000, 12468=>1000, 12469=>1000, 12470=>1000, 12471=>1000, 12472=>1000, 12473=>1000, 12474=>1000, + 12475=>1000, 12476=>1000, 12477=>1000, 12478=>1000, 12479=>1000, 12480=>1000, 12481=>1000, 12482=>1000, 12483=>1000, 12484=>1000, 12485=>1000, 12486=>1000, 12487=>1000, 12488=>1000, 12489=>1000, 12490=>1000, + 12491=>1000, 12492=>1000, 12493=>1000, 12494=>1000, 12495=>1000, 12496=>1000, 12497=>1000, 12498=>1000, 12499=>1000, 12500=>1000, 12501=>1000, 12502=>1000, 12503=>1000, 12504=>1000, 12505=>1000, 12506=>1000, + 12507=>1000, 12508=>1000, 12509=>1000, 12510=>1000, 12511=>1000, 12512=>1000, 12513=>1000, 12514=>1000, 12515=>1000, 12516=>1000, 12517=>1000, 12518=>1000, 12519=>1000, 12520=>1000, 12521=>1000, 12522=>1000, + 12523=>1000, 12524=>1000, 12525=>1000, 12526=>1000, 12527=>1000, 12528=>1000, 12529=>1000, 12530=>1000, 12531=>1000, 12532=>1000, 12533=>1000, 12534=>1000, 12535=>1000, 12536=>1000, 12537=>1000, 12538=>1000, + 12539=>1000, 12540=>1000, 12541=>1000, 12542=>1000, 12849=>1000, 12850=>915, 12857=>915, 12964=>915, 12965=>915, 12966=>915, 12967=>915, 12968=>915, 13059=>915, 13069=>915, 13076=>915, 13080=>915, + 13090=>915, 13091=>915, 13094=>915, 13095=>915, 13099=>915, 13110=>915, 13115=>915, 13129=>915, 13130=>915, 13133=>915, 13137=>915, 13143=>915, 13179=>915, 13180=>915, 13181=>915, 13182=>915, + 13198=>915, 13199=>915, 13212=>915, 13213=>915, 13214=>915, 13217=>915, 13252=>915, 13259=>1000, 13261=>915, 19968=>1000, 19969=>1000, 19970=>1000, 19971=>1000, 19972=>1000, 19973=>1000, 19975=>1000, + 19976=>1000, 19977=>1000, 19978=>1000, 19979=>1000, 19980=>1000, 19981=>1000, 19982=>1000, 19984=>1000, 19985=>1000, 19986=>1000, 19988=>1000, 19989=>1000, 19990=>1000, 19991=>1000, 19992=>1000, 19993=>1000, + 19998=>1000, 19999=>1000, 20001=>1000, 20003=>1000, 20004=>1000, 20006=>1000, 20008=>1000, 20010=>1000, 20011=>1000, 20013=>1000, 20014=>1000, 20015=>1000, 20016=>1000, 20017=>1000, 20018=>1000, 20021=>1000, + 20022=>1000, 20024=>1000, 20025=>1000, 20027=>1000, 20028=>1000, 20031=>1000, 20032=>1000, 20033=>1000, 20034=>1000, 20035=>1000, 20036=>1000, 20037=>1000, 20039=>1000, 20043=>1000, 20045=>1000, 20046=>1000, + 20047=>1000, 20049=>1000, 20053=>1000, 20054=>1000, 20055=>1000, 20056=>1000, 20057=>1000, 20058=>1000, 20060=>1000, 20061=>1000, 20062=>1000, 20063=>1000, 20066=>1000, 20067=>1000, 20072=>1000, 20073=>1000, + 20081=>1000, 20083=>1000, 20084=>1000, 20085=>1000, 20089=>1000, 20094=>1000, 20095=>1000, 20096=>1000, 20098=>1000, 20101=>1000, 20102=>1000, 20104=>1000, 20105=>1000, 20106=>1000, 20107=>1000, 20108=>1000, + 20109=>1000, 20110=>1000, 20113=>1000, 20114=>1000, 20116=>1000, 20117=>1000, 20118=>1000, 20119=>1000, 20120=>1000, 20121=>1000, 20123=>1000, 20124=>1000, 20125=>1000, 20126=>1000, 20127=>1000, 20128=>1000, + 20129=>1000, 20130=>1000, 20132=>1000, 20133=>1000, 20134=>1000, 20136=>1000, 20139=>1000, 20140=>1000, 20141=>1000, 20142=>1000, 20143=>1000, 20144=>1000, 20147=>1000, 20150=>1000, 20153=>1000, 20154=>1000, + 20160=>1000, 20161=>1000, 20162=>1000, 20163=>1000, 20164=>1000, 20166=>1000, 20167=>1000, 20170=>1000, 20171=>1000, 20173=>1000, 20174=>1000, 20175=>1000, 20176=>1000, 20180=>1000, 20181=>1000, 20182=>1000, + 20183=>1000, 20184=>1000, 20185=>1000, 20186=>1000, 20187=>1000, 20189=>1000, 20190=>1000, 20191=>1000, 20192=>1000, 20193=>1000, 20194=>1000, 20195=>1000, 20196=>1000, 20197=>1000, 20200=>1000, 20205=>1000, + 20206=>1000, 20207=>1000, 20208=>1000, 20209=>1000, 20210=>1000, 20211=>1000, 20213=>1000, 20214=>1000, 20215=>1000, 20219=>1000, 20220=>1000, 20221=>1000, 20222=>1000, 20223=>1000, 20224=>1000, 20225=>1000, + 20226=>1000, 20227=>1000, 20232=>1000, 20233=>1000, 20234=>1000, 20235=>1000, 20236=>1000, 20237=>1000, 20238=>1000, 20239=>1000, 20240=>1000, 20241=>1000, 20242=>1000, 20245=>1000, 20246=>1000, 20247=>1000, + 20249=>1000, 20250=>1000, 20252=>1000, 20253=>1000, 20270=>1000, 20271=>1000, 20272=>1000, 20273=>1000, 20275=>1000, 20276=>1000, 20277=>1000, 20278=>1000, 20279=>1000, 20280=>1000, 20281=>1000, 20282=>1000, + 20283=>1000, 20284=>1000, 20285=>1000, 20286=>1000, 20288=>1000, 20290=>1000, 20291=>1000, 20294=>1000, 20295=>1000, 20296=>1000, 20297=>1000, 20299=>1000, 20300=>1000, 20301=>1000, 20302=>1000, 20303=>1000, + 20304=>1000, 20305=>1000, 20306=>1000, 20307=>1000, 20308=>1000, 20309=>1000, 20310=>1000, 20311=>1000, 20312=>1000, 20313=>1000, 20314=>1000, 20315=>1000, 20316=>1000, 20317=>1000, 20318=>1000, 20319=>1000, + 20320=>1000, 20323=>1000, 20329=>1000, 20330=>1000, 20332=>1000, 20334=>1000, 20335=>1000, 20336=>1000, 20337=>1000, 20339=>1000, 20341=>1000, 20342=>1000, 20343=>1000, 20344=>1000, 20345=>1000, 20346=>1000, + 20347=>1000, 20348=>1000, 20349=>1000, 20350=>1000, 20351=>1000, 20353=>1000, 20354=>1000, 20355=>1000, 20356=>1000, 20357=>1000, 20358=>1000, 20360=>1000, 20361=>1000, 20362=>1000, 20363=>1000, 20364=>1000, + 20365=>1000, 20366=>1000, 20367=>1000, 20368=>1000, 20369=>1000, 20370=>1000, 20371=>1000, 20372=>1000, 20374=>1000, 20375=>1000, 20376=>1000, 20377=>1000, 20378=>1000, 20379=>1000, 20381=>1000, 20382=>1000, + 20383=>1000, 20384=>1000, 20385=>1000, 20395=>1000, 20397=>1000, 20398=>1000, 20399=>1000, 20402=>1000, 20405=>1000, 20406=>1000, 20407=>1000, 20409=>1000, 20411=>1000, 20412=>1000, 20413=>1000, 20414=>1000, + 20415=>1000, 20416=>1000, 20417=>1000, 20418=>1000, 20419=>1000, 20420=>1000, 20421=>1000, 20422=>1000, 20424=>1000, 20425=>1000, 20426=>1000, 20427=>1000, 20428=>1000, 20429=>1000, 20430=>1000, 20431=>1000, + 20432=>1000, 20433=>1000, 20434=>1000, 20436=>1000, 20439=>1000, 20440=>1000, 20442=>1000, 20443=>1000, 20444=>1000, 20445=>1000, 20447=>1000, 20448=>1000, 20449=>1000, 20450=>1000, 20451=>1000, 20452=>1000, + 20453=>1000, 20462=>1000, 20463=>1000, 20464=>1000, 20466=>1000, 20467=>1000, 20469=>1000, 20470=>1000, 20472=>1000, 20474=>1000, 20476=>1000, 20477=>1000, 20478=>1000, 20479=>1000, 20480=>1000, 20481=>1000, + 20484=>1000, 20485=>1000, 20486=>1000, 20487=>1000, 20489=>1000, 20490=>1000, 20491=>1000, 20492=>1000, 20493=>1000, 20494=>1000, 20495=>1000, 20496=>1000, 20497=>1000, 20498=>1000, 20499=>1000, 20500=>1000, + 20502=>1000, 20503=>1000, 20504=>1000, 20505=>1000, 20506=>1000, 20507=>1000, 20508=>1000, 20509=>1000, 20510=>1000, 20511=>1000, 20513=>1000, 20514=>1000, 20515=>1000, 20516=>1000, 20517=>1000, 20518=>1000, + 20519=>1000, 20520=>1000, 20521=>1000, 20522=>1000, 20523=>1000, 20524=>1000, 20525=>1000, 20526=>1000, 20528=>1000, 20530=>1000, 20531=>1000, 20533=>1000, 20534=>1000, 20537=>1000, 20539=>1000, 20544=>1000, + 20545=>1000, 20546=>1000, 20547=>1000, 20549=>1000, 20550=>1000, 20551=>1000, 20552=>1000, 20553=>1000, 20554=>1000, 20556=>1000, 20558=>1000, 20559=>1000, 20560=>1000, 20561=>1000, 20562=>1000, 20563=>1000, + 20565=>1000, 20566=>1000, 20567=>1000, 20569=>1000, 20570=>1000, 20572=>1000, 20575=>1000, 20576=>1000, 20578=>1000, 20579=>1000, 20581=>1000, 20582=>1000, 20583=>1000, 20586=>1000, 20588=>1000, 20589=>1000, + 20592=>1000, 20593=>1000, 20594=>1000, 20596=>1000, 20597=>1000, 20598=>1000, 20600=>1000, 20605=>1000, 20608=>1000, 20609=>1000, 20611=>1000, 20612=>1000, 20613=>1000, 20614=>1000, 20618=>1000, 20621=>1000, + 20622=>1000, 20623=>1000, 20624=>1000, 20625=>1000, 20626=>1000, 20627=>1000, 20628=>1000, 20630=>1000, 20632=>1000, 20633=>1000, 20634=>1000, 20635=>1000, 20636=>1000, 20638=>1000, 20639=>1000, 20640=>1000, + 20641=>1000, 20642=>1000, 20650=>1000, 20652=>1000, 20653=>1000, 20655=>1000, 20656=>1000, 20658=>1000, 20659=>1000, 20660=>1000, 20661=>1000, 20663=>1000, 20665=>1000, 20666=>1000, 20669=>1000, 20670=>1000, + 20672=>1000, 20674=>1000, 20675=>1000, 20676=>1000, 20677=>1000, 20679=>1000, 20681=>1000, 20682=>1000, 20684=>1000, 20685=>1000, 20686=>1000, 20687=>1000, 20688=>1000, 20689=>1000, 20691=>1000, 20692=>1000, + 20693=>1000, 20694=>1000, 20696=>1000, 20698=>1000, 20700=>1000, 20701=>1000, 20702=>1000, 20703=>1000, 20706=>1000, 20707=>1000, 20708=>1000, 20709=>1000, 20710=>1000, 20711=>1000, 20712=>1000, 20713=>1000, + 20717=>1000, 20718=>1000, 20719=>1000, 20721=>1000, 20722=>1000, 20724=>1000, 20725=>1000, 20726=>1000, 20729=>1000, 20730=>1000, 20731=>1000, 20734=>1000, 20736=>1000, 20737=>1000, 20738=>1000, 20739=>1000, + 20740=>1000, 20742=>1000, 20743=>1000, 20744=>1000, 20745=>1000, 20747=>1000, 20748=>1000, 20749=>1000, 20750=>1000, 20752=>1000, 20754=>1000, 20756=>1000, 20757=>1000, 20758=>1000, 20759=>1000, 20760=>1000, + 20761=>1000, 20762=>1000, 20763=>1000, 20764=>1000, 20765=>1000, 20766=>1000, 20767=>1000, 20769=>1000, 20771=>1000, 20775=>1000, 20776=>1000, 20778=>1000, 20780=>1000, 20781=>1000, 20783=>1000, 20785=>1000, + 20786=>1000, 20787=>1000, 20788=>1000, 20789=>1000, 20791=>1000, 20792=>1000, 20793=>1000, 20794=>1000, 20795=>1000, 20796=>1000, 20799=>1000, 20800=>1000, 20801=>1000, 20802=>1000, 20803=>1000, 20804=>1000, + 20805=>1000, 20806=>1000, 20807=>1000, 20808=>1000, 20809=>1000, 20810=>1000, 20811=>1000, 20812=>1000, 20813=>1000, 20814=>1000, 20815=>1000, 20816=>1000, 20818=>1000, 20819=>1000, 20820=>1000, 20821=>1000, + 20823=>1000, 20824=>1000, 20826=>1000, 20828=>1000, 20831=>1000, 20834=>1000, 20836=>1000, 20837=>1000, 20838=>1000, 20840=>1000, 20841=>1000, 20842=>1000, 20843=>1000, 20844=>1000, 20845=>1000, 20846=>1000, + 20849=>1000, 20853=>1000, 20854=>1000, 20855=>1000, 20856=>1000, 20860=>1000, 20862=>1000, 20864=>1000, 20866=>1000, 20867=>1000, 20868=>1000, 20869=>1000, 20870=>1000, 20873=>1000, 20874=>1000, 20875=>1000, + 20876=>1000, 20877=>1000, 20878=>1000, 20879=>1000, 20880=>1000, 20881=>1000, 20882=>1000, 20883=>1000, 20885=>1000, 20886=>1000, 20887=>1000, 20888=>1000, 20889=>1000, 20893=>1000, 20896=>1000, 20897=>1000, + 20898=>1000, 20899=>1000, 20900=>1000, 20901=>1000, 20902=>1000, 20904=>1000, 20905=>1000, 20906=>1000, 20907=>1000, 20908=>1000, 20909=>1000, 20912=>1000, 20913=>1000, 20914=>1000, 20915=>1000, 20916=>1000, + 20917=>1000, 20918=>1000, 20919=>1000, 20920=>1000, 20922=>1000, 20924=>1000, 20925=>1000, 20926=>1000, 20927=>1000, 20930=>1000, 20932=>1000, 20933=>1000, 20934=>1000, 20936=>1000, 20937=>1000, 20939=>1000, + 20940=>1000, 20941=>1000, 20943=>1000, 20945=>1000, 20946=>1000, 20947=>1000, 20949=>1000, 20950=>1000, 20952=>1000, 20955=>1000, 20956=>1000, 20957=>1000, 20958=>1000, 20960=>1000, 20961=>1000, 20962=>1000, + 20965=>1000, 20966=>1000, 20967=>1000, 20969=>1000, 20970=>1000, 20972=>1000, 20973=>1000, 20974=>1000, 20976=>1000, 20977=>1000, 20978=>1000, 20979=>1000, 20980=>1000, 20981=>1000, 20982=>1000, 20983=>1000, + 20984=>1000, 20985=>1000, 20986=>1000, 20989=>1000, 20990=>1000, 20992=>1000, 20993=>1000, 20994=>1000, 20995=>1000, 20996=>1000, 20997=>1000, 20998=>1000, 20999=>1000, 21000=>1000, 21002=>1000, 21003=>1000, + 21006=>1000, 21009=>1000, 21010=>1000, 21011=>1000, 21012=>1000, 21013=>1000, 21014=>1000, 21015=>1000, 21016=>1000, 21021=>1000, 21026=>1000, 21028=>1000, 21029=>1000, 21031=>1000, 21032=>1000, 21033=>1000, + 21034=>1000, 21038=>1000, 21040=>1000, 21041=>1000, 21042=>1000, 21043=>1000, 21045=>1000, 21046=>1000, 21047=>1000, 21048=>1000, 21049=>1000, 21050=>1000, 21051=>1000, 21052=>1000, 21059=>1000, 21060=>1000, + 21061=>1000, 21063=>1000, 21065=>1000, 21066=>1000, 21067=>1000, 21068=>1000, 21069=>1000, 21071=>1000, 21076=>1000, 21077=>1000, 21078=>1000, 21079=>1000, 21080=>1000, 21082=>1000, 21083=>1000, 21084=>1000, + 21086=>1000, 21087=>1000, 21088=>1000, 21089=>1000, 21091=>1000, 21092=>1000, 21093=>1000, 21094=>1000, 21097=>1000, 21098=>1000, 21102=>1000, 21103=>1000, 21104=>1000, 21105=>1000, 21106=>1000, 21107=>1000, + 21108=>1000, 21109=>1000, 21111=>1000, 21112=>1000, 21113=>1000, 21117=>1000, 21119=>1000, 21120=>1000, 21122=>1000, 21123=>1000, 21125=>1000, 21127=>1000, 21128=>1000, 21129=>1000, 21130=>1000, 21132=>1000, + 21133=>1000, 21137=>1000, 21138=>1000, 21139=>1000, 21140=>1000, 21141=>1000, 21142=>1000, 21143=>1000, 21144=>1000, 21146=>1000, 21147=>1000, 21148=>1000, 21151=>1000, 21152=>1000, 21155=>1000, 21156=>1000, + 21157=>1000, 21158=>1000, 21159=>1000, 21161=>1000, 21162=>1000, 21163=>1000, 21164=>1000, 21165=>1000, 21167=>1000, 21168=>1000, 21169=>1000, 21172=>1000, 21173=>1000, 21174=>1000, 21175=>1000, 21176=>1000, + 21177=>1000, 21178=>1000, 21179=>1000, 21180=>1000, 21181=>1000, 21182=>1000, 21184=>1000, 21185=>1000, 21187=>1000, 21188=>1000, 21189=>1000, 21190=>1000, 21191=>1000, 21192=>1000, 21193=>1000, 21196=>1000, + 21197=>1000, 21199=>1000, 21201=>1000, 21202=>1000, 21204=>1000, 21205=>1000, 21206=>1000, 21207=>1000, 21208=>1000, 21209=>1000, 21211=>1000, 21212=>1000, 21213=>1000, 21214=>1000, 21215=>1000, 21216=>1000, + 21217=>1000, 21218=>1000, 21219=>1000, 21220=>1000, 21221=>1000, 21222=>1000, 21223=>1000, 21224=>1000, 21225=>1000, 21226=>1000, 21228=>1000, 21232=>1000, 21233=>1000, 21234=>1000, 21235=>1000, 21236=>1000, + 21237=>1000, 21238=>1000, 21239=>1000, 21240=>1000, 21241=>1000, 21242=>1000, 21246=>1000, 21247=>1000, 21248=>1000, 21249=>1000, 21250=>1000, 21251=>1000, 21253=>1000, 21254=>1000, 21255=>1000, 21256=>1000, + 21258=>1000, 21259=>1000, 21260=>1000, 21261=>1000, 21263=>1000, 21264=>1000, 21265=>1000, 21267=>1000, 21269=>1000, 21270=>1000, 21271=>1000, 21272=>1000, 21273=>1000, 21274=>1000, 21275=>1000, 21276=>1000, + 21277=>1000, 21278=>1000, 21279=>1000, 21280=>1000, 21281=>1000, 21283=>1000, 21284=>1000, 21285=>1000, 21287=>1000, 21288=>1000, 21289=>1000, 21290=>1000, 21291=>1000, 21292=>1000, 21293=>1000, 21295=>1000, + 21296=>1000, 21297=>1000, 21298=>1000, 21299=>1000, 21301=>1000, 21304=>1000, 21305=>1000, 21306=>1000, 21307=>1000, 21308=>1000, 21309=>1000, 21310=>1000, 21311=>1000, 21312=>1000, 21313=>1000, 21314=>1000, + 21315=>1000, 21317=>1000, 21318=>1000, 21319=>1000, 21320=>1000, 21321=>1000, 21322=>1000, 21323=>1000, 21324=>1000, 21325=>1000, 21329=>1000, 21330=>1000, 21331=>1000, 21332=>1000, 21335=>1000, 21336=>1000, + 21337=>1000, 21338=>1000, 21339=>1000, 21340=>1000, 21342=>1000, 21344=>1000, 21345=>1000, 21347=>1000, 21349=>1000, 21350=>1000, 21353=>1000, 21356=>1000, 21357=>1000, 21358=>1000, 21359=>1000, 21360=>1000, + 21361=>1000, 21362=>1000, 21363=>1000, 21364=>1000, 21365=>1000, 21367=>1000, 21368=>1000, 21369=>1000, 21371=>1000, 21374=>1000, 21375=>1000, 21378=>1000, 21379=>1000, 21380=>1000, 21383=>1000, 21384=>1000, + 21390=>1000, 21395=>1000, 21396=>1000, 21398=>1000, 21400=>1000, 21401=>1000, 21402=>1000, 21405=>1000, 21407=>1000, 21408=>1000, 21409=>1000, 21412=>1000, 21413=>1000, 21414=>1000, 21416=>1000, 21417=>1000, + 21418=>1000, 21419=>1000, 21421=>1000, 21422=>1000, 21423=>1000, 21424=>1000, 21426=>1000, 21427=>1000, 21428=>1000, 21429=>1000, 21430=>1000, 21431=>1000, 21432=>1000, 21434=>1000, 21435=>1000, 21437=>1000, + 21440=>1000, 21442=>1000, 21443=>1000, 21445=>1000, 21448=>1000, 21449=>1000, 21450=>1000, 21451=>1000, 21452=>1000, 21453=>1000, 21454=>1000, 21455=>1000, 21458=>1000, 21459=>1000, 21460=>1000, 21461=>1000, + 21462=>1000, 21463=>1000, 21465=>1000, 21466=>1000, 21467=>1000, 21469=>1000, 21470=>1000, 21471=>1000, 21472=>1000, 21473=>1000, 21474=>1000, 21475=>1000, 21476=>1000, 21477=>1000, 21478=>1000, 21479=>1000, + 21480=>1000, 21481=>1000, 21482=>1000, 21483=>1000, 21484=>1000, 21485=>1000, 21486=>1000, 21487=>1000, 21488=>1000, 21489=>1000, 21490=>1000, 21491=>1000, 21493=>1000, 21494=>1000, 21495=>1000, 21496=>1000, + 21498=>1000, 21505=>1000, 21506=>1000, 21507=>1000, 21508=>1000, 21512=>1000, 21513=>1000, 21514=>1000, 21515=>1000, 21516=>1000, 21517=>1000, 21518=>1000, 21519=>1000, 21520=>1000, 21521=>1000, 21523=>1000, + 21530=>1000, 21531=>1000, 21533=>1000, 21535=>1000, 21536=>1000, 21537=>1000, 21542=>1000, 21543=>1000, 21544=>1000, 21545=>1000, 21546=>1000, 21547=>1000, 21548=>1000, 21549=>1000, 21550=>1000, 21551=>1000, + 21553=>1000, 21556=>1000, 21557=>1000, 21558=>1000, 21560=>1000, 21561=>1000, 21563=>1000, 21564=>1000, 21565=>1000, 21566=>1000, 21568=>1000, 21570=>1000, 21571=>1000, 21572=>1000, 21574=>1000, 21575=>1000, + 21576=>1000, 21577=>1000, 21578=>1000, 21581=>1000, 21582=>1000, 21583=>1000, 21585=>1000, 21598=>1000, 21599=>1000, 21602=>1000, 21604=>1000, 21606=>1000, 21607=>1000, 21608=>1000, 21609=>1000, 21610=>1000, + 21611=>1000, 21613=>1000, 21614=>1000, 21616=>1000, 21617=>1000, 21619=>1000, 21620=>1000, 21621=>1000, 21622=>1000, 21623=>1000, 21627=>1000, 21628=>1000, 21629=>1000, 21631=>1000, 21632=>1000, 21633=>1000, + 21635=>1000, 21636=>1000, 21637=>1000, 21638=>1000, 21640=>1000, 21641=>1000, 21642=>1000, 21643=>1000, 21644=>1000, 21645=>1000, 21646=>1000, 21647=>1000, 21648=>1000, 21649=>1000, 21650=>1000, 21653=>1000, + 21654=>1000, 21660=>1000, 21663=>1000, 21665=>1000, 21666=>1000, 21668=>1000, 21669=>1000, 21670=>1000, 21671=>1000, 21672=>1000, 21673=>1000, 21674=>1000, 21675=>1000, 21676=>1000, 21677=>1000, 21678=>1000, + 21679=>1000, 21681=>1000, 21682=>1000, 21683=>1000, 21687=>1000, 21688=>1000, 21689=>1000, 21690=>1000, 21691=>1000, 21692=>1000, 21693=>1000, 21694=>1000, 21695=>1000, 21696=>1000, 21697=>1000, 21698=>1000, + 21700=>1000, 21702=>1000, 21703=>1000, 21704=>1000, 21705=>1000, 21706=>1000, 21709=>1000, 21710=>1000, 21720=>1000, 21728=>1000, 21729=>1000, 21730=>1000, 21733=>1000, 21734=>1000, 21736=>1000, 21737=>1000, + 21738=>1000, 21740=>1000, 21741=>1000, 21742=>1000, 21743=>1000, 21746=>1000, 21750=>1000, 21754=>1000, 21756=>1000, 21757=>1000, 21758=>1000, 21759=>1000, 21760=>1000, 21761=>1000, 21764=>1000, 21765=>1000, + 21766=>1000, 21767=>1000, 21768=>1000, 21769=>1000, 21772=>1000, 21773=>1000, 21774=>1000, 21775=>1000, 21776=>1000, 21780=>1000, 21781=>1000, 21782=>1000, 21802=>1000, 21803=>1000, 21806=>1000, 21807=>1000, + 21809=>1000, 21810=>1000, 21811=>1000, 21813=>1000, 21814=>1000, 21816=>1000, 21817=>1000, 21819=>1000, 21820=>1000, 21821=>1000, 21822=>1000, 21824=>1000, 21825=>1000, 21828=>1000, 21829=>1000, 21830=>1000, + 21831=>1000, 21833=>1000, 21834=>1000, 21836=>1000, 21837=>1000, 21839=>1000, 21840=>1000, 21841=>1000, 21843=>1000, 21846=>1000, 21847=>1000, 21848=>1000, 21850=>1000, 21851=>1000, 21852=>1000, 21853=>1000, + 21854=>1000, 21856=>1000, 21857=>1000, 21859=>1000, 21860=>1000, 21862=>1000, 21883=>1000, 21884=>1000, 21886=>1000, 21887=>1000, 21888=>1000, 21889=>1000, 21890=>1000, 21891=>1000, 21892=>1000, 21894=>1000, + 21895=>1000, 21896=>1000, 21897=>1000, 21898=>1000, 21899=>1000, 21902=>1000, 21903=>1000, 21905=>1000, 21906=>1000, 21907=>1000, 21908=>1000, 21911=>1000, 21912=>1000, 21913=>1000, 21914=>1000, 21916=>1000, + 21917=>1000, 21918=>1000, 21919=>1000, 21923=>1000, 21924=>1000, 21927=>1000, 21928=>1000, 21929=>1000, 21930=>1000, 21931=>1000, 21932=>1000, 21933=>1000, 21934=>1000, 21936=>1000, 21938=>1000, 21942=>1000, + 21951=>1000, 21953=>1000, 21955=>1000, 21956=>1000, 21957=>1000, 21958=>1000, 21959=>1000, 21961=>1000, 21963=>1000, 21964=>1000, 21966=>1000, 21969=>1000, 21970=>1000, 21971=>1000, 21972=>1000, 21975=>1000, + 21976=>1000, 21978=>1000, 21979=>1000, 21980=>1000, 21982=>1000, 21983=>1000, 21986=>1000, 21987=>1000, 21988=>1000, 21993=>1000, 22006=>1000, 22007=>1000, 22009=>1000, 22013=>1000, 22014=>1000, 22015=>1000, + 22021=>1000, 22022=>1000, 22024=>1000, 22025=>1000, 22026=>1000, 22029=>1000, 22030=>1000, 22031=>1000, 22032=>1000, 22033=>1000, 22034=>1000, 22036=>1000, 22038=>1000, 22039=>1000, 22040=>1000, 22041=>1000, + 22043=>1000, 22057=>1000, 22060=>1000, 22063=>1000, 22064=>1000, 22065=>1000, 22066=>1000, 22067=>1000, 22068=>1000, 22069=>1000, 22070=>1000, 22071=>1000, 22072=>1000, 22073=>1000, 22075=>1000, 22076=>1000, + 22077=>1000, 22079=>1000, 22080=>1000, 22081=>1000, 22082=>1000, 22083=>1000, 22084=>1000, 22086=>1000, 22089=>1000, 22091=>1000, 22092=>1000, 22093=>1000, 22094=>1000, 22095=>1000, 22096=>1000, 22100=>1000, + 22107=>1000, 22110=>1000, 22112=>1000, 22113=>1000, 22114=>1000, 22115=>1000, 22116=>1000, 22118=>1000, 22120=>1000, 22121=>1000, 22122=>1000, 22123=>1000, 22124=>1000, 22125=>1000, 22127=>1000, 22129=>1000, + 22130=>1000, 22132=>1000, 22133=>1000, 22136=>1000, 22138=>1000, 22144=>1000, 22148=>1000, 22149=>1000, 22150=>1000, 22151=>1000, 22152=>1000, 22154=>1000, 22155=>1000, 22156=>1000, 22159=>1000, 22164=>1000, + 22165=>1000, 22169=>1000, 22170=>1000, 22173=>1000, 22174=>1000, 22175=>1000, 22176=>1000, 22178=>1000, 22181=>1000, 22182=>1000, 22183=>1000, 22184=>1000, 22185=>1000, 22187=>1000, 22188=>1000, 22189=>1000, + 22190=>1000, 22193=>1000, 22195=>1000, 22196=>1000, 22198=>1000, 22199=>1000, 22204=>1000, 22206=>1000, 22208=>1000, 22209=>1000, 22210=>1000, 22211=>1000, 22213=>1000, 22216=>1000, 22217=>1000, 22218=>1000, + 22219=>1000, 22220=>1000, 22221=>1000, 22222=>1000, 22223=>1000, 22224=>1000, 22225=>1000, 22227=>1000, 22231=>1000, 22232=>1000, 22233=>1000, 22234=>1000, 22235=>1000, 22236=>1000, 22237=>1000, 22238=>1000, + 22239=>1000, 22240=>1000, 22241=>1000, 22243=>1000, 22244=>1000, 22245=>1000, 22246=>1000, 22247=>1000, 22248=>1000, 22251=>1000, 22253=>1000, 22254=>1000, 22256=>1000, 22257=>1000, 22258=>1000, 22259=>1000, + 22262=>1000, 22263=>1000, 22265=>1000, 22266=>1000, 22269=>1000, 22271=>1000, 22272=>1000, 22273=>1000, 22274=>1000, 22275=>1000, 22276=>1000, 22279=>1000, 22280=>1000, 22281=>1000, 22282=>1000, 22283=>1000, + 22284=>1000, 22285=>1000, 22287=>1000, 22289=>1000, 22290=>1000, 22291=>1000, 22293=>1000, 22294=>1000, 22296=>1000, 22298=>1000, 22299=>1000, 22300=>1000, 22301=>1000, 22303=>1000, 22304=>1000, 22306=>1000, + 22307=>1000, 22308=>1000, 22309=>1000, 22310=>1000, 22311=>1000, 22312=>1000, 22313=>1000, 22314=>1000, 22316=>1000, 22317=>1000, 22318=>1000, 22319=>1000, 22320=>1000, 22323=>1000, 22324=>1000, 22327=>1000, + 22328=>1000, 22331=>1000, 22333=>1000, 22334=>1000, 22335=>1000, 22336=>1000, 22338=>1000, 22341=>1000, 22342=>1000, 22343=>1000, 22346=>1000, 22348=>1000, 22349=>1000, 22350=>1000, 22351=>1000, 22352=>1000, + 22353=>1000, 22354=>1000, 22361=>1000, 22369=>1000, 22370=>1000, 22372=>1000, 22373=>1000, 22374=>1000, 22375=>1000, 22376=>1000, 22377=>1000, 22378=>1000, 22379=>1000, 22381=>1000, 22382=>1000, 22383=>1000, + 22384=>1000, 22385=>1000, 22387=>1000, 22388=>1000, 22389=>1000, 22391=>1000, 22393=>1000, 22394=>1000, 22395=>1000, 22396=>1000, 22398=>1000, 22399=>1000, 22401=>1000, 22402=>1000, 22403=>1000, 22408=>1000, + 22409=>1000, 22411=>1000, 22412=>1000, 22419=>1000, 22420=>1000, 22421=>1000, 22423=>1000, 22425=>1000, 22426=>1000, 22428=>1000, 22429=>1000, 22430=>1000, 22431=>1000, 22432=>1000, 22433=>1000, 22434=>1000, + 22435=>1000, 22436=>1000, 22439=>1000, 22440=>1000, 22441=>1000, 22442=>1000, 22444=>1000, 22448=>1000, 22451=>1000, 22456=>1000, 22461=>1000, 22464=>1000, 22467=>1000, 22470=>1000, 22471=>1000, 22472=>1000, + 22475=>1000, 22476=>1000, 22478=>1000, 22479=>1000, 22482=>1000, 22483=>1000, 22484=>1000, 22485=>1000, 22486=>1000, 22492=>1000, 22493=>1000, 22494=>1000, 22495=>1000, 22496=>1000, 22497=>1000, 22499=>1000, + 22500=>1000, 22502=>1000, 22503=>1000, 22505=>1000, 22509=>1000, 22512=>1000, 22516=>1000, 22517=>1000, 22518=>1000, 22519=>1000, 22520=>1000, 22521=>1000, 22522=>1000, 22524=>1000, 22525=>1000, 22526=>1000, + 22527=>1000, 22528=>1000, 22530=>1000, 22531=>1000, 22532=>1000, 22533=>1000, 22534=>1000, 22536=>1000, 22537=>1000, 22538=>1000, 22539=>1000, 22540=>1000, 22541=>1000, 22549=>1000, 22553=>1000, 22555=>1000, + 22557=>1000, 22558=>1000, 22559=>1000, 22560=>1000, 22561=>1000, 22564=>1000, 22566=>1000, 22567=>1000, 22570=>1000, 22573=>1000, 22575=>1000, 22576=>1000, 22577=>1000, 22578=>1000, 22580=>1000, 22581=>1000, + 22585=>1000, 22586=>1000, 22589=>1000, 22591=>1000, 22592=>1000, 22593=>1000, 22601=>1000, 22602=>1000, 22603=>1000, 22604=>1000, 22605=>1000, 22607=>1000, 22608=>1000, 22609=>1000, 22610=>1000, 22612=>1000, + 22613=>1000, 22615=>1000, 22616=>1000, 22617=>1000, 22618=>1000, 22622=>1000, 22623=>1000, 22625=>1000, 22626=>1000, 22628=>1000, 22631=>1000, 22632=>1000, 22633=>1000, 22635=>1000, 22640=>1000, 22642=>1000, + 22645=>1000, 22648=>1000, 22649=>1000, 22652=>1000, 22654=>1000, 22655=>1000, 22656=>1000, 22657=>1000, 22659=>1000, 22661=>1000, 22663=>1000, 22664=>1000, 22665=>1000, 22666=>1000, 22668=>1000, 22669=>1000, + 22671=>1000, 22672=>1000, 22675=>1000, 22676=>1000, 22678=>1000, 22679=>1000, 22684=>1000, 22685=>1000, 22686=>1000, 22687=>1000, 22688=>1000, 22689=>1000, 22690=>1000, 22694=>1000, 22696=>1000, 22697=>1000, + 22699=>1000, 22702=>1000, 22705=>1000, 22706=>1000, 22707=>1000, 22712=>1000, 22713=>1000, 22714=>1000, 22715=>1000, 22716=>1000, 22718=>1000, 22721=>1000, 22722=>1000, 22724=>1000, 22725=>1000, 22727=>1000, + 22728=>1000, 22730=>1000, 22732=>1000, 22733=>1000, 22734=>1000, 22736=>1000, 22737=>1000, 22738=>1000, 22739=>1000, 22740=>1000, 22741=>1000, 22742=>1000, 22743=>1000, 22744=>1000, 22745=>1000, 22746=>1000, + 22748=>1000, 22749=>1000, 22750=>1000, 22751=>1000, 22753=>1000, 22754=>1000, 22756=>1000, 22757=>1000, 22761=>1000, 22763=>1000, 22764=>1000, 22766=>1000, 22767=>1000, 22768=>1000, 22769=>1000, 22770=>1000, + 22771=>1000, 22775=>1000, 22777=>1000, 22778=>1000, 22779=>1000, 22780=>1000, 22781=>1000, 22786=>1000, 22789=>1000, 22790=>1000, 22793=>1000, 22794=>1000, 22795=>1000, 22796=>1000, 22799=>1000, 22800=>1000, + 22802=>1000, 22803=>1000, 22804=>1000, 22805=>1000, 22806=>1000, 22808=>1000, 22809=>1000, 22810=>1000, 22811=>1000, 22812=>1000, 22813=>1000, 22817=>1000, 22818=>1000, 22819=>1000, 22820=>1000, 22821=>1000, + 22823=>1000, 22824=>1000, 22825=>1000, 22826=>1000, 22827=>1000, 22828=>1000, 22829=>1000, 22830=>1000, 22831=>1000, 22832=>1000, 22833=>1000, 22834=>1000, 22835=>1000, 22837=>1000, 22838=>1000, 22839=>1000, + 22840=>1000, 22846=>1000, 22847=>1000, 22851=>1000, 22852=>1000, 22854=>1000, 22855=>1000, 22856=>1000, 22857=>1000, 22862=>1000, 22863=>1000, 22864=>1000, 22865=>1000, 22866=>1000, 22867=>1000, 22868=>1000, + 22869=>1000, 22871=>1000, 22872=>1000, 22873=>1000, 22874=>1000, 22875=>1000, 22877=>1000, 22878=>1000, 22879=>1000, 22880=>1000, 22881=>1000, 22882=>1000, 22883=>1000, 22885=>1000, 22887=>1000, 22888=>1000, + 22889=>1000, 22890=>1000, 22891=>1000, 22892=>1000, 22893=>1000, 22894=>1000, 22895=>1000, 22898=>1000, 22899=>1000, 22900=>1000, 22901=>1000, 22902=>1000, 22904=>1000, 22905=>1000, 22907=>1000, 22908=>1000, + 22909=>1000, 22913=>1000, 22914=>1000, 22915=>1000, 22916=>1000, 22922=>1000, 22923=>1000, 22924=>1000, 22925=>1000, 22926=>1000, 22930=>1000, 22931=>1000, 22933=>1000, 22934=>1000, 22935=>1000, 22937=>1000, + 22939=>1000, 22941=>1000, 22943=>1000, 22947=>1000, 22948=>1000, 22949=>1000, 22951=>1000, 22952=>1000, 22956=>1000, 22957=>1000, 22958=>1000, 22959=>1000, 22960=>1000, 22962=>1000, 22963=>1000, 22967=>1000, + 22969=>1000, 22970=>1000, 22971=>1000, 22972=>1000, 22974=>1000, 22977=>1000, 22979=>1000, 22980=>1000, 22982=>1000, 22984=>1000, 22985=>1000, 22986=>1000, 22987=>1000, 22989=>1000, 22992=>1000, 22993=>1000, + 22994=>1000, 22995=>1000, 22996=>1000, 23001=>1000, 23002=>1000, 23004=>1000, 23005=>1000, 23006=>1000, 23007=>1000, 23011=>1000, 23012=>1000, 23013=>1000, 23014=>1000, 23015=>1000, 23016=>1000, 23018=>1000, + 23019=>1000, 23022=>1000, 23023=>1000, 23025=>1000, 23026=>1000, 23028=>1000, 23030=>1000, 23031=>1000, 23035=>1000, 23039=>1000, 23040=>1000, 23041=>1000, 23043=>1000, 23044=>1000, 23049=>1000, 23052=>1000, + 23053=>1000, 23054=>1000, 23057=>1000, 23058=>1000, 23059=>1000, 23064=>1000, 23066=>1000, 23068=>1000, 23070=>1000, 23071=>1000, 23072=>1000, 23075=>1000, 23076=>1000, 23077=>1000, 23079=>1000, 23080=>1000, + 23081=>1000, 23082=>1000, 23085=>1000, 23087=>1000, 23088=>1000, 23093=>1000, 23094=>1000, 23100=>1000, 23104=>1000, 23105=>1000, 23108=>1000, 23109=>1000, 23110=>1000, 23111=>1000, 23112=>1000, 23113=>1000, + 23116=>1000, 23120=>1000, 23125=>1000, 23130=>1000, 23134=>1000, 23138=>1000, 23139=>1000, 23141=>1000, 23142=>1000, 23143=>1000, 23146=>1000, 23148=>1000, 23149=>1000, 23159=>1000, 23162=>1000, 23163=>1000, + 23166=>1000, 23167=>1000, 23179=>1000, 23184=>1000, 23186=>1000, 23187=>1000, 23190=>1000, 23193=>1000, 23194=>1000, 23195=>1000, 23196=>1000, 23198=>1000, 23199=>1000, 23200=>1000, 23202=>1000, 23207=>1000, + 23212=>1000, 23217=>1000, 23218=>1000, 23219=>1000, 23221=>1000, 23224=>1000, 23226=>1000, 23227=>1000, 23228=>1000, 23229=>1000, 23230=>1000, 23231=>1000, 23233=>1000, 23234=>1000, 23236=>1000, 23238=>1000, + 23240=>1000, 23241=>1000, 23243=>1000, 23244=>1000, 23247=>1000, 23248=>1000, 23254=>1000, 23255=>1000, 23258=>1000, 23260=>1000, 23264=>1000, 23265=>1000, 23267=>1000, 23269=>1000, 23270=>1000, 23273=>1000, + 23274=>1000, 23278=>1000, 23285=>1000, 23286=>1000, 23290=>1000, 23291=>1000, 23293=>1000, 23296=>1000, 23297=>1000, 23304=>1000, 23305=>1000, 23307=>1000, 23308=>1000, 23318=>1000, 23319=>1000, 23321=>1000, + 23323=>1000, 23325=>1000, 23329=>1000, 23330=>1000, 23333=>1000, 23338=>1000, 23340=>1000, 23341=>1000, 23344=>1000, 23346=>1000, 23348=>1000, 23350=>1000, 23352=>1000, 23358=>1000, 23360=>1000, 23361=>1000, + 23363=>1000, 23365=>1000, 23371=>1000, 23372=>1000, 23376=>1000, 23377=>1000, 23378=>1000, 23380=>1000, 23381=>1000, 23382=>1000, 23383=>1000, 23384=>1000, 23386=>1000, 23387=>1000, 23388=>1000, 23389=>1000, + 23390=>1000, 23391=>1000, 23395=>1000, 23396=>1000, 23397=>1000, 23398=>1000, 23400=>1000, 23401=>1000, 23403=>1000, 23406=>1000, 23407=>1000, 23408=>1000, 23409=>1000, 23411=>1000, 23413=>1000, 23416=>1000, + 23418=>1000, 23420=>1000, 23421=>1000, 23422=>1000, 23423=>1000, 23424=>1000, 23425=>1000, 23427=>1000, 23428=>1000, 23429=>1000, 23430=>1000, 23431=>1000, 23432=>1000, 23433=>1000, 23434=>1000, 23435=>1000, + 23436=>1000, 23437=>1000, 23438=>1000, 23439=>1000, 23440=>1000, 23441=>1000, 23443=>1000, 23444=>1000, 23445=>1000, 23446=>1000, 23447=>1000, 23448=>1000, 23449=>1000, 23450=>1000, 23451=>1000, 23452=>1000, + 23453=>1000, 23455=>1000, 23458=>1000, 23459=>1000, 23460=>1000, 23461=>1000, 23462=>1000, 23464=>1000, 23465=>1000, 23468=>1000, 23469=>1000, 23470=>1000, 23471=>1000, 23472=>1000, 23473=>1000, 23474=>1000, + 23475=>1000, 23476=>1000, 23477=>1000, 23478=>1000, 23479=>1000, 23480=>1000, 23481=>1000, 23482=>1000, 23484=>1000, 23487=>1000, 23488=>1000, 23489=>1000, 23490=>1000, 23491=>1000, 23492=>1000, 23493=>1000, + 23494=>1000, 23495=>1000, 23497=>1000, 23500=>1000, 23501=>1000, 23503=>1000, 23504=>1000, 23506=>1000, 23507=>1000, 23508=>1000, 23510=>1000, 23511=>1000, 23512=>1000, 23513=>1000, 23514=>1000, 23515=>1000, + 23517=>1000, 23518=>1000, 23519=>1000, 23520=>1000, 23521=>1000, 23522=>1000, 23524=>1000, 23525=>1000, 23526=>1000, 23527=>1000, 23528=>1000, 23529=>1000, 23531=>1000, 23532=>1000, 23534=>1000, 23535=>1000, + 23536=>1000, 23537=>1000, 23539=>1000, 23540=>1000, 23541=>1000, 23542=>1000, 23544=>1000, 23546=>1000, 23549=>1000, 23550=>1000, 23551=>1000, 23553=>1000, 23554=>1000, 23556=>1000, 23557=>1000, 23558=>1000, + 23559=>1000, 23560=>1000, 23561=>1000, 23562=>1000, 23563=>1000, 23564=>1000, 23565=>1000, 23566=>1000, 23567=>1000, 23569=>1000, 23571=>1000, 23574=>1000, 23575=>1000, 23578=>1000, 23582=>1000, 23583=>1000, + 23584=>1000, 23586=>1000, 23587=>1000, 23588=>1000, 23590=>1000, 23592=>1000, 23593=>1000, 23595=>1000, 23596=>1000, 23597=>1000, 23598=>1000, 23600=>1000, 23601=>1000, 23602=>1000, 23605=>1000, 23606=>1000, + 23608=>1000, 23609=>1000, 23610=>1000, 23611=>1000, 23612=>1000, 23613=>1000, 23614=>1000, 23615=>1000, 23616=>1000, 23617=>1000, 23621=>1000, 23622=>1000, 23624=>1000, 23626=>1000, 23627=>1000, 23629=>1000, + 23630=>1000, 23631=>1000, 23632=>1000, 23633=>1000, 23635=>1000, 23637=>1000, 23641=>1000, 23642=>1000, 23644=>1000, 23646=>1000, 23648=>1000, 23649=>1000, 23650=>1000, 23651=>1000, 23652=>1000, 23653=>1000, + 23655=>1000, 23656=>1000, 23657=>1000, 23660=>1000, 23661=>1000, 23662=>1000, 23663=>1000, 23664=>1000, 23665=>1000, 23668=>1000, 23669=>1000, 23670=>1000, 23673=>1000, 23674=>1000, 23675=>1000, 23676=>1000, + 23677=>1000, 23687=>1000, 23688=>1000, 23690=>1000, 23692=>1000, 23695=>1000, 23696=>1000, 23697=>1000, 23698=>1000, 23700=>1000, 23709=>1000, 23711=>1000, 23712=>1000, 23713=>1000, 23714=>1000, 23715=>1000, + 23718=>1000, 23720=>1000, 23721=>1000, 23722=>1000, 23723=>1000, 23724=>1000, 23729=>1000, 23730=>1000, 23731=>1000, 23732=>1000, 23733=>1000, 23734=>1000, 23735=>1000, 23736=>1000, 23738=>1000, 23739=>1000, + 23740=>1000, 23742=>1000, 23749=>1000, 23751=>1000, 23753=>1000, 23755=>1000, 23762=>1000, 23767=>1000, 23769=>1000, 23773=>1000, 23776=>1000, 23777=>1000, 23784=>1000, 23785=>1000, 23786=>1000, 23789=>1000, + 23790=>1000, 23791=>1000, 23792=>1000, 23793=>1000, 23794=>1000, 23796=>1000, 23797=>1000, 23798=>1000, 23802=>1000, 23803=>1000, 23805=>1000, 23809=>1000, 23814=>1000, 23815=>1000, 23819=>1000, 23821=>1000, + 23822=>1000, 23825=>1000, 23826=>1000, 23828=>1000, 23829=>1000, 23830=>1000, 23831=>1000, 23832=>1000, 23833=>1000, 23834=>1000, 23835=>1000, 23839=>1000, 23842=>1000, 23843=>1000, 23844=>1000, 23846=>1000, + 23847=>1000, 23849=>1000, 23851=>1000, 23857=>1000, 23860=>1000, 23865=>1000, 23869=>1000, 23871=>1000, 23874=>1000, 23875=>1000, 23878=>1000, 23880=>1000, 23882=>1000, 23883=>1000, 23884=>1000, 23886=>1000, + 23888=>1000, 23889=>1000, 23890=>1000, 23893=>1000, 23897=>1000, 23900=>1000, 23903=>1000, 23904=>1000, 23905=>1000, 23906=>1000, 23908=>1000, 23913=>1000, 23914=>1000, 23916=>1000, 23917=>1000, 23919=>1000, + 23920=>1000, 23923=>1000, 23926=>1000, 23929=>1000, 23930=>1000, 23934=>1000, 23935=>1000, 23937=>1000, 23938=>1000, 23939=>1000, 23940=>1000, 23943=>1000, 23944=>1000, 23946=>1000, 23947=>1000, 23948=>1000, + 23952=>1000, 23954=>1000, 23955=>1000, 23956=>1000, 23957=>1000, 23961=>1000, 23963=>1000, 23965=>1000, 23967=>1000, 23968=>1000, 23970=>1000, 23975=>1000, 23979=>1000, 23980=>1000, 23982=>1000, 23984=>1000, + 23986=>1000, 23988=>1000, 23991=>1000, 23992=>1000, 23993=>1000, 23994=>1000, 23996=>1000, 23997=>1000, 24003=>1000, 24007=>1000, 24009=>1000, 24011=>1000, 24012=>1000, 24013=>1000, 24014=>1000, 24016=>1000, + 24018=>1000, 24019=>1000, 24022=>1000, 24024=>1000, 24025=>1000, 24027=>1000, 24029=>1000, 24030=>1000, 24032=>1000, 24033=>1000, 24035=>1000, 24036=>1000, 24037=>1000, 24038=>1000, 24039=>1000, 24040=>1000, + 24041=>1000, 24043=>1000, 24046=>1000, 24049=>1000, 24050=>1000, 24051=>1000, 24052=>1000, 24053=>1000, 24055=>1000, 24056=>1000, 24057=>1000, 24059=>1000, 24061=>1000, 24062=>1000, 24064=>1000, 24066=>1000, + 24067=>1000, 24070=>1000, 24071=>1000, 24075=>1000, 24076=>1000, 24077=>1000, 24081=>1000, 24082=>1000, 24084=>1000, 24085=>1000, 24086=>1000, 24088=>1000, 24089=>1000, 24090=>1000, 24091=>1000, 24093=>1000, + 24095=>1000, 24096=>1000, 24101=>1000, 24104=>1000, 24107=>1000, 24109=>1000, 24110=>1000, 24111=>1000, 24112=>1000, 24114=>1000, 24115=>1000, 24117=>1000, 24118=>1000, 24119=>1000, 24120=>1000, 24125=>1000, + 24126=>1000, 24128=>1000, 24131=>1000, 24132=>1000, 24133=>1000, 24135=>1000, 24137=>1000, 24139=>1000, 24140=>1000, 24142=>1000, 24144=>1000, 24145=>1000, 24148=>1000, 24149=>1000, 24150=>1000, 24151=>1000, + 24152=>1000, 24155=>1000, 24156=>1000, 24158=>1000, 24159=>1000, 24161=>1000, 24162=>1000, 24163=>1000, 24164=>1000, 24168=>1000, 24170=>1000, 24171=>1000, 24172=>1000, 24173=>1000, 24174=>1000, 24176=>1000, + 24178=>1000, 24179=>1000, 24180=>1000, 24181=>1000, 24182=>1000, 24184=>1000, 24185=>1000, 24186=>1000, 24187=>1000, 24188=>1000, 24189=>1000, 24190=>1000, 24191=>1000, 24192=>1000, 24193=>1000, 24195=>1000, + 24196=>1000, 24199=>1000, 24202=>1000, 24203=>1000, 24206=>1000, 24207=>1000, 24213=>1000, 24214=>1000, 24215=>1000, 24218=>1000, 24220=>1000, 24224=>1000, 24226=>1000, 24228=>1000, 24229=>1000, 24230=>1000, + 24231=>1000, 24232=>1000, 24234=>1000, 24235=>1000, 24236=>1000, 24237=>1000, 24241=>1000, 24243=>1000, 24245=>1000, 24246=>1000, 24247=>1000, 24248=>1000, 24253=>1000, 24254=>1000, 24255=>1000, 24257=>1000, + 24258=>1000, 24259=>1000, 24262=>1000, 24264=>1000, 24265=>1000, 24266=>1000, 24267=>1000, 24268=>1000, 24270=>1000, 24271=>1000, 24272=>1000, 24273=>1000, 24274=>1000, 24275=>1000, 24276=>1000, 24277=>1000, + 24278=>1000, 24282=>1000, 24283=>1000, 24284=>1000, 24285=>1000, 24286=>1000, 24287=>1000, 24288=>1000, 24289=>1000, 24290=>1000, 24291=>1000, 24293=>1000, 24296=>1000, 24297=>1000, 24299=>1000, 24300=>1000, + 24304=>1000, 24305=>1000, 24307=>1000, 24308=>1000, 24310=>1000, 24311=>1000, 24312=>1000, 24314=>1000, 24315=>1000, 24316=>1000, 24318=>1000, 24319=>1000, 24321=>1000, 24322=>1000, 24323=>1000, 24324=>1000, + 24326=>1000, 24327=>1000, 24328=>1000, 24329=>1000, 24330=>1000, 24331=>1000, 24332=>1000, 24333=>1000, 24334=>1000, 24335=>1000, 24336=>1000, 24337=>1000, 24339=>1000, 24340=>1000, 24341=>1000, 24342=>1000, + 24343=>1000, 24344=>1000, 24345=>1000, 24347=>1000, 24348=>1000, 24349=>1000, 24351=>1000, 24353=>1000, 24354=>1000, 24355=>1000, 24356=>1000, 24357=>1000, 24358=>1000, 24359=>1000, 24360=>1000, 24361=>1000, + 24363=>1000, 24364=>1000, 24365=>1000, 24366=>1000, 24367=>1000, 24368=>1000, 24369=>1000, 24372=>1000, 24373=>1000, 24374=>1000, 24375=>1000, 24376=>1000, 24379=>1000, 24380=>1000, 24381=>1000, 24382=>1000, + 24383=>1000, 24384=>1000, 24385=>1000, 24388=>1000, 24389=>1000, 24391=>1000, 24392=>1000, 24394=>1000, 24396=>1000, 24397=>1000, 24398=>1000, 24400=>1000, 24401=>1000, 24403=>1000, 24404=>1000, 24406=>1000, + 24407=>1000, 24408=>1000, 24409=>1000, 24411=>1000, 24412=>1000, 24413=>1000, 24416=>1000, 24417=>1000, 24418=>1000, 24419=>1000, 24420=>1000, 24422=>1000, 24423=>1000, 24425=>1000, 24426=>1000, 24427=>1000, + 24428=>1000, 24429=>1000, 24431=>1000, 24432=>1000, 24433=>1000, 24434=>1000, 24435=>1000, 24436=>1000, 24437=>1000, 24439=>1000, 24440=>1000, 24441=>1000, 24442=>1000, 24444=>1000, 24445=>1000, 24446=>1000, + 24447=>1000, 24448=>1000, 24449=>1000, 24450=>1000, 24451=>1000, 24452=>1000, 24453=>1000, 24455=>1000, 24456=>1000, 24457=>1000, 24458=>1000, 24459=>1000, 24460=>1000, 24461=>1000, 24463=>1000, 24464=>1000, + 24465=>1000, 24466=>1000, 24467=>1000, 24470=>1000, 24471=>1000, 24472=>1000, 24473=>1000, 24476=>1000, 24477=>1000, 24478=>1000, 24480=>1000, 24481=>1000, 24482=>1000, 24484=>1000, 24487=>1000, 24488=>1000, + 24489=>1000, 24490=>1000, 24491=>1000, 24492=>1000, 24493=>1000, 24494=>1000, 24495=>1000, 24496=>1000, 24497=>1000, 24499=>1000, 24500=>1000, 24503=>1000, 24504=>1000, 24505=>1000, 24508=>1000, 24509=>1000, + 24515=>1000, 24516=>1000, 24517=>1000, 24519=>1000, 24520=>1000, 24521=>1000, 24523=>1000, 24524=>1000, 24525=>1000, 24528=>1000, 24529=>1000, 24530=>1000, 24531=>1000, 24532=>1000, 24534=>1000, 24535=>1000, + 24536=>1000, 24537=>1000, 24540=>1000, 24541=>1000, 24542=>1000, 24544=>1000, 24545=>1000, 24546=>1000, 24548=>1000, 24552=>1000, 24553=>1000, 24554=>1000, 24555=>1000, 24556=>1000, 24557=>1000, 24558=>1000, + 24559=>1000, 24560=>1000, 24561=>1000, 24562=>1000, 24563=>1000, 24565=>1000, 24566=>1000, 24568=>1000, 24570=>1000, 24571=>1000, 24572=>1000, 24573=>1000, 24575=>1000, 24583=>1000, 24586=>1000, 24589=>1000, + 24590=>1000, 24591=>1000, 24592=>1000, 24594=>1000, 24595=>1000, 24596=>1000, 24597=>1000, 24598=>1000, 24599=>1000, 24600=>1000, 24601=>1000, 24602=>1000, 24603=>1000, 24604=>1000, 24605=>1000, 24607=>1000, + 24608=>1000, 24609=>1000, 24612=>1000, 24613=>1000, 24614=>1000, 24615=>1000, 24616=>1000, 24617=>1000, 24618=>1000, 24619=>1000, 24621=>1000, 24623=>1000, 24625=>1000, 24627=>1000, 24629=>1000, 24634=>1000, + 24640=>1000, 24641=>1000, 24642=>1000, 24643=>1000, 24646=>1000, 24647=>1000, 24648=>1000, 24649=>1000, 24650=>1000, 24651=>1000, 24652=>1000, 24653=>1000, 24656=>1000, 24657=>1000, 24658=>1000, 24660=>1000, + 24661=>1000, 24662=>1000, 24663=>1000, 24665=>1000, 24666=>1000, 24669=>1000, 24671=>1000, 24672=>1000, 24673=>1000, 24674=>1000, 24675=>1000, 24676=>1000, 24677=>1000, 24679=>1000, 24680=>1000, 24681=>1000, + 24682=>1000, 24683=>1000, 24684=>1000, 24685=>1000, 24687=>1000, 24688=>1000, 24689=>1000, 24693=>1000, 24695=>1000, 24702=>1000, 24703=>1000, 24705=>1000, 24706=>1000, 24707=>1000, 24708=>1000, 24709=>1000, + 24710=>1000, 24712=>1000, 24713=>1000, 24714=>1000, 24715=>1000, 24716=>1000, 24717=>1000, 24718=>1000, 24721=>1000, 24722=>1000, 24723=>1000, 24724=>1000, 24725=>1000, 24726=>1000, 24727=>1000, 24728=>1000, + 24730=>1000, 24731=>1000, 24733=>1000, 24734=>1000, 24735=>1000, 24736=>1000, 24738=>1000, 24739=>1000, 24740=>1000, 24741=>1000, 24742=>1000, 24743=>1000, 24744=>1000, 24745=>1000, 24746=>1000, 24752=>1000, + 24753=>1000, 24754=>1000, 24755=>1000, 24756=>1000, 24757=>1000, 24758=>1000, 24759=>1000, 24760=>1000, 24763=>1000, 24764=>1000, 24765=>1000, 24766=>1000, 24770=>1000, 24772=>1000, 24773=>1000, 24774=>1000, + 24775=>1000, 24776=>1000, 24777=>1000, 24778=>1000, 24779=>1000, 24782=>1000, 24783=>1000, 24785=>1000, 24787=>1000, 24788=>1000, 24789=>1000, 24792=>1000, 24793=>1000, 24794=>1000, 24795=>1000, 24796=>1000, + 24797=>1000, 24798=>1000, 24799=>1000, 24800=>1000, 24801=>1000, 24802=>1000, 24803=>1000, 24805=>1000, 24807=>1000, 24808=>1000, 24816=>1000, 24817=>1000, 24818=>1000, 24819=>1000, 24820=>1000, 24821=>1000, + 24822=>1000, 24823=>1000, 24824=>1000, 24825=>1000, 24826=>1000, 24827=>1000, 24828=>1000, 24829=>1000, 24832=>1000, 24833=>1000, 24834=>1000, 24835=>1000, 24838=>1000, 24839=>1000, 24840=>1000, 24841=>1000, + 24842=>1000, 24844=>1000, 24845=>1000, 24846=>1000, 24847=>1000, 24848=>1000, 24849=>1000, 24850=>1000, 24851=>1000, 24852=>1000, 24853=>1000, 24854=>1000, 24855=>1000, 24857=>1000, 24858=>1000, 24859=>1000, + 24860=>1000, 24862=>1000, 24863=>1000, 24864=>1000, 24865=>1000, 24866=>1000, 24871=>1000, 24872=>1000, 24874=>1000, 24875=>1000, 24876=>1000, 24880=>1000, 24881=>1000, 24884=>1000, 24885=>1000, 24886=>1000, + 24887=>1000, 24889=>1000, 24892=>1000, 24893=>1000, 24894=>1000, 24895=>1000, 24897=>1000, 24898=>1000, 24900=>1000, 24901=>1000, 24902=>1000, 24903=>1000, 24904=>1000, 24905=>1000, 24906=>1000, 24907=>1000, + 24908=>1000, 24909=>1000, 24910=>1000, 24915=>1000, 24917=>1000, 24920=>1000, 24921=>1000, 24922=>1000, 24925=>1000, 24926=>1000, 24927=>1000, 24928=>1000, 24930=>1000, 24931=>1000, 24933=>1000, 24935=>1000, + 24936=>1000, 24939=>1000, 24940=>1000, 24942=>1000, 24943=>1000, 24944=>1000, 24945=>1000, 24946=>1000, 24947=>1000, 24948=>1000, 24949=>1000, 24950=>1000, 24951=>1000, 24952=>1000, 24955=>1000, 24956=>1000, + 24958=>1000, 24959=>1000, 24960=>1000, 24961=>1000, 24962=>1000, 24963=>1000, 24964=>1000, 24967=>1000, 24970=>1000, 24971=>1000, 24973=>1000, 24974=>1000, 24976=>1000, 24977=>1000, 24978=>1000, 24979=>1000, + 24980=>1000, 24982=>1000, 24983=>1000, 24984=>1000, 24985=>1000, 24986=>1000, 24988=>1000, 24989=>1000, 24991=>1000, 24992=>1000, 24996=>1000, 24997=>1000, 24999=>1000, 25000=>1000, 25001=>1000, 25002=>1000, + 25003=>1000, 25004=>1000, 25005=>1000, 25006=>1000, 25010=>1000, 25014=>1000, 25016=>1000, 25017=>1000, 25018=>1000, 25020=>1000, 25022=>1000, 25024=>1000, 25025=>1000, 25026=>1000, 25027=>1000, 25030=>1000, + 25031=>1000, 25032=>1000, 25033=>1000, 25034=>1000, 25035=>1000, 25036=>1000, 25037=>1000, 25038=>1000, 25039=>1000, 25040=>1000, 25045=>1000, 25052=>1000, 25053=>1000, 25054=>1000, 25055=>1000, 25057=>1000, + 25058=>1000, 25059=>1000, 25061=>1000, 25062=>1000, 25063=>1000, 25065=>1000, 25068=>1000, 25069=>1000, 25071=>1000, 25074=>1000, 25076=>1000, 25078=>1000, 25079=>1000, 25080=>1000, 25082=>1000, 25084=>1000, + 25085=>1000, 25086=>1000, 25087=>1000, 25088=>1000, 25089=>1000, 25091=>1000, 25092=>1000, 25095=>1000, 25096=>1000, 25097=>1000, 25098=>1000, 25100=>1000, 25101=>1000, 25102=>1000, 25104=>1000, 25105=>1000, + 25106=>1000, 25107=>1000, 25108=>1000, 25109=>1000, 25110=>1000, 25114=>1000, 25115=>1000, 25116=>1000, 25117=>1000, 25118=>1000, 25119=>1000, 25120=>1000, 25121=>1000, 25122=>1000, 25123=>1000, 25126=>1000, + 25127=>1000, 25129=>1000, 25130=>1000, 25131=>1000, 25134=>1000, 25135=>1000, 25136=>1000, 25138=>1000, 25139=>1000, 25140=>1000, 25144=>1000, 25145=>1000, 25147=>1000, 25149=>1000, 25151=>1000, 25152=>1000, + 25153=>1000, 25154=>1000, 25155=>1000, 25156=>1000, 25158=>1000, 25159=>1000, 25160=>1000, 25161=>1000, 25163=>1000, 25164=>1000, 25165=>1000, 25166=>1000, 25168=>1000, 25169=>1000, 25170=>1000, 25171=>1000, + 25172=>1000, 25173=>1000, 25174=>1000, 25176=>1000, 25178=>1000, 25179=>1000, 25180=>1000, 25182=>1000, 25184=>1000, 25187=>1000, 25188=>1000, 25192=>1000, 25197=>1000, 25198=>1000, 25199=>1000, 25201=>1000, + 25203=>1000, 25206=>1000, 25209=>1000, 25210=>1000, 25212=>1000, 25213=>1000, 25214=>1000, 25215=>1000, 25216=>1000, 25218=>1000, 25219=>1000, 25220=>1000, 25225=>1000, 25226=>1000, 25229=>1000, 25230=>1000, + 25231=>1000, 25232=>1000, 25233=>1000, 25234=>1000, 25235=>1000, 25236=>1000, 25237=>1000, 25238=>1000, 25239=>1000, 25240=>1000, 25243=>1000, 25244=>1000, 25246=>1000, 25254=>1000, 25256=>1000, 25259=>1000, + 25260=>1000, 25265=>1000, 25267=>1000, 25269=>1000, 25270=>1000, 25271=>1000, 25273=>1000, 25274=>1000, 25275=>1000, 25276=>1000, 25277=>1000, 25278=>1000, 25279=>1000, 25282=>1000, 25284=>1000, 25285=>1000, + 25286=>1000, 25287=>1000, 25288=>1000, 25289=>1000, 25290=>1000, 25292=>1000, 25293=>1000, 25294=>1000, 25295=>1000, 25296=>1000, 25297=>1000, 25298=>1000, 25299=>1000, 25300=>1000, 25301=>1000, 25302=>1000, + 25303=>1000, 25304=>1000, 25305=>1000, 25306=>1000, 25307=>1000, 25308=>1000, 25309=>1000, 25312=>1000, 25313=>1000, 25322=>1000, 25324=>1000, 25325=>1000, 25326=>1000, 25327=>1000, 25329=>1000, 25330=>1000, + 25331=>1000, 25332=>1000, 25333=>1000, 25334=>1000, 25335=>1000, 25340=>1000, 25341=>1000, 25342=>1000, 25343=>1000, 25345=>1000, 25346=>1000, 25347=>1000, 25348=>1000, 25351=>1000, 25352=>1000, 25353=>1000, + 25354=>1000, 25355=>1000, 25356=>1000, 25357=>1000, 25360=>1000, 25361=>1000, 25363=>1000, 25366=>1000, 25368=>1000, 25369=>1000, 25375=>1000, 25383=>1000, 25384=>1000, 25385=>1000, 25386=>1000, 25387=>1000, + 25389=>1000, 25391=>1000, 25397=>1000, 25398=>1000, 25401=>1000, 25402=>1000, 25404=>1000, 25405=>1000, 25406=>1000, 25407=>1000, 25409=>1000, 25410=>1000, 25411=>1000, 25412=>1000, 25414=>1000, 25417=>1000, + 25418=>1000, 25419=>1000, 25420=>1000, 25421=>1000, 25422=>1000, 25423=>1000, 25424=>1000, 25426=>1000, 25427=>1000, 25428=>1000, 25429=>1000, 25431=>1000, 25432=>1000, 25435=>1000, 25436=>1000, 25445=>1000, + 25446=>1000, 25447=>1000, 25448=>1000, 25449=>1000, 25451=>1000, 25452=>1000, 25453=>1000, 25454=>1000, 25457=>1000, 25458=>1000, 25460=>1000, 25461=>1000, 25462=>1000, 25463=>1000, 25464=>1000, 25466=>1000, + 25467=>1000, 25468=>1000, 25469=>1000, 25471=>1000, 25472=>1000, 25474=>1000, 25475=>1000, 25476=>1000, 25479=>1000, 25480=>1000, 25481=>1000, 25482=>1000, 25484=>1000, 25486=>1000, 25487=>1000, 25488=>1000, + 25490=>1000, 25492=>1000, 25493=>1000, 25494=>1000, 25496=>1000, 25497=>1000, 25498=>1000, 25499=>1000, 25502=>1000, 25503=>1000, 25504=>1000, 25505=>1000, 25506=>1000, 25507=>1000, 25508=>1000, 25509=>1000, + 25510=>1000, 25511=>1000, 25512=>1000, 25513=>1000, 25514=>1000, 25515=>1000, 25516=>1000, 25517=>1000, 25518=>1000, 25519=>1000, 25522=>1000, 25524=>1000, 25525=>1000, 25531=>1000, 25533=>1000, 25534=>1000, + 25536=>1000, 25537=>1000, 25539=>1000, 25540=>1000, 25541=>1000, 25542=>1000, 25544=>1000, 25545=>1000, 25550=>1000, 25551=>1000, 25552=>1000, 25553=>1000, 25554=>1000, 25555=>1000, 25556=>1000, 25557=>1000, + 25558=>1000, 25562=>1000, 25563=>1000, 25564=>1000, 25568=>1000, 25569=>1000, 25571=>1000, 25573=>1000, 25577=>1000, 25578=>1000, 25580=>1000, 25582=>1000, 25586=>1000, 25587=>1000, 25588=>1000, 25589=>1000, + 25590=>1000, 25592=>1000, 25593=>1000, 25594=>1000, 25606=>1000, 25609=>1000, 25610=>1000, 25613=>1000, 25615=>1000, 25616=>1000, 25618=>1000, 25619=>1000, 25620=>1000, 25622=>1000, 25623=>1000, 25624=>1000, + 25628=>1000, 25630=>1000, 25632=>1000, 25634=>1000, 25636=>1000, 25637=>1000, 25638=>1000, 25640=>1000, 25641=>1000, 25642=>1000, 25644=>1000, 25645=>1000, 25647=>1000, 25648=>1000, 25652=>1000, 25653=>1000, + 25654=>1000, 25658=>1000, 25661=>1000, 25662=>1000, 25663=>1000, 25666=>1000, 25675=>1000, 25678=>1000, 25679=>1000, 25681=>1000, 25682=>1000, 25683=>1000, 25684=>1000, 25688=>1000, 25690=>1000, 25691=>1000, + 25692=>1000, 25693=>1000, 25695=>1000, 25696=>1000, 25697=>1000, 25699=>1000, 25703=>1000, 25705=>1000, 25709=>1000, 25711=>1000, 25715=>1000, 25716=>1000, 25718=>1000, 25720=>1000, 25722=>1000, 25723=>1000, + 25725=>1000, 25731=>1000, 25733=>1000, 25735=>1000, 25736=>1000, 25743=>1000, 25744=>1000, 25745=>1000, 25746=>1000, 25747=>1000, 25749=>1000, 25752=>1000, 25753=>1000, 25754=>1000, 25755=>1000, 25757=>1000, + 25758=>1000, 25759=>1000, 25761=>1000, 25763=>1000, 25764=>1000, 25765=>1000, 25766=>1000, 25768=>1000, 25769=>1000, 25771=>1000, 25772=>1000, 25773=>1000, 25774=>1000, 25776=>1000, 25778=>1000, 25779=>1000, + 25785=>1000, 25787=>1000, 25788=>1000, 25789=>1000, 25790=>1000, 25791=>1000, 25793=>1000, 25794=>1000, 25796=>1000, 25797=>1000, 25799=>1000, 25801=>1000, 25802=>1000, 25803=>1000, 25804=>1000, 25805=>1000, + 25806=>1000, 25808=>1000, 25809=>1000, 25810=>1000, 25812=>1000, 25813=>1000, 25815=>1000, 25816=>1000, 25818=>1000, 25824=>1000, 25825=>1000, 25826=>1000, 25827=>1000, 25828=>1000, 25829=>1000, 25830=>1000, + 25831=>1000, 25833=>1000, 25834=>1000, 25836=>1000, 25837=>1000, 25839=>1000, 25840=>1000, 25841=>1000, 25842=>1000, 25844=>1000, 25845=>1000, 25846=>1000, 25847=>1000, 25850=>1000, 25851=>1000, 25853=>1000, + 25854=>1000, 25855=>1000, 25856=>1000, 25857=>1000, 25860=>1000, 25861=>1000, 25864=>1000, 25865=>1000, 25866=>1000, 25871=>1000, 25875=>1000, 25876=>1000, 25878=>1000, 25880=>1000, 25881=>1000, 25883=>1000, + 25884=>1000, 25885=>1000, 25886=>1000, 25887=>1000, 25890=>1000, 25891=>1000, 25892=>1000, 25894=>1000, 25897=>1000, 25898=>1000, 25899=>1000, 25900=>1000, 25902=>1000, 25903=>1000, 25905=>1000, 25908=>1000, + 25909=>1000, 25910=>1000, 25911=>1000, 25912=>1000, 25913=>1000, 25914=>1000, 25915=>1000, 25916=>1000, 25917=>1000, 25918=>1000, 25919=>1000, 25923=>1000, 25925=>1000, 25927=>1000, 25928=>1000, 25929=>1000, + 25933=>1000, 25934=>1000, 25935=>1000, 25936=>1000, 25937=>1000, 25938=>1000, 25940=>1000, 25941=>1000, 25942=>1000, 25943=>1000, 25944=>1000, 25945=>1000, 25949=>1000, 25950=>1000, 25951=>1000, 25952=>1000, + 25954=>1000, 25955=>1000, 25958=>1000, 25959=>1000, 25963=>1000, 25964=>1000, 25968=>1000, 25970=>1000, 25972=>1000, 25973=>1000, 25975=>1000, 25976=>1000, 25978=>1000, 25981=>1000, 25985=>1000, 25986=>1000, + 25987=>1000, 25989=>1000, 25991=>1000, 25992=>1000, 25993=>1000, 25994=>1000, 25996=>1000, 25998=>1000, 26000=>1000, 26001=>1000, 26002=>1000, 26005=>1000, 26007=>1000, 26008=>1000, 26009=>1000, 26011=>1000, + 26012=>1000, 26013=>1000, 26015=>1000, 26016=>1000, 26017=>1000, 26019=>1000, 26020=>1000, 26021=>1000, 26022=>1000, 26023=>1000, 26027=>1000, 26028=>1000, 26029=>1000, 26030=>1000, 26031=>1000, 26032=>1000, + 26034=>1000, 26035=>1000, 26036=>1000, 26039=>1000, 26041=>1000, 26044=>1000, 26045=>1000, 26047=>1000, 26049=>1000, 26050=>1000, 26051=>1000, 26052=>1000, 26053=>1000, 26054=>1000, 26056=>1000, 26057=>1000, + 26059=>1000, 26060=>1000, 26062=>1000, 26063=>1000, 26064=>1000, 26066=>1000, 26068=>1000, 26070=>1000, 26071=>1000, 26072=>1000, 26073=>1000, 26075=>1000, 26079=>1000, 26080=>1000, 26081=>1000, 26082=>1000, + 26085=>1000, 26086=>1000, 26087=>1000, 26088=>1000, 26089=>1000, 26092=>1000, 26093=>1000, 26096=>1000, 26097=>1000, 26098=>1000, 26100=>1000, 26101=>1000, 26105=>1000, 26106=>1000, 26107=>1000, 26110=>1000, + 26111=>1000, 26112=>1000, 26114=>1000, 26115=>1000, 26116=>1000, 26118=>1000, 26119=>1000, 26120=>1000, 26121=>1000, 26122=>1000, 26124=>1000, 26125=>1000, 26126=>1000, 26127=>1000, 26129=>1000, 26130=>1000, + 26131=>1000, 26132=>1000, 26133=>1000, 26134=>1000, 26140=>1000, 26141=>1000, 26142=>1000, 26143=>1000, 26144=>1000, 26145=>1000, 26146=>1000, 26147=>1000, 26148=>1000, 26149=>1000, 26150=>1000, 26151=>1000, + 26152=>1000, 26153=>1000, 26154=>1000, 26155=>1000, 26156=>1000, 26157=>1000, 26158=>1000, 26159=>1000, 26160=>1000, 26161=>1000, 26163=>1000, 26164=>1000, 26165=>1000, 26166=>1000, 26167=>1000, 26169=>1000, + 26172=>1000, 26175=>1000, 26176=>1000, 26177=>1000, 26178=>1000, 26179=>1000, 26180=>1000, 26181=>1000, 26182=>1000, 26185=>1000, 26186=>1000, 26187=>1000, 26188=>1000, 26190=>1000, 26191=>1000, 26193=>1000, + 26194=>1000, 26199=>1000, 26200=>1000, 26201=>1000, 26203=>1000, 26204=>1000, 26205=>1000, 26206=>1000, 26207=>1000, 26208=>1000, 26209=>1000, 26210=>1000, 26212=>1000, 26213=>1000, 26214=>1000, 26215=>1000, + 26216=>1000, 26217=>1000, 26218=>1000, 26219=>1000, 26220=>1000, 26222=>1000, 26223=>1000, 26224=>1000, 26227=>1000, 26228=>1000, 26229=>1000, 26230=>1000, 26231=>1000, 26232=>1000, 26233=>1000, 26234=>1000, + 26235=>1000, 26236=>1000, 26238=>1000, 26239=>1000, 26240=>1000, 26241=>1000, 26243=>1000, 26244=>1000, 26247=>1000, 26248=>1000, 26249=>1000, 26251=>1000, 26252=>1000, 26253=>1000, 26254=>1000, 26256=>1000, + 26257=>1000, 26258=>1000, 26262=>1000, 26263=>1000, 26264=>1000, 26265=>1000, 26266=>1000, 26267=>1000, 26268=>1000, 26269=>1000, 26271=>1000, 26272=>1000, 26274=>1000, 26276=>1000, 26278=>1000, 26283=>1000, + 26285=>1000, 26286=>1000, 26289=>1000, 26290=>1000, 26292=>1000, 26293=>1000, 26296=>1000, 26297=>1000, 26299=>1000, 26300=>1000, 26302=>1000, 26303=>1000, 26304=>1000, 26305=>1000, 26306=>1000, 26307=>1000, + 26308=>1000, 26311=>1000, 26312=>1000, 26313=>1000, 26316=>1000, 26318=>1000, 26319=>1000, 26324=>1000, 26326=>1000, 26329=>1000, 26330=>1000, 26331=>1000, 26332=>1000, 26333=>1000, 26335=>1000, 26336=>1000, + 26342=>1000, 26344=>1000, 26345=>1000, 26347=>1000, 26348=>1000, 26350=>1000, 26352=>1000, 26354=>1000, 26355=>1000, 26356=>1000, 26357=>1000, 26359=>1000, 26360=>1000, 26361=>1000, 26362=>1000, 26363=>1000, + 26364=>1000, 26365=>1000, 26366=>1000, 26367=>1000, 26368=>1000, 26371=>1000, 26373=>1000, 26375=>1000, 26376=>1000, 26377=>1000, 26379=>1000, 26381=>1000, 26382=>1000, 26383=>1000, 26387=>1000, 26388=>1000, + 26389=>1000, 26390=>1000, 26391=>1000, 26393=>1000, 26395=>1000, 26396=>1000, 26397=>1000, 26398=>1000, 26399=>1000, 26400=>1000, 26402=>1000, 26406=>1000, 26407=>1000, 26408=>1000, 26410=>1000, 26411=>1000, + 26412=>1000, 26413=>1000, 26414=>1000, 26417=>1000, 26419=>1000, 26420=>1000, 26422=>1000, 26423=>1000, 26424=>1000, 26426=>1000, 26429=>1000, 26430=>1000, 26431=>1000, 26433=>1000, 26437=>1000, 26438=>1000, + 26439=>1000, 26440=>1000, 26441=>1000, 26444=>1000, 26446=>1000, 26447=>1000, 26448=>1000, 26449=>1000, 26451=>1000, 26452=>1000, 26453=>1000, 26454=>1000, 26457=>1000, 26460=>1000, 26461=>1000, 26462=>1000, + 26463=>1000, 26464=>1000, 26465=>1000, 26466=>1000, 26467=>1000, 26468=>1000, 26469=>1000, 26470=>1000, 26474=>1000, 26476=>1000, 26477=>1000, 26478=>1000, 26479=>1000, 26480=>1000, 26481=>1000, 26482=>1000, + 26483=>1000, 26484=>1000, 26485=>1000, 26486=>1000, 26487=>1000, 26491=>1000, 26492=>1000, 26494=>1000, 26495=>1000, 26497=>1000, 26500=>1000, 26501=>1000, 26503=>1000, 26505=>1000, 26507=>1000, 26508=>1000, + 26510=>1000, 26511=>1000, 26512=>1000, 26513=>1000, 26515=>1000, 26517=>1000, 26518=>1000, 26519=>1000, 26520=>1000, 26521=>1000, 26522=>1000, 26523=>1000, 26524=>1000, 26525=>1000, 26528=>1000, 26529=>1000, + 26530=>1000, 26534=>1000, 26537=>1000, 26543=>1000, 26544=>1000, 26545=>1000, 26546=>1000, 26547=>1000, 26548=>1000, 26549=>1000, 26550=>1000, 26551=>1000, 26552=>1000, 26553=>1000, 26555=>1000, 26556=>1000, + 26557=>1000, 26560=>1000, 26561=>1000, 26562=>1000, 26563=>1000, 26564=>1000, 26565=>1000, 26566=>1000, 26568=>1000, 26569=>1000, 26570=>1000, 26574=>1000, 26575=>1000, 26576=>1000, 26577=>1000, 26578=>1000, + 26579=>1000, 26580=>1000, 26583=>1000, 26584=>1000, 26585=>1000, 26586=>1000, 26588=>1000, 26589=>1000, 26590=>1000, 26593=>1000, 26594=>1000, 26596=>1000, 26598=>1000, 26599=>1000, 26601=>1000, 26604=>1000, + 26606=>1000, 26607=>1000, 26608=>1000, 26609=>1000, 26610=>1000, 26611=>1000, 26612=>1000, 26613=>1000, 26614=>1000, 26615=>1000, 26617=>1000, 26619=>1000, 26622=>1000, 26623=>1000, 26625=>1000, 26626=>1000, + 26627=>1000, 26628=>1000, 26643=>1000, 26644=>1000, 26646=>1000, 26647=>1000, 26649=>1000, 26653=>1000, 26654=>1000, 26655=>1000, 26657=>1000, 26658=>1000, 26663=>1000, 26664=>1000, 26665=>1000, 26666=>1000, + 26667=>1000, 26668=>1000, 26669=>1000, 26671=>1000, 26672=>1000, 26673=>1000, 26674=>1000, 26675=>1000, 26676=>1000, 26680=>1000, 26681=>1000, 26683=>1000, 26684=>1000, 26685=>1000, 26687=>1000, 26688=>1000, + 26689=>1000, 26690=>1000, 26691=>1000, 26692=>1000, 26693=>1000, 26694=>1000, 26696=>1000, 26698=>1000, 26700=>1000, 26701=>1000, 26702=>1000, 26704=>1000, 26705=>1000, 26706=>1000, 26707=>1000, 26708=>1000, + 26709=>1000, 26711=>1000, 26712=>1000, 26713=>1000, 26715=>1000, 26716=>1000, 26717=>1000, 26719=>1000, 26723=>1000, 26727=>1000, 26731=>1000, 26734=>1000, 26735=>1000, 26736=>1000, 26737=>1000, 26738=>1000, + 26740=>1000, 26741=>1000, 26742=>1000, 26743=>1000, 26745=>1000, 26746=>1000, 26747=>1000, 26748=>1000, 26750=>1000, 26751=>1000, 26753=>1000, 26754=>1000, 26755=>1000, 26756=>1000, 26757=>1000, 26758=>1000, + 26760=>1000, 26765=>1000, 26767=>1000, 26771=>1000, 26772=>1000, 26774=>1000, 26775=>1000, 26776=>1000, 26778=>1000, 26779=>1000, 26780=>1000, 26781=>1000, 26783=>1000, 26784=>1000, 26785=>1000, 26786=>1000, + 26787=>1000, 26789=>1000, 26790=>1000, 26791=>1000, 26792=>1000, 26793=>1000, 26794=>1000, 26797=>1000, 26798=>1000, 26799=>1000, 26800=>1000, 26801=>1000, 26802=>1000, 26803=>1000, 26805=>1000, 26806=>1000, + 26809=>1000, 26810=>1000, 26811=>1000, 26812=>1000, 26820=>1000, 26821=>1000, 26822=>1000, 26824=>1000, 26825=>1000, 26826=>1000, 26827=>1000, 26828=>1000, 26829=>1000, 26831=>1000, 26832=>1000, 26833=>1000, + 26834=>1000, 26835=>1000, 26836=>1000, 26837=>1000, 26838=>1000, 26839=>1000, 26840=>1000, 26841=>1000, 26842=>1000, 26844=>1000, 26845=>1000, 26847=>1000, 26848=>1000, 26849=>1000, 26851=>1000, 26853=>1000, + 26855=>1000, 26856=>1000, 26858=>1000, 26859=>1000, 26860=>1000, 26861=>1000, 26862=>1000, 26863=>1000, 26864=>1000, 26865=>1000, 26866=>1000, 26869=>1000, 26870=>1000, 26873=>1000, 26874=>1000, 26875=>1000, + 26876=>1000, 26877=>1000, 26880=>1000, 26881=>1000, 26884=>1000, 26885=>1000, 26886=>1000, 26888=>1000, 26889=>1000, 26890=>1000, 26891=>1000, 26892=>1000, 26893=>1000, 26894=>1000, 26895=>1000, 26896=>1000, + 26897=>1000, 26898=>1000, 26899=>1000, 26902=>1000, 26903=>1000, 26905=>1000, 26906=>1000, 26907=>1000, 26908=>1000, 26913=>1000, 26914=>1000, 26915=>1000, 26917=>1000, 26918=>1000, 26920=>1000, 26922=>1000, + 26928=>1000, 26929=>1000, 26931=>1000, 26932=>1000, 26933=>1000, 26934=>1000, 26936=>1000, 26937=>1000, 26939=>1000, 26941=>1000, 26943=>1000, 26946=>1000, 26949=>1000, 26953=>1000, 26954=>1000, 26958=>1000, + 26963=>1000, 26964=>1000, 26965=>1000, 26967=>1000, 26969=>1000, 26970=>1000, 26971=>1000, 26972=>1000, 26973=>1000, 26974=>1000, 26976=>1000, 26977=>1000, 26978=>1000, 26979=>1000, 26980=>1000, 26981=>1000, + 26982=>1000, 26984=>1000, 26985=>1000, 26986=>1000, 26987=>1000, 26988=>1000, 26989=>1000, 26990=>1000, 26991=>1000, 26992=>1000, 26993=>1000, 26994=>1000, 26995=>1000, 26996=>1000, 26997=>1000, 26999=>1000, + 27000=>1000, 27001=>1000, 27002=>1000, 27003=>1000, 27004=>1000, 27005=>1000, 27006=>1000, 27007=>1000, 27008=>1000, 27009=>1000, 27010=>1000, 27018=>1000, 27021=>1000, 27022=>1000, 27025=>1000, 27026=>1000, + 27028=>1000, 27029=>1000, 27030=>1000, 27032=>1000, 27035=>1000, 27036=>1000, 27040=>1000, 27041=>1000, 27045=>1000, 27046=>1000, 27047=>1000, 27048=>1000, 27051=>1000, 27053=>1000, 27054=>1000, 27055=>1000, + 27057=>1000, 27058=>1000, 27060=>1000, 27063=>1000, 27064=>1000, 27066=>1000, 27067=>1000, 27068=>1000, 27070=>1000, 27071=>1000, 27073=>1000, 27075=>1000, 27077=>1000, 27079=>1000, 27080=>1000, 27082=>1000, + 27083=>1000, 27084=>1000, 27085=>1000, 27086=>1000, 27088=>1000, 27089=>1000, 27091=>1000, 27094=>1000, 27095=>1000, 27096=>1000, 27097=>1000, 27101=>1000, 27102=>1000, 27106=>1000, 27109=>1000, 27111=>1000, + 27112=>1000, 27115=>1000, 27117=>1000, 27118=>1000, 27119=>1000, 27121=>1000, 27122=>1000, 27123=>1000, 27125=>1000, 27129=>1000, 27131=>1000, 27133=>1000, 27134=>1000, 27135=>1000, 27136=>1000, 27137=>1000, + 27138=>1000, 27139=>1000, 27141=>1000, 27146=>1000, 27147=>1000, 27148=>1000, 27151=>1000, 27153=>1000, 27154=>1000, 27155=>1000, 27156=>1000, 27157=>1000, 27159=>1000, 27161=>1000, 27162=>1000, 27163=>1000, + 27165=>1000, 27166=>1000, 27167=>1000, 27168=>1000, 27169=>1000, 27170=>1000, 27171=>1000, 27172=>1000, 27176=>1000, 27177=>1000, 27178=>1000, 27179=>1000, 27182=>1000, 27184=>1000, 27186=>1000, 27188=>1000, + 27189=>1000, 27190=>1000, 27191=>1000, 27192=>1000, 27193=>1000, 27194=>1000, 27195=>1000, 27197=>1000, 27198=>1000, 27199=>1000, 27204=>1000, 27205=>1000, 27206=>1000, 27207=>1000, 27208=>1000, 27209=>1000, + 27210=>1000, 27211=>1000, 27214=>1000, 27216=>1000, 27217=>1000, 27218=>1000, 27221=>1000, 27222=>1000, 27224=>1000, 27225=>1000, 27227=>1000, 27231=>1000, 27233=>1000, 27234=>1000, 27236=>1000, 27238=>1000, + 27239=>1000, 27242=>1000, 27243=>1000, 27249=>1000, 27250=>1000, 27251=>1000, 27256=>1000, 27262=>1000, 27263=>1000, 27264=>1000, 27265=>1000, 27267=>1000, 27268=>1000, 27270=>1000, 27271=>1000, 27273=>1000, + 27275=>1000, 27277=>1000, 27278=>1000, 27280=>1000, 27281=>1000, 27287=>1000, 27291=>1000, 27292=>1000, 27293=>1000, 27294=>1000, 27295=>1000, 27296=>1000, 27298=>1000, 27299=>1000, 27301=>1000, 27306=>1000, + 27307=>1000, 27308=>1000, 27310=>1000, 27311=>1000, 27312=>1000, 27313=>1000, 27315=>1000, 27316=>1000, 27320=>1000, 27323=>1000, 27325=>1000, 27326=>1000, 27327=>1000, 27329=>1000, 27330=>1000, 27331=>1000, + 27334=>1000, 27336=>1000, 27337=>1000, 27340=>1000, 27344=>1000, 27345=>1000, 27347=>1000, 27348=>1000, 27349=>1000, 27350=>1000, 27354=>1000, 27355=>1000, 27356=>1000, 27357=>1000, 27358=>1000, 27359=>1000, + 27362=>1000, 27364=>1000, 27367=>1000, 27368=>1000, 27370=>1000, 27372=>1000, 27376=>1000, 27377=>1000, 27378=>1000, 27386=>1000, 27387=>1000, 27388=>1000, 27389=>1000, 27394=>1000, 27395=>1000, 27396=>1000, + 27397=>1000, 27398=>1000, 27399=>1000, 27401=>1000, 27402=>1000, 27407=>1000, 27408=>1000, 27409=>1000, 27410=>1000, 27414=>1000, 27415=>1000, 27419=>1000, 27421=>1000, 27422=>1000, 27423=>1000, 27424=>1000, + 27425=>1000, 27427=>1000, 27428=>1000, 27431=>1000, 27432=>1000, 27435=>1000, 27436=>1000, 27439=>1000, 27442=>1000, 27445=>1000, 27446=>1000, 27447=>1000, 27448=>1000, 27449=>1000, 27450=>1000, 27451=>1000, + 27453=>1000, 27454=>1000, 27455=>1000, 27459=>1000, 27462=>1000, 27463=>1000, 27465=>1000, 27466=>1000, 27468=>1000, 27469=>1000, 27470=>1000, 27472=>1000, 27474=>1000, 27475=>1000, 27476=>1000, 27478=>1000, + 27480=>1000, 27481=>1000, 27483=>1000, 27485=>1000, 27487=>1000, 27488=>1000, 27489=>1000, 27490=>1000, 27491=>1000, 27492=>1000, 27494=>1000, 27495=>1000, 27497=>1000, 27498=>1000, 27499=>1000, 27502=>1000, + 27503=>1000, 27504=>1000, 27507=>1000, 27508=>1000, 27509=>1000, 27512=>1000, 27513=>1000, 27515=>1000, 27517=>1000, 27518=>1000, 27519=>1000, 27520=>1000, 27522=>1000, 27523=>1000, 27524=>1000, 27525=>1000, + 27526=>1000, 27529=>1000, 27530=>1000, 27531=>1000, 27533=>1000, 27541=>1000, 27542=>1000, 27543=>1000, 27544=>1000, 27547=>1000, 27550=>1000, 27551=>1000, 27552=>1000, 27554=>1000, 27555=>1000, 27556=>1000, + 27560=>1000, 27561=>1000, 27562=>1000, 27563=>1000, 27564=>1000, 27565=>1000, 27566=>1000, 27567=>1000, 27568=>1000, 27569=>1000, 27570=>1000, 27571=>1000, 27572=>1000, 27573=>1000, 27575=>1000, 27576=>1000, + 27577=>1000, 27578=>1000, 27579=>1000, 27580=>1000, 27581=>1000, 27582=>1000, 27583=>1000, 27584=>1000, 27587=>1000, 27588=>1000, 27589=>1000, 27590=>1000, 27593=>1000, 27595=>1000, 27596=>1000, 27597=>1000, + 27598=>1000, 27602=>1000, 27603=>1000, 27604=>1000, 27606=>1000, 27608=>1000, 27610=>1000, 27611=>1000, 27615=>1000, 27617=>1000, 27619=>1000, 27622=>1000, 27623=>1000, 27627=>1000, 27628=>1000, 27630=>1000, + 27631=>1000, 27633=>1000, 27635=>1000, 27639=>1000, 27641=>1000, 27647=>1000, 27650=>1000, 27652=>1000, 27653=>1000, 27656=>1000, 27657=>1000, 27661=>1000, 27662=>1000, 27663=>1000, 27664=>1000, 27665=>1000, + 27666=>1000, 27667=>1000, 27668=>1000, 27671=>1000, 27673=>1000, 27675=>1000, 27679=>1000, 27683=>1000, 27684=>1000, 27686=>1000, 27687=>1000, 27688=>1000, 27692=>1000, 27694=>1000, 27699=>1000, 27700=>1000, + 27701=>1000, 27702=>1000, 27703=>1000, 27704=>1000, 27706=>1000, 27707=>1000, 27710=>1000, 27711=>1000, 27712=>1000, 27713=>1000, 27714=>1000, 27722=>1000, 27723=>1000, 27725=>1000, 27726=>1000, 27727=>1000, + 27728=>1000, 27730=>1000, 27732=>1000, 27733=>1000, 27735=>1000, 27737=>1000, 27738=>1000, 27739=>1000, 27740=>1000, 27741=>1000, 27742=>1000, 27743=>1000, 27744=>1000, 27746=>1000, 27751=>1000, 27752=>1000, + 27754=>1000, 27755=>1000, 27757=>1000, 27759=>1000, 27760=>1000, 27762=>1000, 27763=>1000, 27764=>1000, 27766=>1000, 27768=>1000, 27769=>1000, 27770=>1000, 27771=>1000, 27773=>1000, 27774=>1000, 27777=>1000, + 27778=>1000, 27779=>1000, 27781=>1000, 27782=>1000, 27783=>1000, 27784=>1000, 27785=>1000, 27788=>1000, 27789=>1000, 27792=>1000, 27794=>1000, 27795=>1000, 27796=>1000, 27797=>1000, 27798=>1000, 27799=>1000, + 27800=>1000, 27801=>1000, 27802=>1000, 27803=>1000, 27804=>1000, 27807=>1000, 27809=>1000, 27810=>1000, 27819=>1000, 27822=>1000, 27824=>1000, 27825=>1000, 27826=>1000, 27827=>1000, 27828=>1000, 27832=>1000, + 27833=>1000, 27834=>1000, 27835=>1000, 27836=>1000, 27837=>1000, 27838=>1000, 27839=>1000, 27841=>1000, 27842=>1000, 27844=>1000, 27845=>1000, 27846=>1000, 27849=>1000, 27850=>1000, 27852=>1000, 27853=>1000, + 27855=>1000, 27856=>1000, 27857=>1000, 27858=>1000, 27859=>1000, 27860=>1000, 27861=>1000, 27862=>1000, 27863=>1000, 27865=>1000, 27866=>1000, 27867=>1000, 27868=>1000, 27869=>1000, 27872=>1000, 27873=>1000, + 27874=>1000, 27875=>1000, 27877=>1000, 27879=>1000, 27880=>1000, 27881=>1000, 27882=>1000, 27883=>1000, 27884=>1000, 27886=>1000, 27887=>1000, 27888=>1000, 27889=>1000, 27890=>1000, 27891=>1000, 27892=>1000, + 27908=>1000, 27911=>1000, 27914=>1000, 27915=>1000, 27916=>1000, 27918=>1000, 27919=>1000, 27921=>1000, 27922=>1000, 27923=>1000, 27927=>1000, 27929=>1000, 27930=>1000, 27931=>1000, 27934=>1000, 27935=>1000, + 27941=>1000, 27942=>1000, 27943=>1000, 27944=>1000, 27945=>1000, 27946=>1000, 27947=>1000, 27950=>1000, 27951=>1000, 27953=>1000, 27954=>1000, 27955=>1000, 27957=>1000, 27958=>1000, 27960=>1000, 27961=>1000, + 27963=>1000, 27964=>1000, 27965=>1000, 27966=>1000, 27967=>1000, 27969=>1000, 27972=>1000, 27973=>1000, 27991=>1000, 27993=>1000, 27994=>1000, 27996=>1000, 27998=>1000, 27999=>1000, 28001=>1000, 28003=>1000, + 28004=>1000, 28005=>1000, 28006=>1000, 28007=>1000, 28009=>1000, 28010=>1000, 28012=>1000, 28014=>1000, 28015=>1000, 28016=>1000, 28020=>1000, 28023=>1000, 28024=>1000, 28025=>1000, 28028=>1000, 28034=>1000, + 28037=>1000, 28039=>1000, 28040=>1000, 28044=>1000, 28046=>1000, 28049=>1000, 28050=>1000, 28051=>1000, 28052=>1000, 28053=>1000, 28054=>1000, 28055=>1000, 28056=>1000, 28057=>1000, 28059=>1000, 28060=>1000, + 28074=>1000, 28076=>1000, 28079=>1000, 28082=>1000, 28084=>1000, 28085=>1000, 28087=>1000, 28088=>1000, 28089=>1000, 28092=>1000, 28093=>1000, 28095=>1000, 28096=>1000, 28100=>1000, 28101=>1000, 28102=>1000, + 28103=>1000, 28104=>1000, 28106=>1000, 28107=>1000, 28108=>1000, 28110=>1000, 28111=>1000, 28113=>1000, 28114=>1000, 28117=>1000, 28118=>1000, 28120=>1000, 28121=>1000, 28123=>1000, 28125=>1000, 28126=>1000, + 28127=>1000, 28128=>1000, 28129=>1000, 28130=>1000, 28132=>1000, 28133=>1000, 28134=>1000, 28136=>1000, 28137=>1000, 28138=>1000, 28139=>1000, 28140=>1000, 28142=>1000, 28143=>1000, 28144=>1000, 28145=>1000, + 28146=>1000, 28147=>1000, 28148=>1000, 28149=>1000, 28150=>1000, 28151=>1000, 28152=>1000, 28153=>1000, 28154=>1000, 28155=>1000, 28156=>1000, 28160=>1000, 28164=>1000, 28165=>1000, 28167=>1000, 28168=>1000, + 28169=>1000, 28170=>1000, 28171=>1000, 28179=>1000, 28181=>1000, 28185=>1000, 28186=>1000, 28187=>1000, 28189=>1000, 28190=>1000, 28191=>1000, 28192=>1000, 28193=>1000, 28194=>1000, 28195=>1000, 28196=>1000, + 28197=>1000, 28198=>1000, 28199=>1000, 28201=>1000, 28203=>1000, 28204=>1000, 28205=>1000, 28206=>1000, 28207=>1000, 28210=>1000, 28214=>1000, 28216=>1000, 28217=>1000, 28218=>1000, 28219=>1000, 28220=>1000, + 28222=>1000, 28227=>1000, 28228=>1000, 28229=>1000, 28232=>1000, 28233=>1000, 28234=>1000, 28235=>1000, 28237=>1000, 28238=>1000, 28239=>1000, 28241=>1000, 28242=>1000, 28243=>1000, 28244=>1000, 28246=>1000, + 28247=>1000, 28248=>1000, 28251=>1000, 28252=>1000, 28253=>1000, 28254=>1000, 28255=>1000, 28258=>1000, 28259=>1000, 28263=>1000, 28264=>1000, 28267=>1000, 28270=>1000, 28271=>1000, 28274=>1000, 28275=>1000, + 28278=>1000, 28283=>1000, 28285=>1000, 28286=>1000, 28287=>1000, 28288=>1000, 28290=>1000, 28300=>1000, 28301=>1000, 28303=>1000, 28304=>1000, 28307=>1000, 28310=>1000, 28312=>1000, 28313=>1000, 28316=>1000, + 28317=>1000, 28319=>1000, 28320=>1000, 28322=>1000, 28325=>1000, 28327=>1000, 28330=>1000, 28333=>1000, 28334=>1000, 28335=>1000, 28337=>1000, 28338=>1000, 28339=>1000, 28342=>1000, 28343=>1000, 28346=>1000, + 28347=>1000, 28349=>1000, 28351=>1000, 28352=>1000, 28353=>1000, 28354=>1000, 28355=>1000, 28356=>1000, 28357=>1000, 28359=>1000, 28360=>1000, 28361=>1000, 28362=>1000, 28363=>1000, 28364=>1000, 28365=>1000, + 28366=>1000, 28367=>1000, 28369=>1000, 28371=>1000, 28372=>1000, 28373=>1000, 28381=>1000, 28382=>1000, 28395=>1000, 28396=>1000, 28397=>1000, 28398=>1000, 28399=>1000, 28402=>1000, 28404=>1000, 28407=>1000, + 28408=>1000, 28409=>1000, 28411=>1000, 28413=>1000, 28414=>1000, 28415=>1000, 28417=>1000, 28418=>1000, 28420=>1000, 28422=>1000, 28424=>1000, 28425=>1000, 28426=>1000, 28428=>1000, 28429=>1000, 28431=>1000, + 28433=>1000, 28435=>1000, 28436=>1000, 28437=>1000, 28438=>1000, 28440=>1000, 28442=>1000, 28443=>1000, 28448=>1000, 28450=>1000, 28451=>1000, 28454=>1000, 28457=>1000, 28458=>1000, 28459=>1000, 28460=>1000, + 28461=>1000, 28463=>1000, 28464=>1000, 28465=>1000, 28466=>1000, 28467=>1000, 28470=>1000, 28472=>1000, 28475=>1000, 28476=>1000, 28478=>1000, 28479=>1000, 28481=>1000, 28485=>1000, 28495=>1000, 28497=>1000, + 28498=>1000, 28499=>1000, 28500=>1000, 28503=>1000, 28504=>1000, 28505=>1000, 28506=>1000, 28507=>1000, 28508=>1000, 28509=>1000, 28510=>1000, 28511=>1000, 28513=>1000, 28514=>1000, 28516=>1000, 28518=>1000, + 28520=>1000, 28524=>1000, 28525=>1000, 28526=>1000, 28527=>1000, 28528=>1000, 28532=>1000, 28536=>1000, 28538=>1000, 28540=>1000, 28541=>1000, 28542=>1000, 28544=>1000, 28545=>1000, 28546=>1000, 28547=>1000, + 28548=>1000, 28550=>1000, 28551=>1000, 28552=>1000, 28555=>1000, 28556=>1000, 28557=>1000, 28558=>1000, 28560=>1000, 28561=>1000, 28562=>1000, 28563=>1000, 28564=>1000, 28566=>1000, 28567=>1000, 28570=>1000, + 28575=>1000, 28576=>1000, 28577=>1000, 28579=>1000, 28580=>1000, 28581=>1000, 28582=>1000, 28583=>1000, 28584=>1000, 28586=>1000, 28590=>1000, 28591=>1000, 28592=>1000, 28593=>1000, 28595=>1000, 28597=>1000, + 28598=>1000, 28601=>1000, 28604=>1000, 28608=>1000, 28609=>1000, 28610=>1000, 28611=>1000, 28613=>1000, 28614=>1000, 28615=>1000, 28616=>1000, 28618=>1000, 28628=>1000, 28629=>1000, 28632=>1000, 28634=>1000, + 28635=>1000, 28638=>1000, 28639=>1000, 28640=>1000, 28641=>1000, 28644=>1000, 28648=>1000, 28649=>1000, 28651=>1000, 28652=>1000, 28654=>1000, 28655=>1000, 28656=>1000, 28657=>1000, 28659=>1000, 28661=>1000, + 28662=>1000, 28665=>1000, 28666=>1000, 28668=>1000, 28669=>1000, 28670=>1000, 28672=>1000, 28673=>1000, 28677=>1000, 28678=>1000, 28679=>1000, 28681=>1000, 28683=>1000, 28685=>1000, 28687=>1000, 28689=>1000, + 28693=>1000, 28695=>1000, 28696=>1000, 28698=>1000, 28699=>1000, 28701=>1000, 28702=>1000, 28703=>1000, 28704=>1000, 28707=>1000, 28710=>1000, 28711=>1000, 28712=>1000, 28716=>1000, 28719=>1000, 28720=>1000, + 28722=>1000, 28724=>1000, 28727=>1000, 28729=>1000, 28732=>1000, 28734=>1000, 28739=>1000, 28740=>1000, 28744=>1000, 28745=>1000, 28746=>1000, 28747=>1000, 28748=>1000, 28750=>1000, 28753=>1000, 28756=>1000, + 28757=>1000, 28760=>1000, 28765=>1000, 28766=>1000, 28771=>1000, 28772=>1000, 28773=>1000, 28779=>1000, 28780=>1000, 28782=>1000, 28783=>1000, 28784=>1000, 28789=>1000, 28790=>1000, 28792=>1000, 28796=>1000, + 28797=>1000, 28798=>1000, 28801=>1000, 28805=>1000, 28806=>1000, 28809=>1000, 28810=>1000, 28814=>1000, 28818=>1000, 28820=>1000, 28821=>1000, 28822=>1000, 28823=>1000, 28824=>1000, 28825=>1000, 28827=>1000, + 28836=>1000, 28843=>1000, 28844=>1000, 28845=>1000, 28846=>1000, 28847=>1000, 28848=>1000, 28849=>1000, 28851=>1000, 28852=>1000, 28855=>1000, 28856=>1000, 28857=>1000, 28858=>1000, 28859=>1000, 28872=>1000, + 28874=>1000, 28875=>1000, 28879=>1000, 28881=>1000, 28883=>1000, 28884=>1000, 28885=>1000, 28886=>1000, 28888=>1000, 28889=>1000, 28892=>1000, 28893=>1000, 28895=>1000, 28900=>1000, 28913=>1000, 28921=>1000, + 28922=>1000, 28925=>1000, 28931=>1000, 28932=>1000, 28933=>1000, 28934=>1000, 28935=>1000, 28937=>1000, 28939=>1000, 28940=>1000, 28943=>1000, 28948=>1000, 28953=>1000, 28954=>1000, 28956=>1000, 28958=>1000, + 28960=>1000, 28961=>1000, 28966=>1000, 28971=>1000, 28973=>1000, 28975=>1000, 28976=>1000, 28977=>1000, 28982=>1000, 28984=>1000, 28988=>1000, 28993=>1000, 28997=>1000, 28998=>1000, 28999=>1000, 29001=>1000, + 29002=>1000, 29003=>1000, 29004=>1000, 29006=>1000, 29008=>1000, 29010=>1000, 29013=>1000, 29014=>1000, 29015=>1000, 29017=>1000, 29018=>1000, 29020=>1000, 29022=>1000, 29024=>1000, 29026=>1000, 29028=>1000, + 29029=>1000, 29030=>1000, 29031=>1000, 29032=>1000, 29033=>1000, 29036=>1000, 29038=>1000, 29049=>1000, 29053=>1000, 29056=>1000, 29060=>1000, 29061=>1000, 29063=>1000, 29064=>1000, 29066=>1000, 29068=>1000, + 29071=>1000, 29074=>1000, 29076=>1000, 29077=>1000, 29081=>1000, 29082=>1000, 29083=>1000, 29087=>1000, 29088=>1000, 29090=>1000, 29096=>1000, 29100=>1000, 29103=>1000, 29104=>1000, 29105=>1000, 29106=>1000, + 29107=>1000, 29113=>1000, 29114=>1000, 29118=>1000, 29119=>1000, 29120=>1000, 29121=>1000, 29123=>1000, 29124=>1000, 29128=>1000, 29129=>1000, 29131=>1000, 29132=>1000, 29134=>1000, 29136=>1000, 29138=>1000, + 29139=>1000, 29140=>1000, 29141=>1000, 29142=>1000, 29143=>1000, 29145=>1000, 29146=>1000, 29148=>1000, 29151=>1000, 29152=>1000, 29157=>1000, 29158=>1000, 29159=>1000, 29164=>1000, 29165=>1000, 29166=>1000, + 29173=>1000, 29176=>1000, 29177=>1000, 29179=>1000, 29180=>1000, 29182=>1000, 29183=>1000, 29184=>1000, 29190=>1000, 29191=>1000, 29192=>1000, 29193=>1000, 29197=>1000, 29200=>1000, 29203=>1000, 29207=>1000, + 29210=>1000, 29211=>1000, 29213=>1000, 29215=>1000, 29220=>1000, 29224=>1000, 29226=>1000, 29227=>1000, 29228=>1000, 29229=>1000, 29231=>1000, 29232=>1000, 29234=>1000, 29236=>1000, 29237=>1000, 29238=>1000, + 29240=>1000, 29241=>1000, 29242=>1000, 29243=>1000, 29244=>1000, 29245=>1000, 29246=>1000, 29247=>1000, 29248=>1000, 29249=>1000, 29250=>1000, 29251=>1000, 29253=>1000, 29254=>1000, 29255=>1000, 29256=>1000, + 29259=>1000, 29260=>1000, 29262=>1000, 29263=>1000, 29264=>1000, 29266=>1000, 29267=>1000, 29269=>1000, 29270=>1000, 29272=>1000, 29273=>1000, 29274=>1000, 29275=>1000, 29276=>1000, 29277=>1000, 29278=>1000, + 29279=>1000, 29280=>1000, 29281=>1000, 29282=>1000, 29283=>1000, 29287=>1000, 29288=>1000, 29289=>1000, 29291=>1000, 29294=>1000, 29295=>1000, 29297=>1000, 29298=>1000, 29300=>1000, 29303=>1000, 29304=>1000, + 29305=>1000, 29307=>1000, 29308=>1000, 29309=>1000, 29310=>1000, 29311=>1000, 29312=>1000, 29313=>1000, 29314=>1000, 29316=>1000, 29319=>1000, 29321=>1000, 29325=>1000, 29326=>1000, 29330=>1000, 29331=>1000, + 29334=>1000, 29339=>1000, 29344=>1000, 29346=>1000, 29351=>1000, 29352=>1000, 29356=>1000, 29357=>1000, 29358=>1000, 29359=>1000, 29361=>1000, 29362=>1000, 29364=>1000, 29366=>1000, 29369=>1000, 29374=>1000, + 29377=>1000, 29378=>1000, 29379=>1000, 29380=>1000, 29382=>1000, 29383=>1000, 29385=>1000, 29388=>1000, 29390=>1000, 29392=>1000, 29394=>1000, 29397=>1000, 29398=>1000, 29399=>1000, 29400=>1000, 29401=>1000, + 29403=>1000, 29407=>1000, 29408=>1000, 29409=>1000, 29410=>1000, 29413=>1000, 29417=>1000, 29420=>1000, 29421=>1000, 29427=>1000, 29428=>1000, 29431=>1000, 29432=>1000, 29433=>1000, 29434=>1000, 29435=>1000, + 29436=>1000, 29437=>1000, 29438=>1000, 29442=>1000, 29444=>1000, 29445=>1000, 29447=>1000, 29450=>1000, 29451=>1000, 29453=>1000, 29458=>1000, 29459=>1000, 29462=>1000, 29463=>1000, 29464=>1000, 29465=>1000, + 29467=>1000, 29468=>1000, 29469=>1000, 29470=>1000, 29471=>1000, 29474=>1000, 29476=>1000, 29477=>1000, 29479=>1000, 29480=>1000, 29481=>1000, 29482=>1000, 29483=>1000, 29484=>1000, 29486=>1000, 29487=>1000, + 29489=>1000, 29490=>1000, 29492=>1000, 29493=>1000, 29494=>1000, 29495=>1000, 29498=>1000, 29499=>1000, 29501=>1000, 29502=>1000, 29503=>1000, 29507=>1000, 29508=>1000, 29509=>1000, 29517=>1000, 29518=>1000, + 29519=>1000, 29520=>1000, 29522=>1000, 29526=>1000, 29527=>1000, 29528=>1000, 29533=>1000, 29534=>1000, 29535=>1000, 29536=>1000, 29539=>1000, 29542=>1000, 29543=>1000, 29544=>1000, 29545=>1000, 29546=>1000, + 29547=>1000, 29548=>1000, 29550=>1000, 29551=>1000, 29552=>1000, 29553=>1000, 29554=>1000, 29557=>1000, 29559=>1000, 29560=>1000, 29561=>1000, 29562=>1000, 29563=>1000, 29564=>1000, 29568=>1000, 29569=>1000, + 29571=>1000, 29572=>1000, 29573=>1000, 29574=>1000, 29575=>1000, 29577=>1000, 29579=>1000, 29582=>1000, 29584=>1000, 29587=>1000, 29589=>1000, 29590=>1000, 29591=>1000, 29592=>1000, 29596=>1000, 29598=>1000, + 29599=>1000, 29600=>1000, 29602=>1000, 29605=>1000, 29606=>1000, 29609=>1000, 29610=>1000, 29611=>1000, 29613=>1000, 29618=>1000, 29619=>1000, 29621=>1000, 29623=>1000, 29625=>1000, 29627=>1000, 29628=>1000, + 29629=>1000, 29631=>1000, 29632=>1000, 29634=>1000, 29637=>1000, 29638=>1000, 29640=>1000, 29641=>1000, 29642=>1000, 29643=>1000, 29644=>1000, 29645=>1000, 29646=>1000, 29647=>1000, 29650=>1000, 29651=>1000, + 29654=>1000, 29657=>1000, 29661=>1000, 29662=>1000, 29664=>1000, 29665=>1000, 29667=>1000, 29669=>1000, 29670=>1000, 29671=>1000, 29673=>1000, 29674=>1000, 29677=>1000, 29678=>1000, 29681=>1000, 29684=>1000, + 29685=>1000, 29687=>1000, 29688=>1000, 29689=>1000, 29690=>1000, 29691=>1000, 29693=>1000, 29694=>1000, 29695=>1000, 29696=>1000, 29697=>1000, 29699=>1000, 29700=>1000, 29701=>1000, 29702=>1000, 29703=>1000, + 29705=>1000, 29706=>1000, 29713=>1000, 29722=>1000, 29723=>1000, 29730=>1000, 29732=>1000, 29733=>1000, 29734=>1000, 29736=>1000, 29737=>1000, 29738=>1000, 29739=>1000, 29740=>1000, 29741=>1000, 29742=>1000, + 29743=>1000, 29744=>1000, 29745=>1000, 29746=>1000, 29747=>1000, 29748=>1000, 29749=>1000, 29750=>1000, 29753=>1000, 29754=>1000, 29759=>1000, 29760=>1000, 29761=>1000, 29763=>1000, 29764=>1000, 29766=>1000, + 29767=>1000, 29771=>1000, 29773=>1000, 29777=>1000, 29778=>1000, 29781=>1000, 29783=>1000, 29785=>1000, 29786=>1000, 29787=>1000, 29788=>1000, 29789=>1000, 29790=>1000, 29791=>1000, 29792=>1000, 29794=>1000, + 29795=>1000, 29796=>1000, 29798=>1000, 29799=>1000, 29800=>1000, 29801=>1000, 29802=>1000, 29803=>1000, 29805=>1000, 29806=>1000, 29807=>1000, 29808=>1000, 29809=>1000, 29810=>1000, 29811=>1000, 29814=>1000, + 29822=>1000, 29824=>1000, 29825=>1000, 29827=>1000, 29829=>1000, 29830=>1000, 29831=>1000, 29833=>1000, 29835=>1000, 29839=>1000, 29840=>1000, 29841=>1000, 29842=>1000, 29848=>1000, 29849=>1000, 29850=>1000, + 29852=>1000, 29854=>1000, 29855=>1000, 29856=>1000, 29857=>1000, 29858=>1000, 29859=>1000, 29862=>1000, 29863=>1000, 29864=>1000, 29865=>1000, 29866=>1000, 29867=>1000, 29870=>1000, 29871=>1000, 29872=>1000, + 29873=>1000, 29874=>1000, 29877=>1000, 29881=>1000, 29883=>1000, 29885=>1000, 29887=>1000, 29896=>1000, 29897=>1000, 29898=>1000, 29900=>1000, 29903=>1000, 29904=>1000, 29907=>1000, 29908=>1000, 29912=>1000, + 29914=>1000, 29915=>1000, 29916=>1000, 29918=>1000, 29919=>1000, 29920=>1000, 29922=>1000, 29923=>1000, 29924=>1000, 29926=>1000, 29927=>1000, 29928=>1000, 29929=>1000, 29930=>1000, 29931=>1000, 29934=>1000, + 29935=>1000, 29936=>1000, 29937=>1000, 29938=>1000, 29940=>1000, 29942=>1000, 29943=>1000, 29944=>1000, 29946=>1000, 29947=>1000, 29948=>1000, 29951=>1000, 29953=>1000, 29955=>1000, 29956=>1000, 29957=>1000, + 29958=>1000, 29964=>1000, 29965=>1000, 29966=>1000, 29969=>1000, 29970=>1000, 29971=>1000, 29973=>1000, 29974=>1000, 29975=>1000, 29976=>1000, 29978=>1000, 29980=>1000, 29982=>1000, 29983=>1000, 29984=>1000, + 29985=>1000, 29987=>1000, 29988=>1000, 29989=>1000, 29990=>1000, 29991=>1000, 29992=>1000, 29993=>1000, 29994=>1000, 29995=>1000, 29996=>1000, 29999=>1000, 30000=>1000, 30001=>1000, 30002=>1000, 30003=>1000, + 30006=>1000, 30007=>1000, 30008=>1000, 30009=>1000, 30010=>1000, 30011=>1000, 30012=>1000, 30013=>1000, 30014=>1000, 30015=>1000, 30016=>1000, 30019=>1000, 30020=>1000, 30022=>1000, 30023=>1000, 30024=>1000, + 30025=>1000, 30026=>1000, 30027=>1000, 30028=>1000, 30029=>1000, 30030=>1000, 30031=>1000, 30032=>1000, 30033=>1000, 30034=>1000, 30036=>1000, 30039=>1000, 30041=>1000, 30042=>1000, 30043=>1000, 30044=>1000, + 30045=>1000, 30046=>1000, 30047=>1000, 30048=>1000, 30049=>1000, 30050=>1000, 30052=>1000, 30053=>1000, 30054=>1000, 30055=>1000, 30057=>1000, 30058=>1000, 30059=>1000, 30061=>1000, 30063=>1000, 30064=>1000, + 30065=>1000, 30067=>1000, 30068=>1000, 30070=>1000, 30071=>1000, 30072=>1000, 30073=>1000, 30074=>1000, 30075=>1000, 30076=>1000, 30077=>1000, 30078=>1000, 30079=>1000, 30081=>1000, 30082=>1000, 30085=>1000, + 30086=>1000, 30087=>1000, 30089=>1000, 30090=>1000, 30091=>1000, 30094=>1000, 30095=>1000, 30096=>1000, 30097=>1000, 30098=>1000, 30099=>1000, 30100=>1000, 30101=>1000, 30105=>1000, 30106=>1000, 30108=>1000, + 30109=>1000, 30114=>1000, 30115=>1000, 30116=>1000, 30117=>1000, 30123=>1000, 30129=>1000, 30130=>1000, 30131=>1000, 30132=>1000, 30133=>1000, 30136=>1000, 30137=>1000, 30138=>1000, 30140=>1000, 30141=>1000, + 30142=>1000, 30143=>1000, 30144=>1000, 30145=>1000, 30146=>1000, 30147=>1000, 30148=>1000, 30149=>1000, 30150=>1000, 30151=>1000, 30154=>1000, 30156=>1000, 30157=>1000, 30158=>1000, 30159=>1000, 30162=>1000, + 30164=>1000, 30165=>1000, 30167=>1000, 30168=>1000, 30169=>1000, 30171=>1000, 30172=>1000, 30174=>1000, 30175=>1000, 30176=>1000, 30177=>1000, 30178=>1000, 30179=>1000, 30180=>1000, 30183=>1000, 30185=>1000, + 30188=>1000, 30190=>1000, 30191=>1000, 30192=>1000, 30193=>1000, 30194=>1000, 30195=>1000, 30196=>1000, 30201=>1000, 30202=>1000, 30204=>1000, 30206=>1000, 30207=>1000, 30208=>1000, 30209=>1000, 30210=>1000, + 30211=>1000, 30212=>1000, 30215=>1000, 30216=>1000, 30217=>1000, 30218=>1000, 30219=>1000, 30220=>1000, 30221=>1000, 30223=>1000, 30226=>1000, 30227=>1000, 30229=>1000, 30230=>1000, 30233=>1000, 30235=>1000, + 30236=>1000, 30237=>1000, 30238=>1000, 30239=>1000, 30240=>1000, 30241=>1000, 30242=>1000, 30243=>1000, 30244=>1000, 30245=>1000, 30246=>1000, 30247=>1000, 30249=>1000, 30253=>1000, 30256=>1000, 30258=>1000, + 30259=>1000, 30260=>1000, 30261=>1000, 30264=>1000, 30265=>1000, 30266=>1000, 30267=>1000, 30268=>1000, 30272=>1000, 30273=>1000, 30274=>1000, 30275=>1000, 30276=>1000, 30277=>1000, 30278=>1000, 30279=>1000, + 30280=>1000, 30281=>1000, 30282=>1000, 30283=>1000, 30284=>1000, 30290=>1000, 30293=>1000, 30294=>1000, 30296=>1000, 30297=>1000, 30300=>1000, 30303=>1000, 30305=>1000, 30306=>1000, 30308=>1000, 30309=>1000, + 30311=>1000, 30312=>1000, 30313=>1000, 30314=>1000, 30316=>1000, 30317=>1000, 30318=>1000, 30319=>1000, 30320=>1000, 30321=>1000, 30322=>1000, 30324=>1000, 30326=>1000, 30328=>1000, 30330=>1000, 30331=>1000, + 30332=>1000, 30333=>1000, 30334=>1000, 30336=>1000, 30337=>1000, 30338=>1000, 30339=>1000, 30340=>1000, 30341=>1000, 30342=>1000, 30343=>1000, 30344=>1000, 30347=>1000, 30348=>1000, 30349=>1000, 30350=>1000, + 30352=>1000, 30355=>1000, 30357=>1000, 30358=>1000, 30361=>1000, 30362=>1000, 30363=>1000, 30364=>1000, 30365=>1000, 30366=>1000, 30367=>1000, 30368=>1000, 30370=>1000, 30371=>1000, 30372=>1000, 30373=>1000, + 30374=>1000, 30375=>1000, 30376=>1000, 30378=>1000, 30381=>1000, 30382=>1000, 30384=>1000, 30388=>1000, 30391=>1000, 30392=>1000, 30393=>1000, 30394=>1000, 30397=>1000, 30399=>1000, 30401=>1000, 30402=>1000, + 30403=>1000, 30405=>1000, 30406=>1000, 30408=>1000, 30409=>1000, 30410=>1000, 30411=>1000, 30412=>1000, 30413=>1000, 30414=>1000, 30418=>1000, 30420=>1000, 30422=>1000, 30423=>1000, 30425=>1000, 30427=>1000, + 30428=>1000, 30430=>1000, 30431=>1000, 30432=>1000, 30433=>1000, 30435=>1000, 30436=>1000, 30437=>1000, 30438=>1000, 30439=>1000, 30440=>1000, 30442=>1000, 30444=>1000, 30446=>1000, 30448=>1000, 30449=>1000, + 30450=>1000, 30452=>1000, 30454=>1000, 30456=>1000, 30457=>1000, 30459=>1000, 30460=>1000, 30462=>1000, 30464=>1000, 30465=>1000, 30468=>1000, 30470=>1000, 30471=>1000, 30472=>1000, 30473=>1000, 30474=>1000, + 30475=>1000, 30476=>1000, 30478=>1000, 30482=>1000, 30484=>1000, 30485=>1000, 30487=>1000, 30489=>1000, 30490=>1000, 30491=>1000, 30492=>1000, 30494=>1000, 30495=>1000, 30496=>1000, 30498=>1000, 30500=>1000, + 30501=>1000, 30502=>1000, 30504=>1000, 30505=>1000, 30509=>1000, 30510=>1000, 30511=>1000, 30516=>1000, 30517=>1000, 30518=>1000, 30519=>1000, 30520=>1000, 30521=>1000, 30522=>1000, 30524=>1000, 30525=>1000, + 30526=>1000, 30528=>1000, 30530=>1000, 30533=>1000, 30534=>1000, 30535=>1000, 30538=>1000, 30541=>1000, 30542=>1000, 30543=>1000, 30546=>1000, 30550=>1000, 30551=>1000, 30554=>1000, 30555=>1000, 30556=>1000, + 30558=>1000, 30559=>1000, 30560=>1000, 30561=>1000, 30562=>1000, 30563=>1000, 30564=>1000, 30565=>1000, 30566=>1000, 30567=>1000, 30568=>1000, 30570=>1000, 30571=>1000, 30572=>1000, 30576=>1000, 30578=>1000, + 30579=>1000, 30580=>1000, 30585=>1000, 30586=>1000, 30589=>1000, 30590=>1000, 30591=>1000, 30592=>1000, 30596=>1000, 30603=>1000, 30604=>1000, 30605=>1000, 30606=>1000, 30609=>1000, 30612=>1000, 30613=>1000, + 30614=>1000, 30618=>1000, 30622=>1000, 30623=>1000, 30624=>1000, 30626=>1000, 30629=>1000, 30631=>1000, 30634=>1000, 30636=>1000, 30637=>1000, 30638=>1000, 30639=>1000, 30640=>1000, 30641=>1000, 30643=>1000, + 30645=>1000, 30646=>1000, 30649=>1000, 30651=>1000, 30652=>1000, 30653=>1000, 30654=>1000, 30655=>1000, 30659=>1000, 30663=>1000, 30665=>1000, 30669=>1000, 30673=>1000, 30674=>1000, 30677=>1000, 30679=>1000, + 30681=>1000, 30682=>1000, 30683=>1000, 30684=>1000, 30686=>1000, 30687=>1000, 30688=>1000, 30690=>1000, 30691=>1000, 30692=>1000, 30693=>1000, 30694=>1000, 30695=>1000, 30697=>1000, 30698=>1000, 30700=>1000, + 30701=>1000, 30702=>1000, 30703=>1000, 30704=>1000, 30705=>1000, 30707=>1000, 30708=>1000, 30712=>1000, 30715=>1000, 30716=>1000, 30722=>1000, 30725=>1000, 30726=>1000, 30729=>1000, 30732=>1000, 30733=>1000, + 30734=>1000, 30737=>1000, 30738=>1000, 30740=>1000, 30741=>1000, 30749=>1000, 30752=>1000, 30753=>1000, 30754=>1000, 30755=>1000, 30757=>1000, 30758=>1000, 30759=>1000, 30765=>1000, 30766=>1000, 30768=>1000, + 30770=>1000, 30772=>1000, 30773=>1000, 30775=>1000, 30778=>1000, 30783=>1000, 30787=>1000, 30788=>1000, 30789=>1000, 30791=>1000, 30792=>1000, 30796=>1000, 30798=>1000, 30802=>1000, 30812=>1000, 30813=>1000, + 30814=>1000, 30816=>1000, 30817=>1000, 30819=>1000, 30820=>1000, 30824=>1000, 30826=>1000, 30827=>1000, 30828=>1000, 30830=>1000, 30831=>1000, 30834=>1000, 30836=>1000, 30842=>1000, 30844=>1000, 30846=>1000, + 30849=>1000, 30854=>1000, 30855=>1000, 30858=>1000, 30860=>1000, 30861=>1000, 30862=>1000, 30863=>1000, 30865=>1000, 30867=>1000, 30868=>1000, 30869=>1000, 30871=>1000, 30872=>1000, 30874=>1000, 30877=>1000, + 30878=>1000, 30879=>1000, 30881=>1000, 30883=>1000, 30884=>1000, 30887=>1000, 30888=>1000, 30889=>1000, 30890=>1000, 30892=>1000, 30893=>1000, 30895=>1000, 30896=>1000, 30897=>1000, 30898=>1000, 30899=>1000, + 30901=>1000, 30906=>1000, 30907=>1000, 30908=>1000, 30909=>1000, 30910=>1000, 30911=>1000, 30913=>1000, 30917=>1000, 30918=>1000, 30919=>1000, 30920=>1000, 30921=>1000, 30922=>1000, 30923=>1000, 30924=>1000, + 30926=>1000, 30928=>1000, 30929=>1000, 30930=>1000, 30931=>1000, 30932=>1000, 30933=>1000, 30934=>1000, 30938=>1000, 30939=>1000, 30943=>1000, 30944=>1000, 30945=>1000, 30948=>1000, 30950=>1000, 30951=>1000, + 30952=>1000, 30954=>1000, 30956=>1000, 30959=>1000, 30962=>1000, 30963=>1000, 30964=>1000, 30966=>1000, 30967=>1000, 30970=>1000, 30971=>1000, 30973=>1000, 30975=>1000, 30976=>1000, 30977=>1000, 30982=>1000, + 30983=>1000, 30988=>1000, 30990=>1000, 30992=>1000, 30993=>1000, 30994=>1000, 31001=>1000, 31002=>1000, 31004=>1000, 31006=>1000, 31007=>1000, 31008=>1000, 31013=>1000, 31014=>1000, 31015=>1000, 31017=>1000, + 31018=>1000, 31019=>1000, 31020=>1000, 31021=>1000, 31024=>1000, 31025=>1000, 31028=>1000, 31029=>1000, 31034=>1000, 31035=>1000, 31036=>1000, 31037=>1000, 31038=>1000, 31039=>1000, 31040=>1000, 31041=>1000, + 31044=>1000, 31045=>1000, 31046=>1000, 31047=>1000, 31048=>1000, 31049=>1000, 31050=>1000, 31051=>1000, 31055=>1000, 31056=>1000, 31057=>1000, 31059=>1000, 31060=>1000, 31061=>1000, 31062=>1000, 31063=>1000, + 31064=>1000, 31066=>1000, 31067=>1000, 31068=>1000, 31069=>1000, 31070=>1000, 31071=>1000, 31072=>1000, 31074=>1000, 31077=>1000, 31079=>1000, 31080=>1000, 31081=>1000, 31083=>1000, 31085=>1000, 31090=>1000, + 31095=>1000, 31097=>1000, 31098=>1000, 31099=>1000, 31100=>1000, 31102=>1000, 31103=>1000, 31104=>1000, 31105=>1000, 31108=>1000, 31109=>1000, 31114=>1000, 31115=>1000, 31116=>1000, 31117=>1000, 31118=>1000, + 31119=>1000, 31121=>1000, 31123=>1000, 31124=>1000, 31125=>1000, 31126=>1000, 31128=>1000, 31131=>1000, 31132=>1000, 31133=>1000, 31137=>1000, 31142=>1000, 31143=>1000, 31144=>1000, 31145=>1000, 31146=>1000, + 31147=>1000, 31150=>1000, 31151=>1000, 31152=>1000, 31153=>1000, 31155=>1000, 31156=>1000, 31160=>1000, 31161=>1000, 31162=>1000, 31163=>1000, 31165=>1000, 31166=>1000, 31167=>1000, 31168=>1000, 31169=>1000, + 31170=>1000, 31172=>1000, 31175=>1000, 31176=>1000, 31177=>1000, 31178=>1000, 31179=>1000, 31183=>1000, 31185=>1000, 31186=>1000, 31188=>1000, 31189=>1000, 31190=>1000, 31192=>1000, 31194=>1000, 31197=>1000, + 31198=>1000, 31199=>1000, 31200=>1000, 31201=>1000, 31202=>1000, 31203=>1000, 31204=>1000, 31205=>1000, 31206=>1000, 31207=>1000, 31209=>1000, 31210=>1000, 31211=>1000, 31212=>1000, 31213=>1000, 31216=>1000, + 31217=>1000, 31224=>1000, 31227=>1000, 31228=>1000, 31232=>1000, 31234=>1000, 31235=>1000, 31239=>1000, 31240=>1000, 31241=>1000, 31242=>1000, 31243=>1000, 31244=>1000, 31245=>1000, 31246=>1000, 31249=>1000, + 31252=>1000, 31253=>1000, 31255=>1000, 31256=>1000, 31257=>1000, 31258=>1000, 31259=>1000, 31260=>1000, 31262=>1000, 31263=>1000, 31264=>1000, 31265=>1000, 31271=>1000, 31275=>1000, 31277=>1000, 31278=>1000, + 31279=>1000, 31280=>1000, 31281=>1000, 31282=>1000, 31284=>1000, 31285=>1000, 31287=>1000, 31288=>1000, 31289=>1000, 31290=>1000, 31291=>1000, 31292=>1000, 31293=>1000, 31294=>1000, 31295=>1000, 31296=>1000, + 31298=>1000, 31299=>1000, 31300=>1000, 31301=>1000, 31302=>1000, 31303=>1000, 31304=>1000, 31305=>1000, 31308=>1000, 31309=>1000, 31310=>1000, 31311=>1000, 31312=>1000, 31317=>1000, 31318=>1000, 31319=>1000, + 31321=>1000, 31324=>1000, 31325=>1000, 31327=>1000, 31328=>1000, 31329=>1000, 31330=>1000, 31331=>1000, 31333=>1000, 31335=>1000, 31337=>1000, 31338=>1000, 31339=>1000, 31341=>1000, 31344=>1000, 31348=>1000, + 31349=>1000, 31350=>1000, 31352=>1000, 31353=>1000, 31354=>1000, 31357=>1000, 31358=>1000, 31359=>1000, 31360=>1000, 31361=>1000, 31362=>1000, 31363=>1000, 31364=>1000, 31365=>1000, 31366=>1000, 31368=>1000, + 31370=>1000, 31371=>1000, 31376=>1000, 31377=>1000, 31378=>1000, 31379=>1000, 31380=>1000, 31381=>1000, 31382=>1000, 31383=>1000, 31384=>1000, 31390=>1000, 31391=>1000, 31392=>1000, 31395=>1000, 31401=>1000, + 31402=>1000, 31404=>1000, 31406=>1000, 31407=>1000, 31408=>1000, 31411=>1000, 31413=>1000, 31414=>1000, 31417=>1000, 31418=>1000, 31419=>1000, 31420=>1000, 31423=>1000, 31427=>1000, 31428=>1000, 31429=>1000, + 31430=>1000, 31431=>1000, 31432=>1000, 31433=>1000, 31434=>1000, 31435=>1000, 31436=>1000, 31437=>1000, 31438=>1000, 31439=>1000, 31441=>1000, 31442=>1000, 31443=>1000, 31445=>1000, 31449=>1000, 31450=>1000, + 31451=>1000, 31452=>1000, 31453=>1000, 31455=>1000, 31456=>1000, 31457=>1000, 31458=>1000, 31459=>1000, 31461=>1000, 31462=>1000, 31463=>1000, 31464=>1000, 31465=>1000, 31466=>1000, 31467=>1000, 31468=>1000, + 31469=>1000, 31471=>1000, 31472=>1000, 31473=>1000, 31476=>1000, 31478=>1000, 31480=>1000, 31481=>1000, 31482=>1000, 31483=>1000, 31485=>1000, 31486=>1000, 31487=>1000, 31490=>1000, 31492=>1000, 31494=>1000, + 31495=>1000, 31496=>1000, 31498=>1000, 31499=>1000, 31503=>1000, 31505=>1000, 31508=>1000, 31512=>1000, 31513=>1000, 31515=>1000, 31518=>1000, 31519=>1000, 31520=>1000, 31523=>1000, 31525=>1000, 31526=>1000, + 31527=>1000, 31528=>1000, 31529=>1000, 31530=>1000, 31531=>1000, 31532=>1000, 31533=>1000, 31534=>1000, 31535=>1000, 31536=>1000, 31537=>1000, 31539=>1000, 31540=>1000, 31541=>1000, 31542=>1000, 31545=>1000, + 31549=>1000, 31551=>1000, 31552=>1000, 31553=>1000, 31557=>1000, 31558=>1000, 31559=>1000, 31560=>1000, 31561=>1000, 31563=>1000, 31564=>1000, 31565=>1000, 31566=>1000, 31567=>1000, 31568=>1000, 31569=>1000, + 31570=>1000, 31572=>1000, 31573=>1000, 31574=>1000, 31581=>1000, 31584=>1000, 31588=>1000, 31589=>1000, 31590=>1000, 31591=>1000, 31593=>1000, 31594=>1000, 31596=>1000, 31597=>1000, 31598=>1000, 31599=>1000, + 31600=>1000, 31601=>1000, 31602=>1000, 31603=>1000, 31604=>1000, 31605=>1000, 31607=>1000, 31610=>1000, 31620=>1000, 31622=>1000, 31623=>1000, 31625=>1000, 31627=>1000, 31629=>1000, 31630=>1000, 31631=>1000, + 31632=>1000, 31633=>1000, 31634=>1000, 31636=>1000, 31637=>1000, 31638=>1000, 31639=>1000, 31640=>1000, 31641=>1000, 31642=>1000, 31643=>1000, 31644=>1000, 31645=>1000, 31646=>1000, 31647=>1000, 31648=>1000, + 31649=>1000, 31653=>1000, 31658=>1000, 31660=>1000, 31661=>1000, 31663=>1000, 31664=>1000, 31665=>1000, 31666=>1000, 31668=>1000, 31669=>1000, 31670=>1000, 31672=>1000, 31674=>1000, 31675=>1000, 31676=>1000, + 31677=>1000, 31680=>1000, 31681=>1000, 31682=>1000, 31684=>1000, 31685=>1000, 31686=>1000, 31687=>1000, 31688=>1000, 31689=>1000, 31690=>1000, 31691=>1000, 31692=>1000, 31695=>1000, 31700=>1000, 31702=>1000, + 31703=>1000, 31705=>1000, 31706=>1000, 31707=>1000, 31709=>1000, 31712=>1000, 31716=>1000, 31717=>1000, 31718=>1000, 31720=>1000, 31721=>1000, 31722=>1000, 31725=>1000, 31730=>1000, 31731=>1000, 31732=>1000, + 31733=>1000, 31734=>1000, 31735=>1000, 31736=>1000, 31737=>1000, 31738=>1000, 31740=>1000, 31742=>1000, 31744=>1000, 31745=>1000, 31746=>1000, 31747=>1000, 31748=>1000, 31750=>1000, 31751=>1000, 31753=>1000, + 31755=>1000, 31756=>1000, 31757=>1000, 31758=>1000, 31759=>1000, 31761=>1000, 31762=>1000, 31763=>1000, 31764=>1000, 31767=>1000, 31769=>1000, 31771=>1000, 31775=>1000, 31776=>1000, 31777=>1000, 31779=>1000, + 31781=>1000, 31782=>1000, 31783=>1000, 31784=>1000, 31786=>1000, 31787=>1000, 31788=>1000, 31793=>1000, 31795=>1000, 31796=>1000, 31798=>1000, 31799=>1000, 31800=>1000, 31801=>1000, 31802=>1000, 31805=>1000, + 31806=>1000, 31807=>1000, 31808=>1000, 31811=>1000, 31814=>1000, 31818=>1000, 31820=>1000, 31821=>1000, 31823=>1000, 31824=>1000, 31825=>1000, 31826=>1000, 31827=>1000, 31828=>1000, 31829=>1000, 31830=>1000, + 31832=>1000, 31833=>1000, 31834=>1000, 31835=>1000, 31836=>1000, 31837=>1000, 31838=>1000, 31839=>1000, 31840=>1000, 31841=>1000, 31843=>1000, 31844=>1000, 31845=>1000, 31847=>1000, 31849=>1000, 31852=>1000, + 31853=>1000, 31854=>1000, 31856=>1000, 31858=>1000, 31859=>1000, 31861=>1000, 31865=>1000, 31868=>1000, 31869=>1000, 31870=>1000, 31873=>1000, 31874=>1000, 31875=>1000, 31878=>1000, 31879=>1000, 31881=>1000, + 31883=>1000, 31885=>1000, 31887=>1000, 31888=>1000, 31890=>1000, 31892=>1000, 31893=>1000, 31895=>1000, 31896=>1000, 31899=>1000, 31902=>1000, 31903=>1000, 31904=>1000, 31905=>1000, 31906=>1000, 31908=>1000, + 31909=>1000, 31910=>1000, 31911=>1000, 31912=>1000, 31915=>1000, 31917=>1000, 31918=>1000, 31920=>1000, 31921=>1000, 31922=>1000, 31923=>1000, 31926=>1000, 31927=>1000, 31929=>1000, 31930=>1000, 31931=>1000, + 31932=>1000, 31933=>1000, 31934=>1000, 31935=>1000, 31936=>1000, 31938=>1000, 31940=>1000, 31941=>1000, 31943=>1000, 31944=>1000, 31945=>1000, 31946=>1000, 31949=>1000, 31950=>1000, 31951=>1000, 31954=>1000, + 31955=>1000, 31956=>1000, 31957=>1000, 31958=>1000, 31959=>1000, 31960=>1000, 31961=>1000, 31962=>1000, 31964=>1000, 31965=>1000, 31966=>1000, 31967=>1000, 31968=>1000, 31970=>1000, 31974=>1000, 31975=>1000, + 31977=>1000, 31979=>1000, 31983=>1000, 31986=>1000, 31988=>1000, 31989=>1000, 31990=>1000, 31992=>1000, 31994=>1000, 31995=>1000, 31998=>1000, 32000=>1000, 32002=>1000, 32003=>1000, 32004=>1000, 32005=>1000, + 32006=>1000, 32007=>1000, 32008=>1000, 32009=>1000, 32010=>1000, 32011=>1000, 32013=>1000, 32015=>1000, 32016=>1000, 32017=>1000, 32018=>1000, 32019=>1000, 32020=>1000, 32021=>1000, 32022=>1000, 32023=>1000, + 32024=>1000, 32025=>1000, 32026=>1000, 32027=>1000, 32028=>1000, 32029=>1000, 32030=>1000, 32032=>1000, 32033=>1000, 32034=>1000, 32035=>1000, 32038=>1000, 32042=>1000, 32043=>1000, 32044=>1000, 32045=>1000, + 32046=>1000, 32047=>1000, 32048=>1000, 32049=>1000, 32050=>1000, 32051=>1000, 32053=>1000, 32057=>1000, 32058=>1000, 32060=>1000, 32061=>1000, 32062=>1000, 32063=>1000, 32064=>1000, 32065=>1000, 32066=>1000, + 32067=>1000, 32068=>1000, 32069=>1000, 32070=>1000, 32071=>1000, 32072=>1000, 32075=>1000, 32076=>1000, 32077=>1000, 32078=>1000, 32079=>1000, 32080=>1000, 32081=>1000, 32083=>1000, 32086=>1000, 32087=>1000, + 32089=>1000, 32090=>1000, 32091=>1000, 32092=>1000, 32093=>1000, 32094=>1000, 32097=>1000, 32098=>1000, 32099=>1000, 32101=>1000, 32102=>1000, 32103=>1000, 32104=>1000, 32106=>1000, 32110=>1000, 32112=>1000, + 32113=>1000, 32114=>1000, 32115=>1000, 32117=>1000, 32118=>1000, 32120=>1000, 32121=>1000, 32122=>1000, 32123=>1000, 32125=>1000, 32127=>1000, 32129=>1000, 32130=>1000, 32131=>1000, 32133=>1000, 32134=>1000, + 32136=>1000, 32137=>1000, 32139=>1000, 32140=>1000, 32141=>1000, 32143=>1000, 32145=>1000, 32147=>1000, 32150=>1000, 32151=>1000, 32153=>1000, 32154=>1000, 32155=>1000, 32156=>1000, 32157=>1000, 32158=>1000, + 32159=>1000, 32160=>1000, 32162=>1000, 32163=>1000, 32166=>1000, 32167=>1000, 32170=>1000, 32171=>1000, 32172=>1000, 32173=>1000, 32174=>1000, 32175=>1000, 32176=>1000, 32177=>1000, 32178=>1000, 32179=>1000, + 32180=>1000, 32181=>1000, 32182=>1000, 32183=>1000, 32184=>1000, 32185=>1000, 32186=>1000, 32187=>1000, 32189=>1000, 32190=>1000, 32191=>1000, 32194=>1000, 32195=>1000, 32196=>1000, 32197=>1000, 32198=>1000, + 32199=>1000, 32202=>1000, 32203=>1000, 32204=>1000, 32205=>1000, 32206=>1000, 32207=>1000, 32209=>1000, 32210=>1000, 32213=>1000, 32214=>1000, 32215=>1000, 32216=>1000, 32217=>1000, 32218=>1000, 32220=>1000, + 32221=>1000, 32222=>1000, 32224=>1000, 32225=>1000, 32226=>1000, 32228=>1000, 32229=>1000, 32230=>1000, 32232=>1000, 32233=>1000, 32234=>1000, 32235=>1000, 32236=>1000, 32237=>1000, 32239=>1000, 32241=>1000, + 32242=>1000, 32244=>1000, 32245=>1000, 32246=>1000, 32249=>1000, 32250=>1000, 32251=>1000, 32256=>1000, 32257=>1000, 32260=>1000, 32261=>1000, 32264=>1000, 32265=>1000, 32266=>1000, 32267=>1000, 32272=>1000, + 32273=>1000, 32274=>1000, 32277=>1000, 32279=>1000, 32283=>1000, 32284=>1000, 32285=>1000, 32286=>1000, 32287=>1000, 32288=>1000, 32289=>1000, 32290=>1000, 32291=>1000, 32294=>1000, 32295=>1000, 32296=>1000, + 32299=>1000, 32300=>1000, 32301=>1000, 32302=>1000, 32303=>1000, 32305=>1000, 32306=>1000, 32307=>1000, 32309=>1000, 32310=>1000, 32311=>1000, 32313=>1000, 32314=>1000, 32315=>1000, 32317=>1000, 32318=>1000, + 32319=>1000, 32321=>1000, 32323=>1000, 32324=>1000, 32325=>1000, 32326=>1000, 32327=>1000, 32330=>1000, 32331=>1000, 32333=>1000, 32334=>1000, 32336=>1000, 32338=>1000, 32340=>1000, 32341=>1000, 32342=>1000, + 32344=>1000, 32345=>1000, 32346=>1000, 32349=>1000, 32350=>1000, 32351=>1000, 32353=>1000, 32354=>1000, 32357=>1000, 32358=>1000, 32359=>1000, 32361=>1000, 32362=>1000, 32363=>1000, 32365=>1000, 32366=>1000, + 32367=>1000, 32368=>1000, 32371=>1000, 32376=>1000, 32377=>1000, 32379=>1000, 32380=>1000, 32381=>1000, 32382=>1000, 32383=>1000, 32385=>1000, 32386=>1000, 32387=>1000, 32390=>1000, 32391=>1000, 32392=>1000, + 32393=>1000, 32394=>1000, 32396=>1000, 32397=>1000, 32398=>1000, 32399=>1000, 32400=>1000, 32401=>1000, 32402=>1000, 32403=>1000, 32404=>1000, 32405=>1000, 32406=>1000, 32408=>1000, 32410=>1000, 32411=>1000, + 32412=>1000, 32413=>1000, 32414=>1000, 32566=>1000, 32568=>1000, 32570=>1000, 32571=>1000, 32572=>1000, 32573=>1000, 32574=>1000, 32575=>1000, 32579=>1000, 32580=>1000, 32581=>1000, 32583=>1000, 32588=>1000, + 32589=>1000, 32590=>1000, 32591=>1000, 32592=>1000, 32593=>1000, 32594=>1000, 32595=>1000, 32596=>1000, 32597=>1000, 32600=>1000, 32603=>1000, 32604=>1000, 32605=>1000, 32607=>1000, 32608=>1000, 32609=>1000, + 32611=>1000, 32612=>1000, 32613=>1000, 32614=>1000, 32615=>1000, 32616=>1000, 32617=>1000, 32618=>1000, 32619=>1000, 32621=>1000, 32622=>1000, 32624=>1000, 32625=>1000, 32626=>1000, 32629=>1000, 32631=>1000, + 32632=>1000, 32633=>1000, 32637=>1000, 32638=>1000, 32639=>1000, 32640=>1000, 32642=>1000, 32643=>1000, 32645=>1000, 32646=>1000, 32647=>1000, 32648=>1000, 32650=>1000, 32651=>1000, 32652=>1000, 32653=>1000, + 32654=>1000, 32655=>1000, 32656=>1000, 32657=>1000, 32660=>1000, 32662=>1000, 32663=>1000, 32666=>1000, 32668=>1000, 32669=>1000, 32670=>1000, 32673=>1000, 32674=>1000, 32675=>1000, 32676=>1000, 32678=>1000, + 32680=>1000, 32681=>1000, 32682=>1000, 32685=>1000, 32686=>1000, 32687=>1000, 32690=>1000, 32692=>1000, 32694=>1000, 32696=>1000, 32697=>1000, 32700=>1000, 32701=>1000, 32703=>1000, 32704=>1000, 32705=>1000, + 32707=>1000, 32709=>1000, 32710=>1000, 32712=>1000, 32714=>1000, 32716=>1000, 32718=>1000, 32719=>1000, 32722=>1000, 32724=>1000, 32725=>1000, 32731=>1000, 32735=>1000, 32736=>1000, 32737=>1000, 32739=>1000, + 32741=>1000, 32742=>1000, 32744=>1000, 32745=>1000, 32747=>1000, 32748=>1000, 32750=>1000, 32751=>1000, 32752=>1000, 32754=>1000, 32755=>1000, 32761=>1000, 32762=>1000, 32763=>1000, 32764=>1000, 32765=>1000, + 32766=>1000, 32767=>1000, 32768=>1000, 32769=>1000, 32771=>1000, 32772=>1000, 32773=>1000, 32774=>1000, 32775=>1000, 32776=>1000, 32778=>1000, 32779=>1000, 32780=>1000, 32781=>1000, 32782=>1000, 32783=>1000, + 32784=>1000, 32785=>1000, 32786=>1000, 32787=>1000, 32788=>1000, 32789=>1000, 32790=>1000, 32791=>1000, 32792=>1000, 32793=>1000, 32796=>1000, 32797=>1000, 32798=>1000, 32799=>1000, 32800=>1000, 32801=>1000, + 32804=>1000, 32806=>1000, 32808=>1000, 32812=>1000, 32814=>1000, 32816=>1000, 32819=>1000, 32820=>1000, 32821=>1000, 32822=>1000, 32823=>1000, 32825=>1000, 32826=>1000, 32827=>1000, 32828=>1000, 32829=>1000, + 32830=>1000, 32831=>1000, 32832=>1000, 32836=>1000, 32838=>1000, 32842=>1000, 32850=>1000, 32854=>1000, 32856=>1000, 32858=>1000, 32862=>1000, 32863=>1000, 32864=>1000, 32865=>1000, 32866=>1000, 32868=>1000, + 32870=>1000, 32872=>1000, 32877=>1000, 32879=>1000, 32880=>1000, 32881=>1000, 32882=>1000, 32883=>1000, 32884=>1000, 32885=>1000, 32886=>1000, 32887=>1000, 32889=>1000, 32893=>1000, 32894=>1000, 32895=>1000, + 32897=>1000, 32900=>1000, 32901=>1000, 32902=>1000, 32903=>1000, 32904=>1000, 32905=>1000, 32907=>1000, 32908=>1000, 32910=>1000, 32915=>1000, 32918=>1000, 32920=>1000, 32922=>1000, 32923=>1000, 32924=>1000, + 32925=>1000, 32926=>1000, 32929=>1000, 32930=>1000, 32933=>1000, 32934=>1000, 32935=>1000, 32937=>1000, 32938=>1000, 32939=>1000, 32940=>1000, 32941=>1000, 32943=>1000, 32945=>1000, 32946=>1000, 32948=>1000, + 32952=>1000, 32953=>1000, 32954=>1000, 32963=>1000, 32964=>1000, 32966=>1000, 32968=>1000, 32972=>1000, 32973=>1000, 32974=>1000, 32975=>1000, 32978=>1000, 32980=>1000, 32981=>1000, 32982=>1000, 32983=>1000, + 32984=>1000, 32985=>1000, 32986=>1000, 32987=>1000, 32989=>1000, 32990=>1000, 32992=>1000, 32993=>1000, 32996=>1000, 32997=>1000, 33005=>1000, 33006=>1000, 33007=>1000, 33008=>1000, 33009=>1000, 33010=>1000, + 33011=>1000, 33012=>1000, 33014=>1000, 33016=>1000, 33017=>1000, 33018=>1000, 33020=>1000, 33021=>1000, 33022=>1000, 33026=>1000, 33027=>1000, 33029=>1000, 33030=>1000, 33031=>1000, 33032=>1000, 33033=>1000, + 33034=>1000, 33035=>1000, 33046=>1000, 33047=>1000, 33048=>1000, 33050=>1000, 33051=>1000, 33052=>1000, 33054=>1000, 33056=>1000, 33059=>1000, 33060=>1000, 33063=>1000, 33065=>1000, 33068=>1000, 33071=>1000, + 33072=>1000, 33073=>1000, 33075=>1000, 33077=>1000, 33081=>1000, 33082=>1000, 33084=>1000, 33086=>1000, 33093=>1000, 33094=>1000, 33095=>1000, 33098=>1000, 33099=>1000, 33100=>1000, 33102=>1000, 33104=>1000, + 33105=>1000, 33106=>1000, 33107=>1000, 33108=>1000, 33109=>1000, 33111=>1000, 33119=>1000, 33120=>1000, 33121=>1000, 33125=>1000, 33126=>1000, 33127=>1000, 33128=>1000, 33129=>1000, 33131=>1000, 33133=>1000, + 33134=>1000, 33135=>1000, 33136=>1000, 33137=>1000, 33140=>1000, 33143=>1000, 33144=>1000, 33145=>1000, 33146=>1000, 33151=>1000, 33152=>1000, 33153=>1000, 33154=>1000, 33155=>1000, 33156=>1000, 33157=>1000, + 33158=>1000, 33160=>1000, 33162=>1000, 33163=>1000, 33166=>1000, 33167=>1000, 33168=>1000, 33171=>1000, 33173=>1000, 33174=>1000, 33176=>1000, 33178=>1000, 33179=>1000, 33180=>1000, 33181=>1000, 33182=>1000, + 33184=>1000, 33186=>1000, 33187=>1000, 33188=>1000, 33192=>1000, 33193=>1000, 33198=>1000, 33200=>1000, 33202=>1000, 33203=>1000, 33204=>1000, 33205=>1000, 33208=>1000, 33210=>1000, 33211=>1000, 33213=>1000, + 33214=>1000, 33215=>1000, 33216=>1000, 33218=>1000, 33219=>1000, 33221=>1000, 33222=>1000, 33224=>1000, 33225=>1000, 33226=>1000, 33227=>1000, 33229=>1000, 33230=>1000, 33231=>1000, 33233=>1000, 33235=>1000, + 33237=>1000, 33239=>1000, 33240=>1000, 33241=>1000, 33242=>1000, 33243=>1000, 33245=>1000, 33246=>1000, 33247=>1000, 33248=>1000, 33249=>1000, 33251=>1000, 33252=>1000, 33253=>1000, 33255=>1000, 33256=>1000, + 33258=>1000, 33259=>1000, 33260=>1000, 33261=>1000, 33264=>1000, 33265=>1000, 33266=>1000, 33267=>1000, 33268=>1000, 33269=>1000, 33270=>1000, 33272=>1000, 33273=>1000, 33274=>1000, 33275=>1000, 33276=>1000, + 33277=>1000, 33278=>1000, 33279=>1000, 33280=>1000, 33281=>1000, 33282=>1000, 33283=>1000, 33285=>1000, 33287=>1000, 33288=>1000, 33289=>1000, 33290=>1000, 33292=>1000, 33293=>1000, 33294=>1000, 33295=>1000, + 33296=>1000, 33298=>1000, 33299=>1000, 33300=>1000, 33302=>1000, 33303=>1000, 33304=>1000, 33305=>1000, 33306=>1000, 33307=>1000, 33308=>1000, 33309=>1000, 33310=>1000, 33311=>1000, 33313=>1000, 33314=>1000, + 33320=>1000, 33321=>1000, 33322=>1000, 33323=>1000, 33324=>1000, 33326=>1000, 33330=>1000, 33331=>1000, 33332=>1000, 33333=>1000, 33334=>1000, 33335=>1000, 33336=>1000, 33337=>1000, 33338=>1000, 33344=>1000, + 33347=>1000, 33348=>1000, 33349=>1000, 33350=>1000, 33351=>1000, 33355=>1000, 33358=>1000, 33359=>1000, 33361=>1000, 33366=>1000, 33368=>1000, 33369=>1000, 33370=>1000, 33372=>1000, 33373=>1000, 33375=>1000, + 33376=>1000, 33378=>1000, 33379=>1000, 33380=>1000, 33382=>1000, 33383=>1000, 33384=>1000, 33386=>1000, 33387=>1000, 33389=>1000, 33390=>1000, 33391=>1000, 33393=>1000, 33394=>1000, 33396=>1000, 33398=>1000, + 33399=>1000, 33400=>1000, 33403=>1000, 33405=>1000, 33406=>1000, 33407=>1000, 33408=>1000, 33409=>1000, 33411=>1000, 33412=>1000, 33415=>1000, 33417=>1000, 33418=>1000, 33419=>1000, 33421=>1000, 33422=>1000, + 33425=>1000, 33426=>1000, 33428=>1000, 33430=>1000, 33432=>1000, 33433=>1000, 33434=>1000, 33435=>1000, 33437=>1000, 33439=>1000, 33440=>1000, 33441=>1000, 33443=>1000, 33444=>1000, 33445=>1000, 33446=>1000, + 33447=>1000, 33448=>1000, 33449=>1000, 33450=>1000, 33451=>1000, 33452=>1000, 33453=>1000, 33454=>1000, 33455=>1000, 33456=>1000, 33457=>1000, 33458=>1000, 33459=>1000, 33460=>1000, 33463=>1000, 33464=>1000, + 33465=>1000, 33466=>1000, 33467=>1000, 33468=>1000, 33469=>1000, 33470=>1000, 33471=>1000, 33477=>1000, 33478=>1000, 33488=>1000, 33489=>1000, 33490=>1000, 33491=>1000, 33492=>1000, 33493=>1000, 33495=>1000, + 33497=>1000, 33498=>1000, 33499=>1000, 33500=>1000, 33502=>1000, 33503=>1000, 33504=>1000, 33505=>1000, 33506=>1000, 33507=>1000, 33508=>1000, 33509=>1000, 33510=>1000, 33511=>1000, 33512=>1000, 33514=>1000, + 33515=>1000, 33517=>1000, 33519=>1000, 33521=>1000, 33523=>1000, 33524=>1000, 33526=>1000, 33527=>1000, 33529=>1000, 33530=>1000, 33531=>1000, 33533=>1000, 33534=>1000, 33536=>1000, 33537=>1000, 33538=>1000, + 33539=>1000, 33540=>1000, 33541=>1000, 33542=>1000, 33543=>1000, 33544=>1000, 33545=>1000, 33546=>1000, 33547=>1000, 33550=>1000, 33558=>1000, 33559=>1000, 33560=>1000, 33563=>1000, 33564=>1000, 33565=>1000, + 33566=>1000, 33567=>1000, 33569=>1000, 33570=>1000, 33571=>1000, 33576=>1000, 33579=>1000, 33580=>1000, 33581=>1000, 33582=>1000, 33583=>1000, 33584=>1000, 33585=>1000, 33586=>1000, 33587=>1000, 33588=>1000, + 33589=>1000, 33590=>1000, 33591=>1000, 33592=>1000, 33593=>1000, 33594=>1000, 33596=>1000, 33597=>1000, 33600=>1000, 33602=>1000, 33603=>1000, 33604=>1000, 33605=>1000, 33607=>1000, 33609=>1000, 33610=>1000, + 33613=>1000, 33614=>1000, 33615=>1000, 33616=>1000, 33617=>1000, 33618=>1000, 33619=>1000, 33620=>1000, 33621=>1000, 33622=>1000, 33623=>1000, 33624=>1000, 33634=>1000, 33648=>1000, 33651=>1000, 33653=>1000, + 33655=>1000, 33656=>1000, 33659=>1000, 33660=>1000, 33661=>1000, 33663=>1000, 33664=>1000, 33666=>1000, 33668=>1000, 33669=>1000, 33670=>1000, 33671=>1000, 33673=>1000, 33674=>1000, 33677=>1000, 33678=>1000, + 33682=>1000, 33683=>1000, 33684=>1000, 33685=>1000, 33686=>1000, 33688=>1000, 33689=>1000, 33690=>1000, 33691=>1000, 33692=>1000, 33693=>1000, 33694=>1000, 33695=>1000, 33696=>1000, 33698=>1000, 33702=>1000, + 33703=>1000, 33704=>1000, 33705=>1000, 33706=>1000, 33707=>1000, 33708=>1000, 33709=>1000, 33713=>1000, 33717=>1000, 33725=>1000, 33726=>1000, 33727=>1000, 33728=>1000, 33729=>1000, 33733=>1000, 33735=>1000, + 33737=>1000, 33738=>1000, 33740=>1000, 33742=>1000, 33743=>1000, 33744=>1000, 33745=>1000, 33747=>1000, 33748=>1000, 33750=>1000, 33752=>1000, 33756=>1000, 33757=>1000, 33759=>1000, 33760=>1000, 33768=>1000, + 33769=>1000, 33770=>1000, 33771=>1000, 33775=>1000, 33776=>1000, 33777=>1000, 33778=>1000, 33780=>1000, 33782=>1000, 33783=>1000, 33784=>1000, 33785=>1000, 33787=>1000, 33788=>1000, 33789=>1000, 33793=>1000, + 33795=>1000, 33796=>1000, 33798=>1000, 33799=>1000, 33802=>1000, 33803=>1000, 33804=>1000, 33805=>1000, 33806=>1000, 33807=>1000, 33809=>1000, 33811=>1000, 33813=>1000, 33817=>1000, 33824=>1000, 33826=>1000, + 33833=>1000, 33834=>1000, 33836=>1000, 33839=>1000, 33841=>1000, 33845=>1000, 33848=>1000, 33849=>1000, 33852=>1000, 33853=>1000, 33861=>1000, 33862=>1000, 33863=>1000, 33864=>1000, 33865=>1000, 33866=>1000, + 33869=>1000, 33870=>1000, 33871=>1000, 33873=>1000, 33874=>1000, 33878=>1000, 33879=>1000, 33880=>1000, 33881=>1000, 33882=>1000, 33883=>1000, 33884=>1000, 33888=>1000, 33889=>1000, 33890=>1000, 33891=>1000, + 33892=>1000, 33893=>1000, 33894=>1000, 33895=>1000, 33897=>1000, 33898=>1000, 33899=>1000, 33900=>1000, 33901=>1000, 33902=>1000, 33903=>1000, 33904=>1000, 33905=>1000, 33907=>1000, 33908=>1000, 33909=>1000, + 33910=>1000, 33911=>1000, 33912=>1000, 33913=>1000, 33914=>1000, 33916=>1000, 33917=>1000, 33921=>1000, 33922=>1000, 33924=>1000, 33925=>1000, 33931=>1000, 33936=>1000, 33938=>1000, 33939=>1000, 33940=>1000, + 33941=>1000, 33945=>1000, 33948=>1000, 33950=>1000, 33951=>1000, 33953=>1000, 33958=>1000, 33960=>1000, 33961=>1000, 33962=>1000, 33965=>1000, 33967=>1000, 33969=>1000, 33970=>1000, 33972=>1000, 33976=>1000, + 33977=>1000, 33978=>1000, 33979=>1000, 33980=>1000, 33981=>1000, 33982=>1000, 33983=>1000, 33984=>1000, 33985=>1000, 33986=>1000, 33988=>1000, 33990=>1000, 33991=>1000, 33992=>1000, 33993=>1000, 33994=>1000, + 33995=>1000, 33996=>1000, 33997=>1000, 33999=>1000, 34000=>1000, 34001=>1000, 34003=>1000, 34006=>1000, 34009=>1000, 34010=>1000, 34012=>1000, 34023=>1000, 34026=>1000, 34028=>1000, 34030=>1000, 34031=>1000, + 34032=>1000, 34033=>1000, 34034=>1000, 34036=>1000, 34039=>1000, 34042=>1000, 34043=>1000, 34044=>1000, 34045=>1000, 34047=>1000, 34048=>1000, 34050=>1000, 34051=>1000, 34054=>1000, 34055=>1000, 34060=>1000, + 34062=>1000, 34064=>1000, 34065=>1000, 34067=>1000, 34068=>1000, 34069=>1000, 34071=>1000, 34072=>1000, 34074=>1000, 34076=>1000, 34078=>1000, 34079=>1000, 34081=>1000, 34082=>1000, 34083=>1000, 34084=>1000, + 34085=>1000, 34086=>1000, 34087=>1000, 34090=>1000, 34091=>1000, 34092=>1000, 34093=>1000, 34095=>1000, 34098=>1000, 34099=>1000, 34100=>1000, 34101=>1000, 34102=>1000, 34109=>1000, 34111=>1000, 34112=>1000, + 34113=>1000, 34115=>1000, 34118=>1000, 34120=>1000, 34121=>1000, 34122=>1000, 34123=>1000, 34126=>1000, 34127=>1000, 34128=>1000, 34129=>1000, 34130=>1000, 34131=>1000, 34133=>1000, 34134=>1000, 34135=>1000, + 34136=>1000, 34137=>1000, 34138=>1000, 34140=>1000, 34141=>1000, 34142=>1000, 34143=>1000, 34144=>1000, 34145=>1000, 34146=>1000, 34147=>1000, 34148=>1000, 34152=>1000, 34153=>1000, 34154=>1000, 34155=>1000, + 34157=>1000, 34159=>1000, 34167=>1000, 34169=>1000, 34170=>1000, 34171=>1000, 34173=>1000, 34174=>1000, 34175=>1000, 34176=>1000, 34177=>1000, 34180=>1000, 34181=>1000, 34182=>1000, 34183=>1000, 34184=>1000, + 34185=>1000, 34186=>1000, 34187=>1000, 34188=>1000, 34191=>1000, 34192=>1000, 34193=>1000, 34195=>1000, 34196=>1000, 34199=>1000, 34200=>1000, 34201=>1000, 34203=>1000, 34204=>1000, 34205=>1000, 34207=>1000, + 34208=>1000, 34210=>1000, 34212=>1000, 34213=>1000, 34214=>1000, 34215=>1000, 34216=>1000, 34217=>1000, 34218=>1000, 34219=>1000, 34220=>1000, 34221=>1000, 34222=>1000, 34223=>1000, 34224=>1000, 34228=>1000, + 34230=>1000, 34231=>1000, 34232=>1000, 34233=>1000, 34234=>1000, 34236=>1000, 34237=>1000, 34238=>1000, 34239=>1000, 34241=>1000, 34242=>1000, 34247=>1000, 34249=>1000, 34250=>1000, 34251=>1000, 34253=>1000, + 34254=>1000, 34255=>1000, 34256=>1000, 34261=>1000, 34264=>1000, 34266=>1000, 34268=>1000, 34269=>1000, 34271=>1000, 34272=>1000, 34276=>1000, 34277=>1000, 34278=>1000, 34280=>1000, 34281=>1000, 34282=>1000, + 34285=>1000, 34291=>1000, 34294=>1000, 34295=>1000, 34297=>1000, 34298=>1000, 34299=>1000, 34300=>1000, 34302=>1000, 34303=>1000, 34304=>1000, 34306=>1000, 34308=>1000, 34309=>1000, 34310=>1000, 34311=>1000, + 34314=>1000, 34315=>1000, 34317=>1000, 34318=>1000, 34320=>1000, 34321=>1000, 34322=>1000, 34323=>1000, 34326=>1000, 34327=>1000, 34328=>1000, 34329=>1000, 34330=>1000, 34331=>1000, 34334=>1000, 34337=>1000, + 34338=>1000, 34343=>1000, 34345=>1000, 34349=>1000, 34351=>1000, 34352=>1000, 34358=>1000, 34360=>1000, 34362=>1000, 34364=>1000, 34365=>1000, 34367=>1000, 34368=>1000, 34369=>1000, 34370=>1000, 34374=>1000, + 34381=>1000, 34382=>1000, 34384=>1000, 34386=>1000, 34387=>1000, 34388=>1000, 34389=>1000, 34390=>1000, 34391=>1000, 34392=>1000, 34393=>1000, 34394=>1000, 34396=>1000, 34397=>1000, 34398=>1000, 34399=>1000, + 34400=>1000, 34401=>1000, 34402=>1000, 34403=>1000, 34404=>1000, 34407=>1000, 34409=>1000, 34411=>1000, 34412=>1000, 34415=>1000, 34417=>1000, 34421=>1000, 34422=>1000, 34423=>1000, 34425=>1000, 34426=>1000, + 34427=>1000, 34440=>1000, 34442=>1000, 34443=>1000, 34444=>1000, 34445=>1000, 34449=>1000, 34451=>1000, 34453=>1000, 34454=>1000, 34456=>1000, 34458=>1000, 34460=>1000, 34465=>1000, 34467=>1000, 34468=>1000, + 34470=>1000, 34471=>1000, 34472=>1000, 34473=>1000, 34474=>1000, 34475=>1000, 34477=>1000, 34479=>1000, 34480=>1000, 34481=>1000, 34483=>1000, 34484=>1000, 34485=>1000, 34486=>1000, 34487=>1000, 34488=>1000, + 34489=>1000, 34495=>1000, 34496=>1000, 34497=>1000, 34499=>1000, 34500=>1000, 34501=>1000, 34502=>1000, 34503=>1000, 34505=>1000, 34507=>1000, 34509=>1000, 34510=>1000, 34513=>1000, 34514=>1000, 34516=>1000, + 34517=>1000, 34519=>1000, 34521=>1000, 34522=>1000, 34523=>1000, 34524=>1000, 34526=>1000, 34527=>1000, 34528=>1000, 34531=>1000, 34532=>1000, 34533=>1000, 34535=>1000, 34537=>1000, 34540=>1000, 34541=>1000, + 34542=>1000, 34543=>1000, 34552=>1000, 34553=>1000, 34554=>1000, 34555=>1000, 34556=>1000, 34557=>1000, 34558=>1000, 34560=>1000, 34562=>1000, 34563=>1000, 34564=>1000, 34565=>1000, 34566=>1000, 34567=>1000, + 34568=>1000, 34569=>1000, 34570=>1000, 34571=>1000, 34573=>1000, 34574=>1000, 34575=>1000, 34576=>1000, 34577=>1000, 34578=>1000, 34579=>1000, 34580=>1000, 34584=>1000, 34585=>1000, 34586=>1000, 34588=>1000, + 34590=>1000, 34591=>1000, 34593=>1000, 34595=>1000, 34597=>1000, 34600=>1000, 34601=>1000, 34606=>1000, 34607=>1000, 34609=>1000, 34610=>1000, 34612=>1000, 34615=>1000, 34617=>1000, 34618=>1000, 34619=>1000, + 34620=>1000, 34621=>1000, 34622=>1000, 34623=>1000, 34624=>1000, 34627=>1000, 34629=>1000, 34633=>1000, 34635=>1000, 34636=>1000, 34637=>1000, 34638=>1000, 34643=>1000, 34645=>1000, 34647=>1000, 34648=>1000, + 34649=>1000, 34653=>1000, 34655=>1000, 34656=>1000, 34657=>1000, 34659=>1000, 34660=>1000, 34661=>1000, 34662=>1000, 34664=>1000, 34666=>1000, 34670=>1000, 34671=>1000, 34673=>1000, 34674=>1000, 34676=>1000, + 34678=>1000, 34680=>1000, 34683=>1000, 34687=>1000, 34690=>1000, 34691=>1000, 34692=>1000, 34693=>1000, 34694=>1000, 34695=>1000, 34696=>1000, 34697=>1000, 34699=>1000, 34700=>1000, 34701=>1000, 34704=>1000, + 34707=>1000, 34709=>1000, 34711=>1000, 34712=>1000, 34713=>1000, 34718=>1000, 34719=>1000, 34720=>1000, 34722=>1000, 34723=>1000, 34727=>1000, 34731=>1000, 34732=>1000, 34733=>1000, 34734=>1000, 34735=>1000, + 34737=>1000, 34739=>1000, 34741=>1000, 34746=>1000, 34747=>1000, 34749=>1000, 34750=>1000, 34751=>1000, 34752=>1000, 34753=>1000, 34756=>1000, 34758=>1000, 34759=>1000, 34760=>1000, 34761=>1000, 34762=>1000, + 34763=>1000, 34766=>1000, 34768=>1000, 34770=>1000, 34773=>1000, 34774=>1000, 34777=>1000, 34778=>1000, 34780=>1000, 34783=>1000, 34784=>1000, 34786=>1000, 34787=>1000, 34788=>1000, 34794=>1000, 34795=>1000, + 34797=>1000, 34799=>1000, 34801=>1000, 34802=>1000, 34803=>1000, 34806=>1000, 34807=>1000, 34808=>1000, 34809=>1000, 34810=>1000, 34811=>1000, 34814=>1000, 34815=>1000, 34817=>1000, 34819=>1000, 34821=>1000, + 34822=>1000, 34823=>1000, 34825=>1000, 34826=>1000, 34827=>1000, 34829=>1000, 34830=>1000, 34831=>1000, 34832=>1000, 34833=>1000, 34834=>1000, 34835=>1000, 34836=>1000, 34837=>1000, 34838=>1000, 34840=>1000, + 34841=>1000, 34842=>1000, 34843=>1000, 34844=>1000, 34846=>1000, 34847=>1000, 34849=>1000, 34850=>1000, 34851=>1000, 34855=>1000, 34856=>1000, 34861=>1000, 34862=>1000, 34864=>1000, 34865=>1000, 34866=>1000, + 34869=>1000, 34870=>1000, 34873=>1000, 34874=>1000, 34875=>1000, 34876=>1000, 34880=>1000, 34881=>1000, 34882=>1000, 34883=>1000, 34884=>1000, 34885=>1000, 34886=>1000, 34888=>1000, 34889=>1000, 34890=>1000, + 34891=>1000, 34892=>1000, 34893=>1000, 34894=>1000, 34897=>1000, 34898=>1000, 34899=>1000, 34901=>1000, 34902=>1000, 34903=>1000, 34904=>1000, 34905=>1000, 34906=>1000, 34907=>1000, 34908=>1000, 34909=>1000, + 34910=>1000, 34911=>1000, 34912=>1000, 34913=>1000, 34914=>1000, 34915=>1000, 34916=>1000, 34920=>1000, 34921=>1000, 34923=>1000, 34928=>1000, 34929=>1000, 34930=>1000, 34933=>1000, 34935=>1000, 34937=>1000, + 34939=>1000, 34941=>1000, 34942=>1000, 34943=>1000, 34944=>1000, 34945=>1000, 34946=>1000, 34952=>1000, 34955=>1000, 34957=>1000, 34962=>1000, 34966=>1000, 34967=>1000, 34968=>1000, 34969=>1000, 34970=>1000, + 34971=>1000, 34972=>1000, 34974=>1000, 34975=>1000, 34976=>1000, 34978=>1000, 34980=>1000, 34984=>1000, 34986=>1000, 34987=>1000, 34990=>1000, 34992=>1000, 34993=>1000, 34996=>1000, 34997=>1000, 34999=>1000, + 35002=>1000, 35005=>1000, 35006=>1000, 35007=>1000, 35008=>1000, 35009=>1000, 35010=>1000, 35011=>1000, 35012=>1000, 35013=>1000, 35018=>1000, 35019=>1000, 35020=>1000, 35021=>1000, 35022=>1000, 35023=>1000, + 35025=>1000, 35026=>1000, 35027=>1000, 35028=>1000, 35029=>1000, 35032=>1000, 35033=>1000, 35035=>1000, 35036=>1000, 35037=>1000, 35038=>1000, 35039=>1000, 35041=>1000, 35047=>1000, 35048=>1000, 35055=>1000, + 35056=>1000, 35057=>1000, 35058=>1000, 35059=>1000, 35060=>1000, 35061=>1000, 35063=>1000, 35064=>1000, 35065=>1000, 35068=>1000, 35069=>1000, 35070=>1000, 35073=>1000, 35074=>1000, 35076=>1000, 35078=>1000, + 35079=>1000, 35082=>1000, 35084=>1000, 35085=>1000, 35086=>1000, 35087=>1000, 35088=>1000, 35090=>1000, 35091=>1000, 35093=>1000, 35094=>1000, 35096=>1000, 35097=>1000, 35098=>1000, 35100=>1000, 35101=>1000, + 35102=>1000, 35104=>1000, 35109=>1000, 35110=>1000, 35111=>1000, 35112=>1000, 35114=>1000, 35115=>1000, 35120=>1000, 35121=>1000, 35122=>1000, 35125=>1000, 35126=>1000, 35128=>1000, 35129=>1000, 35130=>1000, + 35131=>1000, 35134=>1000, 35136=>1000, 35137=>1000, 35138=>1000, 35139=>1000, 35140=>1000, 35141=>1000, 35142=>1000, 35145=>1000, 35148=>1000, 35149=>1000, 35151=>1000, 35154=>1000, 35158=>1000, 35159=>1000, + 35162=>1000, 35163=>1000, 35164=>1000, 35166=>1000, 35167=>1000, 35168=>1000, 35169=>1000, 35170=>1000, 35171=>1000, 35172=>1000, 35174=>1000, 35178=>1000, 35179=>1000, 35181=>1000, 35182=>1000, 35183=>1000, + 35184=>1000, 35186=>1000, 35187=>1000, 35188=>1000, 35189=>1000, 35191=>1000, 35194=>1000, 35195=>1000, 35196=>1000, 35197=>1000, 35198=>1000, 35199=>1000, 35201=>1000, 35203=>1000, 35206=>1000, 35207=>1000, + 35208=>1000, 35209=>1000, 35210=>1000, 35211=>1000, 35213=>1000, 35215=>1000, 35216=>1000, 35219=>1000, 35220=>1000, 35221=>1000, 35222=>1000, 35223=>1000, 35224=>1000, 35226=>1000, 35227=>1000, 35228=>1000, + 35231=>1000, 35232=>1000, 35233=>1000, 35237=>1000, 35238=>1000, 35239=>1000, 35241=>1000, 35242=>1000, 35244=>1000, 35247=>1000, 35248=>1000, 35250=>1000, 35251=>1000, 35252=>1000, 35253=>1000, 35254=>1000, + 35255=>1000, 35258=>1000, 35260=>1000, 35261=>1000, 35263=>1000, 35264=>1000, 35282=>1000, 35284=>1000, 35285=>1000, 35286=>1000, 35287=>1000, 35288=>1000, 35290=>1000, 35292=>1000, 35293=>1000, 35299=>1000, + 35301=>1000, 35302=>1000, 35303=>1000, 35305=>1000, 35307=>1000, 35309=>1000, 35313=>1000, 35315=>1000, 35316=>1000, 35318=>1000, 35320=>1000, 35321=>1000, 35325=>1000, 35327=>1000, 35328=>1000, 35330=>1000, + 35331=>1000, 35332=>1000, 35333=>1000, 35335=>1000, 35336=>1000, 35338=>1000, 35340=>1000, 35342=>1000, 35343=>1000, 35344=>1000, 35345=>1000, 35346=>1000, 35347=>1000, 35348=>1000, 35349=>1000, 35350=>1000, + 35351=>1000, 35352=>1000, 35355=>1000, 35357=>1000, 35358=>1000, 35359=>1000, 35360=>1000, 35362=>1000, 35363=>1000, 35364=>1000, 35365=>1000, 35366=>1000, 35370=>1000, 35371=>1000, 35372=>1000, 35373=>1000, + 35375=>1000, 35377=>1000, 35379=>1000, 35380=>1000, 35381=>1000, 35382=>1000, 35383=>1000, 35386=>1000, 35387=>1000, 35388=>1000, 35389=>1000, 35390=>1000, 35392=>1000, 35393=>1000, 35395=>1000, 35397=>1000, + 35398=>1000, 35399=>1000, 35400=>1000, 35401=>1000, 35405=>1000, 35406=>1000, 35408=>1000, 35409=>1000, 35410=>1000, 35411=>1000, 35412=>1000, 35413=>1000, 35414=>1000, 35415=>1000, 35416=>1000, 35419=>1000, + 35420=>1000, 35421=>1000, 35422=>1000, 35424=>1000, 35425=>1000, 35426=>1000, 35427=>1000, 35429=>1000, 35430=>1000, 35431=>1000, 35433=>1000, 35435=>1000, 35436=>1000, 35437=>1000, 35438=>1000, 35440=>1000, + 35441=>1000, 35442=>1000, 35443=>1000, 35445=>1000, 35446=>1000, 35447=>1000, 35449=>1000, 35450=>1000, 35451=>1000, 35452=>1000, 35454=>1000, 35455=>1000, 35456=>1000, 35458=>1000, 35459=>1000, 35460=>1000, + 35461=>1000, 35462=>1000, 35463=>1000, 35465=>1000, 35467=>1000, 35468=>1000, 35469=>1000, 35471=>1000, 35472=>1000, 35473=>1000, 35474=>1000, 35475=>1000, 35477=>1000, 35478=>1000, 35479=>1000, 35480=>1000, + 35481=>1000, 35482=>1000, 35486=>1000, 35487=>1000, 35488=>1000, 35489=>1000, 35491=>1000, 35492=>1000, 35493=>1000, 35494=>1000, 35495=>1000, 35496=>1000, 35497=>1000, 35500=>1000, 35501=>1000, 35502=>1000, + 35503=>1000, 35504=>1000, 35506=>1000, 35507=>1000, 35510=>1000, 35511=>1000, 35513=>1000, 35515=>1000, 35516=>1000, 35518=>1000, 35519=>1000, 35522=>1000, 35523=>1000, 35524=>1000, 35526=>1000, 35527=>1000, + 35528=>1000, 35529=>1000, 35530=>1000, 35531=>1000, 35532=>1000, 35533=>1000, 35535=>1000, 35537=>1000, 35538=>1000, 35539=>1000, 35540=>1000, 35541=>1000, 35542=>1000, 35543=>1000, 35546=>1000, 35547=>1000, + 35548=>1000, 35549=>1000, 35550=>1000, 35551=>1000, 35552=>1000, 35553=>1000, 35554=>1000, 35556=>1000, 35558=>1000, 35559=>1000, 35563=>1000, 35564=>1000, 35565=>1000, 35566=>1000, 35568=>1000, 35569=>1000, + 35571=>1000, 35572=>1000, 35573=>1000, 35574=>1000, 35575=>1000, 35576=>1000, 35578=>1000, 35580=>1000, 35582=>1000, 35583=>1000, 35584=>1000, 35585=>1000, 35586=>1000, 35588=>1000, 35589=>1000, 35590=>1000, + 35591=>1000, 35594=>1000, 35595=>1000, 35596=>1000, 35598=>1000, 35600=>1000, 35601=>1000, 35604=>1000, 35606=>1000, 35607=>1000, 35609=>1000, 35610=>1000, 35611=>1000, 35612=>1000, 35613=>1000, 35614=>1000, + 35615=>1000, 35616=>1000, 35617=>1000, 35622=>1000, 35624=>1000, 35627=>1000, 35628=>1000, 35629=>1000, 35632=>1000, 35635=>1000, 35639=>1000, 35641=>1000, 35644=>1000, 35646=>1000, 35649=>1000, 35650=>1000, + 35651=>1000, 35652=>1000, 35653=>1000, 35654=>1000, 35656=>1000, 35657=>1000, 35660=>1000, 35661=>1000, 35662=>1000, 35663=>1000, 35666=>1000, 35667=>1000, 35668=>1000, 35670=>1000, 35672=>1000, 35673=>1000, + 35674=>1000, 35675=>1000, 35676=>1000, 35678=>1000, 35679=>1000, 35683=>1000, 35686=>1000, 35691=>1000, 35692=>1000, 35693=>1000, 35695=>1000, 35696=>1000, 35697=>1000, 35698=>1000, 35700=>1000, 35702=>1000, + 35703=>1000, 35704=>1000, 35705=>1000, 35708=>1000, 35709=>1000, 35710=>1000, 35711=>1000, 35712=>1000, 35713=>1000, 35715=>1000, 35716=>1000, 35717=>1000, 35722=>1000, 35723=>1000, 35724=>1000, 35725=>1000, + 35726=>1000, 35727=>1000, 35728=>1000, 35730=>1000, 35731=>1000, 35732=>1000, 35733=>1000, 35734=>1000, 35737=>1000, 35738=>1000, 35740=>1000, 35742=>1000, 35743=>1000, 35895=>1000, 35896=>1000, 35897=>1000, + 35898=>1000, 35901=>1000, 35902=>1000, 35903=>1000, 35905=>1000, 35909=>1000, 35910=>1000, 35911=>1000, 35912=>1000, 35913=>1000, 35914=>1000, 35915=>1000, 35916=>1000, 35918=>1000, 35919=>1000, 35920=>1000, + 35921=>1000, 35923=>1000, 35924=>1000, 35925=>1000, 35927=>1000, 35928=>1000, 35929=>1000, 35930=>1000, 35931=>1000, 35933=>1000, 35937=>1000, 35938=>1000, 35939=>1000, 35940=>1000, 35942=>1000, 35944=>1000, + 35945=>1000, 35946=>1000, 35947=>1000, 35948=>1000, 35949=>1000, 35955=>1000, 35957=>1000, 35958=>1000, 35960=>1000, 35961=>1000, 35962=>1000, 35963=>1000, 35964=>1000, 35966=>1000, 35970=>1000, 35973=>1000, + 35974=>1000, 35975=>1000, 35977=>1000, 35978=>1000, 35979=>1000, 35980=>1000, 35981=>1000, 35982=>1000, 35984=>1000, 35986=>1000, 35987=>1000, 35988=>1000, 35992=>1000, 35993=>1000, 35995=>1000, 35996=>1000, + 35997=>1000, 35998=>1000, 36000=>1000, 36001=>1000, 36002=>1000, 36004=>1000, 36007=>1000, 36008=>1000, 36009=>1000, 36010=>1000, 36011=>1000, 36012=>1000, 36013=>1000, 36014=>1000, 36015=>1000, 36016=>1000, + 36018=>1000, 36019=>1000, 36020=>1000, 36022=>1000, 36023=>1000, 36024=>1000, 36025=>1000, 36026=>1000, 36027=>1000, 36028=>1000, 36029=>1000, 36031=>1000, 36032=>1000, 36033=>1000, 36034=>1000, 36035=>1000, + 36036=>1000, 36037=>1000, 36038=>1000, 36039=>1000, 36040=>1000, 36041=>1000, 36042=>1000, 36043=>1000, 36045=>1000, 36046=>1000, 36047=>1000, 36049=>1000, 36051=>1000, 36053=>1000, 36054=>1000, 36057=>1000, + 36058=>1000, 36059=>1000, 36060=>1000, 36061=>1000, 36062=>1000, 36064=>1000, 36065=>1000, 36066=>1000, 36067=>1000, 36068=>1000, 36070=>1000, 36072=>1000, 36074=>1000, 36076=>1000, 36077=>1000, 36079=>1000, + 36080=>1000, 36082=>1000, 36084=>1000, 36085=>1000, 36087=>1000, 36088=>1000, 36090=>1000, 36091=>1000, 36092=>1000, 36093=>1000, 36094=>1000, 36095=>1000, 36097=>1000, 36099=>1000, 36100=>1000, 36101=>1000, + 36103=>1000, 36104=>1000, 36105=>1000, 36106=>1000, 36107=>1000, 36109=>1000, 36111=>1000, 36112=>1000, 36114=>1000, 36115=>1000, 36116=>1000, 36118=>1000, 36119=>1000, 36123=>1000, 36196=>1000, 36197=>1000, + 36198=>1000, 36199=>1000, 36201=>1000, 36203=>1000, 36204=>1000, 36205=>1000, 36206=>1000, 36208=>1000, 36209=>1000, 36211=>1000, 36212=>1000, 36214=>1000, 36215=>1000, 36223=>1000, 36225=>1000, 36226=>1000, + 36228=>1000, 36229=>1000, 36232=>1000, 36234=>1000, 36237=>1000, 36240=>1000, 36241=>1000, 36245=>1000, 36249=>1000, 36254=>1000, 36255=>1000, 36256=>1000, 36259=>1000, 36262=>1000, 36264=>1000, 36267=>1000, + 36268=>1000, 36271=>1000, 36274=>1000, 36275=>1000, 36277=>1000, 36279=>1000, 36281=>1000, 36282=>1000, 36283=>1000, 36284=>1000, 36286=>1000, 36288=>1000, 36290=>1000, 36293=>1000, 36294=>1000, 36295=>1000, + 36296=>1000, 36298=>1000, 36299=>1000, 36300=>1000, 36302=>1000, 36303=>1000, 36305=>1000, 36308=>1000, 36309=>1000, 36310=>1000, 36311=>1000, 36313=>1000, 36314=>1000, 36315=>1000, 36317=>1000, 36319=>1000, + 36321=>1000, 36323=>1000, 36324=>1000, 36325=>1000, 36327=>1000, 36328=>1000, 36330=>1000, 36331=>1000, 36332=>1000, 36335=>1000, 36336=>1000, 36337=>1000, 36338=>1000, 36339=>1000, 36340=>1000, 36341=>1000, + 36348=>1000, 36349=>1000, 36351=>1000, 36353=>1000, 36356=>1000, 36357=>1000, 36358=>1000, 36360=>1000, 36361=>1000, 36362=>1000, 36363=>1000, 36367=>1000, 36368=>1000, 36369=>1000, 36372=>1000, 36374=>1000, + 36381=>1000, 36382=>1000, 36383=>1000, 36384=>1000, 36385=>1000, 36386=>1000, 36387=>1000, 36390=>1000, 36391=>1000, 36394=>1000, 36400=>1000, 36401=>1000, 36403=>1000, 36404=>1000, 36405=>1000, 36406=>1000, + 36407=>1000, 36408=>1000, 36409=>1000, 36413=>1000, 36416=>1000, 36417=>1000, 36418=>1000, 36420=>1000, 36423=>1000, 36424=>1000, 36425=>1000, 36426=>1000, 36427=>1000, 36428=>1000, 36429=>1000, 36430=>1000, + 36431=>1000, 36432=>1000, 36436=>1000, 36437=>1000, 36441=>1000, 36443=>1000, 36444=>1000, 36445=>1000, 36446=>1000, 36447=>1000, 36448=>1000, 36449=>1000, 36450=>1000, 36451=>1000, 36452=>1000, 36457=>1000, + 36460=>1000, 36461=>1000, 36463=>1000, 36464=>1000, 36465=>1000, 36466=>1000, 36468=>1000, 36470=>1000, 36473=>1000, 36474=>1000, 36475=>1000, 36476=>1000, 36481=>1000, 36482=>1000, 36483=>1000, 36484=>1000, + 36485=>1000, 36487=>1000, 36489=>1000, 36490=>1000, 36491=>1000, 36493=>1000, 36496=>1000, 36497=>1000, 36498=>1000, 36499=>1000, 36500=>1000, 36501=>1000, 36505=>1000, 36506=>1000, 36507=>1000, 36509=>1000, + 36510=>1000, 36513=>1000, 36514=>1000, 36519=>1000, 36521=>1000, 36522=>1000, 36523=>1000, 36524=>1000, 36525=>1000, 36526=>1000, 36527=>1000, 36528=>1000, 36529=>1000, 36531=>1000, 36533=>1000, 36538=>1000, + 36539=>1000, 36542=>1000, 36544=>1000, 36545=>1000, 36547=>1000, 36548=>1000, 36549=>1000, 36550=>1000, 36551=>1000, 36552=>1000, 36554=>1000, 36555=>1000, 36556=>1000, 36557=>1000, 36559=>1000, 36561=>1000, + 36562=>1000, 36564=>1000, 36571=>1000, 36572=>1000, 36575=>1000, 36578=>1000, 36579=>1000, 36584=>1000, 36587=>1000, 36589=>1000, 36590=>1000, 36592=>1000, 36593=>1000, 36599=>1000, 36600=>1000, 36601=>1000, + 36602=>1000, 36603=>1000, 36604=>1000, 36605=>1000, 36606=>1000, 36608=>1000, 36610=>1000, 36611=>1000, 36613=>1000, 36615=>1000, 36616=>1000, 36617=>1000, 36618=>1000, 36620=>1000, 36623=>1000, 36624=>1000, + 36626=>1000, 36627=>1000, 36628=>1000, 36629=>1000, 36630=>1000, 36631=>1000, 36632=>1000, 36633=>1000, 36635=>1000, 36636=>1000, 36637=>1000, 36638=>1000, 36639=>1000, 36640=>1000, 36641=>1000, 36643=>1000, + 36645=>1000, 36646=>1000, 36647=>1000, 36648=>1000, 36649=>1000, 36650=>1000, 36652=>1000, 36653=>1000, 36654=>1000, 36655=>1000, 36659=>1000, 36660=>1000, 36661=>1000, 36662=>1000, 36663=>1000, 36664=>1000, + 36665=>1000, 36666=>1000, 36667=>1000, 36670=>1000, 36671=>1000, 36672=>1000, 36673=>1000, 36674=>1000, 36675=>1000, 36676=>1000, 36677=>1000, 36678=>1000, 36679=>1000, 36681=>1000, 36684=>1000, 36685=>1000, + 36686=>1000, 36687=>1000, 36689=>1000, 36690=>1000, 36691=>1000, 36692=>1000, 36693=>1000, 36695=>1000, 36696=>1000, 36700=>1000, 36701=>1000, 36702=>1000, 36703=>1000, 36705=>1000, 36706=>1000, 36707=>1000, + 36708=>1000, 36709=>1000, 36763=>1000, 36764=>1000, 36765=>1000, 36766=>1000, 36767=>1000, 36768=>1000, 36769=>1000, 36771=>1000, 36772=>1000, 36773=>1000, 36774=>1000, 36775=>1000, 36776=>1000, 36781=>1000, + 36782=>1000, 36783=>1000, 36784=>1000, 36785=>1000, 36786=>1000, 36789=>1000, 36790=>1000, 36791=>1000, 36792=>1000, 36794=>1000, 36795=>1000, 36796=>1000, 36798=>1000, 36799=>1000, 36800=>1000, 36801=>1000, + 36802=>1000, 36804=>1000, 36805=>1000, 36806=>1000, 36810=>1000, 36811=>1000, 36813=>1000, 36814=>1000, 36816=>1000, 36817=>1000, 36818=>1000, 36819=>1000, 36820=>1000, 36821=>1000, 36826=>1000, 36832=>1000, + 36834=>1000, 36835=>1000, 36836=>1000, 36837=>1000, 36838=>1000, 36840=>1000, 36841=>1000, 36842=>1000, 36843=>1000, 36845=>1000, 36846=>1000, 36847=>1000, 36848=>1000, 36849=>1000, 36852=>1000, 36853=>1000, + 36854=>1000, 36855=>1000, 36856=>1000, 36857=>1000, 36858=>1000, 36859=>1000, 36861=>1000, 36862=>1000, 36864=>1000, 36865=>1000, 36866=>1000, 36867=>1000, 36868=>1000, 36869=>1000, 36870=>1000, 36872=>1000, + 36875=>1000, 36876=>1000, 36877=>1000, 36878=>1000, 36879=>1000, 36880=>1000, 36881=>1000, 36883=>1000, 36884=>1000, 36885=>1000, 36886=>1000, 36887=>1000, 36888=>1000, 36889=>1000, 36890=>1000, 36891=>1000, + 36893=>1000, 36894=>1000, 36895=>1000, 36896=>1000, 36897=>1000, 36898=>1000, 36899=>1000, 36903=>1000, 36904=>1000, 36905=>1000, 36906=>1000, 36908=>1000, 36909=>1000, 36910=>1000, 36911=>1000, 36913=>1000, + 36914=>1000, 36915=>1000, 36916=>1000, 36917=>1000, 36918=>1000, 36919=>1000, 36920=>1000, 36921=>1000, 36924=>1000, 36926=>1000, 36927=>1000, 36929=>1000, 36930=>1000, 36931=>1000, 36932=>1000, 36933=>1000, + 36935=>1000, 36937=>1000, 36938=>1000, 36939=>1000, 36940=>1000, 36941=>1000, 36942=>1000, 36943=>1000, 36944=>1000, 36945=>1000, 36946=>1000, 36947=>1000, 36948=>1000, 36949=>1000, 36950=>1000, 36952=>1000, + 36953=>1000, 36955=>1000, 36956=>1000, 36957=>1000, 36958=>1000, 36960=>1000, 36961=>1000, 36962=>1000, 36963=>1000, 36965=>1000, 36966=>1000, 36967=>1000, 36968=>1000, 36969=>1000, 36972=>1000, 36973=>1000, + 36974=>1000, 36975=>1000, 36976=>1000, 36978=>1000, 36980=>1000, 36981=>1000, 36982=>1000, 36983=>1000, 36984=>1000, 36985=>1000, 36986=>1000, 36988=>1000, 36989=>1000, 36991=>1000, 36992=>1000, 36993=>1000, + 36994=>1000, 36995=>1000, 36996=>1000, 36997=>1000, 36999=>1000, 37000=>1000, 37001=>1000, 37002=>1000, 37003=>1000, 37004=>1000, 37006=>1000, 37007=>1000, 37008=>1000, 37009=>1000, 37013=>1000, 37015=>1000, + 37016=>1000, 37017=>1000, 37019=>1000, 37024=>1000, 37025=>1000, 37026=>1000, 37027=>1000, 37029=>1000, 37030=>1000, 37032=>1000, 37034=>1000, 37039=>1000, 37040=>1000, 37041=>1000, 37042=>1000, 37043=>1000, + 37044=>1000, 37045=>1000, 37046=>1000, 37048=>1000, 37053=>1000, 37054=>1000, 37057=>1000, 37059=>1000, 37060=>1000, 37061=>1000, 37063=>1000, 37064=>1000, 37066=>1000, 37068=>1000, 37070=>1000, 37074=>1000, + 37077=>1000, 37079=>1000, 37080=>1000, 37081=>1000, 37083=>1000, 37084=>1000, 37085=>1000, 37086=>1000, 37087=>1000, 37089=>1000, 37090=>1000, 37092=>1000, 37093=>1000, 37096=>1000, 37099=>1000, 37101=>1000, + 37103=>1000, 37104=>1000, 37108=>1000, 37109=>1000, 37110=>1000, 37111=>1000, 37117=>1000, 37118=>1000, 37119=>1000, 37120=>1000, 37122=>1000, 37124=>1000, 37125=>1000, 37126=>1000, 37128=>1000, 37133=>1000, + 37136=>1000, 37138=>1000, 37140=>1000, 37141=>1000, 37142=>1000, 37143=>1000, 37144=>1000, 37145=>1000, 37146=>1000, 37148=>1000, 37150=>1000, 37152=>1000, 37154=>1000, 37155=>1000, 37157=>1000, 37159=>1000, + 37161=>1000, 37165=>1000, 37166=>1000, 37167=>1000, 37168=>1000, 37169=>1000, 37170=>1000, 37172=>1000, 37174=>1000, 37175=>1000, 37177=>1000, 37178=>1000, 37180=>1000, 37181=>1000, 37187=>1000, 37191=>1000, + 37192=>1000, 37193=>1000, 37194=>1000, 37195=>1000, 37196=>1000, 37197=>1000, 37198=>1000, 37199=>1000, 37202=>1000, 37203=>1000, 37204=>1000, 37206=>1000, 37207=>1000, 37208=>1000, 37209=>1000, 37210=>1000, + 37211=>1000, 37217=>1000, 37218=>1000, 37219=>1000, 37220=>1000, 37221=>1000, 37223=>1000, 37225=>1000, 37226=>1000, 37228=>1000, 37229=>1000, 37234=>1000, 37235=>1000, 37236=>1000, 37237=>1000, 37239=>1000, + 37240=>1000, 37241=>1000, 37242=>1000, 37243=>1000, 37249=>1000, 37250=>1000, 37251=>1000, 37253=>1000, 37254=>1000, 37255=>1000, 37257=>1000, 37258=>1000, 37259=>1000, 37261=>1000, 37262=>1000, 37264=>1000, + 37265=>1000, 37266=>1000, 37267=>1000, 37268=>1000, 37269=>1000, 37271=>1000, 37272=>1000, 37276=>1000, 37278=>1000, 37281=>1000, 37282=>1000, 37284=>1000, 37286=>1000, 37288=>1000, 37290=>1000, 37291=>1000, + 37292=>1000, 37293=>1000, 37294=>1000, 37295=>1000, 37296=>1000, 37297=>1000, 37298=>1000, 37299=>1000, 37300=>1000, 37301=>1000, 37302=>1000, 37304=>1000, 37306=>1000, 37307=>1000, 37308=>1000, 37309=>1000, + 37311=>1000, 37312=>1000, 37313=>1000, 37314=>1000, 37315=>1000, 37317=>1000, 37318=>1000, 37319=>1000, 37320=>1000, 37321=>1000, 37323=>1000, 37324=>1000, 37325=>1000, 37326=>1000, 37327=>1000, 37328=>1000, + 37329=>1000, 37331=>1000, 37332=>1000, 37334=>1000, 37335=>1000, 37336=>1000, 37337=>1000, 37338=>1000, 37339=>1000, 37340=>1000, 37341=>1000, 37342=>1000, 37343=>1000, 37345=>1000, 37347=>1000, 37348=>1000, + 37349=>1000, 37350=>1000, 37351=>1000, 37353=>1000, 37354=>1000, 37356=>1000, 37357=>1000, 37358=>1000, 37359=>1000, 37360=>1000, 37361=>1000, 37365=>1000, 37366=>1000, 37367=>1000, 37369=>1000, 37371=>1000, + 37372=>1000, 37373=>1000, 37375=>1000, 37376=>1000, 37377=>1000, 37380=>1000, 37381=>1000, 37382=>1000, 37383=>1000, 37385=>1000, 37386=>1000, 37388=>1000, 37389=>1000, 37390=>1000, 37392=>1000, 37393=>1000, + 37394=>1000, 37395=>1000, 37396=>1000, 37397=>1000, 37398=>1000, 37400=>1000, 37404=>1000, 37405=>1000, 37406=>1000, 37411=>1000, 37412=>1000, 37413=>1000, 37414=>1000, 37416=>1000, 37417=>1000, 37420=>1000, + 37422=>1000, 37423=>1000, 37424=>1000, 37427=>1000, 37428=>1000, 37429=>1000, 37430=>1000, 37431=>1000, 37432=>1000, 37433=>1000, 37434=>1000, 37436=>1000, 37438=>1000, 37439=>1000, 37440=>1000, 37442=>1000, + 37443=>1000, 37444=>1000, 37445=>1000, 37446=>1000, 37447=>1000, 37448=>1000, 37449=>1000, 37450=>1000, 37451=>1000, 37453=>1000, 37454=>1000, 37455=>1000, 37456=>1000, 37457=>1000, 37463=>1000, 37464=>1000, + 37465=>1000, 37466=>1000, 37467=>1000, 37468=>1000, 37469=>1000, 37470=>1000, 37472=>1000, 37473=>1000, 37474=>1000, 37476=>1000, 37477=>1000, 37478=>1000, 37479=>1000, 37480=>1000, 37481=>1000, 37486=>1000, + 37487=>1000, 37488=>1000, 37489=>1000, 37493=>1000, 37494=>1000, 37495=>1000, 37496=>1000, 37497=>1000, 37499=>1000, 37500=>1000, 37501=>1000, 37502=>1000, 37503=>1000, 37504=>1000, 37507=>1000, 37509=>1000, + 37512=>1000, 37513=>1000, 37514=>1000, 37517=>1000, 37518=>1000, 37521=>1000, 37522=>1000, 37523=>1000, 37525=>1000, 37526=>1000, 37527=>1000, 37528=>1000, 37529=>1000, 37530=>1000, 37531=>1000, 37532=>1000, + 37535=>1000, 37536=>1000, 37540=>1000, 37541=>1000, 37543=>1000, 37544=>1000, 37547=>1000, 37549=>1000, 37551=>1000, 37554=>1000, 37558=>1000, 37559=>1000, 37560=>1000, 37561=>1000, 37562=>1000, 37563=>1000, + 37564=>1000, 37565=>1000, 37567=>1000, 37568=>1000, 37569=>1000, 37570=>1000, 37571=>1000, 37573=>1000, 37574=>1000, 37575=>1000, 37576=>1000, 37579=>1000, 37580=>1000, 37581=>1000, 37582=>1000, 37583=>1000, + 37584=>1000, 37586=>1000, 37587=>1000, 37589=>1000, 37591=>1000, 37592=>1000, 37593=>1000, 37596=>1000, 37597=>1000, 37599=>1000, 37600=>1000, 37601=>1000, 37603=>1000, 37604=>1000, 37605=>1000, 37607=>1000, + 37608=>1000, 37609=>1000, 37610=>1000, 37612=>1000, 37613=>1000, 37614=>1000, 37616=>1000, 37618=>1000, 37619=>1000, 37624=>1000, 37625=>1000, 37626=>1000, 37627=>1000, 37628=>1000, 37631=>1000, 37632=>1000, + 37634=>1000, 37638=>1000, 37640=>1000, 37645=>1000, 37647=>1000, 37648=>1000, 37649=>1000, 37652=>1000, 37653=>1000, 37656=>1000, 37657=>1000, 37658=>1000, 37660=>1000, 37661=>1000, 37662=>1000, 37663=>1000, + 37664=>1000, 37665=>1000, 37666=>1000, 37667=>1000, 37668=>1000, 37669=>1000, 37670=>1000, 37671=>1000, 37672=>1000, 37673=>1000, 37674=>1000, 37675=>1000, 37676=>1000, 37678=>1000, 37679=>1000, 37682=>1000, + 37683=>1000, 37684=>1000, 37685=>1000, 37686=>1000, 37687=>1000, 37690=>1000, 37691=>1000, 37700=>1000, 37703=>1000, 37704=>1000, 37705=>1000, 37707=>1000, 37709=>1000, 37712=>1000, 37713=>1000, 37714=>1000, + 37716=>1000, 37717=>1000, 37718=>1000, 37719=>1000, 37720=>1000, 37722=>1000, 37723=>1000, 37724=>1000, 37726=>1000, 37728=>1000, 37732=>1000, 37733=>1000, 37735=>1000, 37737=>1000, 37738=>1000, 37740=>1000, + 37741=>1000, 37742=>1000, 37743=>1000, 37744=>1000, 37745=>1000, 37747=>1000, 37748=>1000, 37749=>1000, 37750=>1000, 37754=>1000, 37756=>1000, 37757=>1000, 37758=>1000, 37759=>1000, 37760=>1000, 37761=>1000, + 37762=>1000, 37768=>1000, 37770=>1000, 37771=>1000, 37772=>1000, 37773=>1000, 37775=>1000, 37778=>1000, 37780=>1000, 37781=>1000, 37782=>1000, 37783=>1000, 37784=>1000, 37786=>1000, 37787=>1000, 37790=>1000, + 37793=>1000, 37795=>1000, 37796=>1000, 37798=>1000, 37799=>1000, 37800=>1000, 37801=>1000, 37803=>1000, 37804=>1000, 37805=>1000, 37806=>1000, 37808=>1000, 37812=>1000, 37813=>1000, 37814=>1000, 37817=>1000, + 37818=>1000, 37825=>1000, 37827=>1000, 37828=>1000, 37829=>1000, 37830=>1000, 37831=>1000, 37832=>1000, 37833=>1000, 37834=>1000, 37835=>1000, 37836=>1000, 37837=>1000, 37840=>1000, 37841=>1000, 37843=>1000, + 37846=>1000, 37847=>1000, 37848=>1000, 37849=>1000, 37852=>1000, 37853=>1000, 37854=>1000, 37855=>1000, 37857=>1000, 37858=>1000, 37860=>1000, 37861=>1000, 37862=>1000, 37863=>1000, 37864=>1000, 37879=>1000, + 37880=>1000, 37881=>1000, 37882=>1000, 37883=>1000, 37885=>1000, 37889=>1000, 37890=>1000, 37891=>1000, 37892=>1000, 37895=>1000, 37896=>1000, 37897=>1000, 37901=>1000, 37902=>1000, 37903=>1000, 37904=>1000, + 37907=>1000, 37908=>1000, 37909=>1000, 37910=>1000, 37911=>1000, 37912=>1000, 37913=>1000, 37914=>1000, 37919=>1000, 37921=>1000, 37931=>1000, 37934=>1000, 37935=>1000, 37937=>1000, 37938=>1000, 37939=>1000, + 37940=>1000, 37941=>1000, 37942=>1000, 37944=>1000, 37946=>1000, 37947=>1000, 37949=>1000, 37951=>1000, 37953=>1000, 37955=>1000, 37956=>1000, 37957=>1000, 37960=>1000, 37962=>1000, 37964=>1000, 37969=>1000, + 37970=>1000, 37971=>1000, 37973=>1000, 37977=>1000, 37978=>1000, 37979=>1000, 37980=>1000, 37982=>1000, 37983=>1000, 37984=>1000, 37985=>1000, 37986=>1000, 37987=>1000, 37992=>1000, 37994=>1000, 37995=>1000, + 37997=>1000, 37998=>1000, 37999=>1000, 38000=>1000, 38001=>1000, 38002=>1000, 38005=>1000, 38007=>1000, 38012=>1000, 38013=>1000, 38014=>1000, 38015=>1000, 38017=>1000, 38019=>1000, 38020=>1000, 38263=>1000, + 38264=>1000, 38265=>1000, 38270=>1000, 38272=>1000, 38274=>1000, 38275=>1000, 38276=>1000, 38279=>1000, 38280=>1000, 38281=>1000, 38282=>1000, 38283=>1000, 38284=>1000, 38285=>1000, 38286=>1000, 38287=>1000, + 38289=>1000, 38290=>1000, 38291=>1000, 38292=>1000, 38294=>1000, 38296=>1000, 38297=>1000, 38301=>1000, 38302=>1000, 38303=>1000, 38304=>1000, 38305=>1000, 38306=>1000, 38307=>1000, 38308=>1000, 38309=>1000, + 38310=>1000, 38311=>1000, 38312=>1000, 38313=>1000, 38315=>1000, 38316=>1000, 38317=>1000, 38322=>1000, 38324=>1000, 38326=>1000, 38329=>1000, 38330=>1000, 38331=>1000, 38332=>1000, 38333=>1000, 38334=>1000, + 38335=>1000, 38339=>1000, 38342=>1000, 38343=>1000, 38344=>1000, 38345=>1000, 38346=>1000, 38347=>1000, 38348=>1000, 38349=>1000, 38352=>1000, 38353=>1000, 38354=>1000, 38355=>1000, 38356=>1000, 38357=>1000, + 38358=>1000, 38360=>1000, 38361=>1000, 38362=>1000, 38364=>1000, 38365=>1000, 38366=>1000, 38367=>1000, 38368=>1000, 38369=>1000, 38370=>1000, 38372=>1000, 38373=>1000, 38374=>1000, 38428=>1000, 38429=>1000, + 38430=>1000, 38433=>1000, 38434=>1000, 38436=>1000, 38437=>1000, 38438=>1000, 38440=>1000, 38442=>1000, 38444=>1000, 38446=>1000, 38447=>1000, 38449=>1000, 38450=>1000, 38451=>1000, 38455=>1000, 38456=>1000, + 38457=>1000, 38458=>1000, 38459=>1000, 38460=>1000, 38461=>1000, 38463=>1000, 38464=>1000, 38465=>1000, 38466=>1000, 38468=>1000, 38475=>1000, 38476=>1000, 38477=>1000, 38479=>1000, 38480=>1000, 38482=>1000, + 38484=>1000, 38486=>1000, 38487=>1000, 38488=>1000, 38491=>1000, 38492=>1000, 38493=>1000, 38494=>1000, 38495=>1000, 38497=>1000, 38498=>1000, 38499=>1000, 38500=>1000, 38501=>1000, 38502=>1000, 38506=>1000, + 38508=>1000, 38510=>1000, 38512=>1000, 38514=>1000, 38515=>1000, 38516=>1000, 38517=>1000, 38518=>1000, 38519=>1000, 38520=>1000, 38522=>1000, 38523=>1000, 38524=>1000, 38525=>1000, 38526=>1000, 38527=>1000, + 38529=>1000, 38530=>1000, 38531=>1000, 38532=>1000, 38533=>1000, 38534=>1000, 38536=>1000, 38537=>1000, 38538=>1000, 38539=>1000, 38541=>1000, 38542=>1000, 38543=>1000, 38545=>1000, 38548=>1000, 38549=>1000, + 38550=>1000, 38551=>1000, 38552=>1000, 38553=>1000, 38554=>1000, 38555=>1000, 38556=>1000, 38557=>1000, 38559=>1000, 38560=>1000, 38563=>1000, 38564=>1000, 38565=>1000, 38566=>1000, 38567=>1000, 38568=>1000, + 38569=>1000, 38570=>1000, 38574=>1000, 38575=>1000, 38576=>1000, 38577=>1000, 38578=>1000, 38579=>1000, 38580=>1000, 38582=>1000, 38583=>1000, 38584=>1000, 38585=>1000, 38586=>1000, 38587=>1000, 38588=>1000, + 38592=>1000, 38593=>1000, 38596=>1000, 38597=>1000, 38598=>1000, 38599=>1000, 38601=>1000, 38602=>1000, 38603=>1000, 38604=>1000, 38605=>1000, 38606=>1000, 38609=>1000, 38610=>1000, 38613=>1000, 38614=>1000, + 38616=>1000, 38617=>1000, 38618=>1000, 38619=>1000, 38620=>1000, 38621=>1000, 38622=>1000, 38623=>1000, 38626=>1000, 38627=>1000, 38632=>1000, 38633=>1000, 38634=>1000, 38635=>1000, 38639=>1000, 38640=>1000, + 38641=>1000, 38642=>1000, 38646=>1000, 38647=>1000, 38649=>1000, 38650=>1000, 38651=>1000, 38656=>1000, 38658=>1000, 38659=>1000, 38660=>1000, 38661=>1000, 38662=>1000, 38663=>1000, 38664=>1000, 38665=>1000, + 38666=>1000, 38669=>1000, 38670=>1000, 38671=>1000, 38673=>1000, 38675=>1000, 38678=>1000, 38681=>1000, 38682=>1000, 38683=>1000, 38684=>1000, 38685=>1000, 38686=>1000, 38689=>1000, 38690=>1000, 38691=>1000, + 38692=>1000, 38695=>1000, 38696=>1000, 38698=>1000, 38704=>1000, 38705=>1000, 38706=>1000, 38707=>1000, 38712=>1000, 38713=>1000, 38715=>1000, 38717=>1000, 38718=>1000, 38721=>1000, 38722=>1000, 38723=>1000, + 38724=>1000, 38726=>1000, 38728=>1000, 38729=>1000, 38730=>1000, 38733=>1000, 38734=>1000, 38735=>1000, 38737=>1000, 38738=>1000, 38741=>1000, 38742=>1000, 38743=>1000, 38744=>1000, 38745=>1000, 38746=>1000, + 38747=>1000, 38748=>1000, 38750=>1000, 38752=>1000, 38753=>1000, 38754=>1000, 38755=>1000, 38756=>1000, 38758=>1000, 38759=>1000, 38760=>1000, 38761=>1000, 38762=>1000, 38763=>1000, 38765=>1000, 38766=>1000, + 38769=>1000, 38771=>1000, 38772=>1000, 38774=>1000, 38775=>1000, 38776=>1000, 38777=>1000, 38778=>1000, 38779=>1000, 38780=>1000, 38781=>1000, 38783=>1000, 38784=>1000, 38785=>1000, 38788=>1000, 38789=>1000, + 38790=>1000, 38793=>1000, 38795=>1000, 38797=>1000, 38799=>1000, 38800=>1000, 38805=>1000, 38806=>1000, 38807=>1000, 38808=>1000, 38809=>1000, 38810=>1000, 38812=>1000, 38814=>1000, 38815=>1000, 38816=>1000, + 38818=>1000, 38819=>1000, 38822=>1000, 38824=>1000, 38827=>1000, 38828=>1000, 38829=>1000, 38830=>1000, 38833=>1000, 38834=>1000, 38835=>1000, 38836=>1000, 38837=>1000, 38838=>1000, 38840=>1000, 38841=>1000, + 38842=>1000, 38844=>1000, 38846=>1000, 38847=>1000, 38849=>1000, 38851=>1000, 38852=>1000, 38853=>1000, 38854=>1000, 38855=>1000, 38856=>1000, 38857=>1000, 38858=>1000, 38859=>1000, 38860=>1000, 38861=>1000, + 38862=>1000, 38864=>1000, 38865=>1000, 38867=>1000, 38868=>1000, 38871=>1000, 38872=>1000, 38873=>1000, 38875=>1000, 38876=>1000, 38877=>1000, 38878=>1000, 38880=>1000, 38881=>1000, 38884=>1000, 38893=>1000, + 38894=>1000, 38895=>1000, 38897=>1000, 38898=>1000, 38899=>1000, 38900=>1000, 38901=>1000, 38902=>1000, 38903=>1000, 38904=>1000, 38906=>1000, 38907=>1000, 38911=>1000, 38913=>1000, 38914=>1000, 38915=>1000, + 38917=>1000, 38918=>1000, 38919=>1000, 38920=>1000, 38922=>1000, 38924=>1000, 38925=>1000, 38926=>1000, 38927=>1000, 38928=>1000, 38929=>1000, 38930=>1000, 38931=>1000, 38932=>1000, 38934=>1000, 38935=>1000, + 38936=>1000, 38937=>1000, 38938=>1000, 38940=>1000, 38942=>1000, 38944=>1000, 38945=>1000, 38947=>1000, 38948=>1000, 38949=>1000, 38950=>1000, 38955=>1000, 38956=>1000, 38957=>1000, 38958=>1000, 38959=>1000, + 38960=>1000, 38962=>1000, 38963=>1000, 38964=>1000, 38965=>1000, 38967=>1000, 38968=>1000, 38971=>1000, 38972=>1000, 38973=>1000, 38974=>1000, 38980=>1000, 38982=>1000, 38983=>1000, 38986=>1000, 38987=>1000, + 38988=>1000, 38989=>1000, 38990=>1000, 38991=>1000, 38993=>1000, 38994=>1000, 38995=>1000, 38996=>1000, 38997=>1000, 38998=>1000, 38999=>1000, 39000=>1000, 39001=>1000, 39002=>1000, 39003=>1000, 39006=>1000, + 39010=>1000, 39011=>1000, 39013=>1000, 39014=>1000, 39015=>1000, 39018=>1000, 39019=>1000, 39020=>1000, 39023=>1000, 39024=>1000, 39025=>1000, 39027=>1000, 39028=>1000, 39080=>1000, 39082=>1000, 39083=>1000, + 39085=>1000, 39086=>1000, 39087=>1000, 39088=>1000, 39089=>1000, 39092=>1000, 39094=>1000, 39095=>1000, 39096=>1000, 39098=>1000, 39099=>1000, 39103=>1000, 39106=>1000, 39107=>1000, 39108=>1000, 39109=>1000, + 39110=>1000, 39112=>1000, 39116=>1000, 39131=>1000, 39132=>1000, 39135=>1000, 39137=>1000, 39138=>1000, 39139=>1000, 39141=>1000, 39142=>1000, 39143=>1000, 39145=>1000, 39146=>1000, 39147=>1000, 39149=>1000, + 39150=>1000, 39151=>1000, 39154=>1000, 39155=>1000, 39156=>1000, 39158=>1000, 39164=>1000, 39165=>1000, 39166=>1000, 39170=>1000, 39171=>1000, 39173=>1000, 39175=>1000, 39176=>1000, 39177=>1000, 39178=>1000, + 39180=>1000, 39184=>1000, 39185=>1000, 39186=>1000, 39187=>1000, 39188=>1000, 39189=>1000, 39190=>1000, 39191=>1000, 39192=>1000, 39194=>1000, 39195=>1000, 39196=>1000, 39197=>1000, 39198=>1000, 39199=>1000, + 39200=>1000, 39201=>1000, 39202=>1000, 39204=>1000, 39206=>1000, 39207=>1000, 39208=>1000, 39211=>1000, 39212=>1000, 39214=>1000, 39217=>1000, 39218=>1000, 39219=>1000, 39220=>1000, 39221=>1000, 39225=>1000, + 39226=>1000, 39227=>1000, 39228=>1000, 39229=>1000, 39230=>1000, 39232=>1000, 39233=>1000, 39234=>1000, 39237=>1000, 39238=>1000, 39239=>1000, 39240=>1000, 39241=>1000, 39243=>1000, 39244=>1000, 39245=>1000, + 39246=>1000, 39248=>1000, 39249=>1000, 39250=>1000, 39252=>1000, 39253=>1000, 39255=>1000, 39256=>1000, 39257=>1000, 39259=>1000, 39260=>1000, 39262=>1000, 39263=>1000, 39264=>1000, 39318=>1000, 39319=>1000, + 39320=>1000, 39321=>1000, 39323=>1000, 39325=>1000, 39326=>1000, 39327=>1000, 39333=>1000, 39334=>1000, 39336=>1000, 39340=>1000, 39341=>1000, 39342=>1000, 39344=>1000, 39345=>1000, 39346=>1000, 39347=>1000, + 39348=>1000, 39349=>1000, 39353=>1000, 39354=>1000, 39356=>1000, 39357=>1000, 39359=>1000, 39361=>1000, 39363=>1000, 39364=>1000, 39365=>1000, 39366=>1000, 39368=>1000, 39369=>1000, 39376=>1000, 39377=>1000, + 39378=>1000, 39379=>1000, 39380=>1000, 39381=>1000, 39384=>1000, 39385=>1000, 39386=>1000, 39387=>1000, 39388=>1000, 39389=>1000, 39390=>1000, 39391=>1000, 39394=>1000, 39399=>1000, 39402=>1000, 39403=>1000, + 39404=>1000, 39405=>1000, 39406=>1000, 39408=>1000, 39409=>1000, 39410=>1000, 39412=>1000, 39413=>1000, 39416=>1000, 39417=>1000, 39419=>1000, 39421=>1000, 39422=>1000, 39423=>1000, 39425=>1000, 39426=>1000, + 39427=>1000, 39428=>1000, 39429=>1000, 39435=>1000, 39436=>1000, 39438=>1000, 39439=>1000, 39440=>1000, 39441=>1000, 39442=>1000, 39443=>1000, 39446=>1000, 39449=>1000, 39454=>1000, 39456=>1000, 39458=>1000, + 39459=>1000, 39460=>1000, 39463=>1000, 39464=>1000, 39467=>1000, 39469=>1000, 39470=>1000, 39472=>1000, 39475=>1000, 39477=>1000, 39478=>1000, 39479=>1000, 39480=>1000, 39486=>1000, 39488=>1000, 39489=>1000, + 39490=>1000, 39491=>1000, 39492=>1000, 39493=>1000, 39495=>1000, 39498=>1000, 39499=>1000, 39500=>1000, 39501=>1000, 39502=>1000, 39505=>1000, 39508=>1000, 39509=>1000, 39510=>1000, 39511=>1000, 39514=>1000, + 39515=>1000, 39517=>1000, 39519=>1000, 39522=>1000, 39524=>1000, 39525=>1000, 39529=>1000, 39530=>1000, 39531=>1000, 39592=>1000, 39594=>1000, 39596=>1000, 39597=>1000, 39598=>1000, 39599=>1000, 39600=>1000, + 39602=>1000, 39604=>1000, 39605=>1000, 39606=>1000, 39608=>1000, 39609=>1000, 39611=>1000, 39612=>1000, 39614=>1000, 39615=>1000, 39616=>1000, 39617=>1000, 39619=>1000, 39620=>1000, 39622=>1000, 39624=>1000, + 39630=>1000, 39631=>1000, 39632=>1000, 39633=>1000, 39634=>1000, 39635=>1000, 39636=>1000, 39637=>1000, 39638=>1000, 39639=>1000, 39640=>1000, 39641=>1000, 39643=>1000, 39644=>1000, 39646=>1000, 39647=>1000, + 39648=>1000, 39650=>1000, 39651=>1000, 39652=>1000, 39653=>1000, 39654=>1000, 39655=>1000, 39657=>1000, 39658=>1000, 39659=>1000, 39660=>1000, 39661=>1000, 39662=>1000, 39663=>1000, 39665=>1000, 39666=>1000, + 39667=>1000, 39668=>1000, 39669=>1000, 39671=>1000, 39673=>1000, 39674=>1000, 39675=>1000, 39677=>1000, 39679=>1000, 39680=>1000, 39681=>1000, 39682=>1000, 39683=>1000, 39684=>1000, 39685=>1000, 39686=>1000, + 39688=>1000, 39689=>1000, 39691=>1000, 39692=>1000, 39693=>1000, 39694=>1000, 39696=>1000, 39698=>1000, 39702=>1000, 39704=>1000, 39705=>1000, 39706=>1000, 39707=>1000, 39708=>1000, 39711=>1000, 39712=>1000, + 39714=>1000, 39715=>1000, 39717=>1000, 39718=>1000, 39719=>1000, 39720=>1000, 39721=>1000, 39722=>1000, 39723=>1000, 39725=>1000, 39726=>1000, 39727=>1000, 39729=>1000, 39730=>1000, 39731=>1000, 39732=>1000, + 39733=>1000, 39735=>1000, 39737=>1000, 39738=>1000, 39739=>1000, 39740=>1000, 39741=>1000, 39745=>1000, 39746=>1000, 39747=>1000, 39748=>1000, 39749=>1000, 39752=>1000, 39755=>1000, 39756=>1000, 39757=>1000, + 39758=>1000, 39759=>1000, 39761=>1000, 39764=>1000, 39765=>1000, 39766=>1000, 39767=>1000, 39768=>1000, 39770=>1000, 39771=>1000, 39774=>1000, 39777=>1000, 39779=>1000, 39781=>1000, 39782=>1000, 39784=>1000, + 39786=>1000, 39787=>1000, 39788=>1000, 39789=>1000, 39790=>1000, 39791=>1000, 39794=>1000, 39795=>1000, 39796=>1000, 39797=>1000, 39799=>1000, 39800=>1000, 39801=>1000, 39807=>1000, 39808=>1000, 39811=>1000, + 39812=>1000, 39813=>1000, 39814=>1000, 39815=>1000, 39817=>1000, 39818=>1000, 39819=>1000, 39821=>1000, 39822=>1000, 39823=>1000, 39824=>1000, 39825=>1000, 39826=>1000, 39827=>1000, 39828=>1000, 39830=>1000, + 39831=>1000, 39834=>1000, 39837=>1000, 39838=>1000, 39839=>1000, 39840=>1000, 39846=>1000, 39847=>1000, 39848=>1000, 39849=>1000, 39850=>1000, 39851=>1000, 39852=>1000, 39853=>1000, 39854=>1000, 39856=>1000, + 39857=>1000, 39858=>1000, 39860=>1000, 39863=>1000, 39864=>1000, 39865=>1000, 39867=>1000, 39868=>1000, 39870=>1000, 39871=>1000, 39872=>1000, 39873=>1000, 39878=>1000, 39879=>1000, 39880=>1000, 39881=>1000, + 39882=>1000, 39886=>1000, 39887=>1000, 39888=>1000, 39889=>1000, 39890=>1000, 39892=>1000, 39894=>1000, 39895=>1000, 39896=>1000, 39899=>1000, 39901=>1000, 39903=>1000, 39905=>1000, 39906=>1000, 39907=>1000, + 39908=>1000, 39909=>1000, 39911=>1000, 39912=>1000, 39914=>1000, 39915=>1000, 39919=>1000, 39920=>1000, 39921=>1000, 39922=>1000, 39923=>1000, 39925=>1000, 39927=>1000, 39928=>1000, 39929=>1000, 39930=>1000, + 39933=>1000, 39935=>1000, 39936=>1000, 39938=>1000, 39940=>1000, 39942=>1000, 39944=>1000, 39945=>1000, 39946=>1000, 39947=>1000, 39948=>1000, 39949=>1000, 39951=>1000, 39952=>1000, 39953=>1000, 39954=>1000, + 39955=>1000, 39956=>1000, 39957=>1000, 39958=>1000, 39960=>1000, 39961=>1000, 39962=>1000, 39963=>1000, 39964=>1000, 39966=>1000, 39969=>1000, 39970=>1000, 39971=>1000, 39972=>1000, 39973=>1000, 39974=>1000, + 39975=>1000, 39976=>1000, 39977=>1000, 39978=>1000, 39981=>1000, 39982=>1000, 39983=>1000, 39984=>1000, 39985=>1000, 39986=>1000, 39989=>1000, 39990=>1000, 39991=>1000, 39993=>1000, 39994=>1000, 39995=>1000, + 39997=>1000, 39998=>1000, 40001=>1000, 40003=>1000, 40004=>1000, 40005=>1000, 40006=>1000, 40007=>1000, 40008=>1000, 40009=>1000, 40010=>1000, 40014=>1000, 40015=>1000, 40016=>1000, 40018=>1000, 40019=>1000, + 40020=>1000, 40022=>1000, 40023=>1000, 40024=>1000, 40026=>1000, 40027=>1000, 40028=>1000, 40029=>1000, 40030=>1000, 40031=>1000, 40032=>1000, 40035=>1000, 40039=>1000, 40040=>1000, 40041=>1000, 40042=>1000, + 40043=>1000, 40046=>1000, 40048=>1000, 40050=>1000, 40053=>1000, 40054=>1000, 40055=>1000, 40056=>1000, 40059=>1000, 40165=>1000, 40166=>1000, 40167=>1000, 40169=>1000, 40171=>1000, 40172=>1000, 40176=>1000, + 40178=>1000, 40179=>1000, 40180=>1000, 40182=>1000, 40183=>1000, 40185=>1000, 40194=>1000, 40195=>1000, 40198=>1000, 40199=>1000, 40200=>1000, 40201=>1000, 40203=>1000, 40206=>1000, 40209=>1000, 40210=>1000, + 40213=>1000, 40215=>1000, 40216=>1000, 40219=>1000, 40220=>1000, 40221=>1000, 40222=>1000, 40223=>1000, 40227=>1000, 40230=>1000, 40232=>1000, 40234=>1000, 40235=>1000, 40236=>1000, 40239=>1000, 40240=>1000, + 40242=>1000, 40243=>1000, 40244=>1000, 40250=>1000, 40251=>1000, 40252=>1000, 40253=>1000, 40254=>1000, 40255=>1000, 40257=>1000, 40258=>1000, 40259=>1000, 40260=>1000, 40261=>1000, 40262=>1000, 40263=>1000, + 40264=>1000, 40266=>1000, 40272=>1000, 40273=>1000, 40275=>1000, 40276=>1000, 40281=>1000, 40284=>1000, 40285=>1000, 40286=>1000, 40287=>1000, 40288=>1000, 40289=>1000, 40290=>1000, 40291=>1000, 40292=>1000, + 40293=>1000, 40297=>1000, 40298=>1000, 40299=>1000, 40300=>1000, 40303=>1000, 40304=>1000, 40306=>1000, 40310=>1000, 40311=>1000, 40314=>1000, 40315=>1000, 40316=>1000, 40318=>1000, 40323=>1000, 40324=>1000, + 40326=>1000, 40327=>1000, 40329=>1000, 40330=>1000, 40333=>1000, 40334=>1000, 40335=>1000, 40338=>1000, 40339=>1000, 40341=>1000, 40342=>1000, 40343=>1000, 40344=>1000, 40346=>1000, 40353=>1000, 40356=>1000, + 40361=>1000, 40362=>1000, 40363=>1000, 40364=>1000, 40366=>1000, 40367=>1000, 40369=>1000, 40370=>1000, 40372=>1000, 40373=>1000, 40376=>1000, 40377=>1000, 40378=>1000, 40379=>1000, 40380=>1000, 40383=>1000, + 40385=>1000, 40386=>1000, 40387=>1000, 40388=>1000, 40390=>1000, 40391=>1000, 40393=>1000, 40394=>1000, 40399=>1000, 40403=>1000, 40404=>1000, 40405=>1000, 40406=>1000, 40407=>1000, 40409=>1000, 40410=>1000, + 40414=>1000, 40415=>1000, 40416=>1000, 40421=>1000, 40422=>1000, 40423=>1000, 40425=>1000, 40427=>1000, 40429=>1000, 40430=>1000, 40431=>1000, 40432=>1000, 40434=>1000, 40435=>1000, 40436=>1000, 40440=>1000, + 40441=>1000, 40442=>1000, 40445=>1000, 40446=>1000, 40450=>1000, 40455=>1000, 40458=>1000, 40462=>1000, 40464=>1000, 40465=>1000, 40466=>1000, 40469=>1000, 40470=>1000, 40473=>1000, 40474=>1000, 40475=>1000, + 40476=>1000, 40477=>1000, 40478=>1000, 40565=>1000, 40568=>1000, 40569=>1000, 40570=>1000, 40571=>1000, 40572=>1000, 40573=>1000, 40575=>1000, 40576=>1000, 40577=>1000, 40578=>1000, 40579=>1000, 40580=>1000, + 40581=>1000, 40583=>1000, 40584=>1000, 40587=>1000, 40588=>1000, 40590=>1000, 40591=>1000, 40593=>1000, 40594=>1000, 40595=>1000, 40597=>1000, 40598=>1000, 40599=>1000, 40600=>1000, 40603=>1000, 40605=>1000, + 40606=>1000, 40607=>1000, 40612=>1000, 40613=>1000, 40614=>1000, 40616=>1000, 40617=>1000, 40618=>1000, 40620=>1000, 40621=>1000, 40622=>1000, 40623=>1000, 40624=>1000, 40627=>1000, 40628=>1000, 40629=>1000, + 40632=>1000, 40633=>1000, 40634=>1000, 40635=>1000, 40636=>1000, 40638=>1000, 40639=>1000, 40644=>1000, 40646=>1000, 40648=>1000, 40651=>1000, 40652=>1000, 40653=>1000, 40654=>1000, 40655=>1000, 40656=>1000, + 40657=>1000, 40658=>1000, 40660=>1000, 40661=>1000, 40664=>1000, 40665=>1000, 40667=>1000, 40668=>1000, 40669=>1000, 40670=>1000, 40671=>1000, 40672=>1000, 40676=>1000, 40677=>1000, 40679=>1000, 40680=>1000, + 40684=>1000, 40685=>1000, 40686=>1000, 40687=>1000, 40688=>1000, 40689=>1000, 40690=>1000, 40692=>1000, 40693=>1000, 40694=>1000, 40695=>1000, 40696=>1000, 40697=>1000, 40699=>1000, 40700=>1000, 40701=>1000, + 40703=>1000, 40706=>1000, 40707=>1000, 40711=>1000, 40712=>1000, 40713=>1000, 40718=>1000, 40719=>1000, 40720=>1000, 40721=>1000, 40722=>1000, 40723=>1000, 40724=>1000, 40725=>1000, 40726=>1000, 40727=>1000, + 40729=>1000, 40730=>1000, 40731=>1000, 40735=>1000, 40736=>1000, 40737=>1000, 40738=>1000, 40742=>1000, 40746=>1000, 40747=>1000, 40748=>1000, 40751=>1000, 40753=>1000, 40754=>1000, 40756=>1000, 40759=>1000, + 40761=>1000, 40762=>1000, 40763=>1000, 40764=>1000, 40765=>1000, 40766=>1000, 40767=>1000, 40769=>1000, 40771=>1000, 40772=>1000, 40773=>1000, 40774=>1000, 40775=>1000, 40778=>1000, 40779=>1000, 40782=>1000, + 40783=>1000, 40786=>1000, 40787=>1000, 40788=>1000, 40789=>1000, 40790=>1000, 40791=>1000, 40792=>1000, 40794=>1000, 40797=>1000, 40798=>1000, 40799=>1000, 40800=>1000, 40801=>1000, 40802=>1000, 40803=>1000, + 40806=>1000, 40807=>1000, 40808=>1000, 40809=>1000, 40810=>1000, 40812=>1000, 40813=>1000, 40814=>1000, 40815=>1000, 40816=>1000, 40817=>1000, 40818=>1000, 40819=>1000, 40821=>1000, 40822=>1000, 40823=>1000, + 40826=>1000, 40829=>1000, 40845=>1000, 40847=>1000, 40848=>1000, 40849=>1000, 40850=>1000, 40852=>1000, 40853=>1000, 40854=>1000, 40855=>1000, 40860=>1000, 40861=>1000, 40862=>1000, 40864=>1000, 40865=>1000, + 40866=>1000, 40867=>1000, 40869=>1000, 63785=>1000, 63964=>1000, 64014=>1000, 64015=>1000, 64016=>1000, 64017=>1000, 64018=>1000, 64019=>1000, 64020=>1000, 64021=>1000, 64022=>1000, 64023=>1000, 64024=>1000, + 64025=>1000, 64026=>1000, 64027=>1000, 64028=>1000, 64029=>1000, 64030=>1000, 64031=>1000, 64032=>1000, 64033=>1000, 64034=>1000, 64035=>1000, 64036=>1000, 64037=>1000, 64038=>1000, 64039=>1000, 64040=>1000, + 64041=>1000, 64042=>1000, 64043=>1000, 64044=>1000, 64045=>1000, 65281=>1000, 65282=>1000, 65283=>1000, 65284=>1000, 65285=>1000, 65286=>1000, 65287=>1000, 65288=>1000, 65289=>1000, 65290=>1000, 65291=>1000, + 65292=>1000, 65293=>1000, 65294=>1000, 65295=>1000, 65296=>1000, 65297=>1000, 65298=>1000, 65299=>1000, 65300=>1000, 65301=>1000, 65302=>1000, 65303=>1000, 65304=>1000, 65305=>1000, 65306=>1000, 65307=>1000, + 65308=>1000, 65309=>1000, 65310=>1000, 65311=>1000, 65312=>1000, 65313=>1000, 65314=>1000, 65315=>1000, 65316=>1000, 65317=>1000, 65318=>1000, 65319=>1000, 65320=>1000, 65321=>1000, 65322=>1000, 65323=>1000, + 65324=>1000, 65325=>1000, 65326=>1000, 65327=>1000, 65328=>1000, 65329=>1000, 65330=>1000, 65331=>1000, 65332=>1000, 65333=>1000, 65334=>1000, 65335=>1000, 65336=>1000, 65337=>1000, 65338=>1000, 65339=>1000, + 65340=>1000, 65341=>1000, 65342=>1000, 65343=>1000, 65344=>1000, 65345=>1000, 65346=>1000, 65347=>1000, 65348=>1000, 65349=>1000, 65350=>1000, 65351=>1000, 65352=>1000, 65353=>1000, 65354=>1000, 65355=>1000, + 65356=>1000, 65357=>1000, 65358=>1000, 65359=>1000, 65360=>1000, 65361=>1000, 65362=>1000, 65363=>1000, 65364=>1000, 65365=>1000, 65366=>1000, 65367=>1000, 65368=>1000, 65369=>1000, 65370=>1000, 65371=>1000, + 65372=>1000, 65373=>1000, 65374=>1000, 65377=>500, 65378=>500, 65379=>500, 65380=>500, 65381=>500, 65382=>500, 65383=>500, 65384=>500, 65385=>500, 65386=>500, 65387=>500, 65388=>500, 65389=>500, + 65390=>500, 65391=>500, 65392=>500, 65393=>500, 65394=>500, 65395=>500, 65396=>500, 65397=>500, 65398=>500, 65399=>500, 65400=>500, 65401=>500, 65402=>500, 65403=>500, 65404=>500, 65405=>500, + 65406=>500, 65407=>500, 65408=>500, 65409=>500, 65410=>500, 65411=>500, 65412=>500, 65413=>500, 65414=>500, 65415=>500, 65416=>500, 65417=>500, 65418=>500, 65419=>500, 65420=>500, 65421=>500, + 65422=>500, 65423=>500, 65424=>500, 65425=>500, 65426=>500, 65427=>500, 65428=>500, 65429=>500, 65430=>500, 65431=>500, 65432=>500, 65433=>500, 65434=>500, 65435=>500, 65436=>500, 65437=>500, + 65438=>500, 65439=>500, 65504=>1000, 65505=>1000, 65506=>1000, 65507=>1000, 65509=>1000} + font[:enc]=''; + font[:diff]=''; + font[:file]=''; + font[:registry]={'ordering'=>'Japan1','supplement'=>2} +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/symbol.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/symbol.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,15 @@ +TCPDFFontDescriptor.define('symbol') do |font| + font[:cw]={ + 0.chr=>250,1.chr=>250,2.chr=>250,3.chr=>250,4.chr=>250,5.chr=>250,6.chr=>250,7.chr=>250,8.chr=>250,9.chr=>250,10.chr=>250,11.chr=>250,12.chr=>250,13.chr=>250,14.chr=>250,15.chr=>250,16.chr=>250,17.chr=>250,18.chr=>250,19.chr=>250,20.chr=>250,21.chr=>250, + 22.chr=>250,23.chr=>250,24.chr=>250,25.chr=>250,26.chr=>250,27.chr=>250,28.chr=>250,29.chr=>250,30.chr=>250,31.chr=>250,' '=>250,'!'=>333,'"'=>713,'#'=>500,'$'=>549,'%'=>833,'&'=>778,'\''=>439,'('=>333,')'=>333,'*'=>500,'+'=>549, + ','=>250,'-'=>549,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>549,'='=>549,'>'=>549,'?'=>444,'@'=>549,'A'=>722, + 'B'=>667,'C'=>722,'D'=>612,'E'=>611,'F'=>763,'G'=>603,'H'=>722,'I'=>333,'J'=>631,'K'=>722,'L'=>686,'M'=>889,'N'=>722,'O'=>722,'P'=>768,'Q'=>741,'R'=>556,'S'=>592,'T'=>611,'U'=>690,'V'=>439,'W'=>768, + 'X'=>645,'Y'=>795,'Z'=>611,'['=>333,'\\'=>863,']'=>333,'^'=>658,'_'=>500,'`'=>500,'a'=>631,'b'=>549,'c'=>549,'d'=>494,'e'=>439,'f'=>521,'g'=>411,'h'=>603,'i'=>329,'j'=>603,'k'=>549,'l'=>549,'m'=>576, + 'n'=>521,'o'=>549,'p'=>549,'q'=>521,'r'=>549,'s'=>603,'t'=>439,'u'=>576,'v'=>713,'w'=>686,'x'=>493,'y'=>686,'z'=>494,'{'=>480,'|'=>200,'}'=>480,'~'=>549,127.chr=>0,128.chr=>0,129.chr=>0,130.chr=>0,131.chr=>0, + 132.chr=>0,133.chr=>0,134.chr=>0,135.chr=>0,136.chr=>0,137.chr=>0,138.chr=>0,139.chr=>0,140.chr=>0,141.chr=>0,142.chr=>0,143.chr=>0,144.chr=>0,145.chr=>0,146.chr=>0,147.chr=>0,148.chr=>0,149.chr=>0,150.chr=>0,151.chr=>0,152.chr=>0,153.chr=>0, + 154.chr=>0,155.chr=>0,156.chr=>0,157.chr=>0,158.chr=>0,159.chr=>0,160.chr=>750,161.chr=>620,162.chr=>247,163.chr=>549,164.chr=>167,165.chr=>713,166.chr=>500,167.chr=>753,168.chr=>753,169.chr=>753,170.chr=>753,171.chr=>1042,172.chr=>987,173.chr=>603,174.chr=>987,175.chr=>603, + 176.chr=>400,177.chr=>549,178.chr=>411,179.chr=>549,180.chr=>549,181.chr=>713,182.chr=>494,183.chr=>460,184.chr=>549,185.chr=>549,186.chr=>549,187.chr=>549,188.chr=>1000,189.chr=>603,190.chr=>1000,191.chr=>658,192.chr=>823,193.chr=>686,194.chr=>795,195.chr=>987,196.chr=>768,197.chr=>768, + 198.chr=>823,199.chr=>768,200.chr=>768,201.chr=>713,202.chr=>713,203.chr=>713,204.chr=>713,205.chr=>713,206.chr=>713,207.chr=>713,208.chr=>768,209.chr=>713,210.chr=>790,211.chr=>790,212.chr=>890,213.chr=>823,214.chr=>549,215.chr=>250,216.chr=>713,217.chr=>603,218.chr=>603,219.chr=>1042, + 220.chr=>987,221.chr=>603,222.chr=>987,223.chr=>603,224.chr=>494,225.chr=>329,226.chr=>790,227.chr=>790,228.chr=>786,229.chr=>713,230.chr=>384,231.chr=>384,232.chr=>384,233.chr=>384,234.chr=>384,235.chr=>384,236.chr=>494,237.chr=>494,238.chr=>494,239.chr=>494,240.chr=>0,241.chr=>329, + 242.chr=>274,243.chr=>686,244.chr=>686,245.chr=>686,246.chr=>384,247.chr=>384,248.chr=>384,249.chr=>384,250.chr=>384,251.chr=>384,252.chr=>494,253.chr=>494,254.chr=>494,255.chr=>0); +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/times.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/times.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,15 @@ +TCPDFFontDescriptor.define('times') do |font| + font[:cw]={ + 0.chr=>250,1.chr=>250,2.chr=>250,3.chr=>250,4.chr=>250,5.chr=>250,6.chr=>250,7.chr=>250,8.chr=>250,9.chr=>250,10.chr=>250,11.chr=>250,12.chr=>250,13.chr=>250,14.chr=>250,15.chr=>250,16.chr=>250,17.chr=>250,18.chr=>250,19.chr=>250,20.chr=>250,21.chr=>250, + 22.chr=>250,23.chr=>250,24.chr=>250,25.chr=>250,26.chr=>250,27.chr=>250,28.chr=>250,29.chr=>250,30.chr=>250,31.chr=>250,' '=>250,'!'=>333,'"'=>408,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>180,'('=>333,')'=>333,'*'=>500,'+'=>564, + ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>564,'='=>564,'>'=>564,'?'=>444,'@'=>921,'A'=>722, + 'B'=>667,'C'=>667,'D'=>722,'E'=>611,'F'=>556,'G'=>722,'H'=>722,'I'=>333,'J'=>389,'K'=>722,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>556,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>722,'W'=>944, + 'X'=>722,'Y'=>722,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>469,'_'=>500,'`'=>333,'a'=>444,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778, + 'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>333,'s'=>389,'t'=>278,'u'=>500,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>480,'|'=>200,'}'=>480,'~'=>541,127.chr=>350,128.chr=>500,129.chr=>350,130.chr=>333,131.chr=>500, + 132.chr=>444,133.chr=>1000,134.chr=>500,135.chr=>500,136.chr=>333,137.chr=>1000,138.chr=>556,139.chr=>333,140.chr=>889,141.chr=>350,142.chr=>611,143.chr=>350,144.chr=>350,145.chr=>333,146.chr=>333,147.chr=>444,148.chr=>444,149.chr=>350,150.chr=>500,151.chr=>1000,152.chr=>333,153.chr=>980, + 154.chr=>389,155.chr=>333,156.chr=>722,157.chr=>350,158.chr=>444,159.chr=>722,160.chr=>250,161.chr=>333,162.chr=>500,163.chr=>500,164.chr=>500,165.chr=>500,166.chr=>200,167.chr=>500,168.chr=>333,169.chr=>760,170.chr=>276,171.chr=>500,172.chr=>564,173.chr=>333,174.chr=>760,175.chr=>333, + 176.chr=>400,177.chr=>564,178.chr=>300,179.chr=>300,180.chr=>333,181.chr=>500,182.chr=>453,183.chr=>250,184.chr=>333,185.chr=>300,186.chr=>310,187.chr=>500,188.chr=>750,189.chr=>750,190.chr=>750,191.chr=>444,192.chr=>722,193.chr=>722,194.chr=>722,195.chr=>722,196.chr=>722,197.chr=>722, + 198.chr=>889,199.chr=>667,200.chr=>611,201.chr=>611,202.chr=>611,203.chr=>611,204.chr=>333,205.chr=>333,206.chr=>333,207.chr=>333,208.chr=>722,209.chr=>722,210.chr=>722,211.chr=>722,212.chr=>722,213.chr=>722,214.chr=>722,215.chr=>564,216.chr=>722,217.chr=>722,218.chr=>722,219.chr=>722, + 220.chr=>722,221.chr=>722,222.chr=>556,223.chr=>500,224.chr=>444,225.chr=>444,226.chr=>444,227.chr=>444,228.chr=>444,229.chr=>444,230.chr=>667,231.chr=>444,232.chr=>444,233.chr=>444,234.chr=>444,235.chr=>444,236.chr=>278,237.chr=>278,238.chr=>278,239.chr=>278,240.chr=>500,241.chr=>500, + 242.chr=>500,243.chr=>500,244.chr=>500,245.chr=>500,246.chr=>500,247.chr=>564,248.chr=>500,249.chr=>500,250.chr=>500,251.chr=>500,252.chr=>500,253.chr=>500,254.chr=>500,255.chr=>500); +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/timesb.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/timesb.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,15 @@ +TCPDFFontDescriptor.define('timesb') do |font| + font[:cw]={ + 0.chr=>250,1.chr=>250,2.chr=>250,3.chr=>250,4.chr=>250,5.chr=>250,6.chr=>250,7.chr=>250,8.chr=>250,9.chr=>250,10.chr=>250,11.chr=>250,12.chr=>250,13.chr=>250,14.chr=>250,15.chr=>250,16.chr=>250,17.chr=>250,18.chr=>250,19.chr=>250,20.chr=>250,21.chr=>250, + 22.chr=>250,23.chr=>250,24.chr=>250,25.chr=>250,26.chr=>250,27.chr=>250,28.chr=>250,29.chr=>250,30.chr=>250,31.chr=>250,' '=>250,'!'=>333,'"'=>555,'#'=>500,'$'=>500,'%'=>1000,'&'=>833,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570, + ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>930,'A'=>722, + 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>778,'I'=>389,'J'=>500,'K'=>778,'L'=>667,'M'=>944,'N'=>722,'O'=>778,'P'=>611,'Q'=>778,'R'=>722,'S'=>556,'T'=>667,'U'=>722,'V'=>722,'W'=>1000, + 'X'=>722,'Y'=>722,'Z'=>667,'['=>333,'\\'=>278,']'=>333,'^'=>581,'_'=>500,'`'=>333,'a'=>500,'b'=>556,'c'=>444,'d'=>556,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>333,'k'=>556,'l'=>278,'m'=>833, + 'n'=>556,'o'=>500,'p'=>556,'q'=>556,'r'=>444,'s'=>389,'t'=>333,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>394,'|'=>220,'}'=>394,'~'=>520,127.chr=>350,128.chr=>500,129.chr=>350,130.chr=>333,131.chr=>500, + 132.chr=>500,133.chr=>1000,134.chr=>500,135.chr=>500,136.chr=>333,137.chr=>1000,138.chr=>556,139.chr=>333,140.chr=>1000,141.chr=>350,142.chr=>667,143.chr=>350,144.chr=>350,145.chr=>333,146.chr=>333,147.chr=>500,148.chr=>500,149.chr=>350,150.chr=>500,151.chr=>1000,152.chr=>333,153.chr=>1000, + 154.chr=>389,155.chr=>333,156.chr=>722,157.chr=>350,158.chr=>444,159.chr=>722,160.chr=>250,161.chr=>333,162.chr=>500,163.chr=>500,164.chr=>500,165.chr=>500,166.chr=>220,167.chr=>500,168.chr=>333,169.chr=>747,170.chr=>300,171.chr=>500,172.chr=>570,173.chr=>333,174.chr=>747,175.chr=>333, + 176.chr=>400,177.chr=>570,178.chr=>300,179.chr=>300,180.chr=>333,181.chr=>556,182.chr=>540,183.chr=>250,184.chr=>333,185.chr=>300,186.chr=>330,187.chr=>500,188.chr=>750,189.chr=>750,190.chr=>750,191.chr=>500,192.chr=>722,193.chr=>722,194.chr=>722,195.chr=>722,196.chr=>722,197.chr=>722, + 198.chr=>1000,199.chr=>722,200.chr=>667,201.chr=>667,202.chr=>667,203.chr=>667,204.chr=>389,205.chr=>389,206.chr=>389,207.chr=>389,208.chr=>722,209.chr=>722,210.chr=>778,211.chr=>778,212.chr=>778,213.chr=>778,214.chr=>778,215.chr=>570,216.chr=>778,217.chr=>722,218.chr=>722,219.chr=>722, + 220.chr=>722,221.chr=>722,222.chr=>611,223.chr=>556,224.chr=>500,225.chr=>500,226.chr=>500,227.chr=>500,228.chr=>500,229.chr=>500,230.chr=>722,231.chr=>444,232.chr=>444,233.chr=>444,234.chr=>444,235.chr=>444,236.chr=>278,237.chr=>278,238.chr=>278,239.chr=>278,240.chr=>500,241.chr=>556, + 242.chr=>500,243.chr=>500,244.chr=>500,245.chr=>500,246.chr=>500,247.chr=>570,248.chr=>500,249.chr=>556,250.chr=>556,251.chr=>556,252.chr=>556,253.chr=>500,254.chr=>556,255.chr=>500); +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/timesbi.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/timesbi.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,15 @@ +TCPDFFontDescriptor.define('timesbi') do |font| + font[:cw]={ + 0.chr=>250,1.chr=>250,2.chr=>250,3.chr=>250,4.chr=>250,5.chr=>250,6.chr=>250,7.chr=>250,8.chr=>250,9.chr=>250,10.chr=>250,11.chr=>250,12.chr=>250,13.chr=>250,14.chr=>250,15.chr=>250,16.chr=>250,17.chr=>250,18.chr=>250,19.chr=>250,20.chr=>250,21.chr=>250, + 22.chr=>250,23.chr=>250,24.chr=>250,25.chr=>250,26.chr=>250,27.chr=>250,28.chr=>250,29.chr=>250,30.chr=>250,31.chr=>250,' '=>250,'!'=>389,'"'=>555,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570, + ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>832,'A'=>667, + 'B'=>667,'C'=>667,'D'=>722,'E'=>667,'F'=>667,'G'=>722,'H'=>778,'I'=>389,'J'=>500,'K'=>667,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>611,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>667,'W'=>889, + 'X'=>667,'Y'=>611,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>570,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778, + 'n'=>556,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>556,'v'=>444,'w'=>667,'x'=>500,'y'=>444,'z'=>389,'{'=>348,'|'=>220,'}'=>348,'~'=>570,127.chr=>350,128.chr=>500,129.chr=>350,130.chr=>333,131.chr=>500, + 132.chr=>500,133.chr=>1000,134.chr=>500,135.chr=>500,136.chr=>333,137.chr=>1000,138.chr=>556,139.chr=>333,140.chr=>944,141.chr=>350,142.chr=>611,143.chr=>350,144.chr=>350,145.chr=>333,146.chr=>333,147.chr=>500,148.chr=>500,149.chr=>350,150.chr=>500,151.chr=>1000,152.chr=>333,153.chr=>1000, + 154.chr=>389,155.chr=>333,156.chr=>722,157.chr=>350,158.chr=>389,159.chr=>611,160.chr=>250,161.chr=>389,162.chr=>500,163.chr=>500,164.chr=>500,165.chr=>500,166.chr=>220,167.chr=>500,168.chr=>333,169.chr=>747,170.chr=>266,171.chr=>500,172.chr=>606,173.chr=>333,174.chr=>747,175.chr=>333, + 176.chr=>400,177.chr=>570,178.chr=>300,179.chr=>300,180.chr=>333,181.chr=>576,182.chr=>500,183.chr=>250,184.chr=>333,185.chr=>300,186.chr=>300,187.chr=>500,188.chr=>750,189.chr=>750,190.chr=>750,191.chr=>500,192.chr=>667,193.chr=>667,194.chr=>667,195.chr=>667,196.chr=>667,197.chr=>667, + 198.chr=>944,199.chr=>667,200.chr=>667,201.chr=>667,202.chr=>667,203.chr=>667,204.chr=>389,205.chr=>389,206.chr=>389,207.chr=>389,208.chr=>722,209.chr=>722,210.chr=>722,211.chr=>722,212.chr=>722,213.chr=>722,214.chr=>722,215.chr=>570,216.chr=>722,217.chr=>722,218.chr=>722,219.chr=>722, + 220.chr=>722,221.chr=>611,222.chr=>611,223.chr=>500,224.chr=>500,225.chr=>500,226.chr=>500,227.chr=>500,228.chr=>500,229.chr=>500,230.chr=>722,231.chr=>444,232.chr=>444,233.chr=>444,234.chr=>444,235.chr=>444,236.chr=>278,237.chr=>278,238.chr=>278,239.chr=>278,240.chr=>500,241.chr=>556, + 242.chr=>500,243.chr=>500,244.chr=>500,245.chr=>500,246.chr=>500,247.chr=>570,248.chr=>500,249.chr=>556,250.chr=>556,251.chr=>556,252.chr=>556,253.chr=>444,254.chr=>500,255.chr=>444); +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/timesi.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/timesi.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,15 @@ +TCPDFFontDescriptor.define('timesi') do |font| + font[:cw]={ + 0.chr=>250,1.chr=>250,2.chr=>250,3.chr=>250,4.chr=>250,5.chr=>250,6.chr=>250,7.chr=>250,8.chr=>250,9.chr=>250,10.chr=>250,11.chr=>250,12.chr=>250,13.chr=>250,14.chr=>250,15.chr=>250,16.chr=>250,17.chr=>250,18.chr=>250,19.chr=>250,20.chr=>250,21.chr=>250, + 22.chr=>250,23.chr=>250,24.chr=>250,25.chr=>250,26.chr=>250,27.chr=>250,28.chr=>250,29.chr=>250,30.chr=>250,31.chr=>250,' '=>250,'!'=>333,'"'=>420,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>214,'('=>333,')'=>333,'*'=>500,'+'=>675, + ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>675,'='=>675,'>'=>675,'?'=>500,'@'=>920,'A'=>611, + 'B'=>611,'C'=>667,'D'=>722,'E'=>611,'F'=>611,'G'=>722,'H'=>722,'I'=>333,'J'=>444,'K'=>667,'L'=>556,'M'=>833,'N'=>667,'O'=>722,'P'=>611,'Q'=>722,'R'=>611,'S'=>500,'T'=>556,'U'=>722,'V'=>611,'W'=>833, + 'X'=>611,'Y'=>556,'Z'=>556,'['=>389,'\\'=>278,']'=>389,'^'=>422,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>278,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>444,'l'=>278,'m'=>722, + 'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>500,'v'=>444,'w'=>667,'x'=>444,'y'=>444,'z'=>389,'{'=>400,'|'=>275,'}'=>400,'~'=>541,127.chr=>350,128.chr=>500,129.chr=>350,130.chr=>333,131.chr=>500, + 132.chr=>556,133.chr=>889,134.chr=>500,135.chr=>500,136.chr=>333,137.chr=>1000,138.chr=>500,139.chr=>333,140.chr=>944,141.chr=>350,142.chr=>556,143.chr=>350,144.chr=>350,145.chr=>333,146.chr=>333,147.chr=>556,148.chr=>556,149.chr=>350,150.chr=>500,151.chr=>889,152.chr=>333,153.chr=>980, + 154.chr=>389,155.chr=>333,156.chr=>667,157.chr=>350,158.chr=>389,159.chr=>556,160.chr=>250,161.chr=>389,162.chr=>500,163.chr=>500,164.chr=>500,165.chr=>500,166.chr=>275,167.chr=>500,168.chr=>333,169.chr=>760,170.chr=>276,171.chr=>500,172.chr=>675,173.chr=>333,174.chr=>760,175.chr=>333, + 176.chr=>400,177.chr=>675,178.chr=>300,179.chr=>300,180.chr=>333,181.chr=>500,182.chr=>523,183.chr=>250,184.chr=>333,185.chr=>300,186.chr=>310,187.chr=>500,188.chr=>750,189.chr=>750,190.chr=>750,191.chr=>500,192.chr=>611,193.chr=>611,194.chr=>611,195.chr=>611,196.chr=>611,197.chr=>611, + 198.chr=>889,199.chr=>667,200.chr=>611,201.chr=>611,202.chr=>611,203.chr=>611,204.chr=>333,205.chr=>333,206.chr=>333,207.chr=>333,208.chr=>722,209.chr=>667,210.chr=>722,211.chr=>722,212.chr=>722,213.chr=>722,214.chr=>722,215.chr=>675,216.chr=>722,217.chr=>722,218.chr=>722,219.chr=>722, + 220.chr=>722,221.chr=>556,222.chr=>611,223.chr=>500,224.chr=>500,225.chr=>500,226.chr=>500,227.chr=>500,228.chr=>500,229.chr=>500,230.chr=>667,231.chr=>444,232.chr=>444,233.chr=>444,234.chr=>444,235.chr=>444,236.chr=>278,237.chr=>278,238.chr=>278,239.chr=>278,240.chr=>500,241.chr=>500, + 242.chr=>500,243.chr=>500,244.chr=>500,245.chr=>500,246.chr=>500,247.chr=>675,248.chr=>500,249.chr=>500,250.chr=>500,251.chr=>500,252.chr=>500,253.chr=>444,254.chr=>500,255.chr=>444); +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/ttf-bitstream-vera-1.10/COPYRIGHT.TXT --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/ttf-bitstream-vera-1.10/COPYRIGHT.TXT Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,124 @@ +Bitstream Vera Fonts Copyright + +The fonts have a generous copyright, allowing derivative works (as +long as "Bitstream" or "Vera" are not in the names), and full +redistribution (so long as they are not#sold# by themselves). They +can be be bundled, redistributed and sold with any software. + +The fonts are distributed under the following copyright: + +Copyright +========= + +Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream +Vera is a trademark of Bitstream, Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the fonts accompanying this license ("Fonts") and associated +documentation files (the "Font Software"), to reproduce and distribute +the Font Software, including without limitation the rights to use, +copy, merge, publish, distribute, and/or sell copies of the Font +Software, and to permit persons to whom the Font Software is furnished +to do so, subject to the following conditions: + +The above copyright and trademark notices and this permission notice +shall be included in all copies of one or more of the Font Software +typefaces. + +The Font Software may be modified, altered, or added to, and in +particular the designs of glyphs or characters in the Fonts may be +modified and additional glyphs or characters may be added to the +Fonts, only if the fonts are renamed to names not containing either +the words "Bitstream" or the word "Vera". + +This License becomes null and void to the extent applicable to Fonts +or Font Software that has been modified and is distributed under the +"Bitstream Vera" names. + +The Font Software may be sold as part of a larger software package but +no copy of one or more of the Font Software typefaces may be sold by +itself. + +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL +BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, +OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT +SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. + +Except as contained in this notice, the names of Gnome, the Gnome +Foundation, and Bitstream Inc., shall not be used in advertising or +otherwise to promote the sale, use or other dealings in this Font +Software without prior written authorization from the Gnome Foundation +or Bitstream Inc., respectively. For further information, contact: +fonts at gnome dot org. + +Copyright FAQ +============= + + 1. I don't understand the resale restriction... What gives? + + Bitstream is giving away these fonts, but wishes to ensure its + competitors can't just drop the fonts as is into a font sale system + and sell them as is. It seems fair that if Bitstream can't make money + from the Bitstream Vera fonts, their competitors should not be able to + do so either. You can sell the fonts as part of any software package, + however. + + 2. I want to package these fonts separately for distribution and + sale as part of a larger software package or system. Can I do so? + + Yes. A RPM or Debian package is a "larger software package" to begin + with, and you aren't selling them independently by themselves. + See 1. above. + + 3. Are derivative works allowed? + Yes! + + 4. Can I change or add to the font(s)? + Yes, but you must change the name(s) of the font(s). + + 5. Under what terms are derivative works allowed? + + You must change the name(s) of the fonts. This is to ensure the + quality of the fonts, both to protect Bitstream and Gnome. We want to + ensure that if an application has opened a font specifically of these + names, it gets what it expects (though of course, using fontconfig, + substitutions could still could have occurred during font + opening). You must include the Bitstream copyright. Additional + copyrights can be added, as per copyright law. Happy Font Hacking! + + 6. If I have improvements for Bitstream Vera, is it possible they might get + adopted in future versions? + + Yes. The contract between the Gnome Foundation and Bitstream has + provisions for working with Bitstream to ensure quality additions to + the Bitstream Vera font family. Please contact us if you have such + additions. Note, that in general, we will want such additions for the + entire family, not just a single font, and that you'll have to keep + both Gnome and Jim Lyles, Vera's designer, happy! To make sense to add + glyphs to the font, they must be stylistically in keeping with Vera's + design. Vera cannot become a "ransom note" font. Jim Lyles will be + providing a document describing the design elements used in Vera, as a + guide and aid for people interested in contributing to Vera. + + 7. I want to sell a software package that uses these fonts: Can I do so? + + Sure. Bundle the fonts with your software and sell your software + with the fonts. That is the intent of the copyright. + + 8. If applications have built the names "Bitstream Vera" into them, + can I override this somehow to use fonts of my choosing? + + This depends on exact details of the software. Most open source + systems and software (e.g., Gnome, KDE, etc.) are now converting to + use fontconfig (see www.fontconfig.org) to handle font configuration, + selection and substitution; it has provisions for overriding font + names and subsituting alternatives. An example is provided by the + supplied local.conf file, which chooses the family Bitstream Vera for + "sans", "serif" and "monospace". Other software (e.g., the XFree86 + core server) has other mechanisms for font substitution. + diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/ttf-bitstream-vera-1.10/README.TXT --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/ttf-bitstream-vera-1.10/README.TXT Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,11 @@ +Contained herin is the Bitstream Vera font family. + +The Copyright information is found in the COPYRIGHT.TXT file (along +with being incoporated into the fonts themselves). + +The releases notes are found in the file "RELEASENOTES.TXT". + +We hope you enjoy Vera! + + Bitstream, Inc. + The Gnome Project diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/ttf-bitstream-vera-1.10/RELEASENOTES.TXT --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/ttf-bitstream-vera-1.10/RELEASENOTES.TXT Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,162 @@ +Bitstream Vera Fonts - April 16, 2003 +===================================== + +The version number of these fonts is 1.10 to distinguish them from the +beta test fonts. + +Note that the Vera copyright is incorporated in the fonts themselves. +The License field in the fonts contains the copyright license as it +appears below. The TrueType copyright field is not large enough to +contain the full license, so the license is incorporated (as you might +think if you thought about it) into the license field, which +unfortunately can be obscure to find. (In pfaedit, see: Element->Font +Info->TTFNames->License). + +Our apologies for it taking longer to complete the fonts than planned. +Beta testers requested a tighter line spacing (less leading) and Jim +Lyles redesigned Vera's accents to bring its line spacing to more +typical of other fonts. This took additional time and effort. Our +thanks to Jim for this effort above and beyond the call of duty. + +There are four monospace and sans faces (normal, oblique, bold, bold +oblique) and two serif faces (normal and bold). Fontconfig/Xft2 (see +www.fontconfig.org) can artificially oblique the serif faces for you: +this loses hinting and distorts the faces slightly, but is visibly +different than normal and bold, and reasonably pleasing. + +On systems with fontconfig 2.0 or 2.1 installed, making your sans, +serif and monospace fonts default to these fonts is very easy. Just +drop the file local.conf into your /etc/fonts directory. This will +make the Bitstream fonts your default fonts for all applications using +fontconfig (if sans, serif, or monospace names are used, as they often +are as default values in many desktops). The XML in local.conf may +need modification to enable subpixel decimation, if appropriate, +however, the commented out phrase does so for XFree86 4.3, in the case +that the server does not have sufficient information to identify the +use of a flat panel. Fontconfig 2.2 adds Vera to the list of font +families and will, by default use it as the default sans, serif and +monospace fonts. + +During the testing of the final Vera fonts, we learned that screen +fonts in general are only typically hinted to work correctly at +integer pixel sizes. Vera is coded internally for integer sizes only. +We need to investigate further to see if there are commonly used fonts +that are hinted to be rounded but are not rounded to integer sizes due +to oversights in their coding. + +Most fonts work best at 8 pixels and below if anti-aliased only, as +the amount of work required to hint well at smaller and smaller sizes +becomes astronomical. GASP tables are typically used to control +whether hinting is used or not, but Freetype/Xft does not currently +support GASP tables (which are present in Vera). + +To mitigate this problem, both for Vera and other fonts, there will be +(very shortly) a new fontconfig 2.2 release that will, by default not +apply hints if the size is below 8 pixels. if you should have a font +that in fact has been hinted more agressively, you can use fontconfig +to note this exception. We believe this should improve many hinted +fonts in addition to Vera, though implemeting GASP support is likely +the right long term solution. + +Font rendering in Gnome or KDE is the combination of algorithms in +Xft2 and Freetype, along with hinting in the fonts themselves. It is +vital to have sufficient information to disentangle problems that you +may observe. + +Note that having your font rendering system set up correctly is vital +to proper judgement of problems of the fonts: + + # Freetype may or may not be configured to in ways that may + implement execution of possibly patented (in some parts of the world) + TrueType hinting algorithms, particularly at small sizes. Best + results are obtained while using these algorithms. + + # The freetype autohinter (used when the possibly patented + algorithms are not used) continues to improve with each release. If + you are using the autohinter, please ensure you are using an up to + date version of freetype before reporting problems. + + # Please identify what version of freetype you are using in any + bug reports, and how your freetype is configured. + + # Make sure you are not using the freetype version included in + XFree86 4.3, as it has bugs that significantly degrade most fonts, + including Vera. if you build XFree86 4.3 from source yourself, you may + have installed this broken version without intending it (as I + did). Vera was verified with the recently released Freetype 2.1.4. On + many systems, 'ldd" can be used to see which freetype shared library + is actually being used. + + # Xft/X Render does not (yet) implement gamma correction. This + causes significant problems rendering white text on a black background + (causing partial pixels to be insufficiently shaded) if the gamma of + your monitor has not been compensated for, and minor problems with + black text on a while background. The program "xgamma" can be used to + set a gamma correction value in the X server's color pallette. Most + monitors have a gamma near 2. + + # Note that the Vera family uses minimal delta hinting. Your + results on other systems when not used anti-aliased may not be + entirely satisfying. We are primarily interested in reports of + problems on open source systems implementing Xft2/fontconfig/freetype + (which implements antialiasing and hinting adjustements, and + sophisticated subpixel decimation on flatpanels). Also, the + algorithms used by Xft2 adjust the hints to integer widths and the + results are crisper on open source systems than on Windows or + MacIntosh. + + # Your fontconfig may (probably does) predate the release of + fontconfig 2.2, and you may see artifacts not present when the font is + used at very small sizes with hinting enabled. "vc-list -V" can be + used to see what version you have installed. + +We believe and hope that these fonts will resolve the problems +reported during beta test. The largest change is the reduction of +leading (interline spacing), which had annoyed a number of people, and +reduced Vera's utility for some applcations. The Vera monospace font +should also now make '0' and 'O' and '1' and 'l' more clearly +distinguishable. + +The version of these fonts is version 1.10. Fontconfig should be +choosing the new version of the fonts if both the released fonts and +beta test fonts are installed (though please discard them: they have +names of form tt20[1-12]gn.ttf). Note that older versions of +fontconfig sometimes did not rebuild their cache correctly when new +fonts are installed: please upgrade to fontconfig 2.2. "fc-cache -f" +can be used to force rebuilding fontconfig's cache files. + +If you note problems, please send them to fonts at gnome dot org, with +exactly which face and size and unicode point you observe the problem +at. The xfd utility from XFree86 CVS may be useful for this (e.g. "xfd +-fa sans"). A possibly more useful program to examine fonts at a +variety of sizes is the "waterfall" program found in Keith Packard's +CVS. + + $ cvs -d :pserver:anoncvs@keithp.com:/local/src/CVS login + Logging in to :pserver:anoncvs@keithp.com:2401/local/src/CVS + CVS password: + $ cvs -d :pserver:anoncvs@keithp.com:/local/src/CVS co waterfall + $ cd waterfall + $ xmkmf -a + $ make + # make install + # make install.man + +Again, please make sure you are running an up-to-date freetype, and +that you are only examining integer sizes. + +Reporting Problems +================== + +Please send problem reports to fonts at gnome org, with the following +information: + + 1. Version of Freetype, Xft2 and fontconfig + 2. Whether TT hinting is being used, or the autohinter + 3. Application being used + 4. Character/Unicode code point that has problems (if applicable) + 5. Version of which operating system + 6. Please include a screenshot, when possible. + +Please check the fonts list archives before reporting problems to cut +down on duplication. diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/ttf-bitstream-vera-1.10/local.conf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/ttf-bitstream-vera-1.10/local.conf Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,32 @@ + + + + + + + serif + + Bitstream Vera Serif + + + + sans-serif + + Bitstream Vera Sans + + + + monospace + + Bitstream Vera Sans Mono + + + diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/ttf2ufm/README.TXT --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/ttf2ufm/README.TXT Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,30 @@ +To embed TrueType fonts (.TTF) files, you need to extract the font metrics and +build the required tables using the provided utility (/fonts/ttf2ufm). + +TTF2UFM is a modified version of Mark Heath's TTF 2 PT1 converter +(http://ttf2pt1.sourceforge.net/) by Steven Wittens +(http://www.acko.net/blog/ufpdf). ttf2ufm, is included in /ttf2ufm-src. +The /fonts/ttf2ufm folder contains a compiled Windows binary. +TTF 2 UFM is identical to TTF 2 PT1 except that it also generates a .ufm file +for usage with makefontuni.php or makefontuni.rb. + + +Setting up a Truetype font for usage with UFPDF: + 1) Generate the font's .ufm metrics file by processing it with the provided + ttf2ufm program (modified ttf2pt1). For example: + $ ttf2ufm -a -F myfont.ttf + + 2) Run makefontuni_ruby.php with the .ttf and .ufm filenames as argument: + $ php -q makefontuni_ruby.php myfont.ttf myfont.ufm + + 3) Copy the resulting .rb, .z and .ctg.z file to the TCPDF font directory. + + 4) Rename php font files variations for bold and italic using the following schema: + [basic-font-name]b.rb for bold variation + [basic-font-name]i.rb for oblique variation + [basic-font-name]bi.rb for bold oblique variation + + 5) Rename the name of the font in the first line of each .rb file: + TCPDFFontDescriptor.define('dtlargotitalic') do |font| + becomes: + TCPDFFontDescriptor.define('dtlargoti') do |font| diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/ttf2ufm/makefontuni_ruby.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/ttf2ufm/makefontuni_ruby.php Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,313 @@ += 0 && $cc < 0xFFFF && $glyph) { + $cidtogidmap{$cc*2} = chr($glyph >> 8); + $cidtogidmap{$cc*2 + 1} = chr($glyph & 0xFF); + } + } + if($gn=='.notdef' && !isset($fm['MissingWidth'])) + $fm['MissingWidth']=$w; + } + elseif($code=='FontName') + $fm['FontName']=$param; + elseif($code=='Weight') + $fm['Weight']=$param; + elseif($code=='ItalicAngle') + $fm['ItalicAngle']=(double)$param; + elseif($code=='Ascender') + $fm['Ascender']=(int)$param; + elseif($code=='Descender') + $fm['Descender']=(int)$param; + elseif($code=='UnderlineThickness') + $fm['UnderlineThickness']=(int)$param; + elseif($code=='UnderlinePosition') + $fm['UnderlinePosition']=(int)$param; + elseif($code=='IsFixedPitch') + $fm['IsFixedPitch']=($param=='true'); + elseif($code=='FontBBox') + $fm['FontBBox']=array($e[1],$e[2],$e[3],$e[4]); + elseif($code=='CapHeight') + $fm['CapHeight']=(int)$param; + elseif($code=='StdVW') + $fm['StdVW']=(int)$param; + } + if(!isset($fm['MissingWidth'])) + $fm['MissingWidth']=600; + + if(!isset($fm['FontName'])) + die('FontName not found'); + + $fm['Widths']=$widths; + + return $fm; +} + +function MakeFontDescriptor($fm) +{ + //Ascent + $asc=(isset($fm['Ascender']) ? $fm['Ascender'] : 1000); + $fd="{'Ascent'=>".$asc; + //Descent + $desc=(isset($fm['Descender']) ? $fm['Descender'] : -200); + $fd.=",'Descent'=>".$desc; + //CapHeight + if(isset($fm['CapHeight'])) + $ch=$fm['CapHeight']; + elseif(isset($fm['CapXHeight'])) + $ch=$fm['CapXHeight']; + else + $ch=$asc; + $fd.=",'CapHeight'=>".$ch; + //Flags + $flags=0; + if(isset($fm['IsFixedPitch']) and $fm['IsFixedPitch']) + $flags+=1<<0; + $flags+=1<<5; + if(isset($fm['ItalicAngle']) and $fm['ItalicAngle']!=0) + $flags+=1<<6; + $fd.=",'Flags'=>".$flags; + //FontBBox + if(isset($fm['FontBBox'])) + $fbb=$fm['FontBBox']; + else + $fbb=array(0,$des-100,1000,$asc+100); + $fd.=",'FontBBox'=>'[".$fbb[0].' '.$fbb[1].' '.$fbb[2].' '.$fbb[3]."]'"; + //ItalicAngle + $ia=(isset($fm['ItalicAngle']) ? $fm['ItalicAngle'] : 0); + $fd.=",'ItalicAngle'=>".$ia; + //StemV + if(isset($fm['StdVW'])) + $stemv=$fm['StdVW']; + elseif(isset($fm['Weight']) and eregi('(bold|black)',$fm['Weight'])) + $stemv=120; + else + $stemv=70; + $fd.=",'StemV'=>".$stemv; + //MissingWidth + if(isset($fm['MissingWidth'])) + $fd.=",'MissingWidth'=>".$fm['MissingWidth']; + $fd.='}'; + return $fd; +} + +function MakeWidthArray($fm) +{ + //Make character width array + $s="{"; + $cw=$fm['Widths']; + $els=array(); + $c=0; + foreach ($cw as $i => $w) + { + $els[] = ((($c++)%16==0)?"\n\t":'').$i.'=>'.$w; + } + $s .= implode(', ', $els); + $s.='}'; + return $s; +} + +function SaveToFile($file,$s,$mode='t') +{ + $f=fopen($file,'w'.$mode); + if(!$f) + die('Can\'t write to file '.$file); + fwrite($f,$s,strlen($s)); + fclose($f); +} + +function ReadShort($f) +{ + $a=unpack('n1n',fread($f,2)); + return $a['n']; +} + +function ReadLong($f) +{ + $a=unpack('N1N',fread($f,4)); + return $a['N']; +} + +function CheckTTF($file) +{ + //Check if font license allows embedding + $f=fopen($file,'rb'); + if(!$f) + die('Error: Can\'t open '.$file); + //Extract number of tables + fseek($f,4,SEEK_CUR); + $nb=ReadShort($f); + fseek($f,6,SEEK_CUR); + //Seek OS/2 table + $found=false; + for($i=0;$i<$nb;$i++) + { + if(fread($f,4)=='OS/2') + { + $found=true; + break; + } + fseek($f,12,SEEK_CUR); + } + if(!$found) + { + fclose($f); + return; + } + fseek($f,4,SEEK_CUR); + $offset=ReadLong($f); + fseek($f,$offset,SEEK_SET); + //Extract fsType flags + fseek($f,8,SEEK_CUR); + $fsType=ReadShort($f); + $rl=($fsType & 0x02)!=0; + $pp=($fsType & 0x04)!=0; + $e=($fsType & 0x08)!=0; + fclose($f); + if($rl and !$pp and !$e) + echo 'Warning: font license does not allow embedding'; +} + +/******************************************************************************* +* $fontfile: path to TTF file (or empty string if not to be embedded) * +* $ufmfile: path to UFM file * +*******************************************************************************/ +function MakeFont($fontfile,$ufmfile) +{ + //Generate a font definition file + set_magic_quotes_runtime(0); + if(!file_exists($ufmfile)) + die('Error: UFM file not found: '.$ufmfile); + $cidtogidmap = ''; + $fm=ReadUFM($ufmfile, $cidtogidmap); + $fd=MakeFontDescriptor($fm); + //Find font type + if($fontfile) + { + $ext=strtolower(substr($fontfile,-3)); + if($ext=='ttf') + $type='TrueTypeUnicode'; + else + die('Error: not a truetype font: '.$ext); + } + else + { + if($type!='TrueTypeUnicode') + die('Error: incorrect font type: '.$type); + } + //Start generation + $basename=strtolower(substr(basename($ufmfile),0,-4)); + $s='TCPDFFontDescriptor.define(\''.$basename."') do |font|\n"; + $s.=" font[:type]='".$type."'\n"; + $s.=" font[:name]='".$fm['FontName']."'\n"; + $s.=" font[:desc]=".$fd."\n"; + if(!isset($fm['UnderlinePosition'])) + $fm['UnderlinePosition']=-100; + if(!isset($fm['UnderlineThickness'])) + $fm['UnderlineThickness']=50; + $s.=" font[:up]=".$fm['UnderlinePosition']."\n"; + $s.=" font[:ut]=".$fm['UnderlineThickness']."\n"; + $s.=" font[:cw]=".MakeWidthArray($fm)."\n"; + $s.=" font[:enc]=''\n"; + $s.=" font[:diff]=''\n"; + if($fontfile) + { + //Embedded font + if(!file_exists($fontfile)) + die('Error: font file not found: '.$fontfile); + CheckTTF($fontfile); + $f=fopen($fontfile,'rb'); + if(!$f) + die('Error: Can\'t open '.$fontfile); + $file=fread($f,filesize($fontfile)); + fclose($f); + if(function_exists('gzcompress')) + { + $cmp=$basename.'.z'; + SaveToFile($cmp,gzcompress($file),'b'); + $s.=' font[:file]=\''.$cmp."'\n"; + echo 'Font file compressed ('.$cmp.')
    '; + + $cmp=$basename.'.ctg.z'; + SaveToFile($cmp,gzcompress($cidtogidmap),'b'); + echo 'CIDToGIDMap created and compressed ('.$cmp.')
    '; + $s.=' font[:ctg]=\''.$cmp."'\n"; + } + else + { + $s.='$file=\''.basename($fontfile)."'\n"; + echo 'Notice: font file could not be compressed (gzcompress not available)
    '; + + $cmp=$basename.'.ctg'; + $f = fopen($cmp, 'wb'); + fwrite($f, $cidtogidmap); + fclose($f); + echo 'CIDToGIDMap created ('.$cmp.')
    '; + $s.=' font[:ctg]=\''.$cmp."'\n"; + } + if($type=='Type1') + { + $s.=' font[:size1]='.$size1."\n"; + $s.=' font[:size2]='.$size2."\n"; + } + else + $s.=' font[:originalsize]='.filesize($fontfile)."\n"; + } + else + { + //Not embedded font + $s.=' font[:file]='."''\n"; + } + $s.="end\n"; + SaveToFile($basename.'.rb',$s); + echo 'Font definition file generated ('.$basename.'.rb'.')
    '; +} + +$arg = $GLOBALS['argv']; +if (count($arg) >= 3) { + ob_start(); + array_shift($arg); + MakeFont($arg[0], $arg[1]); + $t = ob_get_clean(); + print preg_replace('!!i', "\n", $t); +} +else { + print "Usage: makefontuni_ruby.php \n"; +} +?> \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/ttf2ufm/ttf2ufm Binary file vendor/plugins/rfpdf/lib/fonts/ttf2ufm/ttf2ufm has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/ttf2ufm/ttf2ufm.exe Binary file vendor/plugins/rfpdf/lib/fonts/ttf2ufm/ttf2ufm.exe has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/vera.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/vera.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/vera.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/vera.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,30 @@ +TCPDFFontDescriptor.define('vera') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='BitstreamVeraSans-Roman'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>32,'FontBBox'=>'[-183 -236 1287 928]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600} + font[:up]=-104; + font[:ut]=70; + font[:cw]={ + 270=>600, 32=>318, 33=>401, 34=>460, 35=>838, 36=>636, 37=>950, 38=>780, 39=>275, 40=>390, 41=>390, 42=>500, 43=>838, 44=>318, 45=>361, 46=>318, + 47=>337, 48=>636, 49=>636, 50=>636, 51=>636, 52=>636, 53=>636, 54=>636, 55=>636, 56=>636, 57=>636, 58=>337, 59=>337, 60=>838, 61=>838, 62=>838, + 63=>531, 64=>1000, 65=>684, 66=>686, 67=>698, 68=>770, 69=>632, 70=>575, 71=>775, 72=>752, 73=>295, 74=>295, 75=>656, 76=>557, 77=>863, 78=>748, + 79=>787, 80=>603, 81=>787, 82=>695, 83=>635, 84=>611, 85=>732, 86=>684, 87=>989, 88=>685, 89=>611, 90=>685, 91=>390, 92=>337, 93=>390, 94=>838, + 95=>500, 96=>500, 97=>613, 98=>635, 99=>550, 100=>635, 101=>615, 102=>352, 103=>635, 104=>634, 105=>278, 106=>278, 107=>579, 108=>278, 109=>974, 110=>634, + 111=>612, 112=>635, 113=>635, 114=>411, 115=>521, 116=>392, 117=>634, 118=>592, 119=>818, 120=>592, 121=>592, 122=>525, 123=>636, 124=>337, 125=>636, 126=>838, + 8364=>636, 8218=>318, 402=>636, 8222=>518, 8230=>1000, 8224=>500, 8225=>500, 710=>500, 8240=>1342, 352=>635, 8249=>400, 338=>1070, 381=>685, 8216=>318, 8217=>318, 8220=>518, + 8221=>518, 8226=>590, 8211=>500, 8212=>1000, 732=>500, 8482=>1000, 353=>521, 8250=>400, 339=>1023, 382=>525, 376=>611, 160=>636, 161=>401, 162=>636, 163=>636, 164=>636, + 165=>636, 166=>337, 167=>500, 168=>500, 169=>1000, 170=>471, 171=>612, 172=>838, 173=>361, 174=>1000, 175=>500, 176=>500, 177=>838, 178=>401, 179=>401, 180=>500, + 181=>636, 182=>636, 183=>318, 184=>500, 185=>401, 186=>471, 187=>612, 188=>969, 189=>969, 190=>969, 191=>531, 192=>684, 193=>684, 194=>684, 195=>684, 196=>684, + 197=>684, 198=>974, 199=>698, 200=>632, 201=>632, 202=>632, 203=>632, 204=>295, 205=>295, 206=>295, 207=>295, 208=>775, 209=>748, 210=>787, 211=>787, 212=>787, + 213=>787, 214=>787, 215=>838, 216=>787, 217=>732, 218=>732, 219=>732, 220=>732, 221=>611, 222=>605, 223=>630, 224=>613, 225=>613, 226=>613, 227=>613, 228=>613, + 229=>613, 230=>982, 231=>550, 232=>615, 233=>615, 234=>615, 235=>615, 236=>278, 237=>278, 238=>278, 239=>278, 240=>612, 241=>634, 242=>612, 243=>612, 244=>612, + 245=>612, 246=>612, 247=>838, 248=>612, 249=>634, 250=>634, 251=>634, 252=>634, 253=>592, 254=>635, 255=>592, 8800=>838, 8734=>833, 8804=>838, 8805=>838, 8706=>517, + 8721=>674, 8719=>757, 960=>589, 8747=>521, 937=>764, 8730=>637, 8776=>838, 8710=>669, 9674=>494, 8725=>167, 64257=>630, 64258=>630, 305=>278, 728=>500, 729=>500, 730=>500, + 733=>500, 731=>500, 711=>500, 321=>562, 322=>284, 8722=>838, 286=>775, 287=>635, 304=>295, 350=>635, 351=>521, 262=>698, 263=>550, 268=>698, 269=>550, 273=>635, + 8729=>318} + font[:enc]=''; + font[:diff]=''; + font[:file]='vera.z'; + font[:ctg]='vera.ctg.z'; + font[:originalsize]=65932; +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/vera.z Binary file vendor/plugins/rfpdf/lib/fonts/vera.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/verab.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/verab.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/verab.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/verab.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,30 @@ +TCPDFFontDescriptor.define('verab') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='BitstreamVeraSans-Bold'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>32,'FontBBox'=>'[-199 -236 1417 928]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600} + font[:up]=-111; + font[:ut]=126; + font[:cw]={ + 270=>600, 32=>348, 33=>456, 34=>521, 35=>838, 36=>696, 37=>1002, 38=>872, 39=>306, 40=>457, 41=>457, 42=>523, 43=>838, 44=>380, 45=>415, 46=>380, + 47=>365, 48=>696, 49=>696, 50=>696, 51=>696, 52=>696, 53=>696, 54=>696, 55=>696, 56=>696, 57=>696, 58=>400, 59=>400, 60=>838, 61=>838, 62=>838, + 63=>580, 64=>1000, 65=>774, 66=>762, 67=>734, 68=>830, 69=>683, 70=>683, 71=>821, 72=>837, 73=>372, 74=>372, 75=>775, 76=>637, 77=>995, 78=>837, + 79=>850, 80=>733, 81=>850, 82=>770, 83=>720, 84=>682, 85=>812, 86=>774, 87=>1103, 88=>771, 89=>724, 90=>725, 91=>457, 92=>365, 93=>457, 94=>838, + 95=>500, 96=>500, 97=>675, 98=>716, 99=>593, 100=>716, 101=>678, 102=>435, 103=>716, 104=>712, 105=>343, 106=>343, 107=>665, 108=>343, 109=>1042, 110=>712, + 111=>687, 112=>716, 113=>716, 114=>493, 115=>595, 116=>478, 117=>712, 118=>652, 119=>924, 120=>645, 121=>652, 122=>582, 123=>712, 124=>365, 125=>712, 126=>838, + 8364=>696, 8218=>380, 402=>696, 8222=>657, 8230=>1000, 8224=>500, 8225=>500, 710=>500, 8240=>1440, 352=>720, 8249=>412, 338=>1167, 381=>725, 8216=>380, 8217=>380, 8220=>657, + 8221=>657, 8226=>639, 8211=>500, 8212=>1000, 732=>500, 8482=>1000, 353=>595, 8250=>412, 339=>1094, 382=>582, 376=>724, 160=>696, 161=>456, 162=>696, 163=>696, 164=>636, + 165=>696, 166=>365, 167=>500, 168=>500, 169=>1000, 170=>564, 171=>646, 172=>838, 173=>415, 174=>1000, 175=>500, 176=>500, 177=>838, 178=>438, 179=>438, 180=>500, + 181=>736, 182=>636, 183=>380, 184=>500, 185=>438, 186=>564, 187=>646, 188=>1035, 189=>1035, 190=>1035, 191=>580, 192=>774, 193=>774, 194=>774, 195=>774, 196=>774, + 197=>774, 198=>1085, 199=>734, 200=>683, 201=>683, 202=>683, 203=>683, 204=>372, 205=>372, 206=>372, 207=>372, 208=>838, 209=>837, 210=>850, 211=>850, 212=>850, + 213=>850, 214=>850, 215=>838, 216=>850, 217=>812, 218=>812, 219=>812, 220=>812, 221=>724, 222=>738, 223=>719, 224=>675, 225=>675, 226=>675, 227=>675, 228=>675, + 229=>675, 230=>1048, 231=>593, 232=>678, 233=>678, 234=>678, 235=>678, 236=>343, 237=>343, 238=>343, 239=>343, 240=>687, 241=>712, 242=>687, 243=>687, 244=>687, + 245=>687, 246=>687, 247=>838, 248=>687, 249=>712, 250=>712, 251=>712, 252=>712, 253=>652, 254=>716, 255=>652, 8800=>838, 8734=>833, 8804=>838, 8805=>838, 8706=>544, + 8721=>718, 8719=>787, 960=>644, 8747=>610, 937=>769, 8730=>667, 8776=>838, 8710=>697, 9674=>494, 8725=>167, 64257=>741, 64258=>741, 305=>343, 728=>500, 729=>500, 730=>500, + 733=>500, 731=>500, 711=>500, 321=>642, 322=>371, 8722=>838, 286=>821, 287=>716, 304=>372, 350=>720, 351=>595, 262=>734, 263=>593, 268=>734, 269=>593, 273=>716, + 8729=>380} + font[:enc]=''; + font[:diff]=''; + font[:file]='verab.z'; + font[:ctg]='verab.ctg.z'; + font[:originalsize]=58716; +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/verab.z Binary file vendor/plugins/rfpdf/lib/fonts/verab.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/verabi.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/verabi.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/verabi.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/verabi.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,30 @@ +TCPDFFontDescriptor.define('verabi') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='BitstreamVeraSans-BoldOblique'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>96,'FontBBox'=>'[-278 -236 1401 928]','ItalicAngle'=>-11,'StemV'=>120,'MissingWidth'=>600} + font[:up]=-111; + font[:ut]=126; + font[:cw]={ + 270=>600, 32=>348, 33=>456, 34=>521, 35=>696, 36=>696, 37=>1002, 38=>872, 39=>306, 40=>457, 41=>457, 42=>523, 43=>838, 44=>380, 45=>415, 46=>380, + 47=>365, 48=>696, 49=>696, 50=>696, 51=>696, 52=>696, 53=>696, 54=>696, 55=>696, 56=>696, 57=>696, 58=>400, 59=>400, 60=>838, 61=>838, 62=>838, + 63=>580, 64=>1000, 65=>774, 66=>762, 67=>734, 68=>830, 69=>683, 70=>683, 71=>821, 72=>837, 73=>372, 74=>372, 75=>775, 76=>637, 77=>995, 78=>837, + 79=>850, 80=>733, 81=>850, 82=>770, 83=>720, 84=>682, 85=>812, 86=>774, 87=>1103, 88=>771, 89=>724, 90=>725, 91=>457, 92=>365, 93=>457, 94=>838, + 95=>500, 96=>500, 97=>675, 98=>716, 99=>593, 100=>716, 101=>678, 102=>435, 103=>716, 104=>712, 105=>343, 106=>343, 107=>665, 108=>343, 109=>1042, 110=>712, + 111=>687, 112=>716, 113=>716, 114=>493, 115=>595, 116=>478, 117=>712, 118=>652, 119=>924, 120=>645, 121=>652, 122=>582, 123=>712, 124=>365, 125=>712, 126=>838, + 8364=>696, 8218=>380, 402=>696, 8222=>644, 8230=>1000, 8224=>500, 8225=>500, 710=>500, 8240=>1454, 352=>720, 8249=>412, 338=>1167, 381=>725, 8216=>380, 8217=>380, 8220=>644, + 8221=>644, 8226=>639, 8211=>500, 8212=>1000, 732=>500, 8482=>1000, 353=>595, 8250=>412, 339=>1094, 382=>582, 376=>724, 160=>696, 161=>456, 162=>696, 163=>696, 164=>636, + 165=>696, 166=>365, 167=>500, 168=>500, 169=>1000, 170=>564, 171=>650, 172=>838, 173=>415, 174=>1000, 175=>500, 176=>500, 177=>838, 178=>438, 179=>438, 180=>500, + 181=>736, 182=>636, 183=>380, 184=>500, 185=>438, 186=>564, 187=>650, 188=>1065, 189=>1065, 190=>1065, 191=>580, 192=>774, 193=>774, 194=>774, 195=>774, 196=>774, + 197=>774, 198=>1085, 199=>734, 200=>683, 201=>683, 202=>683, 203=>683, 204=>372, 205=>372, 206=>372, 207=>372, 208=>845, 209=>837, 210=>850, 211=>850, 212=>850, + 213=>850, 214=>850, 215=>838, 216=>850, 217=>812, 218=>812, 219=>812, 220=>812, 221=>724, 222=>742, 223=>719, 224=>675, 225=>675, 226=>675, 227=>675, 228=>675, + 229=>675, 230=>1048, 231=>593, 232=>678, 233=>678, 234=>678, 235=>678, 236=>343, 237=>343, 238=>343, 239=>343, 240=>687, 241=>712, 242=>687, 243=>687, 244=>687, + 245=>687, 246=>687, 247=>838, 248=>687, 249=>712, 250=>712, 251=>712, 252=>712, 253=>652, 254=>716, 255=>652, 8800=>838, 8734=>833, 8804=>838, 8805=>838, 8706=>544, + 8721=>718, 8719=>787, 960=>644, 8747=>610, 937=>769, 8730=>667, 8776=>838, 8710=>697, 9674=>494, 8725=>167, 64257=>787, 64258=>787, 305=>343, 728=>500, 729=>500, 730=>500, + 733=>500, 731=>500, 711=>500, 321=>660, 322=>375, 8722=>838, 286=>821, 287=>716, 304=>372, 350=>720, 351=>595, 262=>734, 263=>593, 268=>734, 269=>593, 273=>716, + 8729=>380} + font[:enc]=''; + font[:diff]=''; + font[:file]='verabi.z'; + font[:ctg]='verabi.ctg.z'; + font[:originalsize]=63208; +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/verabi.z Binary file vendor/plugins/rfpdf/lib/fonts/verabi.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/verai.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/verai.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/verai.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/verai.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,30 @@ +TCPDFFontDescriptor.define('verai') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='BitstreamVeraSans-Oblique'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>96,'FontBBox'=>'[-262 -236 1259 928]','ItalicAngle'=>-11,'StemV'=>70,'MissingWidth'=>600} + font[:up]=-104; + font[:ut]=70; + font[:cw]={ + 270=>600, 32=>318, 33=>401, 34=>460, 35=>838, 36=>636, 37=>950, 38=>780, 39=>275, 40=>390, 41=>390, 42=>500, 43=>838, 44=>318, 45=>361, 46=>318, + 47=>337, 48=>636, 49=>636, 50=>636, 51=>636, 52=>636, 53=>636, 54=>636, 55=>636, 56=>636, 57=>636, 58=>337, 59=>337, 60=>838, 61=>838, 62=>838, + 63=>531, 64=>1000, 65=>684, 66=>686, 67=>698, 68=>770, 69=>632, 70=>575, 71=>775, 72=>752, 73=>295, 74=>295, 75=>656, 76=>557, 77=>863, 78=>748, + 79=>787, 80=>603, 81=>787, 82=>695, 83=>635, 84=>611, 85=>732, 86=>684, 87=>989, 88=>685, 89=>611, 90=>685, 91=>390, 92=>337, 93=>390, 94=>838, + 95=>500, 96=>500, 97=>613, 98=>635, 99=>550, 100=>635, 101=>615, 102=>352, 103=>635, 104=>634, 105=>278, 106=>278, 107=>579, 108=>278, 109=>974, 110=>634, + 111=>612, 112=>635, 113=>635, 114=>411, 115=>521, 116=>392, 117=>634, 118=>592, 119=>818, 120=>592, 121=>592, 122=>525, 123=>636, 124=>337, 125=>636, 126=>838, + 8364=>636, 8218=>318, 402=>636, 8222=>518, 8230=>1000, 8224=>500, 8225=>500, 710=>500, 8240=>1350, 352=>635, 8249=>400, 338=>1070, 381=>685, 8216=>318, 8217=>318, 8220=>518, + 8221=>518, 8226=>590, 8211=>500, 8212=>1000, 732=>500, 8482=>1000, 353=>521, 8250=>400, 339=>1028, 382=>525, 376=>611, 160=>636, 161=>401, 162=>636, 163=>636, 164=>636, + 165=>636, 166=>337, 167=>500, 168=>500, 169=>1000, 170=>471, 171=>617, 172=>838, 173=>361, 174=>1000, 175=>500, 176=>500, 177=>838, 178=>401, 179=>401, 180=>500, + 181=>636, 182=>636, 183=>318, 184=>500, 185=>401, 186=>471, 187=>617, 188=>969, 189=>969, 190=>969, 191=>531, 192=>684, 193=>684, 194=>684, 195=>684, 196=>684, + 197=>684, 198=>974, 199=>698, 200=>632, 201=>632, 202=>632, 203=>632, 204=>295, 205=>295, 206=>295, 207=>295, 208=>775, 209=>748, 210=>787, 211=>787, 212=>787, + 213=>787, 214=>787, 215=>838, 216=>787, 217=>732, 218=>732, 219=>732, 220=>732, 221=>611, 222=>608, 223=>630, 224=>613, 225=>613, 226=>613, 227=>613, 228=>613, + 229=>613, 230=>995, 231=>550, 232=>615, 233=>615, 234=>615, 235=>615, 236=>278, 237=>278, 238=>278, 239=>278, 240=>612, 241=>634, 242=>612, 243=>612, 244=>612, + 245=>612, 246=>612, 247=>838, 248=>612, 249=>634, 250=>634, 251=>634, 252=>634, 253=>592, 254=>635, 255=>592, 8800=>838, 8734=>833, 8804=>838, 8805=>838, 8706=>517, + 8721=>674, 8719=>757, 960=>589, 8747=>521, 937=>764, 8730=>637, 8776=>838, 8710=>669, 9674=>494, 8725=>167, 64257=>646, 64258=>646, 305=>278, 728=>500, 729=>500, 730=>500, + 733=>500, 731=>500, 711=>500, 321=>562, 322=>287, 8722=>838, 286=>775, 287=>635, 304=>295, 350=>635, 351=>521, 262=>698, 263=>550, 268=>698, 269=>550, 273=>635, + 8729=>318} + font[:enc]=''; + font[:diff]=''; + font[:file]='verai.z'; + font[:ctg]='verai.ctg.z'; + font[:originalsize]=63684; +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/verai.z Binary file vendor/plugins/rfpdf/lib/fonts/verai.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/veramo.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/veramo.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/veramo.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/veramo.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,30 @@ +TCPDFFontDescriptor.define('veramo') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='BitstreamVeraSansMono-Roman'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>33,'FontBBox'=>'[-5 -236 606 font[:928]]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>602} + font[:up]=-104; + font[:ut]=69; + font[:cw]={ + 270=>602, 32=>602, 33=>602, 34=>602, 35=>602, 36=>602, 37=>602, 38=>602, 39=>602, 40=>602, 41=>602, 42=>602, 43=>602, 44=>602, 45=>602, 46=>602, + 47=>602, 48=>602, 49=>602, 50=>602, 51=>602, 52=>602, 53=>602, 54=>602, 55=>602, 56=>602, 57=>602, 58=>602, 59=>602, 60=>602, 61=>602, 62=>602, + 63=>602, 64=>602, 65=>602, 66=>602, 67=>602, 68=>602, 69=>602, 70=>602, 71=>602, 72=>602, 73=>602, 74=>602, 75=>602, 76=>602, 77=>602, 78=>602, + 79=>602, 80=>602, 81=>602, 82=>602, 83=>602, 84=>602, 85=>602, 86=>602, 87=>602, 88=>602, 89=>602, 90=>602, 91=>602, 92=>602, 93=>602, 94=>602, + 95=>602, 96=>602, 97=>602, 98=>602, 99=>602, 100=>602, 101=>602, 102=>602, 103=>602, 104=>602, 105=>602, 106=>602, 107=>602, 108=>602, 109=>602, 110=>602, + 111=>602, 112=>602, 113=>602, 114=>602, 115=>602, 116=>602, 117=>602, 118=>602, 119=>602, 120=>602, 121=>602, 122=>602, 123=>602, 124=>602, 125=>602, 126=>602, + 8364=>602, 8218=>602, 402=>602, 8222=>602, 8230=>602, 8224=>602, 8225=>602, 710=>602, 8240=>602, 352=>602, 8249=>602, 338=>602, 381=>602, 8216=>602, 8217=>602, 8220=>602, + 8221=>602, 8226=>602, 8211=>602, 8212=>602, 732=>602, 8482=>602, 353=>602, 8250=>602, 339=>602, 382=>602, 376=>602, 160=>602, 161=>602, 162=>602, 163=>602, 164=>602, + 165=>602, 166=>602, 167=>602, 168=>602, 169=>602, 170=>602, 171=>602, 172=>602, 173=>602, 174=>602, 175=>602, 176=>602, 177=>602, 178=>602, 179=>602, 180=>602, + 181=>602, 182=>602, 183=>602, 184=>602, 185=>602, 186=>602, 187=>602, 188=>602, 189=>602, 190=>602, 191=>602, 192=>602, 193=>602, 194=>602, 195=>602, 196=>602, + 197=>602, 198=>602, 199=>602, 200=>602, 201=>602, 202=>602, 203=>602, 204=>602, 205=>602, 206=>602, 207=>602, 208=>602, 209=>602, 210=>602, 211=>602, 212=>602, + 213=>602, 214=>602, 215=>602, 216=>602, 217=>602, 218=>602, 219=>602, 220=>602, 221=>602, 222=>602, 223=>602, 224=>602, 225=>602, 226=>602, 227=>602, 228=>602, + 229=>602, 230=>602, 231=>602, 232=>602, 233=>602, 234=>602, 235=>602, 236=>602, 237=>602, 238=>602, 239=>602, 240=>602, 241=>602, 242=>602, 243=>602, 244=>602, + 245=>602, 246=>602, 247=>602, 248=>602, 249=>602, 250=>602, 251=>602, 252=>602, 253=>602, 254=>602, 255=>602, 8800=>602, 8734=>602, 8804=>602, 8805=>602, 8706=>602, + 8721=>602, 8719=>602, 960=>602, 8747=>602, 937=>602, 8730=>602, 8776=>602, 8710=>602, 9674=>602, 8725=>602, 64257=>602, 64258=>602, 305=>602, 728=>602, 729=>602, 730=>602, + 733=>602, 731=>602, 711=>602, 321=>602, 322=>602, 8722=>602, 286=>602, 287=>602, 304=>602, 350=>602, 351=>602, 262=>602, 263=>602, 268=>602, 269=>602, 273=>602, + 8729=>602} + font[:enc]=''; + font[:diff]=''; + font[:file]='veramo.z'; + font[:ctg]='veramo.ctg.z'; + font[:originalsize]=49224; +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/veramo.z Binary file vendor/plugins/rfpdf/lib/fonts/veramo.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/veramob.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/veramob.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/veramob.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/veramob.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,30 @@ +TCPDFFontDescriptor.define('veramob') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='BitstreamVeraSansMono-Bold'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>33,'FontBBox'=>'[-19 -236 606 928]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>602} + font[:up]=-108; + font[:ut]=120; + font[:cw]={ + 270=>602, 32=>602, 33=>602, 34=>602, 35=>602, 36=>602, 37=>602, 38=>602, 39=>602, 40=>602, 41=>602, 42=>602, 43=>602, 44=>602, 45=>602, 46=>602, + 47=>602, 48=>602, 49=>602, 50=>602, 51=>602, 52=>602, 53=>602, 54=>602, 55=>602, 56=>602, 57=>602, 58=>602, 59=>602, 60=>602, 61=>602, 62=>602, + 63=>602, 64=>602, 65=>602, 66=>602, 67=>602, 68=>602, 69=>602, 70=>602, 71=>602, 72=>602, 73=>602, 74=>602, 75=>602, 76=>602, 77=>602, 78=>602, + 79=>602, 80=>602, 81=>602, 82=>602, 83=>602, 84=>602, 85=>602, 86=>602, 87=>602, 88=>602, 89=>602, 90=>602, 91=>602, 92=>602, 93=>602, 94=>602, + 95=>602, 96=>602, 97=>602, 98=>602, 99=>602, 100=>602, 101=>602, 102=>602, 103=>602, 104=>602, 105=>602, 106=>602, 107=>602, 108=>602, 109=>602, 110=>602, + 111=>602, 112=>602, 113=>602, 114=>602, 115=>602, 116=>602, 117=>602, 118=>602, 119=>602, 120=>602, 121=>602, 122=>602, 123=>602, 124=>602, 125=>602, 126=>602, + 8364=>602, 8218=>602, 402=>602, 8222=>602, 8230=>602, 8224=>602, 8225=>602, 710=>602, 8240=>602, 352=>602, 8249=>602, 338=>602, 381=>602, 8216=>602, 8217=>602, 8220=>602, + 8221=>602, 8226=>602, 8211=>602, 8212=>602, 732=>602, 8482=>602, 353=>602, 8250=>602, 339=>602, 382=>602, 376=>602, 160=>602, 161=>602, 162=>602, 163=>602, 164=>602, + 165=>602, 166=>602, 167=>602, 168=>602, 169=>602, 170=>602, 171=>602, 172=>602, 173=>602, 174=>602, 175=>602, 176=>602, 177=>602, 178=>602, 179=>602, 180=>602, + 181=>602, 182=>602, 183=>602, 184=>602, 185=>602, 186=>602, 187=>602, 188=>602, 189=>602, 190=>602, 191=>602, 192=>602, 193=>602, 194=>602, 195=>602, 196=>602, + 197=>602, 198=>602, 199=>602, 200=>602, 201=>602, 202=>602, 203=>602, 204=>602, 205=>602, 206=>602, 207=>602, 208=>602, 209=>602, 210=>602, 211=>602, 212=>602, + 213=>602, 214=>602, 215=>602, 216=>602, 217=>602, 218=>602, 219=>602, 220=>602, 221=>602, 222=>602, 223=>602, 224=>602, 225=>602, 226=>602, 227=>602, 228=>602, + 229=>602, 230=>602, 231=>602, 232=>602, 233=>602, 234=>602, 235=>602, 236=>602, 237=>602, 238=>602, 239=>602, 240=>602, 241=>602, 242=>602, 243=>602, 244=>602, + 245=>602, 246=>602, 247=>602, 248=>602, 249=>602, 250=>602, 251=>602, 252=>602, 253=>602, 254=>602, 255=>602, 8800=>602, 8734=>602, 8804=>602, 8805=>602, 8706=>602, + 8721=>602, 8719=>602, 960=>602, 8747=>602, 937=>602, 8730=>602, 8776=>602, 8710=>602, 9674=>602, 8725=>602, 64257=>602, 64258=>602, 305=>602, 728=>602, 729=>602, 730=>602, + 733=>602, 731=>602, 711=>602, 321=>602, 322=>602, 8722=>602, 286=>602, 287=>602, 304=>602, 350=>602, 351=>602, 262=>602, 263=>602, 268=>602, 269=>602, 273=>602, + 8729=>602} + font[:enc]=''; + font[:diff]=''; + font[:file]='veramob.z'; + font[:ctg]='veramob.ctg.z'; + font[:originalsize]=49052; +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/veramob.z Binary file vendor/plugins/rfpdf/lib/fonts/veramob.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/veramobi.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/veramobi.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/veramobi.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/veramobi.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,30 @@ +TCPDFFontDescriptor.define('veramobi') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='BitstreamVeraSansMono-BoldOb'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>97,'FontBBox'=>'[-73 -236 681 928]','ItalicAngle'=>-11,'StemV'=>120,'MissingWidth'=>602} + font[:up]=-108; + font[:ut]=120; + font[:cw]={ + 270=>602, 32=>602, 33=>602, 34=>602, 35=>602, 36=>602, 37=>602, 38=>602, 39=>602, 40=>602, 41=>602, 42=>602, 43=>602, 44=>602, 45=>602, 46=>602, + 47=>602, 48=>602, 49=>602, 50=>602, 51=>602, 52=>602, 53=>602, 54=>602, 55=>602, 56=>602, 57=>602, 58=>602, 59=>602, 60=>602, 61=>602, 62=>602, + 63=>602, 64=>602, 65=>602, 66=>602, 67=>602, 68=>602, 69=>602, 70=>602, 71=>602, 72=>602, 73=>602, 74=>602, 75=>602, 76=>602, 77=>602, 78=>602, + 79=>602, 80=>602, 81=>602, 82=>602, 83=>602, 84=>602, 85=>602, 86=>602, 87=>602, 88=>602, 89=>602, 90=>602, 91=>602, 92=>602, 93=>602, 94=>602, + 95=>602, 96=>602, 97=>602, 98=>602, 99=>602, 100=>602, 101=>602, 102=>602, 103=>602, 104=>602, 105=>602, 106=>602, 107=>602, 108=>602, 109=>602, 110=>602, + 111=>602, 112=>602, 113=>602, 114=>602, 115=>602, 116=>602, 117=>602, 118=>602, 119=>602, 120=>602, 121=>602, 122=>602, 123=>602, 124=>602, 125=>602, 126=>602, + 8364=>602, 8218=>602, 402=>602, 8222=>602, 8230=>602, 8224=>602, 8225=>602, 710=>602, 8240=>602, 352=>602, 8249=>602, 338=>602, 381=>602, 8216=>602, 8217=>602, 8220=>602, + 8221=>602, 8226=>602, 8211=>602, 8212=>602, 732=>602, 8482=>602, 353=>602, 8250=>602, 339=>602, 382=>602, 376=>602, 160=>602, 161=>602, 162=>602, 163=>602, 164=>602, + 165=>602, 166=>602, 167=>602, 168=>602, 169=>602, 170=>602, 171=>602, 172=>602, 173=>602, 174=>602, 175=>602, 176=>602, 177=>602, 178=>602, 179=>602, 180=>602, + 181=>602, 182=>602, 183=>602, 184=>602, 185=>602, 186=>602, 187=>602, 188=>602, 189=>602, 190=>602, 191=>602, 192=>602, 193=>602, 194=>602, 195=>602, 196=>602, + 197=>602, 198=>602, 199=>602, 200=>602, 201=>602, 202=>602, 203=>602, 204=>602, 205=>602, 206=>602, 207=>602, 208=>602, 209=>602, 210=>602, 211=>602, 212=>602, + 213=>602, 214=>602, 215=>602, 216=>602, 217=>602, 218=>602, 219=>602, 220=>602, 221=>602, 222=>602, 223=>602, 224=>602, 225=>602, 226=>602, 227=>602, 228=>602, + 229=>602, 230=>602, 231=>602, 232=>602, 233=>602, 234=>602, 235=>602, 236=>602, 237=>602, 238=>602, 239=>602, 240=>602, 241=>602, 242=>602, 243=>602, 244=>602, + 245=>602, 246=>602, 247=>602, 248=>602, 249=>602, 250=>602, 251=>602, 252=>602, 253=>602, 254=>602, 255=>602, 8800=>602, 8734=>602, 8804=>602, 8805=>602, 8706=>602, + 8721=>602, 8719=>602, 960=>602, 8747=>602, 937=>602, 8730=>602, 8776=>602, 8710=>602, 9674=>602, 8725=>602, 64257=>602, 64258=>602, 305=>602, 728=>602, 729=>602, 730=>602, + 733=>602, 731=>602, 711=>602, 321=>602, 322=>602, 8722=>602, 286=>602, 287=>602, 304=>602, 350=>602, 351=>602, 262=>602, 263=>602, 268=>602, 269=>602, 273=>602, + 8729=>602} + font[:enc]=''; + font[:diff]=''; + font[:file]='veramobi.z'; + font[:ctg]='veramobi.ctg.z'; + font[:originalsize]=55032; +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/veramobi.z Binary file vendor/plugins/rfpdf/lib/fonts/veramobi.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/veramoi.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/veramoi.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/veramoi.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/veramoi.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,30 @@ +TCPDFFontDescriptor.define('veramoi') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='BitstreamVeraSansMono-Oblique'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>97,'FontBBox'=>'[-71 -236 691 928]','ItalicAngle'=>-11,'StemV'=>70,'MissingWidth'=>602} + font[:up]=-104; + font[:ut]=69; + font[:cw]={ + 270=>602, 32=>602, 33=>602, 34=>602, 35=>602, 36=>602, 37=>602, 38=>602, 39=>602, 40=>602, 41=>602, 42=>602, 43=>602, 44=>602, 45=>602, 46=>602, + 47=>602, 48=>602, 49=>602, 50=>602, 51=>602, 52=>602, 53=>602, 54=>602, 55=>602, 56=>602, 57=>602, 58=>602, 59=>602, 60=>602, 61=>602, 62=>602, + 63=>602, 64=>602, 65=>602, 66=>602, 67=>602, 68=>602, 69=>602, 70=>602, 71=>602, 72=>602, 73=>602, 74=>602, 75=>602, 76=>602, 77=>602, 78=>602, + 79=>602, 80=>602, 81=>602, 82=>602, 83=>602, 84=>602, 85=>602, 86=>602, 87=>602, 88=>602, 89=>602, 90=>602, 91=>602, 92=>602, 93=>602, 94=>602, + 95=>602, 96=>602, 97=>602, 98=>602, 99=>602, 100=>602, 101=>602, 102=>602, 103=>602, 104=>602, 105=>602, 106=>602, 107=>602, 108=>602, 109=>602, 110=>602, + 111=>602, 112=>602, 113=>602, 114=>602, 115=>602, 116=>602, 117=>602, 118=>602, 119=>602, 120=>602, 121=>602, 122=>602, 123=>602, 124=>602, 125=>602, 126=>602, + 8364=>602, 8218=>602, 402=>602, 8222=>602, 8230=>602, 8224=>602, 8225=>602, 710=>602, 8240=>602, 352=>602, 8249=>602, 338=>602, 381=>602, 8216=>602, 8217=>602, 8220=>602, + 8221=>602, 8226=>602, 8211=>602, 8212=>602, 732=>602, 8482=>602, 353=>602, 8250=>602, 339=>602, 382=>602, 376=>602, 160=>602, 161=>602, 162=>602, 163=>602, 164=>602, + 165=>602, 166=>602, 167=>602, 168=>602, 169=>602, 170=>602, 171=>602, 172=>602, 173=>602, 174=>602, 175=>602, 176=>602, 177=>602, 178=>602, 179=>602, 180=>602, + 181=>602, 182=>602, 183=>602, 184=>602, 185=>602, 186=>602, 187=>602, 188=>602, 189=>602, 190=>602, 191=>602, 192=>602, 193=>602, 194=>602, 195=>602, 196=>602, + 197=>602, 198=>602, 199=>602, 200=>602, 201=>602, 202=>602, 203=>602, 204=>602, 205=>602, 206=>602, 207=>602, 208=>602, 209=>602, 210=>602, 211=>602, 212=>602, + 213=>602, 214=>602, 215=>602, 216=>602, 217=>602, 218=>602, 219=>602, 220=>602, 221=>602, 222=>602, 223=>602, 224=>602, 225=>602, 226=>602, 227=>602, 228=>602, + 229=>602, 230=>602, 231=>602, 232=>602, 233=>602, 234=>602, 235=>602, 236=>602, 237=>602, 238=>602, 239=>602, 240=>602, 241=>602, 242=>602, 243=>602, 244=>602, + 245=>602, 246=>602, 247=>602, 248=>602, 249=>602, 250=>602, 251=>602, 252=>602, 253=>602, 254=>602, 255=>602, 8800=>602, 8734=>602, 8804=>602, 8805=>602, 8706=>602, + 8721=>602, 8719=>602, 960=>602, 8747=>602, 937=>602, 8730=>602, 8776=>602, 8710=>602, 9674=>602, 8725=>602, 64257=>602, 64258=>602, 305=>602, 728=>602, 729=>602, 730=>602, + 733=>602, 731=>602, 711=>602, 321=>602, 322=>602, 8722=>602, 286=>602, 287=>602, 304=>602, 350=>602, 351=>602, 262=>602, 263=>602, 268=>602, 269=>602, 273=>602, + 8729=>602} + font[:enc]=''; + font[:diff]=''; + font[:file]='veramoi.z'; + font[:ctg]='veramoi.ctg.z'; + font[:originalsize]=54508; +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/veramoi.z Binary file vendor/plugins/rfpdf/lib/fonts/veramoi.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/verase.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/verase.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/verase.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/verase.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,30 @@ +TCPDFFontDescriptor.define('verase') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='BitstreamVeraSerif-Roman'; + font[:desc]={'Ascent'=>928,'Descent'=>-236,'CapHeight'=>928,'Flags'=>32,'FontBBox'=>'[-183 -236 1287 928]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600} + font[:up]=-104; + font[:ut]=65; + font[:cw]={ + 270=>600, 32=>318, 33=>402, 34=>460, 35=>838, 36=>636, 37=>950, 38=>890, 39=>275, 40=>390, 41=>390, 42=>500, 43=>838, 44=>318, 45=>338, 46=>318, + 47=>337, 48=>636, 49=>636, 50=>636, 51=>636, 52=>636, 53=>636, 54=>636, 55=>636, 56=>636, 57=>636, 58=>337, 59=>337, 60=>838, 61=>838, 62=>838, + 63=>536, 64=>1000, 65=>722, 66=>735, 67=>765, 68=>802, 69=>730, 70=>694, 71=>799, 72=>872, 73=>395, 74=>401, 75=>747, 76=>664, 77=>1024, 78=>875, + 79=>820, 80=>673, 81=>820, 82=>753, 83=>685, 84=>667, 85=>843, 86=>722, 87=>1028, 88=>712, 89=>660, 90=>695, 91=>390, 92=>337, 93=>390, 94=>838, + 95=>500, 96=>500, 97=>596, 98=>640, 99=>560, 100=>640, 101=>592, 102=>370, 103=>640, 104=>644, 105=>320, 106=>310, 107=>606, 108=>320, 109=>948, 110=>644, + 111=>602, 112=>640, 113=>640, 114=>478, 115=>513, 116=>402, 117=>644, 118=>565, 119=>856, 120=>564, 121=>565, 122=>527, 123=>636, 124=>337, 125=>636, 126=>838, + 8364=>636, 8218=>318, 402=>636, 8222=>518, 8230=>1000, 8224=>500, 8225=>500, 710=>500, 8240=>1342, 352=>685, 8249=>400, 338=>1137, 381=>695, 8216=>318, 8217=>318, 8220=>511, + 8221=>511, 8226=>590, 8211=>500, 8212=>1000, 732=>500, 8482=>1000, 353=>513, 8250=>400, 339=>989, 382=>527, 376=>660, 160=>636, 161=>402, 162=>636, 163=>636, 164=>636, + 165=>636, 166=>337, 167=>500, 168=>500, 169=>1000, 170=>475, 171=>612, 172=>838, 173=>338, 174=>1000, 175=>500, 176=>500, 177=>838, 178=>401, 179=>401, 180=>500, + 181=>650, 182=>636, 183=>318, 184=>500, 185=>401, 186=>470, 187=>612, 188=>969, 189=>969, 190=>969, 191=>536, 192=>722, 193=>722, 194=>722, 195=>722, 196=>722, + 197=>722, 198=>1001, 199=>765, 200=>730, 201=>730, 202=>730, 203=>730, 204=>395, 205=>395, 206=>395, 207=>395, 208=>807, 209=>875, 210=>820, 211=>820, 212=>820, + 213=>820, 214=>820, 215=>838, 216=>820, 217=>843, 218=>843, 219=>843, 220=>843, 221=>660, 222=>676, 223=>668, 224=>596, 225=>596, 226=>596, 227=>596, 228=>596, + 229=>596, 230=>940, 231=>560, 232=>592, 233=>592, 234=>592, 235=>592, 236=>320, 237=>320, 238=>320, 239=>320, 240=>602, 241=>644, 242=>602, 243=>602, 244=>602, + 245=>602, 246=>602, 247=>838, 248=>602, 249=>644, 250=>644, 251=>644, 252=>644, 253=>565, 254=>640, 255=>565, 8800=>838, 8734=>833, 8804=>838, 8805=>838, 8706=>517, + 8721=>714, 8719=>796, 960=>657, 8747=>521, 937=>829, 8730=>637, 8776=>838, 8710=>698, 9674=>494, 8725=>167, 64257=>667, 64258=>667, 305=>320, 728=>500, 729=>500, 730=>500, + 733=>500, 731=>500, 711=>500, 321=>669, 322=>324, 8722=>838, 286=>799, 287=>640, 304=>395, 350=>685, 351=>513, 262=>765, 263=>560, 268=>765, 269=>560, 273=>640, + 8729=>318} + font[:enc]=''; + font[:diff]=''; + font[:file]='verase.z'; + font[:ctg]='verase.ctg.z'; + font[:originalsize]=60280; +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/verase.z Binary file vendor/plugins/rfpdf/lib/fonts/verase.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/veraseb.ctg.z Binary file vendor/plugins/rfpdf/lib/fonts/veraseb.ctg.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/veraseb.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/veraseb.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,30 @@ +TCPDFFontDescriptor.define('veraseb') do |font| + font[:type]='TrueTypeUnicode'; + font[:name]='BitstreamVeraSerif-Bold'; + font[:desc]={'Ascent'=>939,'Descent'=>-236,'CapHeight'=>939,'Flags'=>32,'FontBBox'=>'[-186 -236 1361 939]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600} + font[:up]=-106; + font[:ut]=117; + font[:cw]={ + 270=>600, 32=>348, 33=>439, 34=>521, 35=>838, 36=>696, 37=>950, 38=>903, 39=>306, 40=>473, 41=>473, 42=>523, 43=>838, 44=>348, 45=>415, 46=>348, + 47=>365, 48=>696, 49=>696, 50=>696, 51=>696, 52=>696, 53=>696, 54=>696, 55=>696, 56=>696, 57=>696, 58=>369, 59=>369, 60=>838, 61=>838, 62=>838, + 63=>586, 64=>1000, 65=>776, 66=>845, 67=>796, 68=>867, 69=>762, 70=>710, 71=>854, 72=>945, 73=>468, 74=>473, 75=>869, 76=>703, 77=>1107, 78=>914, + 79=>871, 80=>752, 81=>871, 82=>831, 83=>722, 84=>744, 85=>872, 86=>776, 87=>1123, 88=>776, 89=>714, 90=>730, 91=>473, 92=>365, 93=>473, 94=>838, + 95=>500, 96=>500, 97=>648, 98=>699, 99=>609, 100=>699, 101=>636, 102=>430, 103=>699, 104=>727, 105=>380, 106=>362, 107=>693, 108=>380, 109=>1058, 110=>727, + 111=>667, 112=>699, 113=>699, 114=>527, 115=>563, 116=>462, 117=>727, 118=>581, 119=>861, 120=>596, 121=>581, 122=>568, 123=>643, 124=>364, 125=>643, 126=>838, + 8364=>696, 8218=>348, 402=>696, 8222=>575, 8230=>1000, 8224=>523, 8225=>523, 710=>500, 8240=>1385, 352=>722, 8249=>400, 338=>1180, 381=>730, 8216=>348, 8217=>348, 8220=>575, + 8221=>575, 8226=>639, 8211=>500, 8212=>1000, 732=>500, 8482=>1000, 353=>563, 8250=>400, 339=>1028, 382=>568, 376=>714, 160=>696, 161=>439, 162=>696, 163=>696, 164=>636, + 165=>696, 166=>364, 167=>523, 168=>500, 169=>1000, 170=>487, 171=>625, 172=>838, 173=>415, 174=>1000, 175=>500, 176=>500, 177=>838, 178=>438, 179=>438, 180=>500, + 181=>732, 182=>636, 183=>348, 184=>500, 185=>438, 186=>500, 187=>625, 188=>1043, 189=>1043, 190=>1043, 191=>586, 192=>776, 193=>776, 194=>776, 195=>776, 196=>776, + 197=>776, 198=>1034, 199=>796, 200=>762, 201=>762, 202=>762, 203=>762, 204=>468, 205=>468, 206=>468, 207=>468, 208=>874, 209=>914, 210=>871, 211=>871, 212=>871, + 213=>871, 214=>871, 215=>838, 216=>871, 217=>872, 218=>872, 219=>872, 220=>872, 221=>714, 222=>757, 223=>760, 224=>648, 225=>648, 226=>648, 227=>648, 228=>648, + 229=>648, 230=>975, 231=>609, 232=>636, 233=>636, 234=>636, 235=>636, 236=>380, 237=>380, 238=>380, 239=>380, 240=>667, 241=>727, 242=>667, 243=>667, 244=>667, + 245=>667, 246=>667, 247=>838, 248=>667, 249=>727, 250=>727, 251=>727, 252=>727, 253=>581, 254=>699, 255=>581, 8800=>838, 8734=>833, 8804=>838, 8805=>838, 8706=>534, + 8721=>753, 8719=>842, 960=>732, 8747=>579, 937=>890, 8730=>657, 8776=>838, 8710=>753, 9674=>494, 8725=>167, 64257=>727, 64258=>727, 305=>380, 728=>500, 729=>500, 730=>500, + 733=>500, 731=>500, 711=>500, 321=>710, 322=>385, 8722=>838, 286=>854, 287=>699, 304=>468, 350=>722, 351=>563, 262=>796, 263=>609, 268=>796, 269=>609, 273=>699, + 8729=>348} + font[:enc]=''; + font[:diff]=''; + font[:file]='veraseb.z'; + font[:ctg]='veraseb.ctg.z'; + font[:originalsize]=58736; +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/veraseb.z Binary file vendor/plugins/rfpdf/lib/fonts/veraseb.z has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fonts/zapfdingbats.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fonts/zapfdingbats.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,15 @@ +TCPDFFontDescriptor.define('zapfdingbats') do |font| + font[:cw]={ + 0.chr=>0,1.chr=>0,2.chr=>0,3.chr=>0,4.chr=>0,5.chr=>0,6.chr=>0,7.chr=>0,8.chr=>0,9.chr=>0,10.chr=>0,11.chr=>0,12.chr=>0,13.chr=>0,14.chr=>0,15.chr=>0,16.chr=>0,17.chr=>0,18.chr=>0,19.chr=>0,20.chr=>0,21.chr=>0, + 22.chr=>0,23.chr=>0,24.chr=>0,25.chr=>0,26.chr=>0,27.chr=>0,28.chr=>0,29.chr=>0,30.chr=>0,31.chr=>0,' '=>278,'!'=>974,'"'=>961,'#'=>974,'$'=>980,'%'=>719,'&'=>789,'\''=>790,'('=>791,')'=>690,'*'=>960,'+'=>939, + ','=>549,'-'=>855,'.'=>911,'/'=>933,'0'=>911,'1'=>945,'2'=>974,'3'=>755,'4'=>846,'5'=>762,'6'=>761,'7'=>571,'8'=>677,'9'=>763,':'=>760,';'=>759,'<'=>754,'='=>494,'>'=>552,'?'=>537,'@'=>577,'A'=>692, + 'B'=>786,'C'=>788,'D'=>788,'E'=>790,'F'=>793,'G'=>794,'H'=>816,'I'=>823,'J'=>789,'K'=>841,'L'=>823,'M'=>833,'N'=>816,'O'=>831,'P'=>923,'Q'=>744,'R'=>723,'S'=>749,'T'=>790,'U'=>792,'V'=>695,'W'=>776, + 'X'=>768,'Y'=>792,'Z'=>759,'['=>707,'\\'=>708,']'=>682,'^'=>701,'_'=>826,'`'=>815,'a'=>789,'b'=>789,'c'=>707,'d'=>687,'e'=>696,'f'=>689,'g'=>786,'h'=>787,'i'=>713,'j'=>791,'k'=>785,'l'=>791,'m'=>873, + 'n'=>761,'o'=>762,'p'=>762,'q'=>759,'r'=>759,'s'=>892,'t'=>892,'u'=>788,'v'=>784,'w'=>438,'x'=>138,'y'=>277,'z'=>415,'{'=>392,'|'=>392,'}'=>668,'~'=>668,127.chr=>0,128.chr=>390,129.chr=>390,130.chr=>317,131.chr=>317, + 132.chr=>276,133.chr=>276,134.chr=>509,135.chr=>509,136.chr=>410,137.chr=>410,138.chr=>234,139.chr=>234,140.chr=>334,141.chr=>334,142.chr=>0,143.chr=>0,144.chr=>0,145.chr=>0,146.chr=>0,147.chr=>0,148.chr=>0,149.chr=>0,150.chr=>0,151.chr=>0,152.chr=>0,153.chr=>0, + 154.chr=>0,155.chr=>0,156.chr=>0,157.chr=>0,158.chr=>0,159.chr=>0,160.chr=>0,161.chr=>732,162.chr=>544,163.chr=>544,164.chr=>910,165.chr=>667,166.chr=>760,167.chr=>760,168.chr=>776,169.chr=>595,170.chr=>694,171.chr=>626,172.chr=>788,173.chr=>788,174.chr=>788,175.chr=>788, + 176.chr=>788,177.chr=>788,178.chr=>788,179.chr=>788,180.chr=>788,181.chr=>788,182.chr=>788,183.chr=>788,184.chr=>788,185.chr=>788,186.chr=>788,187.chr=>788,188.chr=>788,189.chr=>788,190.chr=>788,191.chr=>788,192.chr=>788,193.chr=>788,194.chr=>788,195.chr=>788,196.chr=>788,197.chr=>788, + 198.chr=>788,199.chr=>788,200.chr=>788,201.chr=>788,202.chr=>788,203.chr=>788,204.chr=>788,205.chr=>788,206.chr=>788,207.chr=>788,208.chr=>788,209.chr=>788,210.chr=>788,211.chr=>788,212.chr=>894,213.chr=>838,214.chr=>1016,215.chr=>458,216.chr=>748,217.chr=>924,218.chr=>748,219.chr=>918, + 220.chr=>927,221.chr=>928,222.chr=>928,223.chr=>834,224.chr=>873,225.chr=>828,226.chr=>924,227.chr=>924,228.chr=>917,229.chr=>930,230.chr=>931,231.chr=>463,232.chr=>883,233.chr=>836,234.chr=>836,235.chr=>867,236.chr=>867,237.chr=>696,238.chr=>696,239.chr=>874,240.chr=>0,241.chr=>874, + 242.chr=>760,243.chr=>946,244.chr=>771,245.chr=>865,246.chr=>771,247.chr=>888,248.chr=>967,249.chr=>888,250.chr=>831,251.chr=>873,252.chr=>927,253.chr=>970,254.chr=>918,255.chr=>0); +end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fpdf/bookmark.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fpdf/bookmark.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,99 @@ +# Translation of the bookmark class from the PHP FPDF script from Olivier Plathey +# Translated by Sylvain Lafleur and ?? with the help of Brian Ollenberger +# +# First added in 1.53b +# +# Usage is as follows: +# +# require 'fpdf' +# require 'bookmark' +# pdf = FPDF.new +# pdf.extend(PDF_Bookmark) +# +# This allows it to be combined with other extensions, such as the Chinese +# module. + +module PDF_Bookmark + def PDF_Bookmark.extend_object(o) + o.instance_eval('@outlines,@OutlineRoot=[],0') + super(o) + end + + def Bookmark(txt,level=0,y=0) + y=self.GetY() if y==-1 + @outlines.push({'t'=>txt,'l'=>level,'y'=>y,'p'=>self.PageNo()}) + end + + def putbookmarks + @nb=@outlines.size + return if @nb==0 + lru=[] + level=0 + @outlines.each_index do |i| + o=@outlines[i] + if o['l']>0 + parent=lru[o['l']-1] + # Set parent and last pointers + @outlines[i]['parent']=parent + @outlines[parent]['last']=i + if o['l']>level + # Level increasing: set first pointer + @outlines[parent]['first']=i + end + else + @outlines[i]['parent']=@nb + end + if o['l']<=level and i>0 + # Set prev and next pointers + prev=lru[o['l']] + @outlines[prev]['next']=i + @outlines[i]['prev']=prev + end + lru[o['l']]=i + level=o['l'] + end + # Outline items + n=@n+1 + @outlines.each_index do |i| + o=@outlines[i] + newobj + out('<>') + out('endobj') + end + # Outline root + newobj + @OutlineRoot=@n + out('<>') + out('endobj') + end + + def putresources + super + putbookmarks + end + + def putcatalog + super + if not @outlines.empty? + out('/Outlines '+@OutlineRoot.to_s+' 0 R') + out('/PageMode /UseOutlines') + end + end +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fpdf/chinese.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fpdf/chinese.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,469 @@ +# Copyright (c) 2006 4ssoM LLC +# 1.12 contributed by Ed Moss. +# +# The MIT License +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +# This is direct port of chinese.php +# +# Chinese PDF support. +# +# Usage is as follows: +# +# require 'fpdf' +# require 'chinese' +# pdf = FPDF.new +# pdf.extend(PDF_Chinese) +# +# This allows it to be combined with other extensions, such as the bookmark +# module. + +module PDF_Chinese + + Big5_widths={' '=>250,'!'=>250,'"'=>408,'#'=>668,'$'=>490,'%'=>875,'&'=>698,'\''=>250, + '('=>240,')'=>240,'*'=>417,'+'=>667,','=>250,'-'=>313,'.'=>250,'/'=>520,'0'=>500,'1'=>500, + '2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>250,';'=>250, + '<'=>667,'='=>667,'>'=>667,'?'=>396,'@'=>921,'A'=>677,'B'=>615,'C'=>719,'D'=>760,'E'=>625, + 'F'=>552,'G'=>771,'H'=>802,'I'=>354,'J'=>354,'K'=>781,'L'=>604,'M'=>927,'N'=>750,'O'=>823, + 'P'=>563,'Q'=>823,'R'=>729,'S'=>542,'T'=>698,'U'=>771,'V'=>729,'W'=>948,'X'=>771,'Y'=>677, + 'Z'=>635,'['=>344,'\\'=>520,']'=>344,'^'=>469,'_'=>500,'`'=>250,'a'=>469,'b'=>521,'c'=>427, + 'd'=>521,'e'=>438,'f'=>271,'g'=>469,'h'=>531,'i'=>250,'j'=>250,'k'=>458,'l'=>240,'m'=>802, + 'n'=>531,'o'=>500,'p'=>521,'q'=>521,'r'=>365,'s'=>333,'t'=>292,'u'=>521,'v'=>458,'w'=>677, + 'x'=>479,'y'=>458,'z'=>427,'{'=>480,'|'=>496,'}'=>480,'~'=>667} + + GB_widths={' '=>207,'!'=>270,'"'=>342,'#'=>467,'$'=>462,'%'=>797,'&'=>710,'\''=>239, + '('=>374,')'=>374,'*'=>423,'+'=>605,','=>238,'-'=>375,'.'=>238,'/'=>334,'0'=>462,'1'=>462, + '2'=>462,'3'=>462,'4'=>462,'5'=>462,'6'=>462,'7'=>462,'8'=>462,'9'=>462,':'=>238,';'=>238, + '<'=>605,'='=>605,'>'=>605,'?'=>344,'@'=>748,'A'=>684,'B'=>560,'C'=>695,'D'=>739,'E'=>563, + 'F'=>511,'G'=>729,'H'=>793,'I'=>318,'J'=>312,'K'=>666,'L'=>526,'M'=>896,'N'=>758,'O'=>772, + 'P'=>544,'Q'=>772,'R'=>628,'S'=>465,'T'=>607,'U'=>753,'V'=>711,'W'=>972,'X'=>647,'Y'=>620, + 'Z'=>607,'['=>374,'\\'=>333,']'=>374,'^'=>606,'_'=>500,'`'=>239,'a'=>417,'b'=>503,'c'=>427, + 'd'=>529,'e'=>415,'f'=>264,'g'=>444,'h'=>518,'i'=>241,'j'=>230,'k'=>495,'l'=>228,'m'=>793, + 'n'=>527,'o'=>524,'p'=>524,'q'=>504,'r'=>338,'s'=>336,'t'=>277,'u'=>517,'v'=>450,'w'=>652, + 'x'=>466,'y'=>452,'z'=>407,'{'=>370,'|'=>258,'}'=>370,'~'=>605} + + def AddCIDFont(family,style,name,cw,cMap,registry) +#ActionController::Base::logger.debug registry.to_a.join(":").to_s + fontkey=family.downcase+style.upcase + unless @fonts[fontkey].nil? + Error("Font already added: family style") + end + i=@fonts.length+1 + name=name.gsub(' ','') + @fonts[fontkey]={'i'=>i,'type'=>'Type0','name'=>name,'up'=>-130,'ut'=>40,'cw'=>cw, 'CMap'=>cMap,'registry'=>registry} + end + + def AddCIDFonts(family,name,cw,cMap,registry) + AddCIDFont(family,'',name,cw,cMap,registry) + AddCIDFont(family,'B',name+',Bold',cw,cMap,registry) + AddCIDFont(family,'I',name+',Italic',cw,cMap,registry) + AddCIDFont(family,'BI',name+',BoldItalic',cw,cMap,registry) + end + + def AddBig5Font(family='Big5',name='MSungStd-Light-Acro') + #Add Big5 font with proportional Latin + cw=Big5_widths + cMap='ETenms-B5-H' + registry={'ordering'=>'CNS1','supplement'=>0} +#ActionController::Base::logger.debug registry.to_a.join(":").to_s + AddCIDFonts(family,name,cw,cMap,registry) + end + + def AddBig5hwFont(family='Big5-hw',name='MSungStd-Light-Acro') + #Add Big5 font with half-witdh Latin + cw = {} + 32.upto(126) do |i| + cw[i.chr]=500 + end + cMap='ETen-B5-H' + registry={'ordering'=>'CNS1','supplement'=>0} + AddCIDFonts(family,name,cw,cMap,registry) + end + + def AddGBFont(family='GB',name='STSongStd-Light-Acro') + #Add GB font with proportional Latin + cw=GB_widths + cMap='GBKp-EUC-H' + registry={'ordering'=>'GB1','supplement'=>2} + AddCIDFonts(family,name,cw,cMap,registry) + end + + def AddGBhwFont(family='GB-hw',name='STSongStd-Light-Acro') + #Add GB font with half-width Latin + 32.upto(126) do |i| + cw[i.chr]=500 + end + cMap='GBK-EUC-H' + registry={'ordering'=>'GB1','supplement'=>2} + AddCIDFonts(family,name,cw,cMap,registry) + end + + def GetStringWidth(s) + if(@current_font['type']=='Type0') + return GetMBStringWidth(s) + else + return super(s) + end + end + + def GetMBStringWidth(s) + #Multi-byte version of GetStringWidth() + l=0 + cw=@current_font['cw'] + nb=s.length + i=0 + while(i0 and s[nb-1]=="\n") + nb-=1 + end + b=0 + if(border) + if(border==1) + border='LTRB' + b='LRT' + b2='LR' + else + b2='' + b2='L' unless border.to_s.index('L').nil? + b2=b2+'R' unless border.to_s.index('R').nil? + b=(border.to_s.index('T')) ? (b2+'T') : b2 + end + end + sep=-1 + i=0 + j=0 + l=0 + nl=1 + while(iwmax) + #Automatic line break + if(sep==-1 or i==j) + if(i==j) + i+=ascii ? 1 : 2 + end + Cell(w,h,s[j,i-j],b,2,align,fill) + else + Cell(w,h,s[j,sep-j],b,2,align,fill) + i=(s[sep].chr==' ') ? sep+1 : sep + end + sep=-1 + j=i + l=0 + nl+=1 + if(border and nl==2) + b=b2 + end + else + i+=ascii ? 1 : 2 + end + end + #Last chunk + if(border and not border.to_s.index('B').nil?) + b+='B' + end + Cell(w,h,s[j,i-j],b,2,align,fill) + @x=@l_margin + end + + def Write(h,txt,link='',fill=0) + if(@current_font['type']=='Type0') + MBWrite(h,txt,link) + else + super(h,txt,link) + end + end + + def MBWrite(h,txt,link) + #Multi-byte version of Write() + cw=@current_font['cw'] + w=@w-@r_margin-@x + wmax=(w-2*@c_margin)*1000/@font_size + s=txt.gsub("\r",'') + nb=s.length + sep=-1 + i=0 + j=0 + l=0 + nl=1 + while(iwmax) + #Automatic line break + if(sep==-1 or i==j) + if(@x>@l_margin) + #Move to next line + @x=@l_margin + @y+=h + w=@w-@r_margin-@x + wmax=(w-2*@c_margin)*1000/@font_size + i+=1 + nl+=1 + next + end + if(i==j) + i+=ascii ? 1 : 2 + end + Cell(w,h,s[j,i-j],0,2,'',0,link) + else + Cell(w,h,s[j,sep-j],0,2,'',0,link) + i=(s[sep].chr==' ') ? sep+1 : sep + end + sep=-1 + j=i + l=0 + if(nl==1) + @x=@l_margin + w=@w-@r_margin-@x + wmax=(w-2*@c_margin)*1000/@font_size + end + nl+=1 + else + i+=ascii ? 1 : 2 + end + end + #Last chunk + if(i!=j) + Cell(l/1000*@font_size,h,s[j,i-j],0,0,'',0,link) + end + end + +private + + def putfonts() + nf=@n + @diffs.each do |diff| + #Encodings + newobj() + out('<>') + out('endobj') + end + # mqr=get_magic_quotes_runtime() + # set_magic_quotes_runtime(0) + @font_files.each_pair do |file, info| + #Font file embedding + newobj() + @font_files[file]['n']=@n + if(defined('FPDF_FONTPATH')) + file=FPDF_FONTPATH+file + end + size=filesize(file) + if(!size) + Error('Font file not found') + end + out('<>') + f=fopen(file,'rb') + putstream(fread(f,size)) + fclose(f) + out('endobj') + end +# + # set_magic_quotes_runtime(mqr) +# + @fonts.each_pair do |k, font| + #Font objects + newobj() + @fonts[k]['n']=@n + out('<>') + out('endobj') + if(font['type']!='core') + #Widths + newobj() + cw=font['cw'] + s='[' + 32.upto(255) do |i| + s+=cw[i.chr]+' ' + end + out(s+']') + out('endobj') + #Descriptor + newobj() + s='<>') + out('endobj') + end + end + end + end + + def putType0(font) + #Type0 + out('/Subtype /Type0') + out('/BaseFont /'+font['name']+'-'+font['CMap']) + out('/Encoding /'+font['CMap']) + out('/DescendantFonts ['+(@n+1).to_s+' 0 R]') + out('>>') + out('endobj') + #CIDFont + newobj() + out('<>') + out('/FontDescriptor '+(@n+1).to_s+' 0 R') + if(font['CMap']=='ETen-B5-H') + w='13648 13742 500' + elsif(font['CMap']=='GBK-EUC-H') + w='814 907 500 7716 [500]' + else + # ActionController::Base::logger.debug font['cw'].keys.sort.join(' ').to_s + # ActionController::Base::logger.debug font['cw'].values.join(' ').to_s + w='1 [' + font['cw'].keys.sort.each {|key| + w+=font['cw'][key].to_s + " " +# ActionController::Base::logger.debug key.to_s +# ActionController::Base::logger.debug font['cw'][key].to_s + } + w +=']' + end + out('/W ['+w+']>>') + out('endobj') + #Font descriptor + newobj() + out('<>') + out('endobj') + end +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fpdf/fpdf_eps.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fpdf/fpdf_eps.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,139 @@ +# Information +# +# PDF_EPS class from Valentin Schmidt ported to ruby by Thiago Jackiw (tjackiw@gmail.com) +# working for Mingle LLC (www.mingle.com) +# Release Date: July 13th, 2006 +# +# Description +# +# This script allows to embed vector-based Adobe Illustrator (AI) or AI-compatible EPS files. +# Only vector drawing is supported, not text or bitmap. Although the script was successfully +# tested with various AI format versions, best results are probably achieved with files that +# were exported in the AI3 format (tested with Illustrator CS2, Freehand MX and Photoshop CS2). +# +# ImageEps(string file, float x, float y [, float w [, float h [, string link [, boolean useBoundingBox]]]]) +# +# Same parameters as for regular FPDF::Image() method, with an additional one: +# +# useBoundingBox: specifies whether to position the bounding box (true) or the complete canvas (false) +# at location (x,y). Default value is true. +# +# First added to the Ruby FPDF distribution in 1.53c +# +# Usage is as follows: +# +# require 'fpdf' +# require 'fpdf_eps' +# pdf = FPDF.new +# pdf.extend(PDF_EPS) +# pdf.ImageEps(...) +# +# This allows it to be combined with other extensions, such as the bookmark +# module. + +module PDF_EPS + def ImageEps(file, x, y, w=0, h=0, link='', use_bounding_box=true) + data = nil + if File.exists?(file) + File.open(file, 'rb') do |f| + data = f.read() + end + else + Error('EPS file not found: '+file) + end + + # Find BoundingBox param + regs = data.scan(/%%BoundingBox: [^\r\n]*/m) + regs << regs[0].gsub(/%%BoundingBox: /, '') + if regs.size > 1 + tmp = regs[1].to_s.split(' ') + @x1 = tmp[0].to_i + @y1 = tmp[1].to_i + @x2 = tmp[2].to_i + @y2 = tmp[3].to_i + else + Error('No BoundingBox found in EPS file: '+file) + end + f_start = data.index('%%EndSetup') + f_start = data.index('%%EndProlog') if f_start === false + f_start = data.index('%%BoundingBox') if f_start === false + + data = data.slice(f_start, data.length) + + f_end = data.index('%%PageTrailer') + f_end = data.index('showpage') if f_end === false + data = data.slice(0, f_end) if f_end + + # save the current graphic state + out('q') + + k = @k + + # Translate + if use_bounding_box + dx = x*k-@x1 + dy = @hPt-@y2-y*k + else + dx = x*k + dy = -y*k + end + tm = [1,0,0,1,dx,dy] + out(sprintf('%.3f %.3f %.3f %.3f %.3f %.3f cm', + tm[0], tm[1], tm[2], tm[3], tm[4], tm[5])) + + if w > 0 + scale_x = w/((@x2-@x1)/k) + if h > 0 + scale_y = h/((@y2-@y1)/k) + else + scale_y = scale_x + h = (@y2-@y1)/k * scale_y + end + else + if h > 0 + scale_y = $h/((@y2-@y1)/$k) + scale_x = scale_y + w = (@x2-@x1)/k * scale_x + else + w = (@x2-@x1)/k + h = (@y2-@y1)/k + end + end + + if !scale_x.nil? + # Scale + tm = [scale_x,0,0,scale_y,0,@hPt*(1-scale_y)] + out(sprintf('%.3f %.3f %.3f %.3f %.3f %.3f cm', + tm[0], tm[1], tm[2], tm[3], tm[4], tm[5])) + end + + data.split(/\r\n|[\r\n]/).each do |line| + next if line == '' || line[0,1] == '%' + len = line.length + # next if (len > 2 && line[len-2,len] != ' ') + cmd = line[len-2,len].strip + case cmd + when 'm', 'l', 'v', 'y', 'c', 'k', 'K', 'g', 'G', 's', 'S', 'J', 'j', 'w', 'M', 'd': + out(line) + + when 'L': + line[len-1,len]='l' + out(line) + + when 'C': + line[len-1,len]='c' + out(line) + + when 'f', 'F': + out('f*') + + when 'b', 'B': + out(cmd + '*') + end + end + + # restore previous graphic state + out('Q') + Link(x,y,w,h,link) if link + end +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fpdf/japanese.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fpdf/japanese.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,464 @@ +# Copyright (c) 2006 4ssoM LLC +# 1.12 contributed by Ed Moss. +# +# The MIT License +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +# This is direct port of japanese.php +# +# Japanese PDF support. +# +# Usage is as follows: +# +# require 'fpdf' +# require 'chinese' +# pdf = FPDF.new +# pdf.extend(PDF_Japanese) +# +# This allows it to be combined with other extensions, such as the bookmark +# module. + +module PDF_Japanese + + SJIS_widths={' ' => 278, '!' => 299, '"' => 353, '#' => 614, '$' => 614, '%' => 721, '&' => 735, '\'' => 216, + '(' => 323, ')' => 323, '*' => 449, '+' => 529, ',' => 219, '-' => 306, '.' => 219, '/' => 453, '0' => 614, '1' => 614, + '2' => 614, '3' => 614, '4' => 614, '5' => 614, '6' => 614, '7' => 614, '8' => 614, '9' => 614, ':' => 219, ';' => 219, + '<' => 529, '=' => 529, '>' => 529, '?' => 486, '@' => 744, 'A' => 646, 'B' => 604, 'C' => 617, 'D' => 681, 'E' => 567, + 'F' => 537, 'G' => 647, 'H' => 738, 'I' => 320, 'J' => 433, 'K' => 637, 'L' => 566, 'M' => 904, 'N' => 710, 'O' => 716, + 'P' => 605, 'Q' => 716, 'R' => 623, 'S' => 517, 'T' => 601, 'U' => 690, 'V' => 668, 'W' => 990, 'X' => 681, 'Y' => 634, + 'Z' => 578, '[' => 316, '\\' => 614, ']' => 316, '^' => 529, '_' => 500, '`' => 387, 'a' => 509, 'b' => 566, 'c' => 478, + 'd' => 565, 'e' => 503, 'f' => 337, 'g' => 549, 'h' => 580, 'i' => 275, 'j' => 266, 'k' => 544, 'l' => 276, 'm' => 854, + 'n' => 579, 'o' => 550, 'p' => 578, 'q' => 566, 'r' => 410, 's' => 444, 't' => 340, 'u' => 575, 'v' => 512, 'w' => 760, + 'x' => 503, 'y' => 529, 'z' => 453, '{' => 326, '|' => 380, '}' => 326, '~' => 387} + + def AddCIDFont(family,style,name,cw,cMap,registry) + fontkey=family.downcase+style.upcase + unless @fonts[fontkey].nil? + Error("CID font already added: family style") + end + i=@fonts.length+1 + @fonts[fontkey]={'i'=>i,'type'=>'Type0','name'=>name,'up'=>-120,'ut'=>40,'cw'=>cw, + 'CMap'=>cMap,'registry'=>registry} + end + + def AddCIDFonts(family,name,cw,cMap,registry) + AddCIDFont(family,'',name,cw,cMap,registry) + AddCIDFont(family,'B',name+',Bold',cw,cMap,registry) + AddCIDFont(family,'I',name+',Italic',cw,cMap,registry) + AddCIDFont(family,'BI',name+',BoldItalic',cw,cMap,registry) + end + + def AddSJISFont(family='SJIS') + #Add SJIS font with proportional Latin + name='KozMinPro-Regular-Acro' + cw=SJIS_widths + cMap='90msp-RKSJ-H' + registry={'ordering'=>'Japan1','supplement'=>2} + AddCIDFonts(family,name,cw,cMap,registry) + end + + def AddSJIShwFont(family='SJIS-hw') + #Add SJIS font with half-width Latin + name='KozMinPro-Regular-Acro' + 32.upto(126) do |i| + cw[i.chr]=500 + end + cMap='90ms-RKSJ-H' + registry={'ordering'=>'Japan1','supplement'=>2} + AddCIDFonts(family,name,cw,cMap,registry) + end + + def GetStringWidth(s) + if(@current_font['type']=='Type0') + return GetSJISStringWidth(s) + else + return super(s) + end + end + + def GetSJISStringWidth(s) + #SJIS version of GetStringWidth() + l=0 + cw=@current_font['cw'] + nb=s.length + i=0 + while(i=161 and o<=223) + #Half-width katakana + l+=500 + i+=1 + else + #Full-width character + l+=1000 + i+=2 + end + end + return l*@font_size/1000 + end + + def MultiCell(w,h,txt,border=0,align='L',fill=0,ln=1) + if(@current_font['type']=='Type0') + SJISMultiCell(w,h,txt,border,align,fill) + else + super(w,h,txt,border,align,fill) + end + end + + def SJISMultiCell(w,h,txt,border=0,align='L',fill=0) + #Output text with automatic or explicit line breaks + cw=@current_font['cw'] + if(w==0) + w=@w-@r_margin-@x + end + wmax=(w-2*@c_margin)*1000/@font_size + s=txt.gsub("\r",'') + nb=s.length + if(nb>0 and s[nb-1]=="\n") + nb-=1 + end + b=0 + if(border) + if(border==1) + border='LTRB' + b='LRT' + b2='LR' + else + b2='' + b2='L' unless border.to_s.index('L').nil? + b2=b2+'R' unless border.to_s.index('R').nil? + b=(border.to_s.index('T')) ? (b2+'T') : b2 + end + end + sep=-1 + i=0 + j=0 + l=0 + nl=1 + while(i=161 and o<=223) + #Half-width katakana + l+=500 + n=1 + sep=i + else + #Full-width character + l+=1000 + n=2 + sep=i + end + if(l>wmax) + #Automatic line break + if(sep==-1 or i==j) + if(i==j) + i+=n + end + Cell(w,h,s[j,i-j],b,2,align,fill) + else + Cell(w,h,s[j,sep-j],b,2,align,fill) + i=(s[sep].chr==' ') ? sep+1 : sep + end + sep=-1 + j=i + l=0 + nl+=1 + if(border and nl==2) + b=b2 + end + else + i+=n + if(o>=128) + sep=i + end + end + end + #Last chunk + if(border and not border.to_s.index('B').nil?) + b+='B' + end + Cell(w,h,s[j,i-j],b,2,align,fill) + @x=@l_margin + end + + def Write(h,txt,link='',fill=0) + if(@current_font['type']=='Type0') + SJISWrite(h,txt,link) + else + super(h,txt,link) + end + end + + def SJISWrite(h,txt,link) + #SJIS version of Write() + cw=@current_font['cw'] + w=@w-@r_margin-@x + wmax=(w-2*@c_margin)*1000/@font_size + s=txt.gsub("\r",'') + nb=s.length + sep=-1 + i=0 + j=0 + l=0 + nl=1 + while(i=161 and o<=223) + #Half-width katakana + l+=500 + n=1 + sep=i + else + #Full-width character + l+=1000 + n=2 + sep=i + end + if(l>wmax) + #Automatic line break + if(sep==-1 or i==j) + if(@x>@l_margin) + #Move to next line + @x=@l_margin + @y+=h + w=@w-@r_margin-@x + wmax=(w-2*@c_margin)*1000/@font_size + i+=n + nl+=1 + next + end + if(i==j) + i+=n + end + Cell(w,h,s[j,i-j],0,2,'',0,link) + else + Cell(w,h,s[j,sep-j],0,2,'',0,link) + i=(s[sep].chr==' ') ? sep+1 : sep + end + sep=-1 + j=i + l=0 + if(nl==1) + @x=@l_margin + w=@w-@r_margin-@x + wmax=(w-2*@c_margin)*1000/@font_size + end + nl+=1 + else + i+=n + if(o>=128) + sep=i + end + end + end + #Last chunk + if(i!=j) + Cell(l/1000*@font_size,h,s[j,i-j],0,0,'',0,link) + end + end + +private + + def putfonts() + nf=@n + @diffs.each do |diff| + #Encodings + newobj() + out('<>') + out('endobj') + end + # mqr=get_magic_quotes_runtime() + # set_magic_quotes_runtime(0) + @font_files.each_pair do |file, info| + #Font file embedding + newobj() + @font_files[file]['n']=@n + if(defined('FPDF_FONTPATH')) + file=FPDF_FONTPATH+file + end + size=filesize(file) + if(!size) + Error('Font file not found') + end + out('<>') + f=fopen(file,'rb') + putstream(fread(f,size)) + fclose(f) + out('endobj') + end + # set_magic_quotes_runtime(mqr) + @fonts.each_pair do |k, font| + #Font objects + newobj() + @fonts[k]['n']=@n + out('<>') + out('endobj') + if(font['type']!='core') + #Widths + newobj() + cw=font['cw'] + s='[' + 32.upto(255) do |i| + s+=cw[i.chr]+' ' + end + out(s+']') + out('endobj') + #Descriptor + newobj() + s='<>') + out('endobj') + end + end + end + end + + def putType0(font) + #Type0 + out('/Subtype /Type0') + out('/BaseFont /'+font['name']+'-'+font['CMap']) + out('/Encoding /'+font['CMap']) + out('/DescendantFonts ['+(@n+1).to_s+' 0 R]') + out('>>') + out('endobj') + #CIDFont + newobj() + out('<>') + out('/FontDescriptor '+(@n+1).to_s+' 0 R') + w='/W [1 [' + font['cw'].keys.sort.each {|key| + w+=font['cw'][key].to_s + " " +# ActionController::Base::logger.debug key.to_s +# ActionController::Base::logger.debug font['cw'][key].to_s + } + out(w+'] 231 325 500 631 [500] 326 389 500]') + out('>>') + out('endobj') + #Font descriptor + newobj() + out('<>') + out('endobj') + end +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fpdf/korean.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fpdf/korean.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,432 @@ +# Copyright (c) 2006 4ssoM LLC +# 1.12 contributed by Ed Moss. +# +# The MIT License +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +# This is direct port of korean.php +# +# Korean PDF support. +# +# Usage is as follows: +# +# require 'fpdf' +# require 'chinese' +# pdf = FPDF.new +# pdf.extend(PDF_Korean) +# +# This allows it to be combined with other extensions, such as the bookmark +# module. + +module PDF_Korean + +UHC_widths={' ' => 333, '!' => 416, '"' => 416, '#' => 833, '$' => 625, '%' => 916, '&' => 833, '\'' => 250, + '(' => 500, ')' => 500, '*' => 500, '+' => 833, ',' => 291, '-' => 833, '.' => 291, '/' => 375, '0' => 625, '1' => 625, + '2' => 625, '3' => 625, '4' => 625, '5' => 625, '6' => 625, '7' => 625, '8' => 625, '9' => 625, ':' => 333, ';' => 333, + '<' => 833, '=' => 833, '>' => 916, '?' => 500, '@' => 1000, 'A' => 791, 'B' => 708, 'C' => 708, 'D' => 750, 'E' => 708, + 'F' => 666, 'G' => 750, 'H' => 791, 'I' => 375, 'J' => 500, 'K' => 791, 'L' => 666, 'M' => 916, 'N' => 791, 'O' => 750, + 'P' => 666, 'Q' => 750, 'R' => 708, 'S' => 666, 'T' => 791, 'U' => 791, 'V' => 750, 'W' => 1000, 'X' => 708, 'Y' => 708, + 'Z' => 666, '[' => 500, '\\' => 375, ']' => 500, '^' => 500, '_' => 500, '`' => 333, 'a' => 541, 'b' => 583, 'c' => 541, + 'd' => 583, 'e' => 583, 'f' => 375, 'g' => 583, 'h' => 583, 'i' => 291, 'j' => 333, 'k' => 583, 'l' => 291, 'm' => 875, + 'n' => 583, 'o' => 583, 'p' => 583, 'q' => 583, 'r' => 458, 's' => 541, 't' => 375, 'u' => 583, 'v' => 583, 'w' => 833, + 'x' => 625, 'y' => 625, 'z' => 500, '{' => 583, '|' => 583, '}' => 583, '~' => 750} + + def AddCIDFont(family,style,name,cw,cMap,registry) + fontkey=family.downcase+style.upcase + unless @fonts[fontkey].nil? + Error("Font already added: family style") + end + i=@fonts.length+1 + name=name.gsub(' ','') + @fonts[fontkey]={'i'=>i,'type'=>'Type0','name'=>name,'up'=>-130,'ut'=>40,'cw'=>cw, + 'CMap'=>cMap,'registry'=>registry} + end + + def AddCIDFonts(family,name,cw,cMap,registry) + AddCIDFont(family,'',name,cw,cMap,registry) + AddCIDFont(family,'B',name+',Bold',cw,cMap,registry) + AddCIDFont(family,'I',name+',Italic',cw,cMap,registry) + AddCIDFont(family,'BI',name+',BoldItalic',cw,cMap,registry) + end + + def AddUHCFont(family='UHC',name='HYSMyeongJoStd-Medium-Acro') + #Add UHC font with proportional Latin + cw=UHC_widths + cMap='KSCms-UHC-H' + registry={'ordering'=>'Korea1','supplement'=>1} + AddCIDFonts(family,name,cw,cMap,registry) + end + + def AddUHChwFont(family='UHC-hw',name='HYSMyeongJoStd-Medium-Acro') + #Add UHC font with half-witdh Latin + 32.upto(126) do |i| + cw[i.chr]=500 + end + cMap='KSCms-UHC-HW-H' + registry={'ordering'=>'Korea1','supplement'=>1} + AddCIDFonts(family,name,cw,cMap,registry) + end + + def GetStringWidth(s) + if(@current_font['type']=='Type0') + return GetMBStringWidth(s) + else + return super(s) + end + end + + def GetMBStringWidth(s) + #Multi-byte version of GetStringWidth() + l=0 + cw=@current_font['cw'] + nb=s.length + i=0 + while(i0 and s[nb-1]=="\n") + nb-=1 + end + b=0 + if(border) + if(border==1) + border='LTRB' + b='LRT' + b2='LR' + else + b2='' + b2='L' unless border.to_s.index('L').nil? + b2=b2+'R' unless border.to_s.index('R').nil? + b=(border.to_s.index('T')) ? (b2+'T') : b2 + end + end + sep=-1 + i=0 + j=0 + l=0 + nl=1 + while(iwmax) + #Automatic line break + if(sep==-1 or i==j) + if(i==j) + i+=ascii ? 1 : 2 + end + Cell(w,h,s[j,i-j],b,2,align,fill) + else + Cell(w,h,s[j,sep-j],b,2,align,fill) + i=(s[sep].chr==' ') ? sep+1 : sep + end + sep=-1 + j=i + l=0 + nl+=1 + if(border and nl==2) + b=b2 + end + else + i+=ascii ? 1 : 2 + end + end + #Last chunk + if(border and not border.to_s.index('B').nil?) + b+='B' + end + Cell(w,h,s[j,i-j],b,2,align,fill) + @x=@l_margin + end + + def Write(h,txt,link='',fill=0) + if(@current_font['type']=='Type0') + MBWrite(h,txt,link) + else + super(h,txt,link) + end + end + + def MBWrite(h,txt,link) + #Multi-byte version of Write() + cw=@current_font['cw'] + w=@w-@r_margin-@x + wmax=(w-2*@c_margin)*1000/@font_size + s=txt.gsub("\r",'') + nb=s.length + sep=-1 + i=0 + j=0 + l=0 + nl=1 + while(iwmax) + #Automatic line break + if(sep==-1 or i==j) + if(@x>@l_margin) + #Move to next line + @x=@l_margin + @y+=h + w=@w-@r_margin-@x + wmax=(w-2*@c_margin)*1000/@font_size + i+=1 + nl+=1 + next + end + if(i==j) + i+=ascii ? 1 : 2 + end + Cell(w,h,s[j,i-j],0,2,'',0,link) + else + Cell(w,h,s[j,sep-j],0,2,'',0,link) + i=(s[sep].chr==' ') ? sep+1 : sep + end + sep=-1 + j=i + l=0 + if(nl==1) + @x=@l_margin + w=@w-@r_margin-@x + wmax=(w-2*@c_margin)*1000/@font_size + end + nl+=1 + else + i+=ascii ? 1 : 2 + end + end + #Last chunk + if(i!=j) + Cell(l/1000*@font_size,h,s[j,i-j],0,0,'',0,link) + end + end + +private + + def putfonts() + nf=@n + @diffs.each do |diff| + #Encodings + newobj() + out('<>') + out('endobj') + end + # mqr=get_magic_quotes_runtime() + # set_magic_quotes_runtime(0) + @font_files.each_pair do |file, info| + #Font file embedding + newobj() + @font_files[file]['n']=@n + if(defined('FPDF_FONTPATH')) + file=FPDF_FONTPATH+file + end + size=filesize(file) + if(!size) + Error('Font file not found') + end + out('<>') + f=fopen(file,'rb') + putstream(fread(f,size)) + fclose(f) + out('endobj') + end + # set_magic_quotes_runtime(mqr) + @fonts.each_pair do |k, font| + #Font objects + newobj() + @fonts[k]['n']=@n + out('<>') + out('endobj') + if(font['type']!='core') + #Widths + newobj() + cw=font['cw'] + s='[' + 32.upto(255) do |i| + s+=cw[i.chr]+' ' + end + out(s+']') + out('endobj') + #Descriptor + newobj() + s='<>') + out('endobj') + end + end + end + end + + def putType0(font) + #Type0 + out('/Subtype /Type0') + out('/BaseFont /'+font['name']+'-'+font['CMap']) + out('/Encoding /'+font['CMap']) + out('/DescendantFonts ['+(@n+1).to_s+' 0 R]') + out('>>') + out('endobj') + #CIDFont + newobj() + out('<>') + out('/FontDescriptor '+(@n+1).to_s+' 0 R') + if(font['CMap']=='KSCms-UHC-HW-H') + w='8094 8190 500' + else + w='1 [' + font['cw'].keys.sort.each {|key| + w+=font['cw'][key].to_s + " " + # ActionController::Base::logger.debug key.to_s + # ActionController::Base::logger.debug font['cw'][key].to_s + } + w +=']' + end + out('/W ['+w+']>>') + out('endobj') + #Font descriptor + newobj() + out('<>') + out('endobj') + end +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/fpdf/makefont.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/fpdf/makefont.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,1787 @@ +#!/usr/bin/env ruby +# +# Utility to generate font definition files +# Version: 1.1 +# Date: 2006-07-19 +# +# Changelog: +# Version 1.1 - Brian Ollenberger +# - Fixed a very small bug in MakeFont for generating FontDef.diff. + +Charencodings = { +# Central Europe + 'cp1250' => [ + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'exclam', 'quotedbl', 'numbersign', + 'dollar', 'percent', 'ampersand', 'quotesingle', + 'parenleft', 'parenright', 'asterisk', 'plus', + 'comma', 'hyphen', 'period', 'slash', + 'zero', 'one', 'two', 'three', + 'four', 'five', 'six', 'seven', + 'eight', 'nine', 'colon', 'semicolon', + 'less', 'equal', 'greater', 'question', + 'at', 'A', 'B', 'C', + 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', + 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 'bracketleft', + 'backslash', 'bracketright', 'asciicircum', 'underscore', + 'grave', 'a', 'b', 'c', + 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', + 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', + 't', 'u', 'v', 'w', + 'x', 'y', 'z', 'braceleft', + 'bar', 'braceright', 'asciitilde', '.notdef', + 'Euro', '.notdef', 'quotesinglbase', '.notdef', + 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', + '.notdef', 'perthousand', 'Scaron', 'guilsinglleft', + 'Sacute', 'Tcaron', 'Zcaron', 'Zacute', + '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', + 'quotedblright', 'bullet', 'endash', 'emdash', + '.notdef', 'trademark', 'scaron', 'guilsinglright', + 'sacute', 'tcaron', 'zcaron', 'zacute', + 'space', 'caron', 'breve', 'Lslash', + 'currency', 'Aogonek', 'brokenbar', 'section', + 'dieresis', 'copyright', 'Scedilla', 'guillemotleft', + 'logicalnot', 'hyphen', 'registered', 'Zdotaccent', + 'degree', 'plusminus', 'ogonek', 'lslash', + 'acute', 'mu', 'paragraph', 'periodcentered', + 'cedilla', 'aogonek', 'scedilla', 'guillemotright', + 'Lcaron', 'hungarumlaut', 'lcaron', 'zdotaccent', + 'Racute', 'Aacute', 'Acircumflex', 'Abreve', + 'Adieresis', 'Lacute', 'Cacute', 'Ccedilla', + 'Ccaron', 'Eacute', 'Eogonek', 'Edieresis', + 'Ecaron', 'Iacute', 'Icircumflex', 'Dcaron', + 'Dcroat', 'Nacute', 'Ncaron', 'Oacute', + 'Ocircumflex', 'Ohungarumlaut', 'Odieresis', 'multiply', + 'Rcaron', 'Uring', 'Uacute', 'Uhungarumlaut', + 'Udieresis', 'Yacute', 'Tcommaaccent', 'germandbls', + 'racute', 'aacute', 'acircumflex', 'abreve', + 'adieresis', 'lacute', 'cacute', 'ccedilla', + 'ccaron', 'eacute', 'eogonek', 'edieresis', + 'ecaron', 'iacute', 'icircumflex', 'dcaron', + 'dcroat', 'nacute', 'ncaron', 'oacute', + 'ocircumflex', 'ohungarumlaut', 'odieresis', 'divide', + 'rcaron', 'uring', 'uacute', 'uhungarumlaut', + 'udieresis', 'yacute', 'tcommaaccent', 'dotaccent' + ], +# Cyrillic + 'cp1251' => [ + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'exclam', 'quotedbl', 'numbersign', + 'dollar', 'percent', 'ampersand', 'quotesingle', + 'parenleft', 'parenright', 'asterisk', 'plus', + 'comma', 'hyphen', 'period', 'slash', + 'zero', 'one', 'two', 'three', + 'four', 'five', 'six', 'seven', + 'eight', 'nine', 'colon', 'semicolon', + 'less', 'equal', 'greater', 'question', + 'at', 'A', 'B', 'C', + 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', + 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 'bracketleft', + 'backslash', 'bracketright', 'asciicircum', 'underscore', + 'grave', 'a', 'b', 'c', + 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', + 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', + 't', 'u', 'v', 'w', + 'x', 'y', 'z', 'braceleft', + 'bar', 'braceright', 'asciitilde', '.notdef', + 'afii10051', 'afii10052', 'quotesinglbase', 'afii10100', + 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', + 'Euro', 'perthousand', 'afii10058', 'guilsinglleft', + 'afii10059', 'afii10061', 'afii10060', 'afii10145', + 'afii10099', 'quoteleft', 'quoteright', 'quotedblleft', + 'quotedblright', 'bullet', 'endash', 'emdash', + '.notdef', 'trademark', 'afii10106', 'guilsinglright', + 'afii10107', 'afii10109', 'afii10108', 'afii10193', + 'space', 'afii10062', 'afii10110', 'afii10057', + 'currency', 'afii10050', 'brokenbar', 'section', + 'afii10023', 'copyright', 'afii10053', 'guillemotleft', + 'logicalnot', 'hyphen', 'registered', 'afii10056', + 'degree', 'plusminus', 'afii10055', 'afii10103', + 'afii10098', 'mu', 'paragraph', 'periodcentered', + 'afii10071', 'afii61352', 'afii10101', 'guillemotright', + 'afii10105', 'afii10054', 'afii10102', 'afii10104', + 'afii10017', 'afii10018', 'afii10019', 'afii10020', + 'afii10021', 'afii10022', 'afii10024', 'afii10025', + 'afii10026', 'afii10027', 'afii10028', 'afii10029', + 'afii10030', 'afii10031', 'afii10032', 'afii10033', + 'afii10034', 'afii10035', 'afii10036', 'afii10037', + 'afii10038', 'afii10039', 'afii10040', 'afii10041', + 'afii10042', 'afii10043', 'afii10044', 'afii10045', + 'afii10046', 'afii10047', 'afii10048', 'afii10049', + 'afii10065', 'afii10066', 'afii10067', 'afii10068', + 'afii10069', 'afii10070', 'afii10072', 'afii10073', + 'afii10074', 'afii10075', 'afii10076', 'afii10077', + 'afii10078', 'afii10079', 'afii10080', 'afii10081', + 'afii10082', 'afii10083', 'afii10084', 'afii10085', + 'afii10086', 'afii10087', 'afii10088', 'afii10089', + 'afii10090', 'afii10091', 'afii10092', 'afii10093', + 'afii10094', 'afii10095', 'afii10096', 'afii10097' + ], +# Western Europe + 'cp1252' => [ + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'exclam', 'quotedbl', 'numbersign', + 'dollar', 'percent', 'ampersand', 'quotesingle', + 'parenleft', 'parenright', 'asterisk', 'plus', + 'comma', 'hyphen', 'period', 'slash', + 'zero', 'one', 'two', 'three', + 'four', 'five', 'six', 'seven', + 'eight', 'nine', 'colon', 'semicolon', + 'less', 'equal', 'greater', 'question', + 'at', 'A', 'B', 'C', + 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', + 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 'bracketleft', + 'backslash', 'bracketright', 'asciicircum', 'underscore', + 'grave', 'a', 'b', 'c', + 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', + 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', + 't', 'u', 'v', 'w', + 'x', 'y', 'z', 'braceleft', + 'bar', 'braceright', 'asciitilde', '.notdef', + 'Euro', '.notdef', 'quotesinglbase', 'florin', + 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', + 'circumflex', 'perthousand', 'Scaron', 'guilsinglleft', + 'OE', '.notdef', 'Zcaron', '.notdef', + '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', + 'quotedblright', 'bullet', 'endash', 'emdash', + 'tilde', 'trademark', 'scaron', 'guilsinglright', + 'oe', '.notdef', 'zcaron', 'Ydieresis', + 'space', 'exclamdown', 'cent', 'sterling', + 'currency', 'yen', 'brokenbar', 'section', + 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft', + 'logicalnot', 'hyphen', 'registered', 'macron', + 'degree', 'plusminus', 'twosuperior', 'threesuperior', + 'acute', 'mu', 'paragraph', 'periodcentered', + 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright', + 'onequarter', 'onehalf', 'threequarters', 'questiondown', + 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', + 'Adieresis', 'Aring', 'AE', 'Ccedilla', + 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', + 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', + 'Eth', 'Ntilde', 'Ograve', 'Oacute', + 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', + 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', + 'Udieresis', 'Yacute', 'Thorn', 'germandbls', + 'agrave', 'aacute', 'acircumflex', 'atilde', + 'adieresis', 'aring', 'ae', 'ccedilla', + 'egrave', 'eacute', 'ecircumflex', 'edieresis', + 'igrave', 'iacute', 'icircumflex', 'idieresis', + 'eth', 'ntilde', 'ograve', 'oacute', + 'ocircumflex', 'otilde', 'odieresis', 'divide', + 'oslash', 'ugrave', 'uacute', 'ucircumflex', + 'udieresis', 'yacute', 'thorn', 'ydieresis' + ], +# Greek + 'cp1253' => [ + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'exclam', 'quotedbl', 'numbersign', + 'dollar', 'percent', 'ampersand', 'quotesingle', + 'parenleft', 'parenright', 'asterisk', 'plus', + 'comma', 'hyphen', 'period', 'slash', + 'zero', 'one', 'two', 'three', + 'four', 'five', 'six', 'seven', + 'eight', 'nine', 'colon', 'semicolon', + 'less', 'equal', 'greater', 'question', + 'at', 'A', 'B', 'C', + 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', + 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 'bracketleft', + 'backslash', 'bracketright', 'asciicircum', 'underscore', + 'grave', 'a', 'b', 'c', + 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', + 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', + 't', 'u', 'v', 'w', + 'x', 'y', 'z', 'braceleft', + 'bar', 'braceright', 'asciitilde', '.notdef', + 'Euro', '.notdef', 'quotesinglbase', 'florin', + 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', + '.notdef', 'perthousand', '.notdef', 'guilsinglleft', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', + 'quotedblright', 'bullet', 'endash', 'emdash', + '.notdef', 'trademark', '.notdef', 'guilsinglright', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'dieresistonos', 'Alphatonos', 'sterling', + 'currency', 'yen', 'brokenbar', 'section', + 'dieresis', 'copyright', '.notdef', 'guillemotleft', + 'logicalnot', 'hyphen', 'registered', 'afii00208', + 'degree', 'plusminus', 'twosuperior', 'threesuperior', + 'tonos', 'mu', 'paragraph', 'periodcentered', + 'Epsilontonos', 'Etatonos', 'Iotatonos', 'guillemotright', + 'Omicrontonos', 'onehalf', 'Upsilontonos', 'Omegatonos', + 'iotadieresistonos','Alpha', 'Beta', 'Gamma', + 'Delta', 'Epsilon', 'Zeta', 'Eta', + 'Theta', 'Iota', 'Kappa', 'Lambda', + 'Mu', 'Nu', 'Xi', 'Omicron', + 'Pi', 'Rho', '.notdef', 'Sigma', + 'Tau', 'Upsilon', 'Phi', 'Chi', + 'Psi', 'Omega', 'Iotadieresis', 'Upsilondieresis', + 'alphatonos', 'epsilontonos', 'etatonos', 'iotatonos', + 'upsilondieresistonos','alpha', 'beta', 'gamma', + 'delta', 'epsilon', 'zeta', 'eta', + 'theta', 'iota', 'kappa', 'lambda', + 'mu', 'nu', 'xi', 'omicron', + 'pi', 'rho', 'sigma1', 'sigma', + 'tau', 'upsilon', 'phi', 'chi', + 'psi', 'omega', 'iotadieresis', 'upsilondieresis', + 'omicrontonos', 'upsilontonos', 'omegatonos', '.notdef' + ], +# Turkish + 'cp1254' => [ + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'exclam', 'quotedbl', 'numbersign', + 'dollar', 'percent', 'ampersand', 'quotesingle', + 'parenleft', 'parenright', 'asterisk', 'plus', + 'comma', 'hyphen', 'period', 'slash', + 'zero', 'one', 'two', 'three', + 'four', 'five', 'six', 'seven', + 'eight', 'nine', 'colon', 'semicolon', + 'less', 'equal', 'greater', 'question', + 'at', 'A', 'B', 'C', + 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', + 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 'bracketleft', + 'backslash', 'bracketright', 'asciicircum', 'underscore', + 'grave', 'a', 'b', 'c', + 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', + 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', + 't', 'u', 'v', 'w', + 'x', 'y', 'z', 'braceleft', + 'bar', 'braceright', 'asciitilde', '.notdef', + 'Euro', '.notdef', 'quotesinglbase', 'florin', + 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', + 'circumflex', 'perthousand', 'Scaron', 'guilsinglleft', + 'OE', '.notdef', '.notdef', '.notdef', + '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', + 'quotedblright', 'bullet', 'endash', 'emdash', + 'tilde', 'trademark', 'scaron', 'guilsinglright', + 'oe', '.notdef', '.notdef', 'Ydieresis', + 'space', 'exclamdown', 'cent', 'sterling', + 'currency', 'yen', 'brokenbar', 'section', + 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft', + 'logicalnot', 'hyphen', 'registered', 'macron', + 'degree', 'plusminus', 'twosuperior', 'threesuperior', + 'acute', 'mu', 'paragraph', 'periodcentered', + 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright', + 'onequarter', 'onehalf', 'threequarters', 'questiondown', + 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', + 'Adieresis', 'Aring', 'AE', 'Ccedilla', + 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', + 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', + 'Gbreve', 'Ntilde', 'Ograve', 'Oacute', + 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', + 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', + 'Udieresis', 'Idotaccent', 'Scedilla', 'germandbls', + 'agrave', 'aacute', 'acircumflex', 'atilde', + 'adieresis', 'aring', 'ae', 'ccedilla', + 'egrave', 'eacute', 'ecircumflex', 'edieresis', + 'igrave', 'iacute', 'icircumflex', 'idieresis', + 'gbreve', 'ntilde', 'ograve', 'oacute', + 'ocircumflex', 'otilde', 'odieresis', 'divide', + 'oslash', 'ugrave', 'uacute', 'ucircumflex', + 'udieresis', 'dotlessi', 'scedilla', 'ydieresis' + ], +# Hebrew + 'cp1255' => [ + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'exclam', 'quotedbl', 'numbersign', + 'dollar', 'percent', 'ampersand', 'quotesingle', + 'parenleft', 'parenright', 'asterisk', 'plus', + 'comma', 'hyphen', 'period', 'slash', + 'zero', 'one', 'two', 'three', + 'four', 'five', 'six', 'seven', + 'eight', 'nine', 'colon', 'semicolon', + 'less', 'equal', 'greater', 'question', + 'at', 'A', 'B', 'C', + 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', + 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 'bracketleft', + 'backslash', 'bracketright', 'asciicircum', 'underscore', + 'grave', 'a', 'b', 'c', + 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', + 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', + 't', 'u', 'v', 'w', + 'x', 'y', 'z', 'braceleft', + 'bar', 'braceright', 'asciitilde', '.notdef', + 'Euro', '.notdef', 'quotesinglbase', 'florin', + 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', + 'circumflex', 'perthousand', '.notdef', 'guilsinglleft', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', + 'quotedblright', 'bullet', 'endash', 'emdash', + 'tilde', 'trademark', '.notdef', 'guilsinglright', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'exclamdown', 'cent', 'sterling', + 'afii57636', 'yen', 'brokenbar', 'section', + 'dieresis', 'copyright', 'multiply', 'guillemotleft', + 'logicalnot', 'sfthyphen', 'registered', 'macron', + 'degree', 'plusminus', 'twosuperior', 'threesuperior', + 'acute', 'mu', 'paragraph', 'middot', + 'cedilla', 'onesuperior', 'divide', 'guillemotright', + 'onequarter', 'onehalf', 'threequarters', 'questiondown', + 'afii57799', 'afii57801', 'afii57800', 'afii57802', + 'afii57793', 'afii57794', 'afii57795', 'afii57798', + 'afii57797', 'afii57806', '.notdef', 'afii57796', + 'afii57807', 'afii57839', 'afii57645', 'afii57841', + 'afii57842', 'afii57804', 'afii57803', 'afii57658', + 'afii57716', 'afii57717', 'afii57718', 'gereshhebrew', + 'gershayimhebrew','.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'afii57664', 'afii57665', 'afii57666', 'afii57667', + 'afii57668', 'afii57669', 'afii57670', 'afii57671', + 'afii57672', 'afii57673', 'afii57674', 'afii57675', + 'afii57676', 'afii57677', 'afii57678', 'afii57679', + 'afii57680', 'afii57681', 'afii57682', 'afii57683', + 'afii57684', 'afii57685', 'afii57686', 'afii57687', + 'afii57688', 'afii57689', 'afii57690', '.notdef', + '.notdef', 'afii299', 'afii300', '.notdef' + ], +# Baltic + 'cp1257' => [ + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'exclam', 'quotedbl', 'numbersign', + 'dollar', 'percent', 'ampersand', 'quotesingle', + 'parenleft', 'parenright', 'asterisk', 'plus', + 'comma', 'hyphen', 'period', 'slash', + 'zero', 'one', 'two', 'three', + 'four', 'five', 'six', 'seven', + 'eight', 'nine', 'colon', 'semicolon', + 'less', 'equal', 'greater', 'question', + 'at', 'A', 'B', 'C', + 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', + 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 'bracketleft', + 'backslash', 'bracketright', 'asciicircum', 'underscore', + 'grave', 'a', 'b', 'c', + 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', + 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', + 't', 'u', 'v', 'w', + 'x', 'y', 'z', 'braceleft', + 'bar', 'braceright', 'asciitilde', '.notdef', + 'Euro', '.notdef', 'quotesinglbase', '.notdef', + 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', + '.notdef', 'perthousand', '.notdef', 'guilsinglleft', + '.notdef', 'dieresis', 'caron', 'cedilla', + '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', + 'quotedblright', 'bullet', 'endash', 'emdash', + '.notdef', 'trademark', '.notdef', 'guilsinglright', + '.notdef', 'macron', 'ogonek', '.notdef', + 'space', '.notdef', 'cent', 'sterling', + 'currency', '.notdef', 'brokenbar', 'section', + 'Oslash', 'copyright', 'Rcommaaccent', 'guillemotleft', + 'logicalnot', 'hyphen', 'registered', 'AE', + 'degree', 'plusminus', 'twosuperior', 'threesuperior', + 'acute', 'mu', 'paragraph', 'periodcentered', + 'oslash', 'onesuperior', 'rcommaaccent', 'guillemotright', + 'onequarter', 'onehalf', 'threequarters', 'ae', + 'Aogonek', 'Iogonek', 'Amacron', 'Cacute', + 'Adieresis', 'Aring', 'Eogonek', 'Emacron', + 'Ccaron', 'Eacute', 'Zacute', 'Edotaccent', + 'Gcommaaccent', 'Kcommaaccent', 'Imacron', 'Lcommaaccent', + 'Scaron', 'Nacute', 'Ncommaaccent', 'Oacute', + 'Omacron', 'Otilde', 'Odieresis', 'multiply', + 'Uogonek', 'Lslash', 'Sacute', 'Umacron', + 'Udieresis', 'Zdotaccent', 'Zcaron', 'germandbls', + 'aogonek', 'iogonek', 'amacron', 'cacute', + 'adieresis', 'aring', 'eogonek', 'emacron', + 'ccaron', 'eacute', 'zacute', 'edotaccent', + 'gcommaaccent', 'kcommaaccent', 'imacron', 'lcommaaccent', + 'scaron', 'nacute', 'ncommaaccent', 'oacute', + 'omacron', 'otilde', 'odieresis', 'divide', + 'uogonek', 'lslash', 'sacute', 'umacron', + 'udieresis', 'zdotaccent', 'zcaron', 'dotaccent' + ], +# Vietnamese + 'cp1258' => [ + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'exclam', 'quotedbl', 'numbersign', + 'dollar', 'percent', 'ampersand', 'quotesingle', + 'parenleft', 'parenright', 'asterisk', 'plus', + 'comma', 'hyphen', 'period', 'slash', + 'zero', 'one', 'two', 'three', + 'four', 'five', 'six', 'seven', + 'eight', 'nine', 'colon', 'semicolon', + 'less', 'equal', 'greater', 'question', + 'at', 'A', 'B', 'C', + 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', + 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 'bracketleft', + 'backslash', 'bracketright', 'asciicircum', 'underscore', + 'grave', 'a', 'b', 'c', + 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', + 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', + 't', 'u', 'v', 'w', + 'x', 'y', 'z', 'braceleft', + 'bar', 'braceright', 'asciitilde', '.notdef', + 'Euro', '.notdef', 'quotesinglbase', 'florin', + 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', + 'circumflex', 'perthousand', '.notdef', 'guilsinglleft', + 'OE', '.notdef', '.notdef', '.notdef', + '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', + 'quotedblright', 'bullet', 'endash', 'emdash', + 'tilde', 'trademark', '.notdef', 'guilsinglright', + 'oe', '.notdef', '.notdef', 'Ydieresis', + 'space', 'exclamdown', 'cent', 'sterling', + 'currency', 'yen', 'brokenbar', 'section', + 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft', + 'logicalnot', 'hyphen', 'registered', 'macron', + 'degree', 'plusminus', 'twosuperior', 'threesuperior', + 'acute', 'mu', 'paragraph', 'periodcentered', + 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright', + 'onequarter', 'onehalf', 'threequarters', 'questiondown', + 'Agrave', 'Aacute', 'Acircumflex', 'Abreve', + 'Adieresis', 'Aring', 'AE', 'Ccedilla', + 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', + 'gravecomb', 'Iacute', 'Icircumflex', 'Idieresis', + 'Dcroat', 'Ntilde', 'hookabovecomb', 'Oacute', + 'Ocircumflex', 'Ohorn', 'Odieresis', 'multiply', + 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', + 'Udieresis', 'Uhorn', 'tildecomb', 'germandbls', + 'agrave', 'aacute', 'acircumflex', 'abreve', + 'adieresis', 'aring', 'ae', 'ccedilla', + 'egrave', 'eacute', 'ecircumflex', 'edieresis', + 'acutecomb', 'iacute', 'icircumflex', 'idieresis', + 'dcroat', 'ntilde', 'dotbelowcomb', 'oacute', + 'ocircumflex', 'ohorn', 'odieresis', 'divide', + 'oslash', 'ugrave', 'uacute', 'ucircumflex', + 'udieresis', 'uhorn', 'dong', 'ydieresis' + ], +# Thai + 'cp874' => [ + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'exclam', 'quotedbl', 'numbersign', + 'dollar', 'percent', 'ampersand', 'quotesingle', + 'parenleft', 'parenright', 'asterisk', 'plus', + 'comma', 'hyphen', 'period', 'slash', + 'zero', 'one', 'two', 'three', + 'four', 'five', 'six', 'seven', + 'eight', 'nine', 'colon', 'semicolon', + 'less', 'equal', 'greater', 'question', + 'at', 'A', 'B', 'C', + 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', + 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 'bracketleft', + 'backslash', 'bracketright', 'asciicircum', 'underscore', + 'grave', 'a', 'b', 'c', + 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', + 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', + 't', 'u', 'v', 'w', + 'x', 'y', 'z', 'braceleft', + 'bar', 'braceright', 'asciitilde', '.notdef', + 'Euro', '.notdef', '.notdef', '.notdef', + '.notdef', 'ellipsis', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', + 'quotedblright', 'bullet', 'endash', 'emdash', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'kokaithai', 'khokhaithai', 'khokhuatthai', + 'khokhwaithai', 'khokhonthai', 'khorakhangthai', 'ngonguthai', + 'chochanthai', 'chochingthai', 'chochangthai', 'sosothai', + 'chochoethai', 'yoyingthai', 'dochadathai', 'topatakthai', + 'thothanthai', 'thonangmonthothai', 'thophuthaothai', 'nonenthai', + 'dodekthai', 'totaothai', 'thothungthai', 'thothahanthai', + 'thothongthai', 'nonuthai', 'bobaimaithai', 'poplathai', + 'phophungthai', 'fofathai', 'phophanthai', 'fofanthai', + 'phosamphaothai', 'momathai', 'yoyakthai', 'roruathai', + 'ruthai', 'lolingthai', 'luthai', 'wowaenthai', + 'sosalathai', 'sorusithai', 'sosuathai', 'hohipthai', + 'lochulathai', 'oangthai', 'honokhukthai', 'paiyannoithai', + 'saraathai', 'maihanakatthai', 'saraaathai', 'saraamthai', + 'saraithai', 'saraiithai', 'sarauethai', 'saraueethai', + 'sarauthai', 'sarauuthai', 'phinthuthai', '.notdef', + '.notdef', '.notdef', '.notdef', 'bahtthai', + 'saraethai', 'saraaethai', 'saraothai', 'saraaimaimuanthai', + 'saraaimaimalaithai', 'lakkhangyaothai', 'maiyamokthai', 'maitaikhuthai', + 'maiekthai', 'maithothai', 'maitrithai', 'maichattawathai', + 'thanthakhatthai', 'nikhahitthai', 'yamakkanthai', 'fongmanthai', + 'zerothai', 'onethai', 'twothai', 'threethai', + 'fourthai', 'fivethai', 'sixthai', 'seventhai', + 'eightthai', 'ninethai', 'angkhankhuthai', 'khomutthai', + '.notdef', '.notdef', '.notdef', '.notdef' + ], +# Western Europe + 'ISO-8859-1' => [ + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'exclam', 'quotedbl', 'numbersign', + 'dollar', 'percent', 'ampersand', 'quotesingle', + 'parenleft', 'parenright', 'asterisk', 'plus', + 'comma', 'hyphen', 'period', 'slash', + 'zero', 'one', 'two', 'three', + 'four', 'five', 'six', 'seven', + 'eight', 'nine', 'colon', 'semicolon', + 'less', 'equal', 'greater', 'question', + 'at', 'A', 'B', 'C', + 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', + 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 'bracketleft', + 'backslash', 'bracketright', 'asciicircum', 'underscore', + 'grave', 'a', 'b', 'c', + 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', + 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', + 't', 'u', 'v', 'w', + 'x', 'y', 'z', 'braceleft', + 'bar', 'braceright', 'asciitilde', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'exclamdown', 'cent', 'sterling', + 'currency', 'yen', 'brokenbar', 'section', + 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft', + 'logicalnot', 'hyphen', 'registered', 'macron', + 'degree', 'plusminus', 'twosuperior', 'threesuperior', + 'acute', 'mu', 'paragraph', 'periodcentered', + 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright', + 'onequarter', 'onehalf', 'threequarters', 'questiondown', + 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', + 'Adieresis', 'Aring', 'AE', 'Ccedilla', + 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', + 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', + 'Eth', 'Ntilde', 'Ograve', 'Oacute', + 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', + 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', + 'Udieresis', 'Yacute', 'Thorn', 'germandbls', + 'agrave', 'aacute', 'acircumflex', 'atilde', + 'adieresis', 'aring', 'ae', 'ccedilla', + 'egrave', 'eacute', 'ecircumflex', 'edieresis', + 'igrave', 'iacute', 'icircumflex', 'idieresis', + 'eth', 'ntilde', 'ograve', 'oacute', + 'ocircumflex', 'otilde', 'odieresis', 'divide', + 'oslash', 'ugrave', 'uacute', 'ucircumflex', + 'udieresis', 'yacute', 'thorn', 'ydieresis' + ], +# Central Europe + 'ISO-8859-2' => [ + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'exclam', 'quotedbl', 'numbersign', + 'dollar', 'percent', 'ampersand', 'quotesingle', + 'parenleft', 'parenright', 'asterisk', 'plus', + 'comma', 'hyphen', 'period', 'slash', + 'zero', 'one', 'two', 'three', + 'four', 'five', 'six', 'seven', + 'eight', 'nine', 'colon', 'semicolon', + 'less', 'equal', 'greater', 'question', + 'at', 'A', 'B', 'C', + 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', + 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 'bracketleft', + 'backslash', 'bracketright', 'asciicircum', 'underscore', + 'grave', 'a', 'b', 'c', + 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', + 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', + 't', 'u', 'v', 'w', + 'x', 'y', 'z', 'braceleft', + 'bar', 'braceright', 'asciitilde', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'Aogonek', 'breve', 'Lslash', + 'currency', 'Lcaron', 'Sacute', 'section', + 'dieresis', 'Scaron', 'Scedilla', 'Tcaron', + 'Zacute', 'hyphen', 'Zcaron', 'Zdotaccent', + 'degree', 'aogonek', 'ogonek', 'lslash', + 'acute', 'lcaron', 'sacute', 'caron', + 'cedilla', 'scaron', 'scedilla', 'tcaron', + 'zacute', 'hungarumlaut', 'zcaron', 'zdotaccent', + 'Racute', 'Aacute', 'Acircumflex', 'Abreve', + 'Adieresis', 'Lacute', 'Cacute', 'Ccedilla', + 'Ccaron', 'Eacute', 'Eogonek', 'Edieresis', + 'Ecaron', 'Iacute', 'Icircumflex', 'Dcaron', + 'Dcroat', 'Nacute', 'Ncaron', 'Oacute', + 'Ocircumflex', 'Ohungarumlaut', 'Odieresis', 'multiply', + 'Rcaron', 'Uring', 'Uacute', 'Uhungarumlaut', + 'Udieresis', 'Yacute', 'Tcommaaccent', 'germandbls', + 'racute', 'aacute', 'acircumflex', 'abreve', + 'adieresis', 'lacute', 'cacute', 'ccedilla', + 'ccaron', 'eacute', 'eogonek', 'edieresis', + 'ecaron', 'iacute', 'icircumflex', 'dcaron', + 'dcroat', 'nacute', 'ncaron', 'oacute', + 'ocircumflex', 'ohungarumlaut', 'odieresis', 'divide', + 'rcaron', 'uring', 'uacute', 'uhungarumlaut', + 'udieresis', 'yacute', 'tcommaaccent', 'dotaccent' + ], +# Baltic + 'ISO-8859-4' => [ + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'exclam', 'quotedbl', 'numbersign', + 'dollar', 'percent', 'ampersand', 'quotesingle', + 'parenleft', 'parenright', 'asterisk', 'plus', + 'comma', 'hyphen', 'period', 'slash', + 'zero', 'one', 'two', 'three', + 'four', 'five', 'six', 'seven', + 'eight', 'nine', 'colon', 'semicolon', + 'less', 'equal', 'greater', 'question', + 'at', 'A', 'B', 'C', + 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', + 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 'bracketleft', + 'backslash', 'bracketright', 'asciicircum', 'underscore', + 'grave', 'a', 'b', 'c', + 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', + 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', + 't', 'u', 'v', 'w', + 'x', 'y', 'z', 'braceleft', + 'bar', 'braceright', 'asciitilde', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'Aogonek', 'kgreenlandic', 'Rcommaaccent', + 'currency', 'Itilde', 'Lcommaaccent', 'section', + 'dieresis', 'Scaron', 'Emacron', 'Gcommaaccent', + 'Tbar', 'hyphen', 'Zcaron', 'macron', + 'degree', 'aogonek', 'ogonek', 'rcommaaccent', + 'acute', 'itilde', 'lcommaaccent', 'caron', + 'cedilla', 'scaron', 'emacron', 'gcommaaccent', + 'tbar', 'Eng', 'zcaron', 'eng', + 'Amacron', 'Aacute', 'Acircumflex', 'Atilde', + 'Adieresis', 'Aring', 'AE', 'Iogonek', + 'Ccaron', 'Eacute', 'Eogonek', 'Edieresis', + 'Edotaccent', 'Iacute', 'Icircumflex', 'Imacron', + 'Dcroat', 'Ncommaaccent', 'Omacron', 'Kcommaaccent', + 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', + 'Oslash', 'Uogonek', 'Uacute', 'Ucircumflex', + 'Udieresis', 'Utilde', 'Umacron', 'germandbls', + 'amacron', 'aacute', 'acircumflex', 'atilde', + 'adieresis', 'aring', 'ae', 'iogonek', + 'ccaron', 'eacute', 'eogonek', 'edieresis', + 'edotaccent', 'iacute', 'icircumflex', 'imacron', + 'dcroat', 'ncommaaccent', 'omacron', 'kcommaaccent', + 'ocircumflex', 'otilde', 'odieresis', 'divide', + 'oslash', 'uogonek', 'uacute', 'ucircumflex', + 'udieresis', 'utilde', 'umacron', 'dotaccent' + ], +# Cyrillic + 'ISO-8859-5' => [ + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'exclam', 'quotedbl', 'numbersign', + 'dollar', 'percent', 'ampersand', 'quotesingle', + 'parenleft', 'parenright', 'asterisk', 'plus', + 'comma', 'hyphen', 'period', 'slash', + 'zero', 'one', 'two', 'three', + 'four', 'five', 'six', 'seven', + 'eight', 'nine', 'colon', 'semicolon', + 'less', 'equal', 'greater', 'question', + 'at', 'A', 'B', 'C', + 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', + 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 'bracketleft', + 'backslash', 'bracketright', 'asciicircum', 'underscore', + 'grave', 'a', 'b', 'c', + 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', + 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', + 't', 'u', 'v', 'w', + 'x', 'y', 'z', 'braceleft', + 'bar', 'braceright', 'asciitilde', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'afii10023', 'afii10051', 'afii10052', + 'afii10053', 'afii10054', 'afii10055', 'afii10056', + 'afii10057', 'afii10058', 'afii10059', 'afii10060', + 'afii10061', 'hyphen', 'afii10062', 'afii10145', + 'afii10017', 'afii10018', 'afii10019', 'afii10020', + 'afii10021', 'afii10022', 'afii10024', 'afii10025', + 'afii10026', 'afii10027', 'afii10028', 'afii10029', + 'afii10030', 'afii10031', 'afii10032', 'afii10033', + 'afii10034', 'afii10035', 'afii10036', 'afii10037', + 'afii10038', 'afii10039', 'afii10040', 'afii10041', + 'afii10042', 'afii10043', 'afii10044', 'afii10045', + 'afii10046', 'afii10047', 'afii10048', 'afii10049', + 'afii10065', 'afii10066', 'afii10067', 'afii10068', + 'afii10069', 'afii10070', 'afii10072', 'afii10073', + 'afii10074', 'afii10075', 'afii10076', 'afii10077', + 'afii10078', 'afii10079', 'afii10080', 'afii10081', + 'afii10082', 'afii10083', 'afii10084', 'afii10085', + 'afii10086', 'afii10087', 'afii10088', 'afii10089', + 'afii10090', 'afii10091', 'afii10092', 'afii10093', + 'afii10094', 'afii10095', 'afii10096', 'afii10097', + 'afii61352', 'afii10071', 'afii10099', 'afii10100', + 'afii10101', 'afii10102', 'afii10103', 'afii10104', + 'afii10105', 'afii10106', 'afii10107', 'afii10108', + 'afii10109', 'section', 'afii10110', 'afii10193' + ], +# Greek + 'ISO-8859-7' => [ + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'exclam', 'quotedbl', 'numbersign', + 'dollar', 'percent', 'ampersand', 'quotesingle', + 'parenleft', 'parenright', 'asterisk', 'plus', + 'comma', 'hyphen', 'period', 'slash', + 'zero', 'one', 'two', 'three', + 'four', 'five', 'six', 'seven', + 'eight', 'nine', 'colon', 'semicolon', + 'less', 'equal', 'greater', 'question', + 'at', 'A', 'B', 'C', + 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', + 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 'bracketleft', + 'backslash', 'bracketright', 'asciicircum', 'underscore', + 'grave', 'a', 'b', 'c', + 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', + 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', + 't', 'u', 'v', 'w', + 'x', 'y', 'z', 'braceleft', + 'bar', 'braceright', 'asciitilde', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'quoteleft', 'quoteright', 'sterling', + '.notdef', '.notdef', 'brokenbar', 'section', + 'dieresis', 'copyright', '.notdef', 'guillemotleft', + 'logicalnot', 'hyphen', '.notdef', 'afii00208', + 'degree', 'plusminus', 'twosuperior', 'threesuperior', + 'tonos', 'dieresistonos', 'Alphatonos', 'periodcentered', + 'Epsilontonos', 'Etatonos', 'Iotatonos', 'guillemotright', + 'Omicrontonos', 'onehalf', 'Upsilontonos', 'Omegatonos', + 'iotadieresistonos','Alpha', 'Beta', 'Gamma', + 'Delta', 'Epsilon', 'Zeta', 'Eta', + 'Theta', 'Iota', 'Kappa', 'Lambda', + 'Mu', 'Nu', 'Xi', 'Omicron', + 'Pi', 'Rho', '.notdef', 'Sigma', + 'Tau', 'Upsilon', 'Phi', 'Chi', + 'Psi', 'Omega', 'Iotadieresis', 'Upsilondieresis', + 'alphatonos', 'epsilontonos', 'etatonos', 'iotatonos', + 'upsilondieresistonos','alpha', 'beta', 'gamma', + 'delta', 'epsilon', 'zeta', 'eta', + 'theta', 'iota', 'kappa', 'lambda', + 'mu', 'nu', 'xi', 'omicron', + 'pi', 'rho', 'sigma1', 'sigma', + 'tau', 'upsilon', 'phi', 'chi', + 'psi', 'omega', 'iotadieresis', 'upsilondieresis', + 'omicrontonos', 'upsilontonos', 'omegatonos', '.notdef' + ], +# Turkish + 'ISO-8859-9' => [ + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'exclam', 'quotedbl', 'numbersign', + 'dollar', 'percent', 'ampersand', 'quotesingle', + 'parenleft', 'parenright', 'asterisk', 'plus', + 'comma', 'hyphen', 'period', 'slash', + 'zero', 'one', 'two', 'three', + 'four', 'five', 'six', 'seven', + 'eight', 'nine', 'colon', 'semicolon', + 'less', 'equal', 'greater', 'question', + 'at', 'A', 'B', 'C', + 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', + 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 'bracketleft', + 'backslash', 'bracketright', 'asciicircum', 'underscore', + 'grave', 'a', 'b', 'c', + 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', + 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', + 't', 'u', 'v', 'w', + 'x', 'y', 'z', 'braceleft', + 'bar', 'braceright', 'asciitilde', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'exclamdown', 'cent', 'sterling', + 'currency', 'yen', 'brokenbar', 'section', + 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft', + 'logicalnot', 'hyphen', 'registered', 'macron', + 'degree', 'plusminus', 'twosuperior', 'threesuperior', + 'acute', 'mu', 'paragraph', 'periodcentered', + 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright', + 'onequarter', 'onehalf', 'threequarters', 'questiondown', + 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', + 'Adieresis', 'Aring', 'AE', 'Ccedilla', + 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', + 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', + 'Gbreve', 'Ntilde', 'Ograve', 'Oacute', + 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', + 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', + 'Udieresis', 'Idotaccent', 'Scedilla', 'germandbls', + 'agrave', 'aacute', 'acircumflex', 'atilde', + 'adieresis', 'aring', 'ae', 'ccedilla', + 'egrave', 'eacute', 'ecircumflex', 'edieresis', + 'igrave', 'iacute', 'icircumflex', 'idieresis', + 'gbreve', 'ntilde', 'ograve', 'oacute', + 'ocircumflex', 'otilde', 'odieresis', 'divide', + 'oslash', 'ugrave', 'uacute', 'ucircumflex', + 'udieresis', 'dotlessi', 'scedilla', 'ydieresis' + ], +# Thai + 'ISO-8859-11' => [ + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'exclam', 'quotedbl', 'numbersign', + 'dollar', 'percent', 'ampersand', 'quotesingle', + 'parenleft', 'parenright', 'asterisk', 'plus', + 'comma', 'hyphen', 'period', 'slash', + 'zero', 'one', 'two', 'three', + 'four', 'five', 'six', 'seven', + 'eight', 'nine', 'colon', 'semicolon', + 'less', 'equal', 'greater', 'question', + 'at', 'A', 'B', 'C', + 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', + 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 'bracketleft', + 'backslash', 'bracketright', 'asciicircum', 'underscore', + 'grave', 'a', 'b', 'c', + 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', + 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', + 't', 'u', 'v', 'w', + 'x', 'y', 'z', 'braceleft', + 'bar', 'braceright', 'asciitilde', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'kokaithai', 'khokhaithai', 'khokhuatthai', + 'khokhwaithai', 'khokhonthai', 'khorakhangthai', 'ngonguthai', + 'chochanthai', 'chochingthai', 'chochangthai', 'sosothai', + 'chochoethai', 'yoyingthai', 'dochadathai', 'topatakthai', + 'thothanthai', 'thonangmonthothai','thophuthaothai', 'nonenthai', + 'dodekthai', 'totaothai', 'thothungthai', 'thothahanthai', + 'thothongthai', 'nonuthai', 'bobaimaithai', 'poplathai', + 'phophungthai', 'fofathai', 'phophanthai', 'fofanthai', + 'phosamphaothai', 'momathai', 'yoyakthai', 'roruathai', + 'ruthai', 'lolingthai', 'luthai', 'wowaenthai', + 'sosalathai', 'sorusithai', 'sosuathai', 'hohipthai', + 'lochulathai', 'oangthai', 'honokhukthai', 'paiyannoithai', + 'saraathai', 'maihanakatthai', 'saraaathai', 'saraamthai', + 'saraithai', 'saraiithai', 'sarauethai', 'saraueethai', + 'sarauthai', 'sarauuthai', 'phinthuthai', '.notdef', + '.notdef', '.notdef', '.notdef', 'bahtthai', + 'saraethai', 'saraaethai', 'saraothai', 'saraaimaimuanthai', + 'saraaimaimalaithai','lakkhangyaothai','maiyamokthai', 'maitaikhuthai', + 'maiekthai', 'maithothai', 'maitrithai', 'maichattawathai', + 'thanthakhatthai','nikhahitthai', 'yamakkanthai', 'fongmanthai', + 'zerothai', 'onethai', 'twothai', 'threethai', + 'fourthai', 'fivethai', 'sixthai', 'seventhai', + 'eightthai', 'ninethai', 'angkhankhuthai', 'khomutthai', + '.notdef', '.notdef', '.notdef', '.notdef' + ], +# Western Europe + 'ISO-8859-15' => [ + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'exclam', 'quotedbl', 'numbersign', + 'dollar', 'percent', 'ampersand', 'quotesingle', + 'parenleft', 'parenright', 'asterisk', 'plus', + 'comma', 'hyphen', 'period', 'slash', + 'zero', 'one', 'two', 'three', + 'four', 'five', 'six', 'seven', + 'eight', 'nine', 'colon', 'semicolon', + 'less', 'equal', 'greater', 'question', + 'at', 'A', 'B', 'C', + 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', + 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 'bracketleft', + 'backslash', 'bracketright', 'asciicircum', 'underscore', + 'grave', 'a', 'b', 'c', + 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', + 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', + 't', 'u', 'v', 'w', + 'x', 'y', 'z', 'braceleft', + 'bar', 'braceright', 'asciitilde', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'exclamdown', 'cent', 'sterling', + 'Euro', 'yen', 'Scaron', 'section', + 'scaron', 'copyright', 'ordfeminine', 'guillemotleft', + 'logicalnot', 'hyphen', 'registered', 'macron', + 'degree', 'plusminus', 'twosuperior', 'threesuperior', + 'Zcaron', 'mu', 'paragraph', 'periodcentered', + 'zcaron', 'onesuperior', 'ordmasculine', 'guillemotright', + 'OE', 'oe', 'Ydieresis', 'questiondown', + 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', + 'Adieresis', 'Aring', 'AE', 'Ccedilla', + 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', + 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', + 'Eth', 'Ntilde', 'Ograve', 'Oacute', + 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', + 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', + 'Udieresis', 'Yacute', 'Thorn', 'germandbls', + 'agrave', 'aacute', 'acircumflex', 'atilde', + 'adieresis', 'aring', 'ae', 'ccedilla', + 'egrave', 'eacute', 'ecircumflex', 'edieresis', + 'igrave', 'iacute', 'icircumflex', 'idieresis', + 'eth', 'ntilde', 'ograve', 'oacute', + 'ocircumflex', 'otilde', 'odieresis', 'divide', + 'oslash', 'ugrave', 'uacute', 'ucircumflex', + 'udieresis', 'yacute', 'thorn', 'ydieresis' + ], +# Central Europe + 'ISO-8859-16' => [ + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'exclam', 'quotedbl', 'numbersign', + 'dollar', 'percent', 'ampersand', 'quotesingle', + 'parenleft', 'parenright', 'asterisk', 'plus', + 'comma', 'hyphen', 'period', 'slash', + 'zero', 'one', 'two', 'three', + 'four', 'five', 'six', 'seven', + 'eight', 'nine', 'colon', 'semicolon', + 'less', 'equal', 'greater', 'question', + 'at', 'A', 'B', 'C', + 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', + 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 'bracketleft', + 'backslash', 'bracketright', 'asciicircum', 'underscore', + 'grave', 'a', 'b', 'c', + 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', + 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', + 't', 'u', 'v', 'w', + 'x', 'y', 'z', 'braceleft', + 'bar', 'braceright', 'asciitilde', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'Aogonek', 'aogonek', 'Lslash', + 'Euro', 'quotedblbase', 'Scaron', 'section', + 'scaron', 'copyright', 'Scommaaccent', 'guillemotleft', + 'Zacute', 'hyphen', 'zacute', 'Zdotaccent', + 'degree', 'plusminus', 'Ccaron', 'lslash', + 'Zcaron', 'quotedblright', 'paragraph', 'periodcentered', + 'zcaron', 'ccaron', 'scommaaccent', 'guillemotright', + 'OE', 'oe', 'Ydieresis', 'zdotaccent', + 'Agrave', 'Aacute', 'Acircumflex', 'Abreve', + 'Adieresis', 'Cacute', 'AE', 'Ccedilla', + 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', + 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', + 'Dcroat', 'Nacute', 'Ograve', 'Oacute', + 'Ocircumflex', 'Ohungarumlaut', 'Odieresis', 'Sacute', + 'Uhungarumlaut', 'Ugrave', 'Uacute', 'Ucircumflex', + 'Udieresis', 'Eogonek', 'Tcommaaccent', 'germandbls', + 'agrave', 'aacute', 'acircumflex', 'abreve', + 'adieresis', 'cacute', 'ae', 'ccedilla', + 'egrave', 'eacute', 'ecircumflex', 'edieresis', + 'igrave', 'iacute', 'icircumflex', 'idieresis', + 'dcroat', 'nacute', 'ograve', 'oacute', + 'ocircumflex', 'ohungarumlaut', 'odieresis', 'sacute', + 'uhungarumlaut', 'ugrave', 'uacute', 'ucircumflex', + 'udieresis', 'eogonek', 'tcommaaccent', 'ydieresis' + ], +# Russian + 'KOI8-R' => [ + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'exclam', 'quotedbl', 'numbersign', + 'dollar', 'percent', 'ampersand', 'quotesingle', + 'parenleft', 'parenright', 'asterisk', 'plus', + 'comma', 'hyphen', 'period', 'slash', + 'zero', 'one', 'two', 'three', + 'four', 'five', 'six', 'seven', + 'eight', 'nine', 'colon', 'semicolon', + 'less', 'equal', 'greater', 'question', + 'at', 'A', 'B', 'C', + 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', + 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 'bracketleft', + 'backslash', 'bracketright', 'asciicircum', 'underscore', + 'grave', 'a', 'b', 'c', + 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', + 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', + 't', 'u', 'v', 'w', + 'x', 'y', 'z', 'braceleft', + 'bar', 'braceright', 'asciitilde', '.notdef', + 'SF100000', 'SF110000', 'SF010000', 'SF030000', + 'SF020000', 'SF040000', 'SF080000', 'SF090000', + 'SF060000', 'SF070000', 'SF050000', 'upblock', + 'dnblock', 'block', 'lfblock', 'rtblock', + 'ltshade', 'shade', 'dkshade', 'integraltp', + 'filledbox', 'periodcentered', 'radical', 'approxequal', + 'lessequal', 'greaterequal', 'space', 'integralbt', + 'degree', 'twosuperior', 'periodcentered', 'divide', + 'SF430000', 'SF240000', 'SF510000', 'afii10071', + 'SF520000', 'SF390000', 'SF220000', 'SF210000', + 'SF250000', 'SF500000', 'SF490000', 'SF380000', + 'SF280000', 'SF270000', 'SF260000', 'SF360000', + 'SF370000', 'SF420000', 'SF190000', 'afii10023', + 'SF200000', 'SF230000', 'SF470000', 'SF480000', + 'SF410000', 'SF450000', 'SF460000', 'SF400000', + 'SF540000', 'SF530000', 'SF440000', 'copyright', + 'afii10096', 'afii10065', 'afii10066', 'afii10088', + 'afii10069', 'afii10070', 'afii10086', 'afii10068', + 'afii10087', 'afii10074', 'afii10075', 'afii10076', + 'afii10077', 'afii10078', 'afii10079', 'afii10080', + 'afii10081', 'afii10097', 'afii10082', 'afii10083', + 'afii10084', 'afii10085', 'afii10072', 'afii10067', + 'afii10094', 'afii10093', 'afii10073', 'afii10090', + 'afii10095', 'afii10091', 'afii10089', 'afii10092', + 'afii10048', 'afii10017', 'afii10018', 'afii10040', + 'afii10021', 'afii10022', 'afii10038', 'afii10020', + 'afii10039', 'afii10026', 'afii10027', 'afii10028', + 'afii10029', 'afii10030', 'afii10031', 'afii10032', + 'afii10033', 'afii10049', 'afii10034', 'afii10035', + 'afii10036', 'afii10037', 'afii10024', 'afii10019', + 'afii10046', 'afii10045', 'afii10025', 'afii10042', + 'afii10047', 'afii10043', 'afii10041', 'afii10044' + ], +# Ukrainian + 'KOI8-U' => [ + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + '.notdef', '.notdef', '.notdef', '.notdef', + 'space', 'exclam', 'quotedbl', 'numbersign', + 'dollar', 'percent', 'ampersand', 'quotesingle', + 'parenleft', 'parenright', 'asterisk', 'plus', + 'comma', 'hyphen', 'period', 'slash', + 'zero', 'one', 'two', 'three', + 'four', 'five', 'six', 'seven', + 'eight', 'nine', 'colon', 'semicolon', + 'less', 'equal', 'greater', 'question', + 'at', 'A', 'B', 'C', + 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', + 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 'bracketleft', + 'backslash', 'bracketright', 'asciicircum', 'underscore', + 'grave', 'a', 'b', 'c', + 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', + 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', + 't', 'u', 'v', 'w', + 'x', 'y', 'z', 'braceleft', + 'bar', 'braceright', 'asciitilde', '.notdef', + 'SF100000', 'SF110000', 'SF010000', 'SF030000', + 'SF020000', 'SF040000', 'SF080000', 'SF090000', + 'SF060000', 'SF070000', 'SF050000', 'upblock', + 'dnblock', 'block', 'lfblock', 'rtblock', + 'ltshade', 'shade', 'dkshade', 'integraltp', + 'filledbox', 'bullet', 'radical', 'approxequal', + 'lessequal', 'greaterequal', 'space', 'integralbt', + 'degree', 'twosuperior', 'periodcentered', 'divide', + 'SF430000', 'SF240000', 'SF510000', 'afii10071', + 'afii10101', 'SF390000', 'afii10103', 'afii10104', + 'SF250000', 'SF500000', 'SF490000', 'SF380000', + 'SF280000', 'afii10098', 'SF260000', 'SF360000', + 'SF370000', 'SF420000', 'SF190000', 'afii10023', + 'afii10053', 'SF230000', 'afii10055', 'afii10056', + 'SF410000', 'SF450000', 'SF460000', 'SF400000', + 'SF540000', 'afii10050', 'SF440000', 'copyright', + 'afii10096', 'afii10065', 'afii10066', 'afii10088', + 'afii10069', 'afii10070', 'afii10086', 'afii10068', + 'afii10087', 'afii10074', 'afii10075', 'afii10076', + 'afii10077', 'afii10078', 'afii10079', 'afii10080', + 'afii10081', 'afii10097', 'afii10082', 'afii10083', + 'afii10084', 'afii10085', 'afii10072', 'afii10067', + 'afii10094', 'afii10093', 'afii10073', 'afii10090', + 'afii10095', 'afii10091', 'afii10089', 'afii10092', + 'afii10048', 'afii10017', 'afii10018', 'afii10040', + 'afii10021', 'afii10022', 'afii10038', 'afii10020', + 'afii10039', 'afii10026', 'afii10027', 'afii10028', + 'afii10029', 'afii10030', 'afii10031', 'afii10032', + 'afii10033', 'afii10049', 'afii10034', 'afii10035', + 'afii10036', 'afii10037', 'afii10024', 'afii10019', + 'afii10046', 'afii10045', 'afii10025', 'afii10042', + 'afii10047', 'afii10043', 'afii10041', 'afii10044' + ] +} + +def ReadAFM(file, map) + + # Read a font metric file + a = IO.readlines(file) + + raise "File no found: #{file}" if a.size == 0 + + widths = {} + fm = {} + fix = { 'Edot' => 'Edotaccent', 'edot' => 'edotaccent', + 'Idot' => 'Idotaccent', + 'Zdot' => 'Zdotaccent', 'zdot' => 'zdotaccent', + 'Odblacute' => 'Ohungarumlaut', 'odblacute' => 'ohungarumlaut', + 'Udblacute' => 'Uhungarumlaut', 'udblacute' => 'uhungarumlaut', + 'Gcedilla' => 'Gcommaaccent', 'gcedilla' => 'gcommaaccent', + 'Kcedilla' => 'Kcommaaccent', 'kcedilla' => 'kcommaaccent', + 'Lcedilla' => 'Lcommaaccent', 'lcedilla' => 'lcommaaccent', + 'Ncedilla' => 'Ncommaaccent', 'ncedilla' => 'ncommaaccent', + 'Rcedilla' => 'Rcommaaccent', 'rcedilla' => 'rcommaaccent', + 'Scedilla' => 'Scommaaccent',' scedilla' => 'scommaaccent', + 'Tcedilla' => 'Tcommaaccent',' tcedilla' => 'tcommaaccent', + 'Dslash' => 'Dcroat', 'dslash' => 'dcroat', + 'Dmacron' => 'Dcroat', 'dmacron' => 'dcroat', + 'combininggraveaccent' => 'gravecomb', + 'combininghookabove' => 'hookabovecomb', + 'combiningtildeaccent' => 'tildecomb', + 'combiningacuteaccent' => 'acutecomb', + 'combiningdotbelow' => 'dotbelowcomb', + 'dongsign' => 'dong' + } + + a.each do |line| + + e = line.rstrip.split(' ') + next if e.size < 2 + + code = e[0] + param = e[1] + + if code == 'C' then + + # Character metrics + cc = e[1].to_i + w = e[4] + gn = e[7] + + gn = 'Euro' if gn[-4, 4] == '20AC' + + if fix[gn] then + + # Fix incorrect glyph name + 0.upto(map.size - 1) do |i| + if map[i] == fix[gn] then + map[i] = gn + end + end + end + + if map.size == 0 then + # Symbolic font: use built-in encoding + widths[cc] = w + else + widths[gn] = w + fm['CapXHeight'] = e[13].to_i if gn == 'X' + end + + fm['MissingWidth'] = w if gn == '.notdef' + + elsif code == 'FontName' then + fm['FontName'] = param + elsif code == 'Weight' then + fm['Weight'] = param + elsif code == 'ItalicAngle' then + fm['ItalicAngle'] = param.to_f + elsif code == 'Ascender' then + fm['Ascender'] = param.to_i + elsif code == 'Descender' then + fm['Descender'] = param.to_i + elsif code == 'UnderlineThickness' then + fm['UnderlineThickness'] = param.to_i + elsif code == 'UnderlinePosition' then + fm['UnderlinePosition'] = param.to_i + elsif code == 'IsFixedPitch' then + fm['IsFixedPitch'] = (param == 'true') + elsif code == 'FontBBox' then + fm['FontBBox'] = "[#{e[1]},#{e[2]},#{e[3]},#{e[4]}]" + elsif code == 'CapHeight' then + fm['CapHeight'] = param.to_i + elsif code == 'StdVW' then + fm['StdVW'] = param.to_i + end + end + + raise 'FontName not found' unless fm['FontName'] + + if map.size > 0 then + widths['.notdef'] = 600 unless widths['.notdef'] + + if (widths['Delta'] == nil) && widths['increment'] then + widths['Delta'] = widths['increment'] + end + + # Order widths according to map + 0.upto(255) do |i| + if widths[map[i]] == nil + puts "Warning: character #{map[i]} is missing" + widths[i] = widths['.notdef'] + else + widths[i] = widths[map[i]] + end + end + end + + fm['Widths'] = widths + + return fm +end + +def MakeFontDescriptor(fm, symbolic) + + # Ascent + asc = fm['Ascender'] ? fm['Ascender'] : 1000 + fd = "{\n 'Ascent' => '#{asc}'" + + # Descent + desc = fm['Descender'] ? fm['Descender'] : -200 + fd += ", 'Descent' => '#{desc}'" + + # CapHeight + if fm['CapHeight'] then + ch = fm['CapHeight'] + elsif fm['CapXHeight'] + ch = fm['CapXHeight'] + else + ch = asc + end + fd += ", 'CapHeight' => '#{ch}'" + + # Flags + flags = 0 + + if fm['IsFixedPitch'] then + flags += 1 << 0 + end + + if symbolic then + flags += 1 << 2 + else + flags += 1 << 5 + end + + if fm['ItalicAngle'] && (fm['ItalicAngle'] != 0) then + flags += 1 << 6 + end + + fd += ",\n 'Flags' => '#{flags}'" + + # FontBBox + if fm['FontBBox'] then + fbb = fm['FontBBox'].gsub(/,/, ' ') + else + fbb = "[0 #{desc - 100} 1000 #{asc + 100}]" + end + + fd += ", 'FontBBox' => '#{fbb}'" + + # ItalicAngle + ia = fm['ItalicAngle'] ? fm['ItalicAngle'] : 0 + fd += ",\n 'ItalicAngle' => '#{ia}'" + + # StemV + if fm['StdVW'] then + stemv = fm['StdVW'] + elsif fm['Weight'] && (/bold|black/i =~ fm['Weight']) + stemv = 120 + else + stemv = 70 + end + + fd += ", 'StemV' => '#{stemv}'" + + # MissingWidth + if fm['MissingWidth'] then + fd += ", 'MissingWidth' => '#{fm['MissingWidth']}'" + end + + fd += "\n }" + return fd +end + +def MakeWidthArray(fm) + + # Make character width array + s = " [\n " + + cw = fm['Widths'] + + 0.upto(255) do |i| + s += "%5d" % cw[i] + s += "," if i != 255 + s += "\n " if (i % 8) == 7 + end + + s += ']' + + return s +end + +def MakeFontEncoding(map) + + # Build differences from reference encoding + ref = Charencodings['cp1252'] + s = '' + last = 0 + 32.upto(255) do |i| + if map[i] != ref[i] then + if i != last + 1 then + s += i.to_s + ' ' + end + last = i + s += '/' + map[i] + ' ' + end + end + return s.rstrip +end + +def ReadShort(f) + a = f.read(2).unpack('n') + return a[0] +end + +def ReadLong(f) + a = f.read(4).unpack('N') + return a[0] +end + +def CheckTTF(file) + + rl = false + pp = false + e = false + + # Check if font license allows embedding + File.open(file, 'rb') do |f| + + # Extract number of tables + f.seek(4, IO::SEEK_CUR) + nb = ReadShort(f) + f.seek(6, IO::SEEK_CUR) + + # Seek OS/2 table + found = false + 0.upto(nb - 1) do |i| + if f.read(4) == 'OS/2' then + found = true + break + end + + f.seek(12, IO::SEEK_CUR) + end + + if ! found then + return + end + + f.seek(4, IO::SEEK_CUR) + offset = ReadLong(f) + f.seek(offset, IO::SEEK_SET) + + # Extract fsType flags + f.seek(8, IO::SEEK_CUR) + fsType = ReadShort(f) + + rl = (fsType & 0x02) != 0 + pp = (fsType & 0x04) != 0 + e = (fsType & 0x08) != 0 + end + + if rl && ( ! pp) && ( ! e) then + puts 'Warning: font license does not allow embedding' + end +end + +# +# fontfile: path to TTF file (or empty string if not to be embedded) +# afmfile: path to AFM file +# enc: font encoding (or empty string for symbolic fonts) +# patch: optional patch for encoding +# type : font type if $fontfile is empty +# +def MakeFont(fontfile, afmfile, enc = 'cp1252', patch = {}, type = 'TrueType') + # Generate a font definition file + if (enc != nil) && (enc != '') then + map = Charencodings[enc] + patch.each { |cc, gn| map[cc] = gn } + else + map = [] + end + + raise "Error: AFM file not found: #{afmfile}" unless File.exists?(afmfile) + + fm = ReadAFM(afmfile, map) + + if (enc != nil) && (enc != '') then + diff = MakeFontEncoding(map) + else + diff = '' + end + + fd = MakeFontDescriptor(fm, (map.size == 0)) + + # Find font type + if fontfile then + ext = File.extname(fontfile).downcase.sub(/^\./, '') + + if ext == 'ttf' then + type = 'TrueType' + elsif ext == 'pfb' + type = 'Type1' + else + raise "Error: unrecognized font file extension: #{ext}" + end + else + raise "Error: incorrect font type: #{type}" if (type != 'TrueType') && (type != 'Type1') + end + printf "type = #{type}\n" + # Start generation + s = "# #{fm['FontName']} font definition\n\n" + s += "module FontDef\n" + s += " def FontDef.type\n '#{type}'\n end\n" + s += " def FontDef.name\n '#{fm['FontName']}'\n end\n" + s += " def FontDef.desc\n #{fd}\n end\n" + + if fm['UnderlinePosition'] == nil then + fm['UnderlinePosition'] = -100 + end + + if fm['UnderlineThickness'] == nil then + fm['UnderlineThickness'] = 50 + end + + s += " def FontDef.up\n #{fm['UnderlinePosition']}\n end\n" + s += " def FontDef.ut\n #{fm['UnderlineThickness']}\n end\n" + + w = MakeWidthArray(fm) + s += " def FontDef.cw\n#{w}\n end\n" + + s += " def FontDef.enc\n '#{enc}'\n end\n" + s += " def FontDef.diff\n #{(diff == nil) || (diff == '') ? 'nil' : '\'' + diff '\''}\n end\n" + + basename = File.basename(afmfile, '.*') + + if fontfile then + # Embedded font + if ! File.exist?(fontfile) then + raise "Error: font file not found: #{fontfile}" + end + + if type == 'TrueType' then + CheckTTF(fontfile) + end + + file = '' + File.open(fontfile, 'rb') do |f| + file = f.read() + end + + if type == 'Type1' then + # Find first two sections and discard third one + header = file[0] == 128 + file = file[6, file.length - 6] if header + + pos = file.index('eexec') + raise 'Error: font file does not seem to be valid Type1' if pos == nil + + size1 = pos + 6 + + file = file[0, size1] + file[size1 + 6, file.length - (size1 + 6)] if header && file[size1] == 128 + + pos = file.index('00000000') + raise 'Error: font file does not seem to be valid Type1' if pos == nil + + size2 = pos - size1 + file = file[0, size1 + size2] + end + + if require 'zlib' then + File.open(basename + '.z', 'wb') { |f| f.write(Zlib::Deflate.deflate(file)) } + s += " def FontDef.file\n '#{basename}.z'\n end\n" + puts "Font file compressed ('#{basename}.z')" + else + s += " def FontDef.file\n '#{File.basename(fontfile)}'\n end\n" + puts 'Notice: font file could not be compressed (zlib not available)' + end + + if type == 'Type1' then + s += " def FontDef.size1\n '#{size1}'\n end\n" + s += " def FontDef.size2\n '#{size2}'\n end\n" + else + s += " def FontDef.originalsize\n '#{File.size(fontfile)}'\n end\n" + end + + else + # Not embedded font + s += " def FontDef.file\n ''\n end\n" + end + + s += "end\n" + File.open(basename + '.rb', 'w') { |file| file.write(s)} + puts "Font definition file generated (#{basename}.rb)" +end + + +if $0 == __FILE__ then + if ARGV.length >= 3 then + enc = ARGV[2] + else + enc = 'cp1252' + end + + if ARGV.length >= 4 then + patch = ARGV[3] + else + patch = {} + end + + if ARGV.length >= 5 then + type = ARGV[4] + else + type = 'TrueType' + end + + MakeFont(ARGV[0], ARGV[1], enc, patch, type) +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf.rb --- a/vendor/plugins/rfpdf/lib/rfpdf.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/rfpdf/lib/rfpdf.rb Mon Jul 25 14:23:37 2011 +0100 @@ -20,12 +20,21 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -$LOAD_PATH.unshift(File.dirname(__FILE__)) +require 'action_controller' +require 'action_view' -require 'rfpdf/errors' -require 'rfpdf/view' -require 'rfpdf/fpdf' -require 'rfpdf/rfpdf' -require 'rfpdf/chinese' -require 'rfpdf/japanese' -require 'rfpdf/korean' +require 'rfpdf/action_controller' +require 'rfpdf/action_view' + +require 'rfpdf/template_handler/compile_support' + +require 'rfpdf/template_handlers/base' + + +class ActionController::Base + include RFPDF::ActionController +end + +class ActionView::Base + include RFPDF::ActionView +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/.svn/all-wcprops --- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/rfpdf/lib/rfpdf/.svn/all-wcprops Mon Jul 25 14:23:37 2011 +0100 @@ -1,65 +1,35 @@ K 25 svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/3389/trunk/vendor/plugins/rfpdf/lib/rfpdf -END -chinese.rb -K 25 -svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/1497/trunk/vendor/plugins/rfpdf/lib/rfpdf/chinese.rb +V 69 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/lib/rfpdf END fpdf.rb K 25 svn:wc:ra_dav:version-url -V 61 -/svn/!svn/ver/67/trunk/vendor/plugins/rfpdf/lib/rfpdf/fpdf.rb +V 77 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/lib/rfpdf/fpdf.rb END -korean.rb +action_controller.rb K 25 svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/3389/trunk/vendor/plugins/rfpdf/lib/rfpdf/korean.rb +V 90 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/lib/rfpdf/action_controller.rb END -rfpdf.rb +action_view.rb K 25 svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/67/trunk/vendor/plugins/rfpdf/lib/rfpdf/rfpdf.rb +V 84 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/lib/rfpdf/action_view.rb END -makefont.rb +math.rb K 25 svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/248/trunk/vendor/plugins/rfpdf/lib/rfpdf/makefont.rb -END -bookmark.rb -K 25 -svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/67/trunk/vendor/plugins/rfpdf/lib/rfpdf/bookmark.rb -END -fpdf_eps.rb -K 25 -svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/67/trunk/vendor/plugins/rfpdf/lib/rfpdf/fpdf_eps.rb -END -japanese.rb -K 25 -svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/287/trunk/vendor/plugins/rfpdf/lib/rfpdf/japanese.rb -END -view.rb -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/1623/trunk/vendor/plugins/rfpdf/lib/rfpdf/view.rb +V 77 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/lib/rfpdf/math.rb END errors.rb K 25 svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/67/trunk/vendor/plugins/rfpdf/lib/rfpdf/errors.rb +V 79 +/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/rfpdf/lib/rfpdf/errors.rb END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/.svn/entries --- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/rfpdf/lib/rfpdf/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,15 +1,15 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/rfpdf/lib/rfpdf +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/rfpdf/lib/rfpdf http://redmine.rubyforge.org/svn -2010-02-07T12:30:44.486359Z -3389 -jplang +2011-04-29T05:35:26.392715Z +5565 +tmaruyama @@ -26,51 +26,17 @@ e93f8b46-1217-0410-a6f0-8f06a7374b81 -chinese.rb -file - - - - -2010-09-23T14:37:45.851779Z -ddaf6868455af432aac221e53aadc10a -2008-06-07T08:39:06.277997Z -1497 -jplang - - - - - - - - - - - - - - - - - - - - - -12854 - fpdf.rb file -2010-09-23T14:37:45.851779Z -69406d6105df50a9552702d133889fd6 -2006-11-21T18:34:04.275680Z -49 -jplang +2011-07-14T09:28:10.000000Z +7544c2319f2234d41bfd3a3c5890a365 +2011-04-29T05:35:26.392715Z +5565 +tmaruyama @@ -92,19 +58,19 @@ -59472 +62355 -korean.rb +action_controller.rb file -2010-09-23T14:37:45.855835Z -61d6e8e3bc2a549b1adf12c8e5148019 -2010-02-07T12:30:44.486359Z -3389 -jplang +2011-07-14T09:28:10.000000Z +6f2929ce34df39ce61169beb62a82880 +2011-03-30T03:23:54.585875Z +5247 +tmaruyama @@ -126,19 +92,22 @@ -11383 +856 -rfpdf.rb +template_handler +dir + +action_view.rb file -2010-09-23T14:37:45.855835Z -f504607d615e4d100eb506daf3dfe038 -2006-11-21T18:34:04.275680Z -49 -jplang +2011-07-14T09:28:10.000000Z +a943c8232b59f2fc8d62ad61547e69c3 +2011-03-30T03:23:54.585875Z +5247 +tmaruyama @@ -160,19 +129,22 @@ -12035 +238 -makefont.rb +template_handlers +dir + +math.rb file -2010-09-23T14:37:45.855835Z -267f469d753d389beda7bb8d39ef5e79 -2007-02-18T10:33:22.252239Z -248 -jplang +2011-07-14T09:28:10.000000Z +486d11ccf745b8acc2fed390c864156c +2011-03-30T03:23:54.585875Z +5247 +tmaruyama @@ -194,143 +166,7 @@ -105223 - -bookmark.rb -file - - - - -2010-09-23T14:37:45.851779Z -8b971319c65229a7075520cf5ce0fb84 -2006-11-21T18:34:04.275680Z -49 -jplang - - - - - - - - - - - - - - - - - - - - - -2765 - -fpdf_eps.rb -file - - - - -2010-09-23T14:37:45.851779Z -c11f99560b9b2e12cf9c679f8ef11c37 -2006-11-21T18:34:04.275680Z -49 -jplang - - - - - - - - - - - - - - - - - - - - - -4369 - -japanese.rb -file - - - - -2010-09-23T14:37:45.851779Z -48cd43d67257151aebb2e0aeee6f4cbf -2007-03-01T19:49:04.518842Z -287 -jplang - - - - - - - - - - - - - - - - - - - - - -11330 - -view.rb -file - - - - -2010-09-23T14:37:45.855835Z -9bdec08cb98e4413cfb9c39877f3734d -2008-07-04T17:58:14.743502Z -1623 -jplang - - - - - - - - - - - - - - - - - - - - - -3153 +2461 errors.rb file @@ -338,11 +174,11 @@ -2010-09-23T14:37:45.851779Z -e759935ac5ac9027073e9a2f3543b231 -2006-11-21T18:34:04.275680Z -49 -jplang +2011-07-14T09:28:10.000000Z +dcdfd96eee7cdf09d81118ab447b70ff +2011-03-30T03:23:54.585875Z +5247 +tmaruyama @@ -364,5 +200,5 @@ -71 +97 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/bookmark.rb.svn-base --- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/bookmark.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -# Translation of the bookmark class from the PHP FPDF script from Olivier Plathey -# Translated by Sylvain Lafleur and ?? with the help of Brian Ollenberger -# -# First added in 1.53b -# -# Usage is as follows: -# -# require 'fpdf' -# require 'bookmark' -# pdf = FPDF.new -# pdf.extend(PDF_Bookmark) -# -# This allows it to be combined with other extensions, such as the Chinese -# module. - -module PDF_Bookmark - def PDF_Bookmark.extend_object(o) - o.instance_eval('@outlines,@OutlineRoot=[],0') - super(o) - end - - def Bookmark(txt,level=0,y=0) - y=self.GetY() if y==-1 - @outlines.push({'t'=>txt,'l'=>level,'y'=>y,'p'=>self.PageNo()}) - end - - def putbookmarks - @nb=@outlines.size - return if @nb==0 - lru=[] - level=0 - @outlines.each_index do |i| - o=@outlines[i] - if o['l']>0 - parent=lru[o['l']-1] - # Set parent and last pointers - @outlines[i]['parent']=parent - @outlines[parent]['last']=i - if o['l']>level - # Level increasing: set first pointer - @outlines[parent]['first']=i - end - else - @outlines[i]['parent']=@nb - end - if o['l']<=level and i>0 - # Set prev and next pointers - prev=lru[o['l']] - @outlines[prev]['next']=i - @outlines[i]['prev']=prev - end - lru[o['l']]=i - level=o['l'] - end - # Outline items - n=@n+1 - @outlines.each_index do |i| - o=@outlines[i] - newobj - out('<>') - out('endobj') - end - # Outline root - newobj - @OutlineRoot=@n - out('<>') - out('endobj') - end - - def putresources - super - putbookmarks - end - - def putcatalog - super - if not @outlines.empty? - out('/Outlines '+@OutlineRoot.to_s+' 0 R') - out('/PageMode /UseOutlines') - end - end -end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/chinese.rb.svn-base --- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/chinese.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,473 +0,0 @@ -# Copyright (c) 2006 4ssoM LLC -# 1.12 contributed by Ed Moss. -# -# The MIT License -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# This is direct port of chinese.php -# -# Chinese PDF support. -# -# Usage is as follows: -# -# require 'fpdf' -# require 'chinese' -# pdf = FPDF.new -# pdf.extend(PDF_Chinese) -# -# This allows it to be combined with other extensions, such as the bookmark -# module. - -module PDF_Chinese - - Big5_widths={' '=>250,'!'=>250,'"'=>408,'#'=>668,''=>490,'%'=>875,'&'=>698,'\''=>250, - '('=>240,')'=>240,'*'=>417,'+'=>667,','=>250,'-'=>313,'.'=>250,'/'=>520,'0'=>500,'1'=>500, - '2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>250,''=>250, - '<'=>667,'='=>667,'>'=>667,'?'=>396,'@'=>921,'A'=>677,'B'=>615,'C'=>719,'D'=>760,'E'=>625, - 'F'=>552,'G'=>771,'H'=>802,'I'=>354,'J'=>354,'K'=>781,'L'=>604,'M'=>927,'N'=>750,'O'=>823, - 'P'=>563,'Q'=>823,'R'=>729,'S'=>542,'T'=>698,'U'=>771,'V'=>729,'W'=>948,'X'=>771,'Y'=>677, - 'Z'=>635,'['=>344,'\\'=>520,']'=>344,'^'=>469,'_'=>500,'`'=>250,'a'=>469,'b'=>521,'c'=>427, - 'd'=>521,'e'=>438,'f'=>271,'g'=>469,'h'=>531,'i'=>250,'j'=>250,'k'=>458,'l'=>240,'m'=>802, - 'n'=>531,'o'=>500,'p'=>521,'q'=>521,'r'=>365,'s'=>333,'t'=>292,'u'=>521,'v'=>458,'w'=>677, - 'x'=>479,'y'=>458,'z'=>427,'{'=>480,'|'=>496,'end'=>480,'~'=>667} - - GB_widths={' '=>207,'!'=>270,'"'=>342,'#'=>467,''=>462,'%'=>797,'&'=>710,'\''=>239, - '('=>374,')'=>374,'*'=>423,'+'=>605,','=>238,'-'=>375,'.'=>238,'/'=>334,'0'=>462,'1'=>462, - '2'=>462,'3'=>462,'4'=>462,'5'=>462,'6'=>462,'7'=>462,'8'=>462,'9'=>462,':'=>238,''=>238, - '<'=>605,'='=>605,'>'=>605,'?'=>344,'@'=>748,'A'=>684,'B'=>560,'C'=>695,'D'=>739,'E'=>563, - 'F'=>511,'G'=>729,'H'=>793,'I'=>318,'J'=>312,'K'=>666,'L'=>526,'M'=>896,'N'=>758,'O'=>772, - 'P'=>544,'Q'=>772,'R'=>628,'S'=>465,'T'=>607,'U'=>753,'V'=>711,'W'=>972,'X'=>647,'Y'=>620, - 'Z'=>607,'['=>374,'\\'=>333,']'=>374,'^'=>606,'_'=>500,'`'=>239,'a'=>417,'b'=>503,'c'=>427, - 'd'=>529,'e'=>415,'f'=>264,'g'=>444,'h'=>518,'i'=>241,'j'=>230,'k'=>495,'l'=>228,'m'=>793, - 'n'=>527,'o'=>524,'p'=>524,'q'=>504,'r'=>338,'s'=>336,'t'=>277,'u'=>517,'v'=>450,'w'=>652, - 'x'=>466,'y'=>452,'z'=>407,'{'=>370,'|'=>258,'end'=>370,'~'=>605} - - def AddCIDFont(family,style,name,cw,cMap,registry) -#ActionController::Base::logger.debug registry.to_a.join(":").to_s - fontkey=family.downcase+style.upcase - unless @fonts[fontkey].nil? - Error("Font already added: family style") - end - i=@fonts.length+1 - name=name.gsub(' ','') - @fonts[fontkey]={'i'=>i,'type'=>'Type0','name'=>name,'up'=>-130,'ut'=>40,'cw'=>cw, 'CMap'=>cMap,'registry'=>registry} - end - - def AddCIDFonts(family,name,cw,cMap,registry) - AddCIDFont(family,'',name,cw,cMap,registry) - AddCIDFont(family,'B',name+',Bold',cw,cMap,registry) - AddCIDFont(family,'I',name+',Italic',cw,cMap,registry) - AddCIDFont(family,'BI',name+',BoldItalic',cw,cMap,registry) - end - - def AddBig5Font(family='Big5',name='MSungStd-Light-Acro') - #Add Big5 font with proportional Latin - cw=Big5_widths - cMap='ETenms-B5-H' - registry={'ordering'=>'CNS1','supplement'=>0} -#ActionController::Base::logger.debug registry.to_a.join(":").to_s - AddCIDFonts(family,name,cw,cMap,registry) - end - - def AddBig5hwFont(family='Big5-hw',name='MSungStd-Light-Acro') - #Add Big5 font with half-witdh Latin - cw = {} - 32.upto(126) do |i| - cw[i.chr]=500 - end - cMap='ETen-B5-H' - registry={'ordering'=>'CNS1','supplement'=>0} - AddCIDFonts(family,name,cw,cMap,registry) - end - - def AddGBFont(family='GB',name='STSongStd-Light-Acro') - #Add GB font with proportional Latin - cw=GB_widths - cMap='GBKp-EUC-H' - registry={'ordering'=>'GB1','supplement'=>2} - AddCIDFonts(family,name,cw,cMap,registry) - end - - def AddGBhwFont(family='GB-hw',name='STSongStd-Light-Acro') - #Add GB font with half-width Latin - 32.upto(126) do |i| - cw[i.chr]=500 - end - cMap='GBK-EUC-H' - registry={'ordering'=>'GB1','supplement'=>2} - AddCIDFonts(family,name,cw,cMap,registry) - end - - def GetStringWidth(s) - if(@CurrentFont['type']=='Type0') - return GetMBStringWidth(s) - else - return super(s) - end - end - - def GetMBStringWidth(s) - #Multi-byte version of GetStringWidth() - l=0 - cw=@CurrentFont['cw'] - nb=s.length - i=0 - while(i0 and s[nb-1]=="\n") - nb-=1 - end - b=0 - if(border) - if(border==1) - border='LTRB' - b='LRT' - b2='LR' - else - b2='' - if(border.to_s.index('L')) - b2+='L' - end - if(border.to_s.index('R')) - b2+='R' - end - b=border.to_s.index('T') ? b2+'T' : b2 - end - end - sep=-1 - i=0 - j=0 - l=0 - nl=1 - while(iwmax) - #Automatic line break - if(sep==-1 or i==j) - if(i==j) - i+=ascii ? 1 : 3 - end - Cell(w,h,s[j,i-j],b,2,align,fill) - else - Cell(w,h,s[j,sep-j],b,2,align,fill) - i=(s[sep]==' ') ? sep+1 : sep - end - sep=-1 - j=i - l=0 -# nl+=1 - if(border and nl==2) - b=b2 - end - else - i+=ascii ? 1 : 3 - end - end - #Last chunk - if(border and not border.to_s.index('B').nil?) - b+='B' - end - Cell(w,h,s[j,i-j],b,2,align,fill) - @x=@lMargin - end - - def Write(h,txt,link='') - if(@CurrentFont['type']=='Type0') - MBWrite(h,txt,link) - else - super(h,txt,link) - end - end - - def MBWrite(h,txt,link) - #Multi-byte version of Write() - cw=@CurrentFont['cw'] - w=@w-@rMargin-@x - wmax=(w-2*@cMargin)*1000/@FontSize - s=txt.gsub("\r",'') - nb=s.length - sep=-1 - i=0 - j=0 - l=0 - nl=1 - while(iwmax) - #Automatic line break - if(sep==-1 or i==j) - if(@x>@lMargin) - #Move to next line - @x=@lMargin - @y+=h - w=@w-@rMargin-@x - wmax=(w-2*@cMargin)*1000/@FontSize - i+=1 - nl+=1 - next - end - if(i==j) - i+=ascii ? 1 : 3 - end - Cell(w,h,s[j,i-j],0,2,'',0,link) - else - Cell(w,h,s[j,sep-j],0,2,'',0,link) - i=(s[sep]==' ') ? sep+1 : sep - end - sep=-1 - j=i - l=0 - if(nl==1) - @x=@lMargin - w=@w-@rMargin-@x - wmax=(w-2*@cMargin)*1000/@FontSize - end - nl+=1 - else - i+=ascii ? 1 : 3 - end - end - #Last chunk - if(i!=j) - Cell(l/1000*@FontSize,h,s[j,i-j],0,0,'',0,link) - end - end - -private - - def putfonts() - nf=@n - @diffs.each do |diff| - #Encodings - newobj() - out('<>') - out('endobj') - end - # mqr=get_magic_quotes_runtime() - # set_magic_quotes_runtime(0) - @FontFiles.each_pair do |file, info| - #Font file embedding - newobj() - @FontFiles[file]['n']=@n - if(defined('FPDF_FONTPATH')) - file=FPDF_FONTPATH+file - end - size=filesize(file) - if(!size) - Error('Font file not found') - end - out('<>') - f=fopen(file,'rb') - putstream(fread(f,size)) - fclose(f) - out('endobj') - end -# - # set_magic_quotes_runtime(mqr) -# - @fonts.each_pair do |k, font| - #Font objects - newobj() - @fonts[k]['n']=@n - out('<>') - out('endobj') - if(font['type']!='core') - #Widths - newobj() - cw=font['cw'] - s='[' - 32.upto(255) do |i| - s+=cw[i.chr]+' ' - end - out(s+']') - out('endobj') - #Descriptor - newobj() - s='<>') - out('endobj') - end - end - end - end - - def putType0(font) - #Type0 - out('/Subtype /Type0') - out('/BaseFont /'+font['name']+'-'+font['CMap']) - out('/Encoding /'+font['CMap']) - out('/DescendantFonts ['+(@n+1).to_s+' 0 R]') - out('>>') - out('endobj') - #CIDFont - newobj() - out('<>') - out('/FontDescriptor '+(@n+1).to_s+' 0 R') - if(font['CMap']=='ETen-B5-H') - w='13648 13742 500' - elsif(font['CMap']=='GBK-EUC-H') - w='814 907 500 7716 [500]' - else - # ActionController::Base::logger.debug font['cw'].keys.sort.join(' ').to_s - # ActionController::Base::logger.debug font['cw'].values.join(' ').to_s - w='1 [' - font['cw'].keys.sort.each {|key| - w+=font['cw'][key].to_s + " " -# ActionController::Base::logger.debug key.to_s -# ActionController::Base::logger.debug font['cw'][key].to_s - } - w +=']' - end - out('/W ['+w+']>>') - out('endobj') - #Font descriptor - newobj() - out('<>') - out('endobj') - end -end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/errors.rb.svn-base --- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/errors.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/errors.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -1,4 +1,6 @@ module RFPDF - class GenerationError < StandardError #:nodoc: + module Errors + class GenerationError < StandardError #:nodoc: + end end end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/fpdf.rb.svn-base --- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/fpdf.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/fpdf.rb.svn-base Mon Jul 25 14:23:37 2011 +0100 @@ -16,13 +16,18 @@ # Bookmarks contributed by Sylvain Lafleur. # # 1.53 contributed by Ed Moss -# Handle '\n' at the beginning of a string +# Make sure all \n references are inside double quotes - Fix some multicell bugs +# Handle "\n" at the beginning of a string # Bookmarks contributed by Sylvain Lafleur. require 'date' require 'zlib' class FPDF + include RFPDF + + attr_accessor :default_font + FPDF_VERSION = '1.53d' Charwidths = { @@ -63,6 +68,7 @@ @pages=[] @OrientationChanges=[] @state=0 + @default_font = "arial" @fonts={} @FontFiles={} @diffs=[] @@ -169,6 +175,10 @@ @PDFVersion='1.3' end + def GetMargins() + return @lMargin, @tMargin, @rMargin + end + def SetMargins(left, top, right=-1) # Set left, top and right margins @lMargin=left @@ -334,6 +344,7 @@ @TextColor=tc @ColorFlag=cf end + alias_method :add_page, :AddPage def Header # To be implemented in your inherited class @@ -378,13 +389,21 @@ end @ColorFlag=(@FillColor!=@TextColor) end + + def GetCharWidth(widths, index) + if index.is_a?(String) + widths[index.ord] + else + widths[index] + end + end def GetStringWidth(s) # Get width of a string in the current font cw=@CurrentFont['cw'] w=0 s.each_byte do |c| - w=w+cw[c] + w=w+GetCharWidth(cw, c) end w*@FontSize/1000.0 end @@ -395,6 +414,70 @@ out(sprintf('%.2f w',width*@k)) if @page>0 end + def Circle(mid_x, mid_y, radius, style='') + mid_y = (@h-mid_y)*@k + out(sprintf("q\n")) # postscript content in pdf + # init line type etc. with /GSD gs G g (grey) RG rg (RGB) w=line witdh etc. + out(sprintf("1 j\n")) # line join + # translate ("move") circle to mid_y, mid_y + out(sprintf("1 0 0 1 %f %f cm", mid_x, mid_y)) + kappa = 0.5522847498307933984022516322796 + # Quadrant 1 + x_s = 0.0 # 12 o'clock + y_s = 0.0 + radius + x_e = 0.0 + radius # 3 o'clock + y_e = 0.0 + out(sprintf("%f %f m\n", x_s, y_s)) # move to 12 o'clock + # cubic bezier control point 1, start height and kappa * radius to the right + bx_e1 = x_s + (radius * kappa) + by_e1 = y_s + # cubic bezier control point 2, end and kappa * radius above + bx_e2 = x_e + by_e2 = y_e + (radius * kappa) + # draw cubic bezier from current point to x_e/y_e with bx_e1/by_e1 and bx_e2/by_e2 as bezier control points + out(sprintf("%f %f %f %f %f %f c\n", bx_e1, by_e1, bx_e2, by_e2, x_e, y_e)) + # Quadrant 2 + x_s = x_e + y_s = y_e # 3 o'clock + x_e = 0.0 + y_e = 0.0 - radius # 6 o'clock + bx_e1 = x_s # cubic bezier point 1 + by_e1 = y_s - (radius * kappa) + bx_e2 = x_e + (radius * kappa) # cubic bezier point 2 + by_e2 = y_e + out(sprintf("%f %f %f %f %f %f c\n", bx_e1, by_e1, bx_e2, by_e2, x_e, y_e)) + # Quadrant 3 + x_s = x_e + y_s = y_e # 6 o'clock + x_e = 0.0 - radius + y_e = 0.0 # 9 o'clock + bx_e1 = x_s - (radius * kappa) # cubic bezier point 1 + by_e1 = y_s + bx_e2 = x_e # cubic bezier point 2 + by_e2 = y_e - (radius * kappa) + out(sprintf("%f %f %f %f %f %f c\n", bx_e1, by_e1, bx_e2, by_e2, x_e, y_e)) + # Quadrant 4 + x_s = x_e + y_s = y_e # 9 o'clock + x_e = 0.0 + y_e = 0.0 + radius # 12 o'clock + bx_e1 = x_s # cubic bezier point 1 + by_e1 = y_s + (radius * kappa) + bx_e2 = x_e - (radius * kappa) # cubic bezier point 2 + by_e2 = y_e + out(sprintf("%f %f %f %f %f %f c\n", bx_e1, by_e1, bx_e2, by_e2, x_e, y_e)) + if style=='F' + op='f' + elsif style=='FD' or style=='DF' + op='b' + else + op='s' + end + out(sprintf("#{op}\n")) # stroke circle, do not fill and close path + # for filling etc. b, b*, f, f* + out(sprintf("Q\n")) # finish postscript in PDF + end + def Line(x1, y1, x2, y2) # Draw a line out(sprintf('%.2f %.2f m %.2f %.2f l S', @@ -410,6 +493,7 @@ else op='S' end + # x y width height re out(sprintf('%.2f %.2f %.2f %.2f re %s', x*@k,(@h-y)*@k,w*@k,-h*@k,op)) end @@ -558,10 +642,7 @@ def Text(x, y, txt) # Output a string - txt.gsub!(')', '\\)') - txt.gsub!('(', '\\(') - txt.gsub!('\\', '\\\\') - s=sprintf('BT %.2f %.2f Td (%s) Tj ET',x*@k,(@h-y)*@k,txt); + s=sprintf('BT %.2f %.2f Td (%s) Tj ET',x*@k,(@h-y)*@k, escape(txt)); s=s+' '+dounderline(x,y,txt) if @underline and txt!='' s='q '+@TextColor+' '+s+' Q' if @ColorFlag out(s) @@ -572,9 +653,17 @@ @AutoPageBreak end + def BreakThePage?(h) + if (@y + h) > @PageBreakTrigger and !@InFooter and self.AcceptPageBreak + true + else + false + end + end + def Cell(w,h=0,txt='',border=0,ln=0,align='',fill=0,link='') # Output a cell - if @y+h>@PageBreakTrigger and !@InFooter and self.AcceptPageBreak + if self.BreakThePage?(h) # Automatic page break x=@x ws=@ws @@ -627,14 +716,11 @@ else dx=@cMargin end - txt = txt.gsub(')', '\\)') - txt.gsub!('(', '\\(') - txt.gsub!('\\', '\\\\') if @ColorFlag s=s+'q '+@TextColor+' ' end s=s+sprintf('BT %.2f %.2f Td (%s) Tj ET', - (@x+dx)*@k,(@h-(@y+0.5*h+0.3*@FontSize))*@k,txt) + (@x+dx)*@k,(@h-(@y+0.5*h+0.3*@FontSize))*@k,escape(txt)) s=s+' '+dounderline(@x+dx,@y+0.5*h+0.3*@FontSize,txt) if @underline s=s+' Q' if @ColorFlag if link and link != '' @@ -657,9 +743,9 @@ cw=@CurrentFont['cw'] w=@w-@rMargin-@x if w==0 wmax=(w-2*@cMargin)*1000/@FontSize - s=txt.gsub('\r','') + s=txt.gsub("\r",'') nb=s.length - nb=nb-1 if nb>0 and s[nb-1].chr=='\n' + nb=nb-1 if nb>0 and s[nb-1].chr=="\n" b=0 if border!=0 if border==1 @@ -674,70 +760,66 @@ end end sep=-1 - i=0 - j=0 + to_index=0 + from_j=0 l=0 ns=0 nl=1 - while i0 @ws=0 out('0 Tw') end #Ed Moss -# Don't let i go negative - end_i = i == 0 ? 0 : i - 1 - # Changed from s[j..i] to fix bug reported by Hans Allis. - self.Cell(w,h,s[j..end_i],b,2,align,fill) + end_i = to_index == 0 ? 0 : to_index - 1 + # Changed from s[from_j..to_index] to fix bug reported by Hans Allis. + self.Cell(w,h,s[from_j..end_i],b,2,align,fill) # - i=i+1 + to_index=to_index+1 sep=-1 - j=i + from_j=to_index l=0 ns=0 nl=nl+1 b=b2 if border and nl==2 else - if c==' ' - sep=i + if char==' '[0] + sep=to_index ls=l ns=ns+1 end - l=l+cw[c[0]] + l=l+GetCharWidth(cw, char) if l>wmax # Automatic line break if sep==-1 - i=i+1 if i==j + to_index=to_index+1 if to_index==from_j if @ws>0 @ws=0 out('0 Tw') end - self.Cell(w,h,s[j..i],b,2,align,fill) #Ed Moss -# Added so that it wouldn't print the last character of the string if it got close -#FIXME 2006-07-18 Level=0 - but it still puts out an extra new line - i += 1 + self.Cell(w,h,s[from_j..to_index-1],b,2,align,fill) # else if align=='J' @ws=(ns>1) ? (wmax-ls)/1000.0*@FontSize/(ns-1) : 0 out(sprintf('%.3f Tw',@ws*@k)) end - self.Cell(w,h,s[j..sep],b,2,align,fill) - i=sep+1 + self.Cell(w,h,s[from_j..sep],b,2,align,fill) + to_index=sep+1 end sep=-1 - j=i + from_j=to_index l=0 ns=0 nl=nl+1 b=b2 if border and nl==2 else - i=i+1 + to_index=to_index+1 end end end @@ -748,7 +830,7 @@ out('0 Tw') end b=b+'B' if border!=0 and not border.index('B').nil? - self.Cell(w,h,s[j..i],b,2,align,fill) + self.Cell(w,h,s[from_j..to_index],b,2,align,fill) @x=@lMargin end @@ -786,7 +868,7 @@ sep=i ls=l end - l=l+cw[c]; + l=l+GetCharWidth(cw, c); if l>wmax # Automatic line break if sep==-1 @@ -1079,7 +1161,7 @@ cw=font['cw'] s='[' 32.upto(255) do |i| - s << cw[i].to_s+' ' + s << GetCharWidth(cw, i).to_s + ' ' end out(s+']') out('endobj') @@ -1265,7 +1347,7 @@ out('startxref') out(o) out('%%EOF') - state=3 + @state=3 end def beginpage(orientation) @@ -1450,7 +1532,7 @@ def escape(s) # Add \ before \, ( and ) - s.gsub('\\','\\\\').gsub('(','\\(').gsub(')','\\)') + s.gsub('\\','\\\\\\').gsub('(','\\(').gsub(')','\\)') end def putstream(s) diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/fpdf_eps.rb.svn-base --- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/fpdf_eps.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,139 +0,0 @@ -# Information -# -# PDF_EPS class from Valentin Schmidt ported to ruby by Thiago Jackiw (tjackiw@gmail.com) -# working for Mingle LLC (www.mingle.com) -# Release Date: July 13th, 2006 -# -# Description -# -# This script allows to embed vector-based Adobe Illustrator (AI) or AI-compatible EPS files. -# Only vector drawing is supported, not text or bitmap. Although the script was successfully -# tested with various AI format versions, best results are probably achieved with files that -# were exported in the AI3 format (tested with Illustrator CS2, Freehand MX and Photoshop CS2). -# -# ImageEps(string file, float x, float y [, float w [, float h [, string link [, boolean useBoundingBox]]]]) -# -# Same parameters as for regular FPDF::Image() method, with an additional one: -# -# useBoundingBox: specifies whether to position the bounding box (true) or the complete canvas (false) -# at location (x,y). Default value is true. -# -# First added to the Ruby FPDF distribution in 1.53c -# -# Usage is as follows: -# -# require 'fpdf' -# require 'fpdf_eps' -# pdf = FPDF.new -# pdf.extend(PDF_EPS) -# pdf.ImageEps(...) -# -# This allows it to be combined with other extensions, such as the bookmark -# module. - -module PDF_EPS - def ImageEps(file, x, y, w=0, h=0, link='', use_bounding_box=true) - data = nil - if File.exists?(file) - File.open(file, 'rb') do |f| - data = f.read() - end - else - Error('EPS file not found: '+file) - end - - # Find BoundingBox param - regs = data.scan(/%%BoundingBox: [^\r\n]*/m) - regs << regs[0].gsub(/%%BoundingBox: /, '') - if regs.size > 1 - tmp = regs[1].to_s.split(' ') - @x1 = tmp[0].to_i - @y1 = tmp[1].to_i - @x2 = tmp[2].to_i - @y2 = tmp[3].to_i - else - Error('No BoundingBox found in EPS file: '+file) - end - f_start = data.index('%%EndSetup') - f_start = data.index('%%EndProlog') if f_start === false - f_start = data.index('%%BoundingBox') if f_start === false - - data = data.slice(f_start, data.length) - - f_end = data.index('%%PageTrailer') - f_end = data.index('showpage') if f_end === false - data = data.slice(0, f_end) if f_end - - # save the current graphic state - out('q') - - k = @k - - # Translate - if use_bounding_box - dx = x*k-@x1 - dy = @hPt-@y2-y*k - else - dx = x*k - dy = -y*k - end - tm = [1,0,0,1,dx,dy] - out(sprintf('%.3f %.3f %.3f %.3f %.3f %.3f cm', - tm[0], tm[1], tm[2], tm[3], tm[4], tm[5])) - - if w > 0 - scale_x = w/((@x2-@x1)/k) - if h > 0 - scale_y = h/((@y2-@y1)/k) - else - scale_y = scale_x - h = (@y2-@y1)/k * scale_y - end - else - if h > 0 - scale_y = $h/((@y2-@y1)/$k) - scale_x = scale_y - w = (@x2-@x1)/k * scale_x - else - w = (@x2-@x1)/k - h = (@y2-@y1)/k - end - end - - if !scale_x.nil? - # Scale - tm = [scale_x,0,0,scale_y,0,@hPt*(1-scale_y)] - out(sprintf('%.3f %.3f %.3f %.3f %.3f %.3f cm', - tm[0], tm[1], tm[2], tm[3], tm[4], tm[5])) - end - - data.split(/\r\n|[\r\n]/).each do |line| - next if line == '' || line[0,1] == '%' - len = line.length - # next if (len > 2 && line[len-2,len] != ' ') - cmd = line[len-2,len].strip - case cmd - when 'm', 'l', 'v', 'y', 'c', 'k', 'K', 'g', 'G', 's', 'S', 'J', 'j', 'w', 'M', 'd': - out(line) - - when 'L': - line[len-1,len]='l' - out(line) - - when 'C': - line[len-1,len]='c' - out(line) - - when 'f', 'F': - out('f*') - - when 'b', 'B': - out(cmd + '*') - end - end - - # restore previous graphic state - out('Q') - Link(x,y,w,h,link) if link - end -end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/japanese.rb.svn-base --- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/japanese.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,468 +0,0 @@ -# Copyright (c) 2006 4ssoM LLC -# 1.12 contributed by Ed Moss. -# -# The MIT License -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# This is direct port of japanese.php -# -# Japanese PDF support. -# -# Usage is as follows: -# -# require 'fpdf' -# require 'chinese' -# pdf = FPDF.new -# pdf.extend(PDF_Japanese) -# -# This allows it to be combined with other extensions, such as the bookmark -# module. - -module PDF_Japanese - - SJIS_widths={' ' => 278, '!' => 299, '"' => 353, '#' => 614, '$' => 614, '%' => 721, '&' => 735, '\'' => 216, - '(' => 323, ')' => 323, '*' => 449, '+' => 529, ',' => 219, '-' => 306, '.' => 219, '/' => 453, '0' => 614, '1' => 614, - '2' => 614, '3' => 614, '4' => 614, '5' => 614, '6' => 614, '7' => 614, '8' => 614, '9' => 614, ':' => 219, ';' => 219, - '<' => 529, '=' => 529, '>' => 529, '?' => 486, '@' => 744, 'A' => 646, 'B' => 604, 'C' => 617, 'D' => 681, 'E' => 567, - 'F' => 537, 'G' => 647, 'H' => 738, 'I' => 320, 'J' => 433, 'K' => 637, 'L' => 566, 'M' => 904, 'N' => 710, 'O' => 716, - 'P' => 605, 'Q' => 716, 'R' => 623, 'S' => 517, 'T' => 601, 'U' => 690, 'V' => 668, 'W' => 990, 'X' => 681, 'Y' => 634, - 'Z' => 578, '[' => 316, '\\' => 614, ']' => 316, '^' => 529, '_' => 500, '`' => 387, 'a' => 509, 'b' => 566, 'c' => 478, - 'd' => 565, 'e' => 503, 'f' => 337, 'g' => 549, 'h' => 580, 'i' => 275, 'j' => 266, 'k' => 544, 'l' => 276, 'm' => 854, - 'n' => 579, 'o' => 550, 'p' => 578, 'q' => 566, 'r' => 410, 's' => 444, 't' => 340, 'u' => 575, 'v' => 512, 'w' => 760, - 'x' => 503, 'y' => 529, 'z' => 453, '{' => 326, '|' => 380, '}' => 326, '~' => 387} - - def AddCIDFont(family,style,name,cw,cMap,registry) - fontkey=family.downcase+style.upcase - unless @fonts[fontkey].nil? - Error("CID font already added: family style") - end - i=@fonts.length+1 - @fonts[fontkey]={'i'=>i,'type'=>'Type0','name'=>name,'up'=>-120,'ut'=>40,'cw'=>cw, - 'CMap'=>cMap,'registry'=>registry} - end - - def AddCIDFonts(family,name,cw,cMap,registry) - AddCIDFont(family,'',name,cw,cMap,registry) - AddCIDFont(family,'B',name+',Bold',cw,cMap,registry) - AddCIDFont(family,'I',name+',Italic',cw,cMap,registry) - AddCIDFont(family,'BI',name+',BoldItalic',cw,cMap,registry) - end - - def AddSJISFont(family='SJIS') - #Add SJIS font with proportional Latin - name='KozMinPro-Regular-Acro' - cw=SJIS_widths - cMap='90msp-RKSJ-H' - registry={'ordering'=>'Japan1','supplement'=>2} - AddCIDFonts(family,name,cw,cMap,registry) - end - - def AddSJIShwFont(family='SJIS-hw') - #Add SJIS font with half-width Latin - name='KozMinPro-Regular-Acro' - 32.upto(126) do |i| - cw[i.chr]=500 - end - cMap='90ms-RKSJ-H' - registry={'ordering'=>'Japan1','supplement'=>2} - AddCIDFonts(family,name,cw,cMap,registry) - end - - def GetStringWidth(s) - if(@CurrentFont['type']=='Type0') - return GetSJISStringWidth(s) - else - return super(s) - end - end - - def GetSJISStringWidth(s) - #SJIS version of GetStringWidth() - l=0 - cw=@CurrentFont['cw'] - nb=s.length - i=0 - while(i=161 and o<=223) - #Half-width katakana - l+=500 - i+=1 - else - #Full-width character - l+=1000 - i+=2 - end - end - return l*@FontSize/1000 - end - - def MultiCell(w,h,txt,border=0,align='L',fill=0) - if(@CurrentFont['type']=='Type0') - SJISMultiCell(w,h,txt,border,align,fill) - else - super(w,h,txt,border,align,fill) - end - end - - def SJISMultiCell(w,h,txt,border=0,align='L',fill=0) - #Output text with automatic or explicit line breaks - cw=@CurrentFont['cw'] - if(w==0) - w=@w-@rMargin-@x - end - wmax=(w-2*@cMargin)*1000/@FontSize - s=txt.gsub("\r",'') - nb=s.length - if(nb>0 and s[nb-1]=="\n") - nb-=1 - end - b=0 - if(border) - if(border==1) - border='LTRB' - b='LRT' - b2='LR' - else - b2='' - if(border.to_s.index('L')) - b2+='L' - end - if(border.to_s.index('R')) - b2+='R' - end - b=border.to_s.index('T') ? b2+'T' : b2 - end - end - sep=-1 - i=0 - j=0 - l=0 - nl=1 - while(i=161 and o<=223) - #Half-width katakana - l+=500 - n=1 - sep=i - else - #Full-width character - l+=1000 - n=2 - sep=i - end - if(l>wmax) - #Automatic line break - if(sep==-1 or i==j) - if(i==j) - i+=n - end - Cell(w,h,s[j,i-j],b,2,align,fill) - else - Cell(w,h,s[j,sep-j],b,2,align,fill) - i=(s[sep]==' ') ? sep+1 : sep - end - sep=-1 - j=i - l=0 - nl+=1 - if(border and nl==2) - b=b2 - end - else - i+=n - if(o>=128) - sep=i - end - end - end - #Last chunk - if(border and not border.to_s.index('B').nil?) - b+='B' - end - Cell(w,h,s[j,i-j],b,2,align,fill) - @x=@lMargin - end - - def Write(h,txt,link='') - if(@CurrentFont['type']=='Type0') - SJISWrite(h,txt,link) - else - super(h,txt,link) - end - end - - def SJISWrite(h,txt,link) - #SJIS version of Write() - cw=@CurrentFont['cw'] - w=@w-@rMargin-@x - wmax=(w-2*@cMargin)*1000/@FontSize - s=txt.gsub("\r",'') - nb=s.length - sep=-1 - i=0 - j=0 - l=0 - nl=1 - while(i=161 and o<=223) - #Half-width katakana - l+=500 - n=1 - sep=i - else - #Full-width character - l+=1000 - n=2 - sep=i - end - if(l>wmax) - #Automatic line break - if(sep==-1 or i==j) - if(@x>@lMargin) - #Move to next line - @x=@lMargin - @y+=h - w=@w-@rMargin-@x - wmax=(w-2*@cMargin)*1000/@FontSize - i+=n - nl+=1 - next - end - if(i==j) - i+=n - end - Cell(w,h,s[j,i-j],0,2,'',0,link) - else - Cell(w,h,s[j,sep-j],0,2,'',0,link) - i=(s[sep]==' ') ? sep+1 : sep - end - sep=-1 - j=i - l=0 - if(nl==1) - @x=@lMargin - w=@w-@rMargin-@x - wmax=(w-2*@cMargin)*1000/@FontSize - end - nl+=1 - else - i+=n - if(o>=128) - sep=i - end - end - end - #Last chunk - if(i!=j) - Cell(l/1000*@FontSize,h,s[j,i-j],0,0,'',0,link) - end - end - -private - - def putfonts() - nf=@n - @diffs.each do |diff| - #Encodings - newobj() - out('<>') - out('endobj') - end - # mqr=get_magic_quotes_runtime() - # set_magic_quotes_runtime(0) - @FontFiles.each_pair do |file, info| - #Font file embedding - newobj() - @FontFiles[file]['n']=@n - if(defined('FPDF_FONTPATH')) - file=FPDF_FONTPATH+file - end - size=filesize(file) - if(!size) - Error('Font file not found') - end - out('<>') - f=fopen(file,'rb') - putstream(fread(f,size)) - fclose(f) - out('endobj') - end - # set_magic_quotes_runtime(mqr) - @fonts.each_pair do |k, font| - #Font objects - newobj() - @fonts[k]['n']=@n - out('<>') - out('endobj') - if(font['type']!='core') - #Widths - newobj() - cw=font['cw'] - s='[' - 32.upto(255) do |i| - s+=cw[i.chr]+' ' - end - out(s+']') - out('endobj') - #Descriptor - newobj() - s='<>') - out('endobj') - end - end - end - end - - def putType0(font) - #Type0 - out('/Subtype /Type0') - out('/BaseFont /'+font['name']+'-'+font['CMap']) - out('/Encoding /'+font['CMap']) - out('/DescendantFonts ['+(@n+1).to_s+' 0 R]') - out('>>') - out('endobj') - #CIDFont - newobj() - out('<>') - out('/FontDescriptor '+(@n+1).to_s+' 0 R') - w='/W [1 [' - font['cw'].keys.sort.each {|key| - w+=font['cw'][key].to_s + " " -# ActionController::Base::logger.debug key.to_s -# ActionController::Base::logger.debug font['cw'][key].to_s - } - out(w+'] 231 325 500 631 [500] 326 389 500]') - out('>>') - out('endobj') - #Font descriptor - newobj() - out('<>') - out('endobj') - end -end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/korean.rb.svn-base --- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/korean.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,436 +0,0 @@ -# Copyright (c) 2006 4ssoM LLC -# 1.12 contributed by Ed Moss. -# -# The MIT License -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# This is direct port of korean.php -# -# Korean PDF support. -# -# Usage is as follows: -# -# require 'fpdf' -# require 'chinese' -# pdf = FPDF.new -# pdf.extend(PDF_Korean) -# -# This allows it to be combined with other extensions, such as the bookmark -# module. - -module PDF_Korean - -UHC_widths={' ' => 333, '!' => 416, '"' => 416, '#' => 833, '$' => 625, '%' => 916, '&' => 833, '\'' => 250, - '(' => 500, ')' => 500, '*' => 500, '+' => 833, ',' => 291, '-' => 833, '.' => 291, '/' => 375, '0' => 625, '1' => 625, - '2' => 625, '3' => 625, '4' => 625, '5' => 625, '6' => 625, '7' => 625, '8' => 625, '9' => 625, ':' => 333, ';' => 333, - '<' => 833, '=' => 833, '>' => 916, '?' => 500, '@' => 1000, 'A' => 791, 'B' => 708, 'C' => 708, 'D' => 750, 'E' => 708, - 'F' => 666, 'G' => 750, 'H' => 791, 'I' => 375, 'J' => 500, 'K' => 791, 'L' => 666, 'M' => 916, 'N' => 791, 'O' => 750, - 'P' => 666, 'Q' => 750, 'R' => 708, 'S' => 666, 'T' => 791, 'U' => 791, 'V' => 750, 'W' => 1000, 'X' => 708, 'Y' => 708, - 'Z' => 666, '[' => 500, '\\' => 375, ']' => 500, '^' => 500, '_' => 500, '`' => 333, 'a' => 541, 'b' => 583, 'c' => 541, - 'd' => 583, 'e' => 583, 'f' => 375, 'g' => 583, 'h' => 583, 'i' => 291, 'j' => 333, 'k' => 583, 'l' => 291, 'm' => 875, - 'n' => 583, 'o' => 583, 'p' => 583, 'q' => 583, 'r' => 458, 's' => 541, 't' => 375, 'u' => 583, 'v' => 583, 'w' => 833, - 'x' => 625, 'y' => 625, 'z' => 500, '{' => 583, '|' => 583, '}' => 583, '~' => 750} - - def AddCIDFont(family,style,name,cw,cMap,registry) - fontkey=family.downcase+style.upcase - unless @fonts[fontkey].nil? - Error("Font already added: family style") - end - i=@fonts.length+1 - name=name.gsub(' ','') - @fonts[fontkey]={'i'=>i,'type'=>'Type0','name'=>name,'up'=>-130,'ut'=>40,'cw'=>cw, - 'CMap'=>cMap,'registry'=>registry} - end - - def AddCIDFonts(family,name,cw,cMap,registry) - AddCIDFont(family,'',name,cw,cMap,registry) - AddCIDFont(family,'B',name+',Bold',cw,cMap,registry) - AddCIDFont(family,'I',name+',Italic',cw,cMap,registry) - AddCIDFont(family,'BI',name+',BoldItalic',cw,cMap,registry) - end - - def AddUHCFont(family='UHC',name='HYSMyeongJoStd-Medium-Acro') - #Add UHC font with proportional Latin - cw=UHC_widths - cMap='KSCms-UHC-H' - registry={'ordering'=>'Korea1','supplement'=>1} - AddCIDFonts(family,name,cw,cMap,registry) - end - - def AddUHChwFont(family='UHC-hw',name='HYSMyeongJoStd-Medium-Acro') - #Add UHC font with half-witdh Latin - 32.upto(126) do |i| - cw[i.chr]=500 - end - cMap='KSCms-UHC-HW-H' - registry={'ordering'=>'Korea1','supplement'=>1} - AddCIDFonts(family,name,cw,cMap,registry) - end - - def GetStringWidth(s) - if(@CurrentFont['type']=='Type0') - return GetMBStringWidth(s) - else - return super(s) - end - end - - def GetMBStringWidth(s) - #Multi-byte version of GetStringWidth() - l=0 - cw=@CurrentFont['cw'] - nb=s.length - i=0 - while(i0 and s[nb-1]=="\n") - nb-=1 - end - b=0 - if(border) - if(border==1) - border='LTRB' - b='LRT' - b2='LR' - else - b2='' - if(border.to_s.index('L').nil?) - b2+='L' - end - if(border.to_s.index('R').nil?) - b2+='R' - end - b=border.to_s.index('T').nil? ? b2+'T' : b2 - end - end - sep=-1 - i=0 - j=0 - l=0 - nl=1 - while(iwmax) - #Automatic line break - if(sep==-1 or i==j) - if(i==j) - i+=ascii ? 1 : 2 - end - Cell(w,h,s[j,i-j],b,2,align,fill) - else - Cell(w,h,s[j,sep-j],b,2,align,fill) - i=(s[sep]==' ') ? sep+1 : sep - end - sep=-1 - j=i - l=0 - nl+=1 - if(border and nl==2) - b=b2 - end - else - i+=ascii ? 1 : 2 - end - end - #Last chunk - if(border and not border.to_s.index('B').nil?) - b+='B' - end - Cell(w,h,s[j,i-j],b,2,align,fill) - @x=@lMargin - end - - def Write(h,txt,link='') - if(@CurrentFont['type']=='Type0') - MBWrite(h,txt,link) - else - super(h,txt,link) - end - end - - def MBWrite(h,txt,link) - #Multi-byte version of Write() - cw=@CurrentFont['cw'] - w=@w-@rMargin-@x - wmax=(w-2*@cMargin)*1000/@FontSize - s=txt.gsub("\r",'') - nb=s.length - sep=-1 - i=0 - j=0 - l=0 - nl=1 - while(iwmax) - #Automatic line break - if(sep==-1 or i==j) - if(@x>@lMargin) - #Move to next line - @x=@lMargin - @y+=h - w=@w-@rMargin-@x - wmax=(w-2*@cMargin)*1000/@FontSize - i+=1 - nl+=1 - next - end - if(i==j) - i+=ascii ? 1 : 2 - end - Cell(w,h,s[j,i-j],0,2,'',0,link) - else - Cell(w,h,s[j,sep-j],0,2,'',0,link) - i=(s[sep]==' ') ? sep+1 : sep - end - sep=-1 - j=i - l=0 - if(nl==1) - @x=@lMargin - w=@w-@rMargin-@x - wmax=(w-2*@cMargin)*1000/@FontSize - end - nl+=1 - else - i+=ascii ? 1 : 2 - end - end - #Last chunk - if(i!=j) - Cell(l/1000*@FontSize,h,s[j,i-j],0,0,'',0,link) - end - end - -private - - def putfonts() - nf=@n - @diffs.each do |diff| - #Encodings - newobj() - out('<>') - out('endobj') - end - # mqr=get_magic_quotes_runtime() - # set_magic_quotes_runtime(0) - @FontFiles.each_pair do |file, info| - #Font file embedding - newobj() - @FontFiles[file]['n']=@n - if(defined('FPDF_FONTPATH')) - file=FPDF_FONTPATH+file - end - size=filesize(file) - if(!size) - Error('Font file not found') - end - out('<>') - f=fopen(file,'rb') - putstream(fread(f,size)) - fclose(f) - out('endobj') - end - # set_magic_quotes_runtime(mqr) - @fonts.each_pair do |k, font| - #Font objects - newobj() - @fonts[k]['n']=@n - out('<>') - out('endobj') - if(font['type']!='core') - #Widths - newobj() - cw=font['cw'] - s='[' - 32.upto(255) do |i| - s+=cw[i.chr]+' ' - end - out(s+']') - out('endobj') - #Descriptor - newobj() - s='<>') - out('endobj') - end - end - end - end - - def putType0(font) - #Type0 - out('/Subtype /Type0') - out('/BaseFont /'+font['name']+'-'+font['CMap']) - out('/Encoding /'+font['CMap']) - out('/DescendantFonts ['+(@n+1).to_s+' 0 R]') - out('>>') - out('endobj') - #CIDFont - newobj() - out('<>') - out('/FontDescriptor '+(@n+1).to_s+' 0 R') - if(font['CMap']=='KSCms-UHC-HW-H') - w='8094 8190 500' - else - w='1 [' - font['cw'].keys.sort.each {|key| - w+=font['cw'][key].to_s + " " - # ActionController::Base::logger.debug key.to_s - # ActionController::Base::logger.debug font['cw'][key].to_s - } - w +=']' - end - out('/W ['+w+']>>') - out('endobj') - #Font descriptor - newobj() - out('<>') - out('endobj') - end -end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/makefont.rb.svn-base --- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/makefont.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1787 +0,0 @@ -#!/usr/bin/env ruby -# -# Utility to generate font definition files -# Version: 1.1 -# Date: 2006-07-19 -# -# Changelog: -# Version 1.1 - Brian Ollenberger -# - Fixed a very small bug in MakeFont for generating FontDef.diff. - -Charencodings = { -# Central Europe - 'cp1250' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - 'Euro', '.notdef', 'quotesinglbase', '.notdef', - 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', - '.notdef', 'perthousand', 'Scaron', 'guilsinglleft', - 'Sacute', 'Tcaron', 'Zcaron', 'Zacute', - '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', - 'quotedblright', 'bullet', 'endash', 'emdash', - '.notdef', 'trademark', 'scaron', 'guilsinglright', - 'sacute', 'tcaron', 'zcaron', 'zacute', - 'space', 'caron', 'breve', 'Lslash', - 'currency', 'Aogonek', 'brokenbar', 'section', - 'dieresis', 'copyright', 'Scedilla', 'guillemotleft', - 'logicalnot', 'hyphen', 'registered', 'Zdotaccent', - 'degree', 'plusminus', 'ogonek', 'lslash', - 'acute', 'mu', 'paragraph', 'periodcentered', - 'cedilla', 'aogonek', 'scedilla', 'guillemotright', - 'Lcaron', 'hungarumlaut', 'lcaron', 'zdotaccent', - 'Racute', 'Aacute', 'Acircumflex', 'Abreve', - 'Adieresis', 'Lacute', 'Cacute', 'Ccedilla', - 'Ccaron', 'Eacute', 'Eogonek', 'Edieresis', - 'Ecaron', 'Iacute', 'Icircumflex', 'Dcaron', - 'Dcroat', 'Nacute', 'Ncaron', 'Oacute', - 'Ocircumflex', 'Ohungarumlaut', 'Odieresis', 'multiply', - 'Rcaron', 'Uring', 'Uacute', 'Uhungarumlaut', - 'Udieresis', 'Yacute', 'Tcommaaccent', 'germandbls', - 'racute', 'aacute', 'acircumflex', 'abreve', - 'adieresis', 'lacute', 'cacute', 'ccedilla', - 'ccaron', 'eacute', 'eogonek', 'edieresis', - 'ecaron', 'iacute', 'icircumflex', 'dcaron', - 'dcroat', 'nacute', 'ncaron', 'oacute', - 'ocircumflex', 'ohungarumlaut', 'odieresis', 'divide', - 'rcaron', 'uring', 'uacute', 'uhungarumlaut', - 'udieresis', 'yacute', 'tcommaaccent', 'dotaccent' - ], -# Cyrillic - 'cp1251' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - 'afii10051', 'afii10052', 'quotesinglbase', 'afii10100', - 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', - 'Euro', 'perthousand', 'afii10058', 'guilsinglleft', - 'afii10059', 'afii10061', 'afii10060', 'afii10145', - 'afii10099', 'quoteleft', 'quoteright', 'quotedblleft', - 'quotedblright', 'bullet', 'endash', 'emdash', - '.notdef', 'trademark', 'afii10106', 'guilsinglright', - 'afii10107', 'afii10109', 'afii10108', 'afii10193', - 'space', 'afii10062', 'afii10110', 'afii10057', - 'currency', 'afii10050', 'brokenbar', 'section', - 'afii10023', 'copyright', 'afii10053', 'guillemotleft', - 'logicalnot', 'hyphen', 'registered', 'afii10056', - 'degree', 'plusminus', 'afii10055', 'afii10103', - 'afii10098', 'mu', 'paragraph', 'periodcentered', - 'afii10071', 'afii61352', 'afii10101', 'guillemotright', - 'afii10105', 'afii10054', 'afii10102', 'afii10104', - 'afii10017', 'afii10018', 'afii10019', 'afii10020', - 'afii10021', 'afii10022', 'afii10024', 'afii10025', - 'afii10026', 'afii10027', 'afii10028', 'afii10029', - 'afii10030', 'afii10031', 'afii10032', 'afii10033', - 'afii10034', 'afii10035', 'afii10036', 'afii10037', - 'afii10038', 'afii10039', 'afii10040', 'afii10041', - 'afii10042', 'afii10043', 'afii10044', 'afii10045', - 'afii10046', 'afii10047', 'afii10048', 'afii10049', - 'afii10065', 'afii10066', 'afii10067', 'afii10068', - 'afii10069', 'afii10070', 'afii10072', 'afii10073', - 'afii10074', 'afii10075', 'afii10076', 'afii10077', - 'afii10078', 'afii10079', 'afii10080', 'afii10081', - 'afii10082', 'afii10083', 'afii10084', 'afii10085', - 'afii10086', 'afii10087', 'afii10088', 'afii10089', - 'afii10090', 'afii10091', 'afii10092', 'afii10093', - 'afii10094', 'afii10095', 'afii10096', 'afii10097' - ], -# Western Europe - 'cp1252' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - 'Euro', '.notdef', 'quotesinglbase', 'florin', - 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', - 'circumflex', 'perthousand', 'Scaron', 'guilsinglleft', - 'OE', '.notdef', 'Zcaron', '.notdef', - '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', - 'quotedblright', 'bullet', 'endash', 'emdash', - 'tilde', 'trademark', 'scaron', 'guilsinglright', - 'oe', '.notdef', 'zcaron', 'Ydieresis', - 'space', 'exclamdown', 'cent', 'sterling', - 'currency', 'yen', 'brokenbar', 'section', - 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft', - 'logicalnot', 'hyphen', 'registered', 'macron', - 'degree', 'plusminus', 'twosuperior', 'threesuperior', - 'acute', 'mu', 'paragraph', 'periodcentered', - 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright', - 'onequarter', 'onehalf', 'threequarters', 'questiondown', - 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', - 'Adieresis', 'Aring', 'AE', 'Ccedilla', - 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', - 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', - 'Eth', 'Ntilde', 'Ograve', 'Oacute', - 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', - 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', - 'Udieresis', 'Yacute', 'Thorn', 'germandbls', - 'agrave', 'aacute', 'acircumflex', 'atilde', - 'adieresis', 'aring', 'ae', 'ccedilla', - 'egrave', 'eacute', 'ecircumflex', 'edieresis', - 'igrave', 'iacute', 'icircumflex', 'idieresis', - 'eth', 'ntilde', 'ograve', 'oacute', - 'ocircumflex', 'otilde', 'odieresis', 'divide', - 'oslash', 'ugrave', 'uacute', 'ucircumflex', - 'udieresis', 'yacute', 'thorn', 'ydieresis' - ], -# Greek - 'cp1253' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - 'Euro', '.notdef', 'quotesinglbase', 'florin', - 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', - '.notdef', 'perthousand', '.notdef', 'guilsinglleft', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', - 'quotedblright', 'bullet', 'endash', 'emdash', - '.notdef', 'trademark', '.notdef', 'guilsinglright', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'dieresistonos', 'Alphatonos', 'sterling', - 'currency', 'yen', 'brokenbar', 'section', - 'dieresis', 'copyright', '.notdef', 'guillemotleft', - 'logicalnot', 'hyphen', 'registered', 'afii00208', - 'degree', 'plusminus', 'twosuperior', 'threesuperior', - 'tonos', 'mu', 'paragraph', 'periodcentered', - 'Epsilontonos', 'Etatonos', 'Iotatonos', 'guillemotright', - 'Omicrontonos', 'onehalf', 'Upsilontonos', 'Omegatonos', - 'iotadieresistonos','Alpha', 'Beta', 'Gamma', - 'Delta', 'Epsilon', 'Zeta', 'Eta', - 'Theta', 'Iota', 'Kappa', 'Lambda', - 'Mu', 'Nu', 'Xi', 'Omicron', - 'Pi', 'Rho', '.notdef', 'Sigma', - 'Tau', 'Upsilon', 'Phi', 'Chi', - 'Psi', 'Omega', 'Iotadieresis', 'Upsilondieresis', - 'alphatonos', 'epsilontonos', 'etatonos', 'iotatonos', - 'upsilondieresistonos','alpha', 'beta', 'gamma', - 'delta', 'epsilon', 'zeta', 'eta', - 'theta', 'iota', 'kappa', 'lambda', - 'mu', 'nu', 'xi', 'omicron', - 'pi', 'rho', 'sigma1', 'sigma', - 'tau', 'upsilon', 'phi', 'chi', - 'psi', 'omega', 'iotadieresis', 'upsilondieresis', - 'omicrontonos', 'upsilontonos', 'omegatonos', '.notdef' - ], -# Turkish - 'cp1254' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - 'Euro', '.notdef', 'quotesinglbase', 'florin', - 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', - 'circumflex', 'perthousand', 'Scaron', 'guilsinglleft', - 'OE', '.notdef', '.notdef', '.notdef', - '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', - 'quotedblright', 'bullet', 'endash', 'emdash', - 'tilde', 'trademark', 'scaron', 'guilsinglright', - 'oe', '.notdef', '.notdef', 'Ydieresis', - 'space', 'exclamdown', 'cent', 'sterling', - 'currency', 'yen', 'brokenbar', 'section', - 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft', - 'logicalnot', 'hyphen', 'registered', 'macron', - 'degree', 'plusminus', 'twosuperior', 'threesuperior', - 'acute', 'mu', 'paragraph', 'periodcentered', - 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright', - 'onequarter', 'onehalf', 'threequarters', 'questiondown', - 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', - 'Adieresis', 'Aring', 'AE', 'Ccedilla', - 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', - 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', - 'Gbreve', 'Ntilde', 'Ograve', 'Oacute', - 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', - 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', - 'Udieresis', 'Idotaccent', 'Scedilla', 'germandbls', - 'agrave', 'aacute', 'acircumflex', 'atilde', - 'adieresis', 'aring', 'ae', 'ccedilla', - 'egrave', 'eacute', 'ecircumflex', 'edieresis', - 'igrave', 'iacute', 'icircumflex', 'idieresis', - 'gbreve', 'ntilde', 'ograve', 'oacute', - 'ocircumflex', 'otilde', 'odieresis', 'divide', - 'oslash', 'ugrave', 'uacute', 'ucircumflex', - 'udieresis', 'dotlessi', 'scedilla', 'ydieresis' - ], -# Hebrew - 'cp1255' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - 'Euro', '.notdef', 'quotesinglbase', 'florin', - 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', - 'circumflex', 'perthousand', '.notdef', 'guilsinglleft', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', - 'quotedblright', 'bullet', 'endash', 'emdash', - 'tilde', 'trademark', '.notdef', 'guilsinglright', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclamdown', 'cent', 'sterling', - 'afii57636', 'yen', 'brokenbar', 'section', - 'dieresis', 'copyright', 'multiply', 'guillemotleft', - 'logicalnot', 'sfthyphen', 'registered', 'macron', - 'degree', 'plusminus', 'twosuperior', 'threesuperior', - 'acute', 'mu', 'paragraph', 'middot', - 'cedilla', 'onesuperior', 'divide', 'guillemotright', - 'onequarter', 'onehalf', 'threequarters', 'questiondown', - 'afii57799', 'afii57801', 'afii57800', 'afii57802', - 'afii57793', 'afii57794', 'afii57795', 'afii57798', - 'afii57797', 'afii57806', '.notdef', 'afii57796', - 'afii57807', 'afii57839', 'afii57645', 'afii57841', - 'afii57842', 'afii57804', 'afii57803', 'afii57658', - 'afii57716', 'afii57717', 'afii57718', 'gereshhebrew', - 'gershayimhebrew','.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'afii57664', 'afii57665', 'afii57666', 'afii57667', - 'afii57668', 'afii57669', 'afii57670', 'afii57671', - 'afii57672', 'afii57673', 'afii57674', 'afii57675', - 'afii57676', 'afii57677', 'afii57678', 'afii57679', - 'afii57680', 'afii57681', 'afii57682', 'afii57683', - 'afii57684', 'afii57685', 'afii57686', 'afii57687', - 'afii57688', 'afii57689', 'afii57690', '.notdef', - '.notdef', 'afii299', 'afii300', '.notdef' - ], -# Baltic - 'cp1257' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - 'Euro', '.notdef', 'quotesinglbase', '.notdef', - 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', - '.notdef', 'perthousand', '.notdef', 'guilsinglleft', - '.notdef', 'dieresis', 'caron', 'cedilla', - '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', - 'quotedblright', 'bullet', 'endash', 'emdash', - '.notdef', 'trademark', '.notdef', 'guilsinglright', - '.notdef', 'macron', 'ogonek', '.notdef', - 'space', '.notdef', 'cent', 'sterling', - 'currency', '.notdef', 'brokenbar', 'section', - 'Oslash', 'copyright', 'Rcommaaccent', 'guillemotleft', - 'logicalnot', 'hyphen', 'registered', 'AE', - 'degree', 'plusminus', 'twosuperior', 'threesuperior', - 'acute', 'mu', 'paragraph', 'periodcentered', - 'oslash', 'onesuperior', 'rcommaaccent', 'guillemotright', - 'onequarter', 'onehalf', 'threequarters', 'ae', - 'Aogonek', 'Iogonek', 'Amacron', 'Cacute', - 'Adieresis', 'Aring', 'Eogonek', 'Emacron', - 'Ccaron', 'Eacute', 'Zacute', 'Edotaccent', - 'Gcommaaccent', 'Kcommaaccent', 'Imacron', 'Lcommaaccent', - 'Scaron', 'Nacute', 'Ncommaaccent', 'Oacute', - 'Omacron', 'Otilde', 'Odieresis', 'multiply', - 'Uogonek', 'Lslash', 'Sacute', 'Umacron', - 'Udieresis', 'Zdotaccent', 'Zcaron', 'germandbls', - 'aogonek', 'iogonek', 'amacron', 'cacute', - 'adieresis', 'aring', 'eogonek', 'emacron', - 'ccaron', 'eacute', 'zacute', 'edotaccent', - 'gcommaaccent', 'kcommaaccent', 'imacron', 'lcommaaccent', - 'scaron', 'nacute', 'ncommaaccent', 'oacute', - 'omacron', 'otilde', 'odieresis', 'divide', - 'uogonek', 'lslash', 'sacute', 'umacron', - 'udieresis', 'zdotaccent', 'zcaron', 'dotaccent' - ], -# Vietnamese - 'cp1258' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - 'Euro', '.notdef', 'quotesinglbase', 'florin', - 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', - 'circumflex', 'perthousand', '.notdef', 'guilsinglleft', - 'OE', '.notdef', '.notdef', '.notdef', - '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', - 'quotedblright', 'bullet', 'endash', 'emdash', - 'tilde', 'trademark', '.notdef', 'guilsinglright', - 'oe', '.notdef', '.notdef', 'Ydieresis', - 'space', 'exclamdown', 'cent', 'sterling', - 'currency', 'yen', 'brokenbar', 'section', - 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft', - 'logicalnot', 'hyphen', 'registered', 'macron', - 'degree', 'plusminus', 'twosuperior', 'threesuperior', - 'acute', 'mu', 'paragraph', 'periodcentered', - 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright', - 'onequarter', 'onehalf', 'threequarters', 'questiondown', - 'Agrave', 'Aacute', 'Acircumflex', 'Abreve', - 'Adieresis', 'Aring', 'AE', 'Ccedilla', - 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', - 'gravecomb', 'Iacute', 'Icircumflex', 'Idieresis', - 'Dcroat', 'Ntilde', 'hookabovecomb', 'Oacute', - 'Ocircumflex', 'Ohorn', 'Odieresis', 'multiply', - 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', - 'Udieresis', 'Uhorn', 'tildecomb', 'germandbls', - 'agrave', 'aacute', 'acircumflex', 'abreve', - 'adieresis', 'aring', 'ae', 'ccedilla', - 'egrave', 'eacute', 'ecircumflex', 'edieresis', - 'acutecomb', 'iacute', 'icircumflex', 'idieresis', - 'dcroat', 'ntilde', 'dotbelowcomb', 'oacute', - 'ocircumflex', 'ohorn', 'odieresis', 'divide', - 'oslash', 'ugrave', 'uacute', 'ucircumflex', - 'udieresis', 'uhorn', 'dong', 'ydieresis' - ], -# Thai - 'cp874' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - 'Euro', '.notdef', '.notdef', '.notdef', - '.notdef', 'ellipsis', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', - 'quotedblright', 'bullet', 'endash', 'emdash', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'kokaithai', 'khokhaithai', 'khokhuatthai', - 'khokhwaithai', 'khokhonthai', 'khorakhangthai', 'ngonguthai', - 'chochanthai', 'chochingthai', 'chochangthai', 'sosothai', - 'chochoethai', 'yoyingthai', 'dochadathai', 'topatakthai', - 'thothanthai', 'thonangmonthothai', 'thophuthaothai', 'nonenthai', - 'dodekthai', 'totaothai', 'thothungthai', 'thothahanthai', - 'thothongthai', 'nonuthai', 'bobaimaithai', 'poplathai', - 'phophungthai', 'fofathai', 'phophanthai', 'fofanthai', - 'phosamphaothai', 'momathai', 'yoyakthai', 'roruathai', - 'ruthai', 'lolingthai', 'luthai', 'wowaenthai', - 'sosalathai', 'sorusithai', 'sosuathai', 'hohipthai', - 'lochulathai', 'oangthai', 'honokhukthai', 'paiyannoithai', - 'saraathai', 'maihanakatthai', 'saraaathai', 'saraamthai', - 'saraithai', 'saraiithai', 'sarauethai', 'saraueethai', - 'sarauthai', 'sarauuthai', 'phinthuthai', '.notdef', - '.notdef', '.notdef', '.notdef', 'bahtthai', - 'saraethai', 'saraaethai', 'saraothai', 'saraaimaimuanthai', - 'saraaimaimalaithai', 'lakkhangyaothai', 'maiyamokthai', 'maitaikhuthai', - 'maiekthai', 'maithothai', 'maitrithai', 'maichattawathai', - 'thanthakhatthai', 'nikhahitthai', 'yamakkanthai', 'fongmanthai', - 'zerothai', 'onethai', 'twothai', 'threethai', - 'fourthai', 'fivethai', 'sixthai', 'seventhai', - 'eightthai', 'ninethai', 'angkhankhuthai', 'khomutthai', - '.notdef', '.notdef', '.notdef', '.notdef' - ], -# Western Europe - 'ISO-8859-1' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclamdown', 'cent', 'sterling', - 'currency', 'yen', 'brokenbar', 'section', - 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft', - 'logicalnot', 'hyphen', 'registered', 'macron', - 'degree', 'plusminus', 'twosuperior', 'threesuperior', - 'acute', 'mu', 'paragraph', 'periodcentered', - 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright', - 'onequarter', 'onehalf', 'threequarters', 'questiondown', - 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', - 'Adieresis', 'Aring', 'AE', 'Ccedilla', - 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', - 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', - 'Eth', 'Ntilde', 'Ograve', 'Oacute', - 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', - 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', - 'Udieresis', 'Yacute', 'Thorn', 'germandbls', - 'agrave', 'aacute', 'acircumflex', 'atilde', - 'adieresis', 'aring', 'ae', 'ccedilla', - 'egrave', 'eacute', 'ecircumflex', 'edieresis', - 'igrave', 'iacute', 'icircumflex', 'idieresis', - 'eth', 'ntilde', 'ograve', 'oacute', - 'ocircumflex', 'otilde', 'odieresis', 'divide', - 'oslash', 'ugrave', 'uacute', 'ucircumflex', - 'udieresis', 'yacute', 'thorn', 'ydieresis' - ], -# Central Europe - 'ISO-8859-2' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'Aogonek', 'breve', 'Lslash', - 'currency', 'Lcaron', 'Sacute', 'section', - 'dieresis', 'Scaron', 'Scedilla', 'Tcaron', - 'Zacute', 'hyphen', 'Zcaron', 'Zdotaccent', - 'degree', 'aogonek', 'ogonek', 'lslash', - 'acute', 'lcaron', 'sacute', 'caron', - 'cedilla', 'scaron', 'scedilla', 'tcaron', - 'zacute', 'hungarumlaut', 'zcaron', 'zdotaccent', - 'Racute', 'Aacute', 'Acircumflex', 'Abreve', - 'Adieresis', 'Lacute', 'Cacute', 'Ccedilla', - 'Ccaron', 'Eacute', 'Eogonek', 'Edieresis', - 'Ecaron', 'Iacute', 'Icircumflex', 'Dcaron', - 'Dcroat', 'Nacute', 'Ncaron', 'Oacute', - 'Ocircumflex', 'Ohungarumlaut', 'Odieresis', 'multiply', - 'Rcaron', 'Uring', 'Uacute', 'Uhungarumlaut', - 'Udieresis', 'Yacute', 'Tcommaaccent', 'germandbls', - 'racute', 'aacute', 'acircumflex', 'abreve', - 'adieresis', 'lacute', 'cacute', 'ccedilla', - 'ccaron', 'eacute', 'eogonek', 'edieresis', - 'ecaron', 'iacute', 'icircumflex', 'dcaron', - 'dcroat', 'nacute', 'ncaron', 'oacute', - 'ocircumflex', 'ohungarumlaut', 'odieresis', 'divide', - 'rcaron', 'uring', 'uacute', 'uhungarumlaut', - 'udieresis', 'yacute', 'tcommaaccent', 'dotaccent' - ], -# Baltic - 'ISO-8859-4' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'Aogonek', 'kgreenlandic', 'Rcommaaccent', - 'currency', 'Itilde', 'Lcommaaccent', 'section', - 'dieresis', 'Scaron', 'Emacron', 'Gcommaaccent', - 'Tbar', 'hyphen', 'Zcaron', 'macron', - 'degree', 'aogonek', 'ogonek', 'rcommaaccent', - 'acute', 'itilde', 'lcommaaccent', 'caron', - 'cedilla', 'scaron', 'emacron', 'gcommaaccent', - 'tbar', 'Eng', 'zcaron', 'eng', - 'Amacron', 'Aacute', 'Acircumflex', 'Atilde', - 'Adieresis', 'Aring', 'AE', 'Iogonek', - 'Ccaron', 'Eacute', 'Eogonek', 'Edieresis', - 'Edotaccent', 'Iacute', 'Icircumflex', 'Imacron', - 'Dcroat', 'Ncommaaccent', 'Omacron', 'Kcommaaccent', - 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', - 'Oslash', 'Uogonek', 'Uacute', 'Ucircumflex', - 'Udieresis', 'Utilde', 'Umacron', 'germandbls', - 'amacron', 'aacute', 'acircumflex', 'atilde', - 'adieresis', 'aring', 'ae', 'iogonek', - 'ccaron', 'eacute', 'eogonek', 'edieresis', - 'edotaccent', 'iacute', 'icircumflex', 'imacron', - 'dcroat', 'ncommaaccent', 'omacron', 'kcommaaccent', - 'ocircumflex', 'otilde', 'odieresis', 'divide', - 'oslash', 'uogonek', 'uacute', 'ucircumflex', - 'udieresis', 'utilde', 'umacron', 'dotaccent' - ], -# Cyrillic - 'ISO-8859-5' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'afii10023', 'afii10051', 'afii10052', - 'afii10053', 'afii10054', 'afii10055', 'afii10056', - 'afii10057', 'afii10058', 'afii10059', 'afii10060', - 'afii10061', 'hyphen', 'afii10062', 'afii10145', - 'afii10017', 'afii10018', 'afii10019', 'afii10020', - 'afii10021', 'afii10022', 'afii10024', 'afii10025', - 'afii10026', 'afii10027', 'afii10028', 'afii10029', - 'afii10030', 'afii10031', 'afii10032', 'afii10033', - 'afii10034', 'afii10035', 'afii10036', 'afii10037', - 'afii10038', 'afii10039', 'afii10040', 'afii10041', - 'afii10042', 'afii10043', 'afii10044', 'afii10045', - 'afii10046', 'afii10047', 'afii10048', 'afii10049', - 'afii10065', 'afii10066', 'afii10067', 'afii10068', - 'afii10069', 'afii10070', 'afii10072', 'afii10073', - 'afii10074', 'afii10075', 'afii10076', 'afii10077', - 'afii10078', 'afii10079', 'afii10080', 'afii10081', - 'afii10082', 'afii10083', 'afii10084', 'afii10085', - 'afii10086', 'afii10087', 'afii10088', 'afii10089', - 'afii10090', 'afii10091', 'afii10092', 'afii10093', - 'afii10094', 'afii10095', 'afii10096', 'afii10097', - 'afii61352', 'afii10071', 'afii10099', 'afii10100', - 'afii10101', 'afii10102', 'afii10103', 'afii10104', - 'afii10105', 'afii10106', 'afii10107', 'afii10108', - 'afii10109', 'section', 'afii10110', 'afii10193' - ], -# Greek - 'ISO-8859-7' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'quoteleft', 'quoteright', 'sterling', - '.notdef', '.notdef', 'brokenbar', 'section', - 'dieresis', 'copyright', '.notdef', 'guillemotleft', - 'logicalnot', 'hyphen', '.notdef', 'afii00208', - 'degree', 'plusminus', 'twosuperior', 'threesuperior', - 'tonos', 'dieresistonos', 'Alphatonos', 'periodcentered', - 'Epsilontonos', 'Etatonos', 'Iotatonos', 'guillemotright', - 'Omicrontonos', 'onehalf', 'Upsilontonos', 'Omegatonos', - 'iotadieresistonos','Alpha', 'Beta', 'Gamma', - 'Delta', 'Epsilon', 'Zeta', 'Eta', - 'Theta', 'Iota', 'Kappa', 'Lambda', - 'Mu', 'Nu', 'Xi', 'Omicron', - 'Pi', 'Rho', '.notdef', 'Sigma', - 'Tau', 'Upsilon', 'Phi', 'Chi', - 'Psi', 'Omega', 'Iotadieresis', 'Upsilondieresis', - 'alphatonos', 'epsilontonos', 'etatonos', 'iotatonos', - 'upsilondieresistonos','alpha', 'beta', 'gamma', - 'delta', 'epsilon', 'zeta', 'eta', - 'theta', 'iota', 'kappa', 'lambda', - 'mu', 'nu', 'xi', 'omicron', - 'pi', 'rho', 'sigma1', 'sigma', - 'tau', 'upsilon', 'phi', 'chi', - 'psi', 'omega', 'iotadieresis', 'upsilondieresis', - 'omicrontonos', 'upsilontonos', 'omegatonos', '.notdef' - ], -# Turkish - 'ISO-8859-9' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclamdown', 'cent', 'sterling', - 'currency', 'yen', 'brokenbar', 'section', - 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft', - 'logicalnot', 'hyphen', 'registered', 'macron', - 'degree', 'plusminus', 'twosuperior', 'threesuperior', - 'acute', 'mu', 'paragraph', 'periodcentered', - 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright', - 'onequarter', 'onehalf', 'threequarters', 'questiondown', - 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', - 'Adieresis', 'Aring', 'AE', 'Ccedilla', - 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', - 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', - 'Gbreve', 'Ntilde', 'Ograve', 'Oacute', - 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', - 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', - 'Udieresis', 'Idotaccent', 'Scedilla', 'germandbls', - 'agrave', 'aacute', 'acircumflex', 'atilde', - 'adieresis', 'aring', 'ae', 'ccedilla', - 'egrave', 'eacute', 'ecircumflex', 'edieresis', - 'igrave', 'iacute', 'icircumflex', 'idieresis', - 'gbreve', 'ntilde', 'ograve', 'oacute', - 'ocircumflex', 'otilde', 'odieresis', 'divide', - 'oslash', 'ugrave', 'uacute', 'ucircumflex', - 'udieresis', 'dotlessi', 'scedilla', 'ydieresis' - ], -# Thai - 'ISO-8859-11' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'kokaithai', 'khokhaithai', 'khokhuatthai', - 'khokhwaithai', 'khokhonthai', 'khorakhangthai', 'ngonguthai', - 'chochanthai', 'chochingthai', 'chochangthai', 'sosothai', - 'chochoethai', 'yoyingthai', 'dochadathai', 'topatakthai', - 'thothanthai', 'thonangmonthothai','thophuthaothai', 'nonenthai', - 'dodekthai', 'totaothai', 'thothungthai', 'thothahanthai', - 'thothongthai', 'nonuthai', 'bobaimaithai', 'poplathai', - 'phophungthai', 'fofathai', 'phophanthai', 'fofanthai', - 'phosamphaothai', 'momathai', 'yoyakthai', 'roruathai', - 'ruthai', 'lolingthai', 'luthai', 'wowaenthai', - 'sosalathai', 'sorusithai', 'sosuathai', 'hohipthai', - 'lochulathai', 'oangthai', 'honokhukthai', 'paiyannoithai', - 'saraathai', 'maihanakatthai', 'saraaathai', 'saraamthai', - 'saraithai', 'saraiithai', 'sarauethai', 'saraueethai', - 'sarauthai', 'sarauuthai', 'phinthuthai', '.notdef', - '.notdef', '.notdef', '.notdef', 'bahtthai', - 'saraethai', 'saraaethai', 'saraothai', 'saraaimaimuanthai', - 'saraaimaimalaithai','lakkhangyaothai','maiyamokthai', 'maitaikhuthai', - 'maiekthai', 'maithothai', 'maitrithai', 'maichattawathai', - 'thanthakhatthai','nikhahitthai', 'yamakkanthai', 'fongmanthai', - 'zerothai', 'onethai', 'twothai', 'threethai', - 'fourthai', 'fivethai', 'sixthai', 'seventhai', - 'eightthai', 'ninethai', 'angkhankhuthai', 'khomutthai', - '.notdef', '.notdef', '.notdef', '.notdef' - ], -# Western Europe - 'ISO-8859-15' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclamdown', 'cent', 'sterling', - 'Euro', 'yen', 'Scaron', 'section', - 'scaron', 'copyright', 'ordfeminine', 'guillemotleft', - 'logicalnot', 'hyphen', 'registered', 'macron', - 'degree', 'plusminus', 'twosuperior', 'threesuperior', - 'Zcaron', 'mu', 'paragraph', 'periodcentered', - 'zcaron', 'onesuperior', 'ordmasculine', 'guillemotright', - 'OE', 'oe', 'Ydieresis', 'questiondown', - 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', - 'Adieresis', 'Aring', 'AE', 'Ccedilla', - 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', - 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', - 'Eth', 'Ntilde', 'Ograve', 'Oacute', - 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', - 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', - 'Udieresis', 'Yacute', 'Thorn', 'germandbls', - 'agrave', 'aacute', 'acircumflex', 'atilde', - 'adieresis', 'aring', 'ae', 'ccedilla', - 'egrave', 'eacute', 'ecircumflex', 'edieresis', - 'igrave', 'iacute', 'icircumflex', 'idieresis', - 'eth', 'ntilde', 'ograve', 'oacute', - 'ocircumflex', 'otilde', 'odieresis', 'divide', - 'oslash', 'ugrave', 'uacute', 'ucircumflex', - 'udieresis', 'yacute', 'thorn', 'ydieresis' - ], -# Central Europe - 'ISO-8859-16' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'Aogonek', 'aogonek', 'Lslash', - 'Euro', 'quotedblbase', 'Scaron', 'section', - 'scaron', 'copyright', 'Scommaaccent', 'guillemotleft', - 'Zacute', 'hyphen', 'zacute', 'Zdotaccent', - 'degree', 'plusminus', 'Ccaron', 'lslash', - 'Zcaron', 'quotedblright', 'paragraph', 'periodcentered', - 'zcaron', 'ccaron', 'scommaaccent', 'guillemotright', - 'OE', 'oe', 'Ydieresis', 'zdotaccent', - 'Agrave', 'Aacute', 'Acircumflex', 'Abreve', - 'Adieresis', 'Cacute', 'AE', 'Ccedilla', - 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', - 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', - 'Dcroat', 'Nacute', 'Ograve', 'Oacute', - 'Ocircumflex', 'Ohungarumlaut', 'Odieresis', 'Sacute', - 'Uhungarumlaut', 'Ugrave', 'Uacute', 'Ucircumflex', - 'Udieresis', 'Eogonek', 'Tcommaaccent', 'germandbls', - 'agrave', 'aacute', 'acircumflex', 'abreve', - 'adieresis', 'cacute', 'ae', 'ccedilla', - 'egrave', 'eacute', 'ecircumflex', 'edieresis', - 'igrave', 'iacute', 'icircumflex', 'idieresis', - 'dcroat', 'nacute', 'ograve', 'oacute', - 'ocircumflex', 'ohungarumlaut', 'odieresis', 'sacute', - 'uhungarumlaut', 'ugrave', 'uacute', 'ucircumflex', - 'udieresis', 'eogonek', 'tcommaaccent', 'ydieresis' - ], -# Russian - 'KOI8-R' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - 'SF100000', 'SF110000', 'SF010000', 'SF030000', - 'SF020000', 'SF040000', 'SF080000', 'SF090000', - 'SF060000', 'SF070000', 'SF050000', 'upblock', - 'dnblock', 'block', 'lfblock', 'rtblock', - 'ltshade', 'shade', 'dkshade', 'integraltp', - 'filledbox', 'periodcentered', 'radical', 'approxequal', - 'lessequal', 'greaterequal', 'space', 'integralbt', - 'degree', 'twosuperior', 'periodcentered', 'divide', - 'SF430000', 'SF240000', 'SF510000', 'afii10071', - 'SF520000', 'SF390000', 'SF220000', 'SF210000', - 'SF250000', 'SF500000', 'SF490000', 'SF380000', - 'SF280000', 'SF270000', 'SF260000', 'SF360000', - 'SF370000', 'SF420000', 'SF190000', 'afii10023', - 'SF200000', 'SF230000', 'SF470000', 'SF480000', - 'SF410000', 'SF450000', 'SF460000', 'SF400000', - 'SF540000', 'SF530000', 'SF440000', 'copyright', - 'afii10096', 'afii10065', 'afii10066', 'afii10088', - 'afii10069', 'afii10070', 'afii10086', 'afii10068', - 'afii10087', 'afii10074', 'afii10075', 'afii10076', - 'afii10077', 'afii10078', 'afii10079', 'afii10080', - 'afii10081', 'afii10097', 'afii10082', 'afii10083', - 'afii10084', 'afii10085', 'afii10072', 'afii10067', - 'afii10094', 'afii10093', 'afii10073', 'afii10090', - 'afii10095', 'afii10091', 'afii10089', 'afii10092', - 'afii10048', 'afii10017', 'afii10018', 'afii10040', - 'afii10021', 'afii10022', 'afii10038', 'afii10020', - 'afii10039', 'afii10026', 'afii10027', 'afii10028', - 'afii10029', 'afii10030', 'afii10031', 'afii10032', - 'afii10033', 'afii10049', 'afii10034', 'afii10035', - 'afii10036', 'afii10037', 'afii10024', 'afii10019', - 'afii10046', 'afii10045', 'afii10025', 'afii10042', - 'afii10047', 'afii10043', 'afii10041', 'afii10044' - ], -# Ukrainian - 'KOI8-U' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - 'SF100000', 'SF110000', 'SF010000', 'SF030000', - 'SF020000', 'SF040000', 'SF080000', 'SF090000', - 'SF060000', 'SF070000', 'SF050000', 'upblock', - 'dnblock', 'block', 'lfblock', 'rtblock', - 'ltshade', 'shade', 'dkshade', 'integraltp', - 'filledbox', 'bullet', 'radical', 'approxequal', - 'lessequal', 'greaterequal', 'space', 'integralbt', - 'degree', 'twosuperior', 'periodcentered', 'divide', - 'SF430000', 'SF240000', 'SF510000', 'afii10071', - 'afii10101', 'SF390000', 'afii10103', 'afii10104', - 'SF250000', 'SF500000', 'SF490000', 'SF380000', - 'SF280000', 'afii10098', 'SF260000', 'SF360000', - 'SF370000', 'SF420000', 'SF190000', 'afii10023', - 'afii10053', 'SF230000', 'afii10055', 'afii10056', - 'SF410000', 'SF450000', 'SF460000', 'SF400000', - 'SF540000', 'afii10050', 'SF440000', 'copyright', - 'afii10096', 'afii10065', 'afii10066', 'afii10088', - 'afii10069', 'afii10070', 'afii10086', 'afii10068', - 'afii10087', 'afii10074', 'afii10075', 'afii10076', - 'afii10077', 'afii10078', 'afii10079', 'afii10080', - 'afii10081', 'afii10097', 'afii10082', 'afii10083', - 'afii10084', 'afii10085', 'afii10072', 'afii10067', - 'afii10094', 'afii10093', 'afii10073', 'afii10090', - 'afii10095', 'afii10091', 'afii10089', 'afii10092', - 'afii10048', 'afii10017', 'afii10018', 'afii10040', - 'afii10021', 'afii10022', 'afii10038', 'afii10020', - 'afii10039', 'afii10026', 'afii10027', 'afii10028', - 'afii10029', 'afii10030', 'afii10031', 'afii10032', - 'afii10033', 'afii10049', 'afii10034', 'afii10035', - 'afii10036', 'afii10037', 'afii10024', 'afii10019', - 'afii10046', 'afii10045', 'afii10025', 'afii10042', - 'afii10047', 'afii10043', 'afii10041', 'afii10044' - ] -} - -def ReadAFM(file, map) - - # Read a font metric file - a = IO.readlines(file) - - raise "File no found: #{file}" if a.size == 0 - - widths = {} - fm = {} - fix = { 'Edot' => 'Edotaccent', 'edot' => 'edotaccent', - 'Idot' => 'Idotaccent', - 'Zdot' => 'Zdotaccent', 'zdot' => 'zdotaccent', - 'Odblacute' => 'Ohungarumlaut', 'odblacute' => 'ohungarumlaut', - 'Udblacute' => 'Uhungarumlaut', 'udblacute' => 'uhungarumlaut', - 'Gcedilla' => 'Gcommaaccent', 'gcedilla' => 'gcommaaccent', - 'Kcedilla' => 'Kcommaaccent', 'kcedilla' => 'kcommaaccent', - 'Lcedilla' => 'Lcommaaccent', 'lcedilla' => 'lcommaaccent', - 'Ncedilla' => 'Ncommaaccent', 'ncedilla' => 'ncommaaccent', - 'Rcedilla' => 'Rcommaaccent', 'rcedilla' => 'rcommaaccent', - 'Scedilla' => 'Scommaaccent',' scedilla' => 'scommaaccent', - 'Tcedilla' => 'Tcommaaccent',' tcedilla' => 'tcommaaccent', - 'Dslash' => 'Dcroat', 'dslash' => 'dcroat', - 'Dmacron' => 'Dcroat', 'dmacron' => 'dcroat', - 'combininggraveaccent' => 'gravecomb', - 'combininghookabove' => 'hookabovecomb', - 'combiningtildeaccent' => 'tildecomb', - 'combiningacuteaccent' => 'acutecomb', - 'combiningdotbelow' => 'dotbelowcomb', - 'dongsign' => 'dong' - } - - a.each do |line| - - e = line.rstrip.split(' ') - next if e.size < 2 - - code = e[0] - param = e[1] - - if code == 'C' then - - # Character metrics - cc = e[1].to_i - w = e[4] - gn = e[7] - - gn = 'Euro' if gn[-4, 4] == '20AC' - - if fix[gn] then - - # Fix incorrect glyph name - 0.upto(map.size - 1) do |i| - if map[i] == fix[gn] then - map[i] = gn - end - end - end - - if map.size == 0 then - # Symbolic font: use built-in encoding - widths[cc] = w - else - widths[gn] = w - fm['CapXHeight'] = e[13].to_i if gn == 'X' - end - - fm['MissingWidth'] = w if gn == '.notdef' - - elsif code == 'FontName' then - fm['FontName'] = param - elsif code == 'Weight' then - fm['Weight'] = param - elsif code == 'ItalicAngle' then - fm['ItalicAngle'] = param.to_f - elsif code == 'Ascender' then - fm['Ascender'] = param.to_i - elsif code == 'Descender' then - fm['Descender'] = param.to_i - elsif code == 'UnderlineThickness' then - fm['UnderlineThickness'] = param.to_i - elsif code == 'UnderlinePosition' then - fm['UnderlinePosition'] = param.to_i - elsif code == 'IsFixedPitch' then - fm['IsFixedPitch'] = (param == 'true') - elsif code == 'FontBBox' then - fm['FontBBox'] = "[#{e[1]},#{e[2]},#{e[3]},#{e[4]}]" - elsif code == 'CapHeight' then - fm['CapHeight'] = param.to_i - elsif code == 'StdVW' then - fm['StdVW'] = param.to_i - end - end - - raise 'FontName not found' unless fm['FontName'] - - if map.size > 0 then - widths['.notdef'] = 600 unless widths['.notdef'] - - if (widths['Delta'] == nil) && widths['increment'] then - widths['Delta'] = widths['increment'] - end - - # Order widths according to map - 0.upto(255) do |i| - if widths[map[i]] == nil - puts "Warning: character #{map[i]} is missing" - widths[i] = widths['.notdef'] - else - widths[i] = widths[map[i]] - end - end - end - - fm['Widths'] = widths - - return fm -end - -def MakeFontDescriptor(fm, symbolic) - - # Ascent - asc = fm['Ascender'] ? fm['Ascender'] : 1000 - fd = "{\n 'Ascent' => '#{asc}'" - - # Descent - desc = fm['Descender'] ? fm['Descender'] : -200 - fd += ", 'Descent' => '#{desc}'" - - # CapHeight - if fm['CapHeight'] then - ch = fm['CapHeight'] - elsif fm['CapXHeight'] - ch = fm['CapXHeight'] - else - ch = asc - end - fd += ", 'CapHeight' => '#{ch}'" - - # Flags - flags = 0 - - if fm['IsFixedPitch'] then - flags += 1 << 0 - end - - if symbolic then - flags += 1 << 2 - else - flags += 1 << 5 - end - - if fm['ItalicAngle'] && (fm['ItalicAngle'] != 0) then - flags += 1 << 6 - end - - fd += ",\n 'Flags' => '#{flags}'" - - # FontBBox - if fm['FontBBox'] then - fbb = fm['FontBBox'].gsub(/,/, ' ') - else - fbb = "[0 #{desc - 100} 1000 #{asc + 100}]" - end - - fd += ", 'FontBBox' => '#{fbb}'" - - # ItalicAngle - ia = fm['ItalicAngle'] ? fm['ItalicAngle'] : 0 - fd += ",\n 'ItalicAngle' => '#{ia}'" - - # StemV - if fm['StdVW'] then - stemv = fm['StdVW'] - elsif fm['Weight'] && (/bold|black/i =~ fm['Weight']) - stemv = 120 - else - stemv = 70 - end - - fd += ", 'StemV' => '#{stemv}'" - - # MissingWidth - if fm['MissingWidth'] then - fd += ", 'MissingWidth' => '#{fm['MissingWidth']}'" - end - - fd += "\n }" - return fd -end - -def MakeWidthArray(fm) - - # Make character width array - s = " [\n " - - cw = fm['Widths'] - - 0.upto(255) do |i| - s += "%5d" % cw[i] - s += "," if i != 255 - s += "\n " if (i % 8) == 7 - end - - s += ']' - - return s -end - -def MakeFontEncoding(map) - - # Build differences from reference encoding - ref = Charencodings['cp1252'] - s = '' - last = 0 - 32.upto(255) do |i| - if map[i] != ref[i] then - if i != last + 1 then - s += i.to_s + ' ' - end - last = i - s += '/' + map[i] + ' ' - end - end - return s.rstrip -end - -def ReadShort(f) - a = f.read(2).unpack('n') - return a[0] -end - -def ReadLong(f) - a = f.read(4).unpack('N') - return a[0] -end - -def CheckTTF(file) - - rl = false - pp = false - e = false - - # Check if font license allows embedding - File.open(file, 'rb') do |f| - - # Extract number of tables - f.seek(4, IO::SEEK_CUR) - nb = ReadShort(f) - f.seek(6, IO::SEEK_CUR) - - # Seek OS/2 table - found = false - 0.upto(nb - 1) do |i| - if f.read(4) == 'OS/2' then - found = true - break - end - - f.seek(12, IO::SEEK_CUR) - end - - if ! found then - return - end - - f.seek(4, IO::SEEK_CUR) - offset = ReadLong(f) - f.seek(offset, IO::SEEK_SET) - - # Extract fsType flags - f.seek(8, IO::SEEK_CUR) - fsType = ReadShort(f) - - rl = (fsType & 0x02) != 0 - pp = (fsType & 0x04) != 0 - e = (fsType & 0x08) != 0 - end - - if rl && ( ! pp) && ( ! e) then - puts 'Warning: font license does not allow embedding' - end -end - -# -# fontfile: path to TTF file (or empty string if not to be embedded) -# afmfile: path to AFM file -# enc: font encoding (or empty string for symbolic fonts) -# patch: optional patch for encoding -# type : font type if $fontfile is empty -# -def MakeFont(fontfile, afmfile, enc = 'cp1252', patch = {}, type = 'TrueType') - # Generate a font definition file - if (enc != nil) && (enc != '') then - map = Charencodings[enc] - patch.each { |cc, gn| map[cc] = gn } - else - map = [] - end - - raise "Error: AFM file not found: #{afmfile}" unless File.exists?(afmfile) - - fm = ReadAFM(afmfile, map) - - if (enc != nil) && (enc != '') then - diff = MakeFontEncoding(map) - else - diff = '' - end - - fd = MakeFontDescriptor(fm, (map.size == 0)) - - # Find font type - if fontfile then - ext = File.extname(fontfile).downcase.sub(/^\./, '') - - if ext == 'ttf' then - type = 'TrueType' - elsif ext == 'pfb' - type = 'Type1' - else - raise "Error: unrecognized font file extension: #{ext}" - end - else - raise "Error: incorrect font type: #{type}" if (type != 'TrueType') && (type != 'Type1') - end - printf "type = #{type}\n" - # Start generation - s = "# #{fm['FontName']} font definition\n\n" - s += "module FontDef\n" - s += " def FontDef.type\n '#{type}'\n end\n" - s += " def FontDef.name\n '#{fm['FontName']}'\n end\n" - s += " def FontDef.desc\n #{fd}\n end\n" - - if fm['UnderlinePosition'] == nil then - fm['UnderlinePosition'] = -100 - end - - if fm['UnderlineThickness'] == nil then - fm['UnderlineThickness'] = 50 - end - - s += " def FontDef.up\n #{fm['UnderlinePosition']}\n end\n" - s += " def FontDef.ut\n #{fm['UnderlineThickness']}\n end\n" - - w = MakeWidthArray(fm) - s += " def FontDef.cw\n#{w}\n end\n" - - s += " def FontDef.enc\n '#{enc}'\n end\n" - s += " def FontDef.diff\n #{(diff == nil) || (diff == '') ? 'nil' : '\'' + diff + '\''}\n end\n" - - basename = File.basename(afmfile, '.*') - - if fontfile then - # Embedded font - if ! File.exist?(fontfile) then - raise "Error: font file not found: #{fontfile}" - end - - if type == 'TrueType' then - CheckTTF(fontfile) - end - - file = '' - File.open(fontfile, 'rb') do |f| - file = f.read() - end - - if type == 'Type1' then - # Find first two sections and discard third one - header = file[0] == 128 - file = file[6, file.length - 6] if header - - pos = file.index('eexec') - raise 'Error: font file does not seem to be valid Type1' if pos == nil - - size1 = pos + 6 - - file = file[0, size1] + file[size1 + 6, file.length - (size1 + 6)] if header && file[size1] == 128 - - pos = file.index('00000000') - raise 'Error: font file does not seem to be valid Type1' if pos == nil - - size2 = pos - size1 - file = file[0, size1 + size2] - end - - if require 'zlib' then - File.open(basename + '.z', 'wb') { |f| f.write(Zlib::Deflate.deflate(file)) } - s += " def FontDef.file\n '#{basename}.z'\n end\n" - puts "Font file compressed ('#{basename}.z')" - else - s += " def FontDef.file\n '#{File.basename(fontfile)}'\n end\n" - puts 'Notice: font file could not be compressed (zlib not available)' - end - - if type == 'Type1' then - s += " def FontDef.size1\n '#{size1}'\n end\n" - s += " def FontDef.size2\n '#{size2}'\n end\n" - else - s += " def FontDef.originalsize\n '#{File.size(fontfile)}'\n end\n" - end - - else - # Not embedded font - s += " def FontDef.file\n ''\n end\n" - end - - s += "end\n" - File.open(basename + '.rb', 'w') { |file| file.write(s)} - puts "Font definition file generated (#{basename}.rb)" -end - - -if $0 == __FILE__ then - if ARGV.length >= 3 then - enc = ARGV[2] - else - enc = 'cp1252' - end - - if ARGV.length >= 4 then - patch = ARGV[3] - else - patch = {} - end - - if ARGV.length >= 5 then - type = ARGV[4] - else - type = 'TrueType' - end - - MakeFont(ARGV[0], ARGV[1], enc, patch, type) -end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/rfpdf.rb.svn-base --- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/rfpdf.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,346 +0,0 @@ -module RFPDF - COLOR_PALETTE = { - :black => [0x00, 0x00, 0x00], - :white => [0xff, 0xff, 0xff], - }.freeze - - # Draw a line from (x1, y1) to (x2, y2). - # - # Options are: - # * :line_color - Default value is COLOR_PALETTE[:black]. - # * :line_width - Default value is 0.5. - # - # Example: - # - # draw_line(x1, y1, x1, y1+h, :line_color => ReportHelper::COLOR_PALETTE[:dark_blue], :line_width => 1) - # - def draw_line(x1, y1, x2, y2, options = {}) - options[:line_color] ||= COLOR_PALETTE[:black] - options[:line_width] ||= 0.5 - set_draw_color(options[:line_color]) - SetLineWidth(options[:line_width]) - Line(x1, y1, x2, y2) - end - - # Draw a string of text at (x, y). - # - # Options are: - # * :font_color - Default value is COLOR_PALETTE[:black]. - # * :font_size - Default value is 10. - # * :font_style - Default value is nothing or ''. - # - # Example: - # - # draw_text(x, y, header_left, :font_size => 10) - # - def draw_text(x, y, text, options = {}) - options[:font_color] ||= COLOR_PALETTE[:black] - options[:font_size] ||= 10 - options[:font_style] ||= '' - set_text_color(options[:font_color]) - SetFont('Arial', options[:font_style], options[:font_size]) - SetXY(x, y) - Write(options[:font_size] + 4, text) - end - - # Draw a block of text at (x, y) bounded by left_margin and right_margin. Both - # margins are measured from their corresponding edge. - # - # Options are: - # * :font_color - Default value is COLOR_PALETTE[:black]. - # * :font_size - Default value is 10. - # * :font_style - Default value is nothing or ''. - # - # Example: - # - # draw_text_block(left_margin, 85, "question", left_margin, 280, - # :font_color => ReportHelper::COLOR_PALETTE[:dark_blue], - # :font_size => 12, - # :font_style => 'I') - # - def draw_text_block(x, y, text, left_margin, right_margin, options = {}) - options[:font_color] ||= COLOR_PALETTE[:black] - options[:font_size] ||= 10 - options[:font_style] ||= '' - set_text_color(options[:font_color]) - SetFont('Arial', options[:font_style], options[:font_size]) - SetXY(x, y) - SetLeftMargin(left_margin) - SetRightMargin(right_margin) - Write(options[:font_size] + 4, text) - SetMargins(0,0,0) - end - - # Draw a box at (x, y), w wide and h high. - # - # Options are: - # * :border - Draw a border, 0 = no, 1 = yes? Default value is 1. - # * :border_color - Default value is COLOR_PALETTE[:black]. - # * :border_width - Default value is 0.5. - # * :fill - Fill the box, 0 = no, 1 = yes? Default value is 1. - # * :fill_color - Default value is nothing or COLOR_PALETTE[:white]. - # - # Example: - # - # draw_box(x, y - 1, 38, 22) - # - def draw_box(x, y, w, h, options = {}) - options[:border] ||= 1 - options[:border_color] ||= COLOR_PALETTE[:black] - options[:border_width] ||= 0.5 - options[:fill] ||= 1 - options[:fill_color] ||= COLOR_PALETTE[:white] - SetLineWidth(options[:border_width]) - set_draw_color(options[:border_color]) - set_fill_color(options[:fill_color]) - fd = "" - fd = "D" if options[:border] == 1 - fd += "F" if options[:fill] == 1 - Rect(x, y, w, h, fd) - end - - # Draw a string of text at (x, y) in a box w wide and h high. - # - # Options are: - # * :align - Vertical alignment 'C' = center, 'L' = left, 'R' = right. Default value is 'C'. - # * :border - Draw a border, 0 = no, 1 = yes? Default value is 0. - # * :border_color - Default value is COLOR_PALETTE[:black]. - # * :border_width - Default value is 0.5. - # * :fill - Fill the box, 0 = no, 1 = yes? Default value is 1. - # * :fill_color - Default value is nothing or COLOR_PALETTE[:white]. - # * :font_color - Default value is COLOR_PALETTE[:black]. - # * :font_size - Default value is nothing or 8. - # * :font_style - 'B' = bold, 'I' = italic, 'U' = underline. Default value is nothing ''. - # * :padding - Default value is nothing or 2. - # * :valign - 'M' = middle, 'T' = top, 'B' = bottom. Default value is nothing or 'M'. - # - # Example: - # - # draw_text_box(x, y - 1, 38, 22, - # "your_score_title", - # :fill => 0, - # :font_color => ReportHelper::COLOR_PALETTE[:blue], - # :font_line_spacing => 0, - # :font_style => "B", - # :valign => "M") - # - def draw_text_box(x, y, w, h, text, options = {}) - options[:align] ||= 'C' - options[:border] ||= 0 - options[:border_color] ||= COLOR_PALETTE[:black] - options[:border_width] ||= 0.5 - options[:fill] ||= 1 - options[:fill_color] ||= COLOR_PALETTE[:white] - options[:font_color] ||= COLOR_PALETTE[:black] - options[:font_size] ||= 8 - options[:font_line_spacing] ||= options[:font_size] * 0.3 - options[:font_style] ||= '' - options[:padding] ||= 2 - options[:valign] ||= "M" - if options[:fill] == 1 or options[:border] == 1 - draw_box(x, y, w, h, options) - end - SetMargins(0,0,0) - set_text_color(options[:font_color]) - font_size = options[:font_size] - SetFont('Arial', options[:font_style], font_size) - font_size += options[:font_line_spacing] - case options[:valign] - when "B" - y -= options[:padding] - text = "\n" + text if text["\n"].nil? - when "T" - y += options[:padding] - end - SetXY(x, y) - if GetStringWidth(text) > w or not text["\n"].nil? or options[:valign] == "T" - font_size += options[:font_size] * 0.1 - #TODO 2006-07-21 Level=1 - this is assuming a 2 line text - SetXY(x, y + ((h - (font_size * 2)) / 2)) if options[:valign] == "M" - MultiCell(w, font_size, text, 0, options[:align]) - else - Cell(w, h, text, 0, 0, options[:align]) - end - end - - # Draw a string of text at (x, y) as a title. - # - # Options are: - # * :font_color - Default value is COLOR_PALETTE[:black]. - # * :font_size - Default value is 18. - # * :font_style - Default value is nothing or ''. - # - # Example: - # - # draw_title(left_margin, 60, - # "title:", - # :font_color => ReportHelper::COLOR_PALETTE[:dark_blue]) - # - def draw_title(x, y, title, options = {}) - options[:font_color] ||= COLOR_PALETTE[:black] - options[:font_size] ||= 18 - options[:font_style] ||= '' - set_text_color(options[:font_color]) - SetFont('Arial', options[:font_style], options[:font_size]) - SetXY(x, y) - Write(options[:font_size] + 2, title) - end - - # Set the draw color. Default value is COLOR_PALETTE[:black]. - # - # Example: - # - # set_draw_color(ReportHelper::COLOR_PALETTE[:dark_blue]) - # - def set_draw_color(color = COLOR_PALETTE[:black]) - SetDrawColor(color[0], color[1], color[2]) - end - - # Set the fill color. Default value is COLOR_PALETTE[:white]. - # - # Example: - # - # set_fill_color(ReportHelper::COLOR_PALETTE[:dark_blue]) - # - def set_fill_color(color = COLOR_PALETTE[:white]) - SetFillColor(color[0], color[1], color[2]) - end - - # Set the text color. Default value is COLOR_PALETTE[:white]. - # - # Example: - # - # set_text_color(ReportHelper::COLOR_PALETTE[:dark_blue]) - # - def set_text_color(color = COLOR_PALETTE[:black]) - SetTextColor(color[0], color[1], color[2]) - end - - # Write a string containing html characters. Default value is COLOR_PALETTE[:white]. - # - # Options are: - # * :height - Line height. Default value is 20. - # - # Example: - # - # write_html(html, :height => 12) - # - def write_html(html, options = {}) - options[:height] ||= 20 - #HTML parser - @href = nil - @style = {} - html.gsub!("\n",' ') - re = %r{ ( | - < (?: - [^<>"] + - | - " (?: \\. | [^\\"]+ ) * " - ) * - > - ) }xm - - html.split(re).each do |value| - if "<" == value[0,1] - #Tag - if (value[1, 1] == '/') - close_tag(value[2..-2], options) - else - tag = value[1..-2] - open_tag(tag, options) - end - else - #Text - if @href - put_link(@href,value) - else - Write(options[:height], value) - end - end - end - end - - def open_tag(tag, options = {}) #:nodoc: - #Opening tag - tag = tag.to_s.upcase - set_style(tag, true) if tag == 'B' or tag == 'I' or tag == 'U' - @href = options['HREF'] if tag == 'A' - Ln(options[:height]) if tag == 'BR' - end - - def close_tag(tag, options = {}) #:nodoc: - #Closing tag - tag = tag.to_s.upcase - set_style(tag, false) if tag == 'B' or tag == 'I' or tag == 'U' - @href = '' if $tag == 'A' - end - - def set_style(tag, enable = true) #:nodoc: - #Modify style and select corresponding font - style = "" - @style[tag] = enable - ['B','I','U'].each do |s| - style += s if not @style[s].nil? and @style[s] - end - SetFont('', style) - end - - def put_link(url, txt) #:nodoc: - #Put a hyperlink - SetTextColor(0,0,255) - set_style('U',true) - Write(5, txt, url) - set_style('U',false) - SetTextColor(0) - end -end - -# class FPDF -# alias_method :set_margins , :SetMargins -# alias_method :set_left_margin , :SetLeftMargin -# alias_method :set_top_margin , :SetTopMargin -# alias_method :set_right_margin , :SetRightMargin -# alias_method :set_auto_pagebreak , :SetAutoPageBreak -# alias_method :set_display_mode , :SetDisplayMode -# alias_method :set_compression , :SetCompression -# alias_method :set_title , :SetTitle -# alias_method :set_subject , :SetSubject -# alias_method :set_author , :SetAuthor -# alias_method :set_keywords , :SetKeywords -# alias_method :set_creator , :SetCreator -# alias_method :set_draw_color , :SetDrawColor -# alias_method :set_fill_color , :SetFillColor -# alias_method :set_text_color , :SetTextColor -# alias_method :set_line_width , :SetLineWidth -# alias_method :set_font , :SetFont -# alias_method :set_font_size , :SetFontSize -# alias_method :set_link , :SetLink -# alias_method :set_y , :SetY -# alias_method :set_xy , :SetXY -# alias_method :get_string_width , :GetStringWidth -# alias_method :get_x , :GetX -# alias_method :set_x , :SetX -# alias_method :get_y , :GetY -# alias_method :accept_pagev_break , :AcceptPageBreak -# alias_method :add_font , :AddFont -# alias_method :add_link , :AddLink -# alias_method :add_page , :AddPage -# alias_method :alias_nb_pages , :AliasNbPages -# alias_method :cell , :Cell -# alias_method :close , :Close -# alias_method :error , :Error -# alias_method :footer , :Footer -# alias_method :header , :Header -# alias_method :image , :Image -# alias_method :line , :Line -# alias_method :link , :Link -# alias_method :ln , :Ln -# alias_method :multi_cell , :MultiCell -# alias_method :open , :Open -# alias_method :Open , :open -# alias_method :output , :Output -# alias_method :page_no , :PageNo -# alias_method :rect , :Rect -# alias_method :text , :Text -# alias_method :write , :Write -# end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/view.rb.svn-base --- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/text-base/view.rb.svn-base Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,85 +0,0 @@ -# Copyright (c) 2006 4ssoM LLC -# -# The MIT License -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# Thanks go out to Bruce Williams of codefluency who created RTex. This -# template handler is modification of his work. -# -# Example Registration -# -# ActionView::Base::register_template_handler 'rfpdf', RFpdfView - -module RFPDF - - class View - @@backward_compatibility_mode = false - cattr_accessor :backward_compatibility_mode - - def initialize(action_view) - @action_view = action_view - # Override with @options_for_rfpdf Hash in your controller - @options = { - # Run through latex first? (for table of contents, etc) - :pre_process => false, - # Debugging mode; raises exception - :debug => false, - # Filename of pdf to generate - :file_name => "#{@action_view.controller.action_name}.pdf", - # Temporary Directory - :temp_dir => "#{File.expand_path(RAILS_ROOT)}/tmp" - }.merge(@action_view.controller.instance_eval{ @options_for_rfpdf } || {}).with_indifferent_access - end - - def self.compilable? - false - end - - def compilable? - self.class.compilable? - end - - def render(template, local_assigns = {}) - @pdf_name = "Default.pdf" if @pdf_name.nil? - unless @action_view.controller.headers["Content-Type"] == 'application/pdf' - @generate = true - @action_view.controller.headers["Content-Type"] = 'application/pdf' - @action_view.controller.headers["Content-disposition:"] = "inline; filename=\"#{@options[:file_name]}\"" - end - assigns = @action_view.assigns.dup - - if content_for_layout = @action_view.instance_variable_get("@content_for_layout") - assigns['content_for_layout'] = content_for_layout - end - - result = @action_view.instance_eval do - assigns.each do |key,val| - instance_variable_set "@#{key}", val - end - local_assigns.each do |key,val| - class << self; self; end.send(:define_method,key){ val } - end - ERB.new(@@backward_compatibility_mode == true ? template : template.source).result(binding) - end - end - - end - -end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/action_controller.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/rfpdf/action_controller.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,40 @@ +module RFPDF + module ActionController + + DEFAULT_RFPDF_OPTIONS = {:inline=>true} + + def self.included(base) + base.extend ClassMethods + end + + module ClassMethods + def rfpdf(options) + rfpdf_options = breakdown_rfpdf_options options + write_inheritable_hash(:rfpdf, rfpdf_options) + end + + private + + def breakdown_rfpdf_options(options) + rfpdf_options = options.dup + rfpdf_options + end + end + + def rfpdf(options) + @rfpdf_options ||= DEFAULT_RFPDF_OPTIONS.dup + @rfpdf_options.merge! options + end + + + private + + def compute_rfpdf_options + @rfpdf_options ||= DEFAULT_RFPDF_OPTIONS.dup + @rfpdf_options.merge!(self.class.read_inheritable_attribute(:rfpdf) || {}) {|k,o,n| o} + @rfpdf_options + end + end +end + + diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/action_view.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/rfpdf/action_view.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,12 @@ +module RFPDF + module ActionView + + private + def _rfpdf_compile_setup(dsl_setup = false) + compile_support = RFPDF::TemplateHandler::CompileSupport.new(controller) + @rfpdf_options = compile_support.options + end + + end +end + diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/bookmark.rb --- a/vendor/plugins/rfpdf/lib/rfpdf/bookmark.rb Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -# Translation of the bookmark class from the PHP FPDF script from Olivier Plathey -# Translated by Sylvain Lafleur and ?? with the help of Brian Ollenberger -# -# First added in 1.53b -# -# Usage is as follows: -# -# require 'fpdf' -# require 'bookmark' -# pdf = FPDF.new -# pdf.extend(PDF_Bookmark) -# -# This allows it to be combined with other extensions, such as the Chinese -# module. - -module PDF_Bookmark - def PDF_Bookmark.extend_object(o) - o.instance_eval('@outlines,@OutlineRoot=[],0') - super(o) - end - - def Bookmark(txt,level=0,y=0) - y=self.GetY() if y==-1 - @outlines.push({'t'=>txt,'l'=>level,'y'=>y,'p'=>self.PageNo()}) - end - - def putbookmarks - @nb=@outlines.size - return if @nb==0 - lru=[] - level=0 - @outlines.each_index do |i| - o=@outlines[i] - if o['l']>0 - parent=lru[o['l']-1] - # Set parent and last pointers - @outlines[i]['parent']=parent - @outlines[parent]['last']=i - if o['l']>level - # Level increasing: set first pointer - @outlines[parent]['first']=i - end - else - @outlines[i]['parent']=@nb - end - if o['l']<=level and i>0 - # Set prev and next pointers - prev=lru[o['l']] - @outlines[prev]['next']=i - @outlines[i]['prev']=prev - end - lru[o['l']]=i - level=o['l'] - end - # Outline items - n=@n+1 - @outlines.each_index do |i| - o=@outlines[i] - newobj - out('<>') - out('endobj') - end - # Outline root - newobj - @OutlineRoot=@n - out('<>') - out('endobj') - end - - def putresources - super - putbookmarks - end - - def putcatalog - super - if not @outlines.empty? - out('/Outlines '+@OutlineRoot.to_s+' 0 R') - out('/PageMode /UseOutlines') - end - end -end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/chinese.rb --- a/vendor/plugins/rfpdf/lib/rfpdf/chinese.rb Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,473 +0,0 @@ -# Copyright (c) 2006 4ssoM LLC -# 1.12 contributed by Ed Moss. -# -# The MIT License -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# This is direct port of chinese.php -# -# Chinese PDF support. -# -# Usage is as follows: -# -# require 'fpdf' -# require 'chinese' -# pdf = FPDF.new -# pdf.extend(PDF_Chinese) -# -# This allows it to be combined with other extensions, such as the bookmark -# module. - -module PDF_Chinese - - Big5_widths={' '=>250,'!'=>250,'"'=>408,'#'=>668,''=>490,'%'=>875,'&'=>698,'\''=>250, - '('=>240,')'=>240,'*'=>417,'+'=>667,','=>250,'-'=>313,'.'=>250,'/'=>520,'0'=>500,'1'=>500, - '2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>250,''=>250, - '<'=>667,'='=>667,'>'=>667,'?'=>396,'@'=>921,'A'=>677,'B'=>615,'C'=>719,'D'=>760,'E'=>625, - 'F'=>552,'G'=>771,'H'=>802,'I'=>354,'J'=>354,'K'=>781,'L'=>604,'M'=>927,'N'=>750,'O'=>823, - 'P'=>563,'Q'=>823,'R'=>729,'S'=>542,'T'=>698,'U'=>771,'V'=>729,'W'=>948,'X'=>771,'Y'=>677, - 'Z'=>635,'['=>344,'\\'=>520,']'=>344,'^'=>469,'_'=>500,'`'=>250,'a'=>469,'b'=>521,'c'=>427, - 'd'=>521,'e'=>438,'f'=>271,'g'=>469,'h'=>531,'i'=>250,'j'=>250,'k'=>458,'l'=>240,'m'=>802, - 'n'=>531,'o'=>500,'p'=>521,'q'=>521,'r'=>365,'s'=>333,'t'=>292,'u'=>521,'v'=>458,'w'=>677, - 'x'=>479,'y'=>458,'z'=>427,'{'=>480,'|'=>496,'end'=>480,'~'=>667} - - GB_widths={' '=>207,'!'=>270,'"'=>342,'#'=>467,''=>462,'%'=>797,'&'=>710,'\''=>239, - '('=>374,')'=>374,'*'=>423,'+'=>605,','=>238,'-'=>375,'.'=>238,'/'=>334,'0'=>462,'1'=>462, - '2'=>462,'3'=>462,'4'=>462,'5'=>462,'6'=>462,'7'=>462,'8'=>462,'9'=>462,':'=>238,''=>238, - '<'=>605,'='=>605,'>'=>605,'?'=>344,'@'=>748,'A'=>684,'B'=>560,'C'=>695,'D'=>739,'E'=>563, - 'F'=>511,'G'=>729,'H'=>793,'I'=>318,'J'=>312,'K'=>666,'L'=>526,'M'=>896,'N'=>758,'O'=>772, - 'P'=>544,'Q'=>772,'R'=>628,'S'=>465,'T'=>607,'U'=>753,'V'=>711,'W'=>972,'X'=>647,'Y'=>620, - 'Z'=>607,'['=>374,'\\'=>333,']'=>374,'^'=>606,'_'=>500,'`'=>239,'a'=>417,'b'=>503,'c'=>427, - 'd'=>529,'e'=>415,'f'=>264,'g'=>444,'h'=>518,'i'=>241,'j'=>230,'k'=>495,'l'=>228,'m'=>793, - 'n'=>527,'o'=>524,'p'=>524,'q'=>504,'r'=>338,'s'=>336,'t'=>277,'u'=>517,'v'=>450,'w'=>652, - 'x'=>466,'y'=>452,'z'=>407,'{'=>370,'|'=>258,'end'=>370,'~'=>605} - - def AddCIDFont(family,style,name,cw,cMap,registry) -#ActionController::Base::logger.debug registry.to_a.join(":").to_s - fontkey=family.downcase+style.upcase - unless @fonts[fontkey].nil? - Error("Font already added: family style") - end - i=@fonts.length+1 - name=name.gsub(' ','') - @fonts[fontkey]={'i'=>i,'type'=>'Type0','name'=>name,'up'=>-130,'ut'=>40,'cw'=>cw, 'CMap'=>cMap,'registry'=>registry} - end - - def AddCIDFonts(family,name,cw,cMap,registry) - AddCIDFont(family,'',name,cw,cMap,registry) - AddCIDFont(family,'B',name+',Bold',cw,cMap,registry) - AddCIDFont(family,'I',name+',Italic',cw,cMap,registry) - AddCIDFont(family,'BI',name+',BoldItalic',cw,cMap,registry) - end - - def AddBig5Font(family='Big5',name='MSungStd-Light-Acro') - #Add Big5 font with proportional Latin - cw=Big5_widths - cMap='ETenms-B5-H' - registry={'ordering'=>'CNS1','supplement'=>0} -#ActionController::Base::logger.debug registry.to_a.join(":").to_s - AddCIDFonts(family,name,cw,cMap,registry) - end - - def AddBig5hwFont(family='Big5-hw',name='MSungStd-Light-Acro') - #Add Big5 font with half-witdh Latin - cw = {} - 32.upto(126) do |i| - cw[i.chr]=500 - end - cMap='ETen-B5-H' - registry={'ordering'=>'CNS1','supplement'=>0} - AddCIDFonts(family,name,cw,cMap,registry) - end - - def AddGBFont(family='GB',name='STSongStd-Light-Acro') - #Add GB font with proportional Latin - cw=GB_widths - cMap='GBKp-EUC-H' - registry={'ordering'=>'GB1','supplement'=>2} - AddCIDFonts(family,name,cw,cMap,registry) - end - - def AddGBhwFont(family='GB-hw',name='STSongStd-Light-Acro') - #Add GB font with half-width Latin - 32.upto(126) do |i| - cw[i.chr]=500 - end - cMap='GBK-EUC-H' - registry={'ordering'=>'GB1','supplement'=>2} - AddCIDFonts(family,name,cw,cMap,registry) - end - - def GetStringWidth(s) - if(@CurrentFont['type']=='Type0') - return GetMBStringWidth(s) - else - return super(s) - end - end - - def GetMBStringWidth(s) - #Multi-byte version of GetStringWidth() - l=0 - cw=@CurrentFont['cw'] - nb=s.length - i=0 - while(i0 and s[nb-1]=="\n") - nb-=1 - end - b=0 - if(border) - if(border==1) - border='LTRB' - b='LRT' - b2='LR' - else - b2='' - if(border.to_s.index('L')) - b2+='L' - end - if(border.to_s.index('R')) - b2+='R' - end - b=border.to_s.index('T') ? b2+'T' : b2 - end - end - sep=-1 - i=0 - j=0 - l=0 - nl=1 - while(iwmax) - #Automatic line break - if(sep==-1 or i==j) - if(i==j) - i+=ascii ? 1 : 3 - end - Cell(w,h,s[j,i-j],b,2,align,fill) - else - Cell(w,h,s[j,sep-j],b,2,align,fill) - i=(s[sep]==' ') ? sep+1 : sep - end - sep=-1 - j=i - l=0 -# nl+=1 - if(border and nl==2) - b=b2 - end - else - i+=ascii ? 1 : 3 - end - end - #Last chunk - if(border and not border.to_s.index('B').nil?) - b+='B' - end - Cell(w,h,s[j,i-j],b,2,align,fill) - @x=@lMargin - end - - def Write(h,txt,link='') - if(@CurrentFont['type']=='Type0') - MBWrite(h,txt,link) - else - super(h,txt,link) - end - end - - def MBWrite(h,txt,link) - #Multi-byte version of Write() - cw=@CurrentFont['cw'] - w=@w-@rMargin-@x - wmax=(w-2*@cMargin)*1000/@FontSize - s=txt.gsub("\r",'') - nb=s.length - sep=-1 - i=0 - j=0 - l=0 - nl=1 - while(iwmax) - #Automatic line break - if(sep==-1 or i==j) - if(@x>@lMargin) - #Move to next line - @x=@lMargin - @y+=h - w=@w-@rMargin-@x - wmax=(w-2*@cMargin)*1000/@FontSize - i+=1 - nl+=1 - next - end - if(i==j) - i+=ascii ? 1 : 3 - end - Cell(w,h,s[j,i-j],0,2,'',0,link) - else - Cell(w,h,s[j,sep-j],0,2,'',0,link) - i=(s[sep]==' ') ? sep+1 : sep - end - sep=-1 - j=i - l=0 - if(nl==1) - @x=@lMargin - w=@w-@rMargin-@x - wmax=(w-2*@cMargin)*1000/@FontSize - end - nl+=1 - else - i+=ascii ? 1 : 3 - end - end - #Last chunk - if(i!=j) - Cell(l/1000*@FontSize,h,s[j,i-j],0,0,'',0,link) - end - end - -private - - def putfonts() - nf=@n - @diffs.each do |diff| - #Encodings - newobj() - out('<>') - out('endobj') - end - # mqr=get_magic_quotes_runtime() - # set_magic_quotes_runtime(0) - @FontFiles.each_pair do |file, info| - #Font file embedding - newobj() - @FontFiles[file]['n']=@n - if(defined('FPDF_FONTPATH')) - file=FPDF_FONTPATH+file - end - size=filesize(file) - if(!size) - Error('Font file not found') - end - out('<>') - f=fopen(file,'rb') - putstream(fread(f,size)) - fclose(f) - out('endobj') - end -# - # set_magic_quotes_runtime(mqr) -# - @fonts.each_pair do |k, font| - #Font objects - newobj() - @fonts[k]['n']=@n - out('<>') - out('endobj') - if(font['type']!='core') - #Widths - newobj() - cw=font['cw'] - s='[' - 32.upto(255) do |i| - s+=cw[i.chr]+' ' - end - out(s+']') - out('endobj') - #Descriptor - newobj() - s='<>') - out('endobj') - end - end - end - end - - def putType0(font) - #Type0 - out('/Subtype /Type0') - out('/BaseFont /'+font['name']+'-'+font['CMap']) - out('/Encoding /'+font['CMap']) - out('/DescendantFonts ['+(@n+1).to_s+' 0 R]') - out('>>') - out('endobj') - #CIDFont - newobj() - out('<>') - out('/FontDescriptor '+(@n+1).to_s+' 0 R') - if(font['CMap']=='ETen-B5-H') - w='13648 13742 500' - elsif(font['CMap']=='GBK-EUC-H') - w='814 907 500 7716 [500]' - else - # ActionController::Base::logger.debug font['cw'].keys.sort.join(' ').to_s - # ActionController::Base::logger.debug font['cw'].values.join(' ').to_s - w='1 [' - font['cw'].keys.sort.each {|key| - w+=font['cw'][key].to_s + " " -# ActionController::Base::logger.debug key.to_s -# ActionController::Base::logger.debug font['cw'][key].to_s - } - w +=']' - end - out('/W ['+w+']>>') - out('endobj') - #Font descriptor - newobj() - out('<>') - out('endobj') - end -end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/errors.rb --- a/vendor/plugins/rfpdf/lib/rfpdf/errors.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/rfpdf/lib/rfpdf/errors.rb Mon Jul 25 14:23:37 2011 +0100 @@ -1,4 +1,6 @@ module RFPDF - class GenerationError < StandardError #:nodoc: + module Errors + class GenerationError < StandardError #:nodoc: + end end end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/fpdf.rb --- a/vendor/plugins/rfpdf/lib/rfpdf/fpdf.rb Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/rfpdf/lib/rfpdf/fpdf.rb Mon Jul 25 14:23:37 2011 +0100 @@ -16,13 +16,18 @@ # Bookmarks contributed by Sylvain Lafleur. # # 1.53 contributed by Ed Moss -# Handle '\n' at the beginning of a string +# Make sure all \n references are inside double quotes - Fix some multicell bugs +# Handle "\n" at the beginning of a string # Bookmarks contributed by Sylvain Lafleur. require 'date' require 'zlib' class FPDF + include RFPDF + + attr_accessor :default_font + FPDF_VERSION = '1.53d' Charwidths = { @@ -63,6 +68,7 @@ @pages=[] @OrientationChanges=[] @state=0 + @default_font = "arial" @fonts={} @FontFiles={} @diffs=[] @@ -169,6 +175,10 @@ @PDFVersion='1.3' end + def GetMargins() + return @lMargin, @tMargin, @rMargin + end + def SetMargins(left, top, right=-1) # Set left, top and right margins @lMargin=left @@ -334,6 +344,7 @@ @TextColor=tc @ColorFlag=cf end + alias_method :add_page, :AddPage def Header # To be implemented in your inherited class @@ -378,13 +389,21 @@ end @ColorFlag=(@FillColor!=@TextColor) end + + def GetCharWidth(widths, index) + if index.is_a?(String) + widths[index.ord] + else + widths[index] + end + end def GetStringWidth(s) # Get width of a string in the current font cw=@CurrentFont['cw'] w=0 s.each_byte do |c| - w=w+cw[c] + w=w+GetCharWidth(cw, c) end w*@FontSize/1000.0 end @@ -395,6 +414,70 @@ out(sprintf('%.2f w',width*@k)) if @page>0 end + def Circle(mid_x, mid_y, radius, style='') + mid_y = (@h-mid_y)*@k + out(sprintf("q\n")) # postscript content in pdf + # init line type etc. with /GSD gs G g (grey) RG rg (RGB) w=line witdh etc. + out(sprintf("1 j\n")) # line join + # translate ("move") circle to mid_y, mid_y + out(sprintf("1 0 0 1 %f %f cm", mid_x, mid_y)) + kappa = 0.5522847498307933984022516322796 + # Quadrant 1 + x_s = 0.0 # 12 o'clock + y_s = 0.0 + radius + x_e = 0.0 + radius # 3 o'clock + y_e = 0.0 + out(sprintf("%f %f m\n", x_s, y_s)) # move to 12 o'clock + # cubic bezier control point 1, start height and kappa * radius to the right + bx_e1 = x_s + (radius * kappa) + by_e1 = y_s + # cubic bezier control point 2, end and kappa * radius above + bx_e2 = x_e + by_e2 = y_e + (radius * kappa) + # draw cubic bezier from current point to x_e/y_e with bx_e1/by_e1 and bx_e2/by_e2 as bezier control points + out(sprintf("%f %f %f %f %f %f c\n", bx_e1, by_e1, bx_e2, by_e2, x_e, y_e)) + # Quadrant 2 + x_s = x_e + y_s = y_e # 3 o'clock + x_e = 0.0 + y_e = 0.0 - radius # 6 o'clock + bx_e1 = x_s # cubic bezier point 1 + by_e1 = y_s - (radius * kappa) + bx_e2 = x_e + (radius * kappa) # cubic bezier point 2 + by_e2 = y_e + out(sprintf("%f %f %f %f %f %f c\n", bx_e1, by_e1, bx_e2, by_e2, x_e, y_e)) + # Quadrant 3 + x_s = x_e + y_s = y_e # 6 o'clock + x_e = 0.0 - radius + y_e = 0.0 # 9 o'clock + bx_e1 = x_s - (radius * kappa) # cubic bezier point 1 + by_e1 = y_s + bx_e2 = x_e # cubic bezier point 2 + by_e2 = y_e - (radius * kappa) + out(sprintf("%f %f %f %f %f %f c\n", bx_e1, by_e1, bx_e2, by_e2, x_e, y_e)) + # Quadrant 4 + x_s = x_e + y_s = y_e # 9 o'clock + x_e = 0.0 + y_e = 0.0 + radius # 12 o'clock + bx_e1 = x_s # cubic bezier point 1 + by_e1 = y_s + (radius * kappa) + bx_e2 = x_e - (radius * kappa) # cubic bezier point 2 + by_e2 = y_e + out(sprintf("%f %f %f %f %f %f c\n", bx_e1, by_e1, bx_e2, by_e2, x_e, y_e)) + if style=='F' + op='f' + elsif style=='FD' or style=='DF' + op='b' + else + op='s' + end + out(sprintf("#{op}\n")) # stroke circle, do not fill and close path + # for filling etc. b, b*, f, f* + out(sprintf("Q\n")) # finish postscript in PDF + end + def Line(x1, y1, x2, y2) # Draw a line out(sprintf('%.2f %.2f m %.2f %.2f l S', @@ -410,6 +493,7 @@ else op='S' end + # x y width height re out(sprintf('%.2f %.2f %.2f %.2f re %s', x*@k,(@h-y)*@k,w*@k,-h*@k,op)) end @@ -558,10 +642,7 @@ def Text(x, y, txt) # Output a string - txt.gsub!(')', '\\)') - txt.gsub!('(', '\\(') - txt.gsub!('\\', '\\\\') - s=sprintf('BT %.2f %.2f Td (%s) Tj ET',x*@k,(@h-y)*@k,txt); + s=sprintf('BT %.2f %.2f Td (%s) Tj ET',x*@k,(@h-y)*@k, escape(txt)); s=s+' '+dounderline(x,y,txt) if @underline and txt!='' s='q '+@TextColor+' '+s+' Q' if @ColorFlag out(s) @@ -572,9 +653,17 @@ @AutoPageBreak end + def BreakThePage?(h) + if (@y + h) > @PageBreakTrigger and !@InFooter and self.AcceptPageBreak + true + else + false + end + end + def Cell(w,h=0,txt='',border=0,ln=0,align='',fill=0,link='') # Output a cell - if @y+h>@PageBreakTrigger and !@InFooter and self.AcceptPageBreak + if self.BreakThePage?(h) # Automatic page break x=@x ws=@ws @@ -627,14 +716,11 @@ else dx=@cMargin end - txt = txt.gsub(')', '\\)') - txt.gsub!('(', '\\(') - txt.gsub!('\\', '\\\\') if @ColorFlag s=s+'q '+@TextColor+' ' end s=s+sprintf('BT %.2f %.2f Td (%s) Tj ET', - (@x+dx)*@k,(@h-(@y+0.5*h+0.3*@FontSize))*@k,txt) + (@x+dx)*@k,(@h-(@y+0.5*h+0.3*@FontSize))*@k,escape(txt)) s=s+' '+dounderline(@x+dx,@y+0.5*h+0.3*@FontSize,txt) if @underline s=s+' Q' if @ColorFlag if link and link != '' @@ -657,9 +743,9 @@ cw=@CurrentFont['cw'] w=@w-@rMargin-@x if w==0 wmax=(w-2*@cMargin)*1000/@FontSize - s=txt.gsub('\r','') + s=txt.gsub("\r",'') nb=s.length - nb=nb-1 if nb>0 and s[nb-1].chr=='\n' + nb=nb-1 if nb>0 and s[nb-1].chr=="\n" b=0 if border!=0 if border==1 @@ -674,70 +760,66 @@ end end sep=-1 - i=0 - j=0 + to_index=0 + from_j=0 l=0 ns=0 nl=1 - while i0 @ws=0 out('0 Tw') end #Ed Moss -# Don't let i go negative - end_i = i == 0 ? 0 : i - 1 - # Changed from s[j..i] to fix bug reported by Hans Allis. - self.Cell(w,h,s[j..end_i],b,2,align,fill) + end_i = to_index == 0 ? 0 : to_index - 1 + # Changed from s[from_j..to_index] to fix bug reported by Hans Allis. + self.Cell(w,h,s[from_j..end_i],b,2,align,fill) # - i=i+1 + to_index=to_index+1 sep=-1 - j=i + from_j=to_index l=0 ns=0 nl=nl+1 b=b2 if border and nl==2 else - if c==' ' - sep=i + if char==' '[0] + sep=to_index ls=l ns=ns+1 end - l=l+cw[c[0]] + l=l+GetCharWidth(cw, char) if l>wmax # Automatic line break if sep==-1 - i=i+1 if i==j + to_index=to_index+1 if to_index==from_j if @ws>0 @ws=0 out('0 Tw') end - self.Cell(w,h,s[j..i],b,2,align,fill) #Ed Moss -# Added so that it wouldn't print the last character of the string if it got close -#FIXME 2006-07-18 Level=0 - but it still puts out an extra new line - i += 1 + self.Cell(w,h,s[from_j..to_index-1],b,2,align,fill) # else if align=='J' @ws=(ns>1) ? (wmax-ls)/1000.0*@FontSize/(ns-1) : 0 out(sprintf('%.3f Tw',@ws*@k)) end - self.Cell(w,h,s[j..sep],b,2,align,fill) - i=sep+1 + self.Cell(w,h,s[from_j..sep],b,2,align,fill) + to_index=sep+1 end sep=-1 - j=i + from_j=to_index l=0 ns=0 nl=nl+1 b=b2 if border and nl==2 else - i=i+1 + to_index=to_index+1 end end end @@ -748,7 +830,7 @@ out('0 Tw') end b=b+'B' if border!=0 and not border.index('B').nil? - self.Cell(w,h,s[j..i],b,2,align,fill) + self.Cell(w,h,s[from_j..to_index],b,2,align,fill) @x=@lMargin end @@ -786,7 +868,7 @@ sep=i ls=l end - l=l+cw[c]; + l=l+GetCharWidth(cw, c); if l>wmax # Automatic line break if sep==-1 @@ -1079,7 +1161,7 @@ cw=font['cw'] s='[' 32.upto(255) do |i| - s << cw[i].to_s+' ' + s << GetCharWidth(cw, i).to_s + ' ' end out(s+']') out('endobj') @@ -1265,7 +1347,7 @@ out('startxref') out(o) out('%%EOF') - state=3 + @state=3 end def beginpage(orientation) @@ -1450,7 +1532,7 @@ def escape(s) # Add \ before \, ( and ) - s.gsub('\\','\\\\').gsub('(','\\(').gsub(')','\\)') + s.gsub('\\','\\\\\\').gsub('(','\\(').gsub(')','\\)') end def putstream(s) diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/fpdf_eps.rb --- a/vendor/plugins/rfpdf/lib/rfpdf/fpdf_eps.rb Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,139 +0,0 @@ -# Information -# -# PDF_EPS class from Valentin Schmidt ported to ruby by Thiago Jackiw (tjackiw@gmail.com) -# working for Mingle LLC (www.mingle.com) -# Release Date: July 13th, 2006 -# -# Description -# -# This script allows to embed vector-based Adobe Illustrator (AI) or AI-compatible EPS files. -# Only vector drawing is supported, not text or bitmap. Although the script was successfully -# tested with various AI format versions, best results are probably achieved with files that -# were exported in the AI3 format (tested with Illustrator CS2, Freehand MX and Photoshop CS2). -# -# ImageEps(string file, float x, float y [, float w [, float h [, string link [, boolean useBoundingBox]]]]) -# -# Same parameters as for regular FPDF::Image() method, with an additional one: -# -# useBoundingBox: specifies whether to position the bounding box (true) or the complete canvas (false) -# at location (x,y). Default value is true. -# -# First added to the Ruby FPDF distribution in 1.53c -# -# Usage is as follows: -# -# require 'fpdf' -# require 'fpdf_eps' -# pdf = FPDF.new -# pdf.extend(PDF_EPS) -# pdf.ImageEps(...) -# -# This allows it to be combined with other extensions, such as the bookmark -# module. - -module PDF_EPS - def ImageEps(file, x, y, w=0, h=0, link='', use_bounding_box=true) - data = nil - if File.exists?(file) - File.open(file, 'rb') do |f| - data = f.read() - end - else - Error('EPS file not found: '+file) - end - - # Find BoundingBox param - regs = data.scan(/%%BoundingBox: [^\r\n]*/m) - regs << regs[0].gsub(/%%BoundingBox: /, '') - if regs.size > 1 - tmp = regs[1].to_s.split(' ') - @x1 = tmp[0].to_i - @y1 = tmp[1].to_i - @x2 = tmp[2].to_i - @y2 = tmp[3].to_i - else - Error('No BoundingBox found in EPS file: '+file) - end - f_start = data.index('%%EndSetup') - f_start = data.index('%%EndProlog') if f_start === false - f_start = data.index('%%BoundingBox') if f_start === false - - data = data.slice(f_start, data.length) - - f_end = data.index('%%PageTrailer') - f_end = data.index('showpage') if f_end === false - data = data.slice(0, f_end) if f_end - - # save the current graphic state - out('q') - - k = @k - - # Translate - if use_bounding_box - dx = x*k-@x1 - dy = @hPt-@y2-y*k - else - dx = x*k - dy = -y*k - end - tm = [1,0,0,1,dx,dy] - out(sprintf('%.3f %.3f %.3f %.3f %.3f %.3f cm', - tm[0], tm[1], tm[2], tm[3], tm[4], tm[5])) - - if w > 0 - scale_x = w/((@x2-@x1)/k) - if h > 0 - scale_y = h/((@y2-@y1)/k) - else - scale_y = scale_x - h = (@y2-@y1)/k * scale_y - end - else - if h > 0 - scale_y = $h/((@y2-@y1)/$k) - scale_x = scale_y - w = (@x2-@x1)/k * scale_x - else - w = (@x2-@x1)/k - h = (@y2-@y1)/k - end - end - - if !scale_x.nil? - # Scale - tm = [scale_x,0,0,scale_y,0,@hPt*(1-scale_y)] - out(sprintf('%.3f %.3f %.3f %.3f %.3f %.3f cm', - tm[0], tm[1], tm[2], tm[3], tm[4], tm[5])) - end - - data.split(/\r\n|[\r\n]/).each do |line| - next if line == '' || line[0,1] == '%' - len = line.length - # next if (len > 2 && line[len-2,len] != ' ') - cmd = line[len-2,len].strip - case cmd - when 'm', 'l', 'v', 'y', 'c', 'k', 'K', 'g', 'G', 's', 'S', 'J', 'j', 'w', 'M', 'd': - out(line) - - when 'L': - line[len-1,len]='l' - out(line) - - when 'C': - line[len-1,len]='c' - out(line) - - when 'f', 'F': - out('f*') - - when 'b', 'B': - out(cmd + '*') - end - end - - # restore previous graphic state - out('Q') - Link(x,y,w,h,link) if link - end -end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/japanese.rb --- a/vendor/plugins/rfpdf/lib/rfpdf/japanese.rb Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,468 +0,0 @@ -# Copyright (c) 2006 4ssoM LLC -# 1.12 contributed by Ed Moss. -# -# The MIT License -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# This is direct port of japanese.php -# -# Japanese PDF support. -# -# Usage is as follows: -# -# require 'fpdf' -# require 'chinese' -# pdf = FPDF.new -# pdf.extend(PDF_Japanese) -# -# This allows it to be combined with other extensions, such as the bookmark -# module. - -module PDF_Japanese - - SJIS_widths={' ' => 278, '!' => 299, '"' => 353, '#' => 614, '$' => 614, '%' => 721, '&' => 735, '\'' => 216, - '(' => 323, ')' => 323, '*' => 449, '+' => 529, ',' => 219, '-' => 306, '.' => 219, '/' => 453, '0' => 614, '1' => 614, - '2' => 614, '3' => 614, '4' => 614, '5' => 614, '6' => 614, '7' => 614, '8' => 614, '9' => 614, ':' => 219, ';' => 219, - '<' => 529, '=' => 529, '>' => 529, '?' => 486, '@' => 744, 'A' => 646, 'B' => 604, 'C' => 617, 'D' => 681, 'E' => 567, - 'F' => 537, 'G' => 647, 'H' => 738, 'I' => 320, 'J' => 433, 'K' => 637, 'L' => 566, 'M' => 904, 'N' => 710, 'O' => 716, - 'P' => 605, 'Q' => 716, 'R' => 623, 'S' => 517, 'T' => 601, 'U' => 690, 'V' => 668, 'W' => 990, 'X' => 681, 'Y' => 634, - 'Z' => 578, '[' => 316, '\\' => 614, ']' => 316, '^' => 529, '_' => 500, '`' => 387, 'a' => 509, 'b' => 566, 'c' => 478, - 'd' => 565, 'e' => 503, 'f' => 337, 'g' => 549, 'h' => 580, 'i' => 275, 'j' => 266, 'k' => 544, 'l' => 276, 'm' => 854, - 'n' => 579, 'o' => 550, 'p' => 578, 'q' => 566, 'r' => 410, 's' => 444, 't' => 340, 'u' => 575, 'v' => 512, 'w' => 760, - 'x' => 503, 'y' => 529, 'z' => 453, '{' => 326, '|' => 380, '}' => 326, '~' => 387} - - def AddCIDFont(family,style,name,cw,cMap,registry) - fontkey=family.downcase+style.upcase - unless @fonts[fontkey].nil? - Error("CID font already added: family style") - end - i=@fonts.length+1 - @fonts[fontkey]={'i'=>i,'type'=>'Type0','name'=>name,'up'=>-120,'ut'=>40,'cw'=>cw, - 'CMap'=>cMap,'registry'=>registry} - end - - def AddCIDFonts(family,name,cw,cMap,registry) - AddCIDFont(family,'',name,cw,cMap,registry) - AddCIDFont(family,'B',name+',Bold',cw,cMap,registry) - AddCIDFont(family,'I',name+',Italic',cw,cMap,registry) - AddCIDFont(family,'BI',name+',BoldItalic',cw,cMap,registry) - end - - def AddSJISFont(family='SJIS') - #Add SJIS font with proportional Latin - name='KozMinPro-Regular-Acro' - cw=SJIS_widths - cMap='90msp-RKSJ-H' - registry={'ordering'=>'Japan1','supplement'=>2} - AddCIDFonts(family,name,cw,cMap,registry) - end - - def AddSJIShwFont(family='SJIS-hw') - #Add SJIS font with half-width Latin - name='KozMinPro-Regular-Acro' - 32.upto(126) do |i| - cw[i.chr]=500 - end - cMap='90ms-RKSJ-H' - registry={'ordering'=>'Japan1','supplement'=>2} - AddCIDFonts(family,name,cw,cMap,registry) - end - - def GetStringWidth(s) - if(@CurrentFont['type']=='Type0') - return GetSJISStringWidth(s) - else - return super(s) - end - end - - def GetSJISStringWidth(s) - #SJIS version of GetStringWidth() - l=0 - cw=@CurrentFont['cw'] - nb=s.length - i=0 - while(i=161 and o<=223) - #Half-width katakana - l+=500 - i+=1 - else - #Full-width character - l+=1000 - i+=2 - end - end - return l*@FontSize/1000 - end - - def MultiCell(w,h,txt,border=0,align='L',fill=0) - if(@CurrentFont['type']=='Type0') - SJISMultiCell(w,h,txt,border,align,fill) - else - super(w,h,txt,border,align,fill) - end - end - - def SJISMultiCell(w,h,txt,border=0,align='L',fill=0) - #Output text with automatic or explicit line breaks - cw=@CurrentFont['cw'] - if(w==0) - w=@w-@rMargin-@x - end - wmax=(w-2*@cMargin)*1000/@FontSize - s=txt.gsub("\r",'') - nb=s.length - if(nb>0 and s[nb-1]=="\n") - nb-=1 - end - b=0 - if(border) - if(border==1) - border='LTRB' - b='LRT' - b2='LR' - else - b2='' - if(border.to_s.index('L')) - b2+='L' - end - if(border.to_s.index('R')) - b2+='R' - end - b=border.to_s.index('T') ? b2+'T' : b2 - end - end - sep=-1 - i=0 - j=0 - l=0 - nl=1 - while(i=161 and o<=223) - #Half-width katakana - l+=500 - n=1 - sep=i - else - #Full-width character - l+=1000 - n=2 - sep=i - end - if(l>wmax) - #Automatic line break - if(sep==-1 or i==j) - if(i==j) - i+=n - end - Cell(w,h,s[j,i-j],b,2,align,fill) - else - Cell(w,h,s[j,sep-j],b,2,align,fill) - i=(s[sep]==' ') ? sep+1 : sep - end - sep=-1 - j=i - l=0 - nl+=1 - if(border and nl==2) - b=b2 - end - else - i+=n - if(o>=128) - sep=i - end - end - end - #Last chunk - if(border and not border.to_s.index('B').nil?) - b+='B' - end - Cell(w,h,s[j,i-j],b,2,align,fill) - @x=@lMargin - end - - def Write(h,txt,link='') - if(@CurrentFont['type']=='Type0') - SJISWrite(h,txt,link) - else - super(h,txt,link) - end - end - - def SJISWrite(h,txt,link) - #SJIS version of Write() - cw=@CurrentFont['cw'] - w=@w-@rMargin-@x - wmax=(w-2*@cMargin)*1000/@FontSize - s=txt.gsub("\r",'') - nb=s.length - sep=-1 - i=0 - j=0 - l=0 - nl=1 - while(i=161 and o<=223) - #Half-width katakana - l+=500 - n=1 - sep=i - else - #Full-width character - l+=1000 - n=2 - sep=i - end - if(l>wmax) - #Automatic line break - if(sep==-1 or i==j) - if(@x>@lMargin) - #Move to next line - @x=@lMargin - @y+=h - w=@w-@rMargin-@x - wmax=(w-2*@cMargin)*1000/@FontSize - i+=n - nl+=1 - next - end - if(i==j) - i+=n - end - Cell(w,h,s[j,i-j],0,2,'',0,link) - else - Cell(w,h,s[j,sep-j],0,2,'',0,link) - i=(s[sep]==' ') ? sep+1 : sep - end - sep=-1 - j=i - l=0 - if(nl==1) - @x=@lMargin - w=@w-@rMargin-@x - wmax=(w-2*@cMargin)*1000/@FontSize - end - nl+=1 - else - i+=n - if(o>=128) - sep=i - end - end - end - #Last chunk - if(i!=j) - Cell(l/1000*@FontSize,h,s[j,i-j],0,0,'',0,link) - end - end - -private - - def putfonts() - nf=@n - @diffs.each do |diff| - #Encodings - newobj() - out('<>') - out('endobj') - end - # mqr=get_magic_quotes_runtime() - # set_magic_quotes_runtime(0) - @FontFiles.each_pair do |file, info| - #Font file embedding - newobj() - @FontFiles[file]['n']=@n - if(defined('FPDF_FONTPATH')) - file=FPDF_FONTPATH+file - end - size=filesize(file) - if(!size) - Error('Font file not found') - end - out('<>') - f=fopen(file,'rb') - putstream(fread(f,size)) - fclose(f) - out('endobj') - end - # set_magic_quotes_runtime(mqr) - @fonts.each_pair do |k, font| - #Font objects - newobj() - @fonts[k]['n']=@n - out('<>') - out('endobj') - if(font['type']!='core') - #Widths - newobj() - cw=font['cw'] - s='[' - 32.upto(255) do |i| - s+=cw[i.chr]+' ' - end - out(s+']') - out('endobj') - #Descriptor - newobj() - s='<>') - out('endobj') - end - end - end - end - - def putType0(font) - #Type0 - out('/Subtype /Type0') - out('/BaseFont /'+font['name']+'-'+font['CMap']) - out('/Encoding /'+font['CMap']) - out('/DescendantFonts ['+(@n+1).to_s+' 0 R]') - out('>>') - out('endobj') - #CIDFont - newobj() - out('<>') - out('/FontDescriptor '+(@n+1).to_s+' 0 R') - w='/W [1 [' - font['cw'].keys.sort.each {|key| - w+=font['cw'][key].to_s + " " -# ActionController::Base::logger.debug key.to_s -# ActionController::Base::logger.debug font['cw'][key].to_s - } - out(w+'] 231 325 500 631 [500] 326 389 500]') - out('>>') - out('endobj') - #Font descriptor - newobj() - out('<>') - out('endobj') - end -end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/korean.rb --- a/vendor/plugins/rfpdf/lib/rfpdf/korean.rb Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,436 +0,0 @@ -# Copyright (c) 2006 4ssoM LLC -# 1.12 contributed by Ed Moss. -# -# The MIT License -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# This is direct port of korean.php -# -# Korean PDF support. -# -# Usage is as follows: -# -# require 'fpdf' -# require 'chinese' -# pdf = FPDF.new -# pdf.extend(PDF_Korean) -# -# This allows it to be combined with other extensions, such as the bookmark -# module. - -module PDF_Korean - -UHC_widths={' ' => 333, '!' => 416, '"' => 416, '#' => 833, '$' => 625, '%' => 916, '&' => 833, '\'' => 250, - '(' => 500, ')' => 500, '*' => 500, '+' => 833, ',' => 291, '-' => 833, '.' => 291, '/' => 375, '0' => 625, '1' => 625, - '2' => 625, '3' => 625, '4' => 625, '5' => 625, '6' => 625, '7' => 625, '8' => 625, '9' => 625, ':' => 333, ';' => 333, - '<' => 833, '=' => 833, '>' => 916, '?' => 500, '@' => 1000, 'A' => 791, 'B' => 708, 'C' => 708, 'D' => 750, 'E' => 708, - 'F' => 666, 'G' => 750, 'H' => 791, 'I' => 375, 'J' => 500, 'K' => 791, 'L' => 666, 'M' => 916, 'N' => 791, 'O' => 750, - 'P' => 666, 'Q' => 750, 'R' => 708, 'S' => 666, 'T' => 791, 'U' => 791, 'V' => 750, 'W' => 1000, 'X' => 708, 'Y' => 708, - 'Z' => 666, '[' => 500, '\\' => 375, ']' => 500, '^' => 500, '_' => 500, '`' => 333, 'a' => 541, 'b' => 583, 'c' => 541, - 'd' => 583, 'e' => 583, 'f' => 375, 'g' => 583, 'h' => 583, 'i' => 291, 'j' => 333, 'k' => 583, 'l' => 291, 'm' => 875, - 'n' => 583, 'o' => 583, 'p' => 583, 'q' => 583, 'r' => 458, 's' => 541, 't' => 375, 'u' => 583, 'v' => 583, 'w' => 833, - 'x' => 625, 'y' => 625, 'z' => 500, '{' => 583, '|' => 583, '}' => 583, '~' => 750} - - def AddCIDFont(family,style,name,cw,cMap,registry) - fontkey=family.downcase+style.upcase - unless @fonts[fontkey].nil? - Error("Font already added: family style") - end - i=@fonts.length+1 - name=name.gsub(' ','') - @fonts[fontkey]={'i'=>i,'type'=>'Type0','name'=>name,'up'=>-130,'ut'=>40,'cw'=>cw, - 'CMap'=>cMap,'registry'=>registry} - end - - def AddCIDFonts(family,name,cw,cMap,registry) - AddCIDFont(family,'',name,cw,cMap,registry) - AddCIDFont(family,'B',name+',Bold',cw,cMap,registry) - AddCIDFont(family,'I',name+',Italic',cw,cMap,registry) - AddCIDFont(family,'BI',name+',BoldItalic',cw,cMap,registry) - end - - def AddUHCFont(family='UHC',name='HYSMyeongJoStd-Medium-Acro') - #Add UHC font with proportional Latin - cw=UHC_widths - cMap='KSCms-UHC-H' - registry={'ordering'=>'Korea1','supplement'=>1} - AddCIDFonts(family,name,cw,cMap,registry) - end - - def AddUHChwFont(family='UHC-hw',name='HYSMyeongJoStd-Medium-Acro') - #Add UHC font with half-witdh Latin - 32.upto(126) do |i| - cw[i.chr]=500 - end - cMap='KSCms-UHC-HW-H' - registry={'ordering'=>'Korea1','supplement'=>1} - AddCIDFonts(family,name,cw,cMap,registry) - end - - def GetStringWidth(s) - if(@CurrentFont['type']=='Type0') - return GetMBStringWidth(s) - else - return super(s) - end - end - - def GetMBStringWidth(s) - #Multi-byte version of GetStringWidth() - l=0 - cw=@CurrentFont['cw'] - nb=s.length - i=0 - while(i0 and s[nb-1]=="\n") - nb-=1 - end - b=0 - if(border) - if(border==1) - border='LTRB' - b='LRT' - b2='LR' - else - b2='' - if(border.to_s.index('L').nil?) - b2+='L' - end - if(border.to_s.index('R').nil?) - b2+='R' - end - b=border.to_s.index('T').nil? ? b2+'T' : b2 - end - end - sep=-1 - i=0 - j=0 - l=0 - nl=1 - while(iwmax) - #Automatic line break - if(sep==-1 or i==j) - if(i==j) - i+=ascii ? 1 : 2 - end - Cell(w,h,s[j,i-j],b,2,align,fill) - else - Cell(w,h,s[j,sep-j],b,2,align,fill) - i=(s[sep]==' ') ? sep+1 : sep - end - sep=-1 - j=i - l=0 - nl+=1 - if(border and nl==2) - b=b2 - end - else - i+=ascii ? 1 : 2 - end - end - #Last chunk - if(border and not border.to_s.index('B').nil?) - b+='B' - end - Cell(w,h,s[j,i-j],b,2,align,fill) - @x=@lMargin - end - - def Write(h,txt,link='') - if(@CurrentFont['type']=='Type0') - MBWrite(h,txt,link) - else - super(h,txt,link) - end - end - - def MBWrite(h,txt,link) - #Multi-byte version of Write() - cw=@CurrentFont['cw'] - w=@w-@rMargin-@x - wmax=(w-2*@cMargin)*1000/@FontSize - s=txt.gsub("\r",'') - nb=s.length - sep=-1 - i=0 - j=0 - l=0 - nl=1 - while(iwmax) - #Automatic line break - if(sep==-1 or i==j) - if(@x>@lMargin) - #Move to next line - @x=@lMargin - @y+=h - w=@w-@rMargin-@x - wmax=(w-2*@cMargin)*1000/@FontSize - i+=1 - nl+=1 - next - end - if(i==j) - i+=ascii ? 1 : 2 - end - Cell(w,h,s[j,i-j],0,2,'',0,link) - else - Cell(w,h,s[j,sep-j],0,2,'',0,link) - i=(s[sep]==' ') ? sep+1 : sep - end - sep=-1 - j=i - l=0 - if(nl==1) - @x=@lMargin - w=@w-@rMargin-@x - wmax=(w-2*@cMargin)*1000/@FontSize - end - nl+=1 - else - i+=ascii ? 1 : 2 - end - end - #Last chunk - if(i!=j) - Cell(l/1000*@FontSize,h,s[j,i-j],0,0,'',0,link) - end - end - -private - - def putfonts() - nf=@n - @diffs.each do |diff| - #Encodings - newobj() - out('<>') - out('endobj') - end - # mqr=get_magic_quotes_runtime() - # set_magic_quotes_runtime(0) - @FontFiles.each_pair do |file, info| - #Font file embedding - newobj() - @FontFiles[file]['n']=@n - if(defined('FPDF_FONTPATH')) - file=FPDF_FONTPATH+file - end - size=filesize(file) - if(!size) - Error('Font file not found') - end - out('<>') - f=fopen(file,'rb') - putstream(fread(f,size)) - fclose(f) - out('endobj') - end - # set_magic_quotes_runtime(mqr) - @fonts.each_pair do |k, font| - #Font objects - newobj() - @fonts[k]['n']=@n - out('<>') - out('endobj') - if(font['type']!='core') - #Widths - newobj() - cw=font['cw'] - s='[' - 32.upto(255) do |i| - s+=cw[i.chr]+' ' - end - out(s+']') - out('endobj') - #Descriptor - newobj() - s='<>') - out('endobj') - end - end - end - end - - def putType0(font) - #Type0 - out('/Subtype /Type0') - out('/BaseFont /'+font['name']+'-'+font['CMap']) - out('/Encoding /'+font['CMap']) - out('/DescendantFonts ['+(@n+1).to_s+' 0 R]') - out('>>') - out('endobj') - #CIDFont - newobj() - out('<>') - out('/FontDescriptor '+(@n+1).to_s+' 0 R') - if(font['CMap']=='KSCms-UHC-HW-H') - w='8094 8190 500' - else - w='1 [' - font['cw'].keys.sort.each {|key| - w+=font['cw'][key].to_s + " " - # ActionController::Base::logger.debug key.to_s - # ActionController::Base::logger.debug font['cw'][key].to_s - } - w +=']' - end - out('/W ['+w+']>>') - out('endobj') - #Font descriptor - newobj() - out('<>') - out('endobj') - end -end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/makefont.rb --- a/vendor/plugins/rfpdf/lib/rfpdf/makefont.rb Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1787 +0,0 @@ -#!/usr/bin/env ruby -# -# Utility to generate font definition files -# Version: 1.1 -# Date: 2006-07-19 -# -# Changelog: -# Version 1.1 - Brian Ollenberger -# - Fixed a very small bug in MakeFont for generating FontDef.diff. - -Charencodings = { -# Central Europe - 'cp1250' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - 'Euro', '.notdef', 'quotesinglbase', '.notdef', - 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', - '.notdef', 'perthousand', 'Scaron', 'guilsinglleft', - 'Sacute', 'Tcaron', 'Zcaron', 'Zacute', - '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', - 'quotedblright', 'bullet', 'endash', 'emdash', - '.notdef', 'trademark', 'scaron', 'guilsinglright', - 'sacute', 'tcaron', 'zcaron', 'zacute', - 'space', 'caron', 'breve', 'Lslash', - 'currency', 'Aogonek', 'brokenbar', 'section', - 'dieresis', 'copyright', 'Scedilla', 'guillemotleft', - 'logicalnot', 'hyphen', 'registered', 'Zdotaccent', - 'degree', 'plusminus', 'ogonek', 'lslash', - 'acute', 'mu', 'paragraph', 'periodcentered', - 'cedilla', 'aogonek', 'scedilla', 'guillemotright', - 'Lcaron', 'hungarumlaut', 'lcaron', 'zdotaccent', - 'Racute', 'Aacute', 'Acircumflex', 'Abreve', - 'Adieresis', 'Lacute', 'Cacute', 'Ccedilla', - 'Ccaron', 'Eacute', 'Eogonek', 'Edieresis', - 'Ecaron', 'Iacute', 'Icircumflex', 'Dcaron', - 'Dcroat', 'Nacute', 'Ncaron', 'Oacute', - 'Ocircumflex', 'Ohungarumlaut', 'Odieresis', 'multiply', - 'Rcaron', 'Uring', 'Uacute', 'Uhungarumlaut', - 'Udieresis', 'Yacute', 'Tcommaaccent', 'germandbls', - 'racute', 'aacute', 'acircumflex', 'abreve', - 'adieresis', 'lacute', 'cacute', 'ccedilla', - 'ccaron', 'eacute', 'eogonek', 'edieresis', - 'ecaron', 'iacute', 'icircumflex', 'dcaron', - 'dcroat', 'nacute', 'ncaron', 'oacute', - 'ocircumflex', 'ohungarumlaut', 'odieresis', 'divide', - 'rcaron', 'uring', 'uacute', 'uhungarumlaut', - 'udieresis', 'yacute', 'tcommaaccent', 'dotaccent' - ], -# Cyrillic - 'cp1251' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - 'afii10051', 'afii10052', 'quotesinglbase', 'afii10100', - 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', - 'Euro', 'perthousand', 'afii10058', 'guilsinglleft', - 'afii10059', 'afii10061', 'afii10060', 'afii10145', - 'afii10099', 'quoteleft', 'quoteright', 'quotedblleft', - 'quotedblright', 'bullet', 'endash', 'emdash', - '.notdef', 'trademark', 'afii10106', 'guilsinglright', - 'afii10107', 'afii10109', 'afii10108', 'afii10193', - 'space', 'afii10062', 'afii10110', 'afii10057', - 'currency', 'afii10050', 'brokenbar', 'section', - 'afii10023', 'copyright', 'afii10053', 'guillemotleft', - 'logicalnot', 'hyphen', 'registered', 'afii10056', - 'degree', 'plusminus', 'afii10055', 'afii10103', - 'afii10098', 'mu', 'paragraph', 'periodcentered', - 'afii10071', 'afii61352', 'afii10101', 'guillemotright', - 'afii10105', 'afii10054', 'afii10102', 'afii10104', - 'afii10017', 'afii10018', 'afii10019', 'afii10020', - 'afii10021', 'afii10022', 'afii10024', 'afii10025', - 'afii10026', 'afii10027', 'afii10028', 'afii10029', - 'afii10030', 'afii10031', 'afii10032', 'afii10033', - 'afii10034', 'afii10035', 'afii10036', 'afii10037', - 'afii10038', 'afii10039', 'afii10040', 'afii10041', - 'afii10042', 'afii10043', 'afii10044', 'afii10045', - 'afii10046', 'afii10047', 'afii10048', 'afii10049', - 'afii10065', 'afii10066', 'afii10067', 'afii10068', - 'afii10069', 'afii10070', 'afii10072', 'afii10073', - 'afii10074', 'afii10075', 'afii10076', 'afii10077', - 'afii10078', 'afii10079', 'afii10080', 'afii10081', - 'afii10082', 'afii10083', 'afii10084', 'afii10085', - 'afii10086', 'afii10087', 'afii10088', 'afii10089', - 'afii10090', 'afii10091', 'afii10092', 'afii10093', - 'afii10094', 'afii10095', 'afii10096', 'afii10097' - ], -# Western Europe - 'cp1252' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - 'Euro', '.notdef', 'quotesinglbase', 'florin', - 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', - 'circumflex', 'perthousand', 'Scaron', 'guilsinglleft', - 'OE', '.notdef', 'Zcaron', '.notdef', - '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', - 'quotedblright', 'bullet', 'endash', 'emdash', - 'tilde', 'trademark', 'scaron', 'guilsinglright', - 'oe', '.notdef', 'zcaron', 'Ydieresis', - 'space', 'exclamdown', 'cent', 'sterling', - 'currency', 'yen', 'brokenbar', 'section', - 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft', - 'logicalnot', 'hyphen', 'registered', 'macron', - 'degree', 'plusminus', 'twosuperior', 'threesuperior', - 'acute', 'mu', 'paragraph', 'periodcentered', - 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright', - 'onequarter', 'onehalf', 'threequarters', 'questiondown', - 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', - 'Adieresis', 'Aring', 'AE', 'Ccedilla', - 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', - 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', - 'Eth', 'Ntilde', 'Ograve', 'Oacute', - 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', - 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', - 'Udieresis', 'Yacute', 'Thorn', 'germandbls', - 'agrave', 'aacute', 'acircumflex', 'atilde', - 'adieresis', 'aring', 'ae', 'ccedilla', - 'egrave', 'eacute', 'ecircumflex', 'edieresis', - 'igrave', 'iacute', 'icircumflex', 'idieresis', - 'eth', 'ntilde', 'ograve', 'oacute', - 'ocircumflex', 'otilde', 'odieresis', 'divide', - 'oslash', 'ugrave', 'uacute', 'ucircumflex', - 'udieresis', 'yacute', 'thorn', 'ydieresis' - ], -# Greek - 'cp1253' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - 'Euro', '.notdef', 'quotesinglbase', 'florin', - 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', - '.notdef', 'perthousand', '.notdef', 'guilsinglleft', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', - 'quotedblright', 'bullet', 'endash', 'emdash', - '.notdef', 'trademark', '.notdef', 'guilsinglright', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'dieresistonos', 'Alphatonos', 'sterling', - 'currency', 'yen', 'brokenbar', 'section', - 'dieresis', 'copyright', '.notdef', 'guillemotleft', - 'logicalnot', 'hyphen', 'registered', 'afii00208', - 'degree', 'plusminus', 'twosuperior', 'threesuperior', - 'tonos', 'mu', 'paragraph', 'periodcentered', - 'Epsilontonos', 'Etatonos', 'Iotatonos', 'guillemotright', - 'Omicrontonos', 'onehalf', 'Upsilontonos', 'Omegatonos', - 'iotadieresistonos','Alpha', 'Beta', 'Gamma', - 'Delta', 'Epsilon', 'Zeta', 'Eta', - 'Theta', 'Iota', 'Kappa', 'Lambda', - 'Mu', 'Nu', 'Xi', 'Omicron', - 'Pi', 'Rho', '.notdef', 'Sigma', - 'Tau', 'Upsilon', 'Phi', 'Chi', - 'Psi', 'Omega', 'Iotadieresis', 'Upsilondieresis', - 'alphatonos', 'epsilontonos', 'etatonos', 'iotatonos', - 'upsilondieresistonos','alpha', 'beta', 'gamma', - 'delta', 'epsilon', 'zeta', 'eta', - 'theta', 'iota', 'kappa', 'lambda', - 'mu', 'nu', 'xi', 'omicron', - 'pi', 'rho', 'sigma1', 'sigma', - 'tau', 'upsilon', 'phi', 'chi', - 'psi', 'omega', 'iotadieresis', 'upsilondieresis', - 'omicrontonos', 'upsilontonos', 'omegatonos', '.notdef' - ], -# Turkish - 'cp1254' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - 'Euro', '.notdef', 'quotesinglbase', 'florin', - 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', - 'circumflex', 'perthousand', 'Scaron', 'guilsinglleft', - 'OE', '.notdef', '.notdef', '.notdef', - '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', - 'quotedblright', 'bullet', 'endash', 'emdash', - 'tilde', 'trademark', 'scaron', 'guilsinglright', - 'oe', '.notdef', '.notdef', 'Ydieresis', - 'space', 'exclamdown', 'cent', 'sterling', - 'currency', 'yen', 'brokenbar', 'section', - 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft', - 'logicalnot', 'hyphen', 'registered', 'macron', - 'degree', 'plusminus', 'twosuperior', 'threesuperior', - 'acute', 'mu', 'paragraph', 'periodcentered', - 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright', - 'onequarter', 'onehalf', 'threequarters', 'questiondown', - 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', - 'Adieresis', 'Aring', 'AE', 'Ccedilla', - 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', - 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', - 'Gbreve', 'Ntilde', 'Ograve', 'Oacute', - 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', - 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', - 'Udieresis', 'Idotaccent', 'Scedilla', 'germandbls', - 'agrave', 'aacute', 'acircumflex', 'atilde', - 'adieresis', 'aring', 'ae', 'ccedilla', - 'egrave', 'eacute', 'ecircumflex', 'edieresis', - 'igrave', 'iacute', 'icircumflex', 'idieresis', - 'gbreve', 'ntilde', 'ograve', 'oacute', - 'ocircumflex', 'otilde', 'odieresis', 'divide', - 'oslash', 'ugrave', 'uacute', 'ucircumflex', - 'udieresis', 'dotlessi', 'scedilla', 'ydieresis' - ], -# Hebrew - 'cp1255' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - 'Euro', '.notdef', 'quotesinglbase', 'florin', - 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', - 'circumflex', 'perthousand', '.notdef', 'guilsinglleft', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', - 'quotedblright', 'bullet', 'endash', 'emdash', - 'tilde', 'trademark', '.notdef', 'guilsinglright', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclamdown', 'cent', 'sterling', - 'afii57636', 'yen', 'brokenbar', 'section', - 'dieresis', 'copyright', 'multiply', 'guillemotleft', - 'logicalnot', 'sfthyphen', 'registered', 'macron', - 'degree', 'plusminus', 'twosuperior', 'threesuperior', - 'acute', 'mu', 'paragraph', 'middot', - 'cedilla', 'onesuperior', 'divide', 'guillemotright', - 'onequarter', 'onehalf', 'threequarters', 'questiondown', - 'afii57799', 'afii57801', 'afii57800', 'afii57802', - 'afii57793', 'afii57794', 'afii57795', 'afii57798', - 'afii57797', 'afii57806', '.notdef', 'afii57796', - 'afii57807', 'afii57839', 'afii57645', 'afii57841', - 'afii57842', 'afii57804', 'afii57803', 'afii57658', - 'afii57716', 'afii57717', 'afii57718', 'gereshhebrew', - 'gershayimhebrew','.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'afii57664', 'afii57665', 'afii57666', 'afii57667', - 'afii57668', 'afii57669', 'afii57670', 'afii57671', - 'afii57672', 'afii57673', 'afii57674', 'afii57675', - 'afii57676', 'afii57677', 'afii57678', 'afii57679', - 'afii57680', 'afii57681', 'afii57682', 'afii57683', - 'afii57684', 'afii57685', 'afii57686', 'afii57687', - 'afii57688', 'afii57689', 'afii57690', '.notdef', - '.notdef', 'afii299', 'afii300', '.notdef' - ], -# Baltic - 'cp1257' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - 'Euro', '.notdef', 'quotesinglbase', '.notdef', - 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', - '.notdef', 'perthousand', '.notdef', 'guilsinglleft', - '.notdef', 'dieresis', 'caron', 'cedilla', - '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', - 'quotedblright', 'bullet', 'endash', 'emdash', - '.notdef', 'trademark', '.notdef', 'guilsinglright', - '.notdef', 'macron', 'ogonek', '.notdef', - 'space', '.notdef', 'cent', 'sterling', - 'currency', '.notdef', 'brokenbar', 'section', - 'Oslash', 'copyright', 'Rcommaaccent', 'guillemotleft', - 'logicalnot', 'hyphen', 'registered', 'AE', - 'degree', 'plusminus', 'twosuperior', 'threesuperior', - 'acute', 'mu', 'paragraph', 'periodcentered', - 'oslash', 'onesuperior', 'rcommaaccent', 'guillemotright', - 'onequarter', 'onehalf', 'threequarters', 'ae', - 'Aogonek', 'Iogonek', 'Amacron', 'Cacute', - 'Adieresis', 'Aring', 'Eogonek', 'Emacron', - 'Ccaron', 'Eacute', 'Zacute', 'Edotaccent', - 'Gcommaaccent', 'Kcommaaccent', 'Imacron', 'Lcommaaccent', - 'Scaron', 'Nacute', 'Ncommaaccent', 'Oacute', - 'Omacron', 'Otilde', 'Odieresis', 'multiply', - 'Uogonek', 'Lslash', 'Sacute', 'Umacron', - 'Udieresis', 'Zdotaccent', 'Zcaron', 'germandbls', - 'aogonek', 'iogonek', 'amacron', 'cacute', - 'adieresis', 'aring', 'eogonek', 'emacron', - 'ccaron', 'eacute', 'zacute', 'edotaccent', - 'gcommaaccent', 'kcommaaccent', 'imacron', 'lcommaaccent', - 'scaron', 'nacute', 'ncommaaccent', 'oacute', - 'omacron', 'otilde', 'odieresis', 'divide', - 'uogonek', 'lslash', 'sacute', 'umacron', - 'udieresis', 'zdotaccent', 'zcaron', 'dotaccent' - ], -# Vietnamese - 'cp1258' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - 'Euro', '.notdef', 'quotesinglbase', 'florin', - 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', - 'circumflex', 'perthousand', '.notdef', 'guilsinglleft', - 'OE', '.notdef', '.notdef', '.notdef', - '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', - 'quotedblright', 'bullet', 'endash', 'emdash', - 'tilde', 'trademark', '.notdef', 'guilsinglright', - 'oe', '.notdef', '.notdef', 'Ydieresis', - 'space', 'exclamdown', 'cent', 'sterling', - 'currency', 'yen', 'brokenbar', 'section', - 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft', - 'logicalnot', 'hyphen', 'registered', 'macron', - 'degree', 'plusminus', 'twosuperior', 'threesuperior', - 'acute', 'mu', 'paragraph', 'periodcentered', - 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright', - 'onequarter', 'onehalf', 'threequarters', 'questiondown', - 'Agrave', 'Aacute', 'Acircumflex', 'Abreve', - 'Adieresis', 'Aring', 'AE', 'Ccedilla', - 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', - 'gravecomb', 'Iacute', 'Icircumflex', 'Idieresis', - 'Dcroat', 'Ntilde', 'hookabovecomb', 'Oacute', - 'Ocircumflex', 'Ohorn', 'Odieresis', 'multiply', - 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', - 'Udieresis', 'Uhorn', 'tildecomb', 'germandbls', - 'agrave', 'aacute', 'acircumflex', 'abreve', - 'adieresis', 'aring', 'ae', 'ccedilla', - 'egrave', 'eacute', 'ecircumflex', 'edieresis', - 'acutecomb', 'iacute', 'icircumflex', 'idieresis', - 'dcroat', 'ntilde', 'dotbelowcomb', 'oacute', - 'ocircumflex', 'ohorn', 'odieresis', 'divide', - 'oslash', 'ugrave', 'uacute', 'ucircumflex', - 'udieresis', 'uhorn', 'dong', 'ydieresis' - ], -# Thai - 'cp874' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - 'Euro', '.notdef', '.notdef', '.notdef', - '.notdef', 'ellipsis', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', - 'quotedblright', 'bullet', 'endash', 'emdash', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'kokaithai', 'khokhaithai', 'khokhuatthai', - 'khokhwaithai', 'khokhonthai', 'khorakhangthai', 'ngonguthai', - 'chochanthai', 'chochingthai', 'chochangthai', 'sosothai', - 'chochoethai', 'yoyingthai', 'dochadathai', 'topatakthai', - 'thothanthai', 'thonangmonthothai', 'thophuthaothai', 'nonenthai', - 'dodekthai', 'totaothai', 'thothungthai', 'thothahanthai', - 'thothongthai', 'nonuthai', 'bobaimaithai', 'poplathai', - 'phophungthai', 'fofathai', 'phophanthai', 'fofanthai', - 'phosamphaothai', 'momathai', 'yoyakthai', 'roruathai', - 'ruthai', 'lolingthai', 'luthai', 'wowaenthai', - 'sosalathai', 'sorusithai', 'sosuathai', 'hohipthai', - 'lochulathai', 'oangthai', 'honokhukthai', 'paiyannoithai', - 'saraathai', 'maihanakatthai', 'saraaathai', 'saraamthai', - 'saraithai', 'saraiithai', 'sarauethai', 'saraueethai', - 'sarauthai', 'sarauuthai', 'phinthuthai', '.notdef', - '.notdef', '.notdef', '.notdef', 'bahtthai', - 'saraethai', 'saraaethai', 'saraothai', 'saraaimaimuanthai', - 'saraaimaimalaithai', 'lakkhangyaothai', 'maiyamokthai', 'maitaikhuthai', - 'maiekthai', 'maithothai', 'maitrithai', 'maichattawathai', - 'thanthakhatthai', 'nikhahitthai', 'yamakkanthai', 'fongmanthai', - 'zerothai', 'onethai', 'twothai', 'threethai', - 'fourthai', 'fivethai', 'sixthai', 'seventhai', - 'eightthai', 'ninethai', 'angkhankhuthai', 'khomutthai', - '.notdef', '.notdef', '.notdef', '.notdef' - ], -# Western Europe - 'ISO-8859-1' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclamdown', 'cent', 'sterling', - 'currency', 'yen', 'brokenbar', 'section', - 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft', - 'logicalnot', 'hyphen', 'registered', 'macron', - 'degree', 'plusminus', 'twosuperior', 'threesuperior', - 'acute', 'mu', 'paragraph', 'periodcentered', - 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright', - 'onequarter', 'onehalf', 'threequarters', 'questiondown', - 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', - 'Adieresis', 'Aring', 'AE', 'Ccedilla', - 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', - 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', - 'Eth', 'Ntilde', 'Ograve', 'Oacute', - 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', - 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', - 'Udieresis', 'Yacute', 'Thorn', 'germandbls', - 'agrave', 'aacute', 'acircumflex', 'atilde', - 'adieresis', 'aring', 'ae', 'ccedilla', - 'egrave', 'eacute', 'ecircumflex', 'edieresis', - 'igrave', 'iacute', 'icircumflex', 'idieresis', - 'eth', 'ntilde', 'ograve', 'oacute', - 'ocircumflex', 'otilde', 'odieresis', 'divide', - 'oslash', 'ugrave', 'uacute', 'ucircumflex', - 'udieresis', 'yacute', 'thorn', 'ydieresis' - ], -# Central Europe - 'ISO-8859-2' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'Aogonek', 'breve', 'Lslash', - 'currency', 'Lcaron', 'Sacute', 'section', - 'dieresis', 'Scaron', 'Scedilla', 'Tcaron', - 'Zacute', 'hyphen', 'Zcaron', 'Zdotaccent', - 'degree', 'aogonek', 'ogonek', 'lslash', - 'acute', 'lcaron', 'sacute', 'caron', - 'cedilla', 'scaron', 'scedilla', 'tcaron', - 'zacute', 'hungarumlaut', 'zcaron', 'zdotaccent', - 'Racute', 'Aacute', 'Acircumflex', 'Abreve', - 'Adieresis', 'Lacute', 'Cacute', 'Ccedilla', - 'Ccaron', 'Eacute', 'Eogonek', 'Edieresis', - 'Ecaron', 'Iacute', 'Icircumflex', 'Dcaron', - 'Dcroat', 'Nacute', 'Ncaron', 'Oacute', - 'Ocircumflex', 'Ohungarumlaut', 'Odieresis', 'multiply', - 'Rcaron', 'Uring', 'Uacute', 'Uhungarumlaut', - 'Udieresis', 'Yacute', 'Tcommaaccent', 'germandbls', - 'racute', 'aacute', 'acircumflex', 'abreve', - 'adieresis', 'lacute', 'cacute', 'ccedilla', - 'ccaron', 'eacute', 'eogonek', 'edieresis', - 'ecaron', 'iacute', 'icircumflex', 'dcaron', - 'dcroat', 'nacute', 'ncaron', 'oacute', - 'ocircumflex', 'ohungarumlaut', 'odieresis', 'divide', - 'rcaron', 'uring', 'uacute', 'uhungarumlaut', - 'udieresis', 'yacute', 'tcommaaccent', 'dotaccent' - ], -# Baltic - 'ISO-8859-4' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'Aogonek', 'kgreenlandic', 'Rcommaaccent', - 'currency', 'Itilde', 'Lcommaaccent', 'section', - 'dieresis', 'Scaron', 'Emacron', 'Gcommaaccent', - 'Tbar', 'hyphen', 'Zcaron', 'macron', - 'degree', 'aogonek', 'ogonek', 'rcommaaccent', - 'acute', 'itilde', 'lcommaaccent', 'caron', - 'cedilla', 'scaron', 'emacron', 'gcommaaccent', - 'tbar', 'Eng', 'zcaron', 'eng', - 'Amacron', 'Aacute', 'Acircumflex', 'Atilde', - 'Adieresis', 'Aring', 'AE', 'Iogonek', - 'Ccaron', 'Eacute', 'Eogonek', 'Edieresis', - 'Edotaccent', 'Iacute', 'Icircumflex', 'Imacron', - 'Dcroat', 'Ncommaaccent', 'Omacron', 'Kcommaaccent', - 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', - 'Oslash', 'Uogonek', 'Uacute', 'Ucircumflex', - 'Udieresis', 'Utilde', 'Umacron', 'germandbls', - 'amacron', 'aacute', 'acircumflex', 'atilde', - 'adieresis', 'aring', 'ae', 'iogonek', - 'ccaron', 'eacute', 'eogonek', 'edieresis', - 'edotaccent', 'iacute', 'icircumflex', 'imacron', - 'dcroat', 'ncommaaccent', 'omacron', 'kcommaaccent', - 'ocircumflex', 'otilde', 'odieresis', 'divide', - 'oslash', 'uogonek', 'uacute', 'ucircumflex', - 'udieresis', 'utilde', 'umacron', 'dotaccent' - ], -# Cyrillic - 'ISO-8859-5' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'afii10023', 'afii10051', 'afii10052', - 'afii10053', 'afii10054', 'afii10055', 'afii10056', - 'afii10057', 'afii10058', 'afii10059', 'afii10060', - 'afii10061', 'hyphen', 'afii10062', 'afii10145', - 'afii10017', 'afii10018', 'afii10019', 'afii10020', - 'afii10021', 'afii10022', 'afii10024', 'afii10025', - 'afii10026', 'afii10027', 'afii10028', 'afii10029', - 'afii10030', 'afii10031', 'afii10032', 'afii10033', - 'afii10034', 'afii10035', 'afii10036', 'afii10037', - 'afii10038', 'afii10039', 'afii10040', 'afii10041', - 'afii10042', 'afii10043', 'afii10044', 'afii10045', - 'afii10046', 'afii10047', 'afii10048', 'afii10049', - 'afii10065', 'afii10066', 'afii10067', 'afii10068', - 'afii10069', 'afii10070', 'afii10072', 'afii10073', - 'afii10074', 'afii10075', 'afii10076', 'afii10077', - 'afii10078', 'afii10079', 'afii10080', 'afii10081', - 'afii10082', 'afii10083', 'afii10084', 'afii10085', - 'afii10086', 'afii10087', 'afii10088', 'afii10089', - 'afii10090', 'afii10091', 'afii10092', 'afii10093', - 'afii10094', 'afii10095', 'afii10096', 'afii10097', - 'afii61352', 'afii10071', 'afii10099', 'afii10100', - 'afii10101', 'afii10102', 'afii10103', 'afii10104', - 'afii10105', 'afii10106', 'afii10107', 'afii10108', - 'afii10109', 'section', 'afii10110', 'afii10193' - ], -# Greek - 'ISO-8859-7' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'quoteleft', 'quoteright', 'sterling', - '.notdef', '.notdef', 'brokenbar', 'section', - 'dieresis', 'copyright', '.notdef', 'guillemotleft', - 'logicalnot', 'hyphen', '.notdef', 'afii00208', - 'degree', 'plusminus', 'twosuperior', 'threesuperior', - 'tonos', 'dieresistonos', 'Alphatonos', 'periodcentered', - 'Epsilontonos', 'Etatonos', 'Iotatonos', 'guillemotright', - 'Omicrontonos', 'onehalf', 'Upsilontonos', 'Omegatonos', - 'iotadieresistonos','Alpha', 'Beta', 'Gamma', - 'Delta', 'Epsilon', 'Zeta', 'Eta', - 'Theta', 'Iota', 'Kappa', 'Lambda', - 'Mu', 'Nu', 'Xi', 'Omicron', - 'Pi', 'Rho', '.notdef', 'Sigma', - 'Tau', 'Upsilon', 'Phi', 'Chi', - 'Psi', 'Omega', 'Iotadieresis', 'Upsilondieresis', - 'alphatonos', 'epsilontonos', 'etatonos', 'iotatonos', - 'upsilondieresistonos','alpha', 'beta', 'gamma', - 'delta', 'epsilon', 'zeta', 'eta', - 'theta', 'iota', 'kappa', 'lambda', - 'mu', 'nu', 'xi', 'omicron', - 'pi', 'rho', 'sigma1', 'sigma', - 'tau', 'upsilon', 'phi', 'chi', - 'psi', 'omega', 'iotadieresis', 'upsilondieresis', - 'omicrontonos', 'upsilontonos', 'omegatonos', '.notdef' - ], -# Turkish - 'ISO-8859-9' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclamdown', 'cent', 'sterling', - 'currency', 'yen', 'brokenbar', 'section', - 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft', - 'logicalnot', 'hyphen', 'registered', 'macron', - 'degree', 'plusminus', 'twosuperior', 'threesuperior', - 'acute', 'mu', 'paragraph', 'periodcentered', - 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright', - 'onequarter', 'onehalf', 'threequarters', 'questiondown', - 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', - 'Adieresis', 'Aring', 'AE', 'Ccedilla', - 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', - 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', - 'Gbreve', 'Ntilde', 'Ograve', 'Oacute', - 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', - 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', - 'Udieresis', 'Idotaccent', 'Scedilla', 'germandbls', - 'agrave', 'aacute', 'acircumflex', 'atilde', - 'adieresis', 'aring', 'ae', 'ccedilla', - 'egrave', 'eacute', 'ecircumflex', 'edieresis', - 'igrave', 'iacute', 'icircumflex', 'idieresis', - 'gbreve', 'ntilde', 'ograve', 'oacute', - 'ocircumflex', 'otilde', 'odieresis', 'divide', - 'oslash', 'ugrave', 'uacute', 'ucircumflex', - 'udieresis', 'dotlessi', 'scedilla', 'ydieresis' - ], -# Thai - 'ISO-8859-11' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'kokaithai', 'khokhaithai', 'khokhuatthai', - 'khokhwaithai', 'khokhonthai', 'khorakhangthai', 'ngonguthai', - 'chochanthai', 'chochingthai', 'chochangthai', 'sosothai', - 'chochoethai', 'yoyingthai', 'dochadathai', 'topatakthai', - 'thothanthai', 'thonangmonthothai','thophuthaothai', 'nonenthai', - 'dodekthai', 'totaothai', 'thothungthai', 'thothahanthai', - 'thothongthai', 'nonuthai', 'bobaimaithai', 'poplathai', - 'phophungthai', 'fofathai', 'phophanthai', 'fofanthai', - 'phosamphaothai', 'momathai', 'yoyakthai', 'roruathai', - 'ruthai', 'lolingthai', 'luthai', 'wowaenthai', - 'sosalathai', 'sorusithai', 'sosuathai', 'hohipthai', - 'lochulathai', 'oangthai', 'honokhukthai', 'paiyannoithai', - 'saraathai', 'maihanakatthai', 'saraaathai', 'saraamthai', - 'saraithai', 'saraiithai', 'sarauethai', 'saraueethai', - 'sarauthai', 'sarauuthai', 'phinthuthai', '.notdef', - '.notdef', '.notdef', '.notdef', 'bahtthai', - 'saraethai', 'saraaethai', 'saraothai', 'saraaimaimuanthai', - 'saraaimaimalaithai','lakkhangyaothai','maiyamokthai', 'maitaikhuthai', - 'maiekthai', 'maithothai', 'maitrithai', 'maichattawathai', - 'thanthakhatthai','nikhahitthai', 'yamakkanthai', 'fongmanthai', - 'zerothai', 'onethai', 'twothai', 'threethai', - 'fourthai', 'fivethai', 'sixthai', 'seventhai', - 'eightthai', 'ninethai', 'angkhankhuthai', 'khomutthai', - '.notdef', '.notdef', '.notdef', '.notdef' - ], -# Western Europe - 'ISO-8859-15' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclamdown', 'cent', 'sterling', - 'Euro', 'yen', 'Scaron', 'section', - 'scaron', 'copyright', 'ordfeminine', 'guillemotleft', - 'logicalnot', 'hyphen', 'registered', 'macron', - 'degree', 'plusminus', 'twosuperior', 'threesuperior', - 'Zcaron', 'mu', 'paragraph', 'periodcentered', - 'zcaron', 'onesuperior', 'ordmasculine', 'guillemotright', - 'OE', 'oe', 'Ydieresis', 'questiondown', - 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', - 'Adieresis', 'Aring', 'AE', 'Ccedilla', - 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', - 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', - 'Eth', 'Ntilde', 'Ograve', 'Oacute', - 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', - 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', - 'Udieresis', 'Yacute', 'Thorn', 'germandbls', - 'agrave', 'aacute', 'acircumflex', 'atilde', - 'adieresis', 'aring', 'ae', 'ccedilla', - 'egrave', 'eacute', 'ecircumflex', 'edieresis', - 'igrave', 'iacute', 'icircumflex', 'idieresis', - 'eth', 'ntilde', 'ograve', 'oacute', - 'ocircumflex', 'otilde', 'odieresis', 'divide', - 'oslash', 'ugrave', 'uacute', 'ucircumflex', - 'udieresis', 'yacute', 'thorn', 'ydieresis' - ], -# Central Europe - 'ISO-8859-16' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'Aogonek', 'aogonek', 'Lslash', - 'Euro', 'quotedblbase', 'Scaron', 'section', - 'scaron', 'copyright', 'Scommaaccent', 'guillemotleft', - 'Zacute', 'hyphen', 'zacute', 'Zdotaccent', - 'degree', 'plusminus', 'Ccaron', 'lslash', - 'Zcaron', 'quotedblright', 'paragraph', 'periodcentered', - 'zcaron', 'ccaron', 'scommaaccent', 'guillemotright', - 'OE', 'oe', 'Ydieresis', 'zdotaccent', - 'Agrave', 'Aacute', 'Acircumflex', 'Abreve', - 'Adieresis', 'Cacute', 'AE', 'Ccedilla', - 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', - 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', - 'Dcroat', 'Nacute', 'Ograve', 'Oacute', - 'Ocircumflex', 'Ohungarumlaut', 'Odieresis', 'Sacute', - 'Uhungarumlaut', 'Ugrave', 'Uacute', 'Ucircumflex', - 'Udieresis', 'Eogonek', 'Tcommaaccent', 'germandbls', - 'agrave', 'aacute', 'acircumflex', 'abreve', - 'adieresis', 'cacute', 'ae', 'ccedilla', - 'egrave', 'eacute', 'ecircumflex', 'edieresis', - 'igrave', 'iacute', 'icircumflex', 'idieresis', - 'dcroat', 'nacute', 'ograve', 'oacute', - 'ocircumflex', 'ohungarumlaut', 'odieresis', 'sacute', - 'uhungarumlaut', 'ugrave', 'uacute', 'ucircumflex', - 'udieresis', 'eogonek', 'tcommaaccent', 'ydieresis' - ], -# Russian - 'KOI8-R' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - 'SF100000', 'SF110000', 'SF010000', 'SF030000', - 'SF020000', 'SF040000', 'SF080000', 'SF090000', - 'SF060000', 'SF070000', 'SF050000', 'upblock', - 'dnblock', 'block', 'lfblock', 'rtblock', - 'ltshade', 'shade', 'dkshade', 'integraltp', - 'filledbox', 'periodcentered', 'radical', 'approxequal', - 'lessequal', 'greaterequal', 'space', 'integralbt', - 'degree', 'twosuperior', 'periodcentered', 'divide', - 'SF430000', 'SF240000', 'SF510000', 'afii10071', - 'SF520000', 'SF390000', 'SF220000', 'SF210000', - 'SF250000', 'SF500000', 'SF490000', 'SF380000', - 'SF280000', 'SF270000', 'SF260000', 'SF360000', - 'SF370000', 'SF420000', 'SF190000', 'afii10023', - 'SF200000', 'SF230000', 'SF470000', 'SF480000', - 'SF410000', 'SF450000', 'SF460000', 'SF400000', - 'SF540000', 'SF530000', 'SF440000', 'copyright', - 'afii10096', 'afii10065', 'afii10066', 'afii10088', - 'afii10069', 'afii10070', 'afii10086', 'afii10068', - 'afii10087', 'afii10074', 'afii10075', 'afii10076', - 'afii10077', 'afii10078', 'afii10079', 'afii10080', - 'afii10081', 'afii10097', 'afii10082', 'afii10083', - 'afii10084', 'afii10085', 'afii10072', 'afii10067', - 'afii10094', 'afii10093', 'afii10073', 'afii10090', - 'afii10095', 'afii10091', 'afii10089', 'afii10092', - 'afii10048', 'afii10017', 'afii10018', 'afii10040', - 'afii10021', 'afii10022', 'afii10038', 'afii10020', - 'afii10039', 'afii10026', 'afii10027', 'afii10028', - 'afii10029', 'afii10030', 'afii10031', 'afii10032', - 'afii10033', 'afii10049', 'afii10034', 'afii10035', - 'afii10036', 'afii10037', 'afii10024', 'afii10019', - 'afii10046', 'afii10045', 'afii10025', 'afii10042', - 'afii10047', 'afii10043', 'afii10041', 'afii10044' - ], -# Ukrainian - 'KOI8-U' => [ - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - '.notdef', '.notdef', '.notdef', '.notdef', - 'space', 'exclam', 'quotedbl', 'numbersign', - 'dollar', 'percent', 'ampersand', 'quotesingle', - 'parenleft', 'parenright', 'asterisk', 'plus', - 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', - 'four', 'five', 'six', 'seven', - 'eight', 'nine', 'colon', 'semicolon', - 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', - 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', - 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 'bracketleft', - 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'grave', 'a', 'b', 'c', - 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'braceleft', - 'bar', 'braceright', 'asciitilde', '.notdef', - 'SF100000', 'SF110000', 'SF010000', 'SF030000', - 'SF020000', 'SF040000', 'SF080000', 'SF090000', - 'SF060000', 'SF070000', 'SF050000', 'upblock', - 'dnblock', 'block', 'lfblock', 'rtblock', - 'ltshade', 'shade', 'dkshade', 'integraltp', - 'filledbox', 'bullet', 'radical', 'approxequal', - 'lessequal', 'greaterequal', 'space', 'integralbt', - 'degree', 'twosuperior', 'periodcentered', 'divide', - 'SF430000', 'SF240000', 'SF510000', 'afii10071', - 'afii10101', 'SF390000', 'afii10103', 'afii10104', - 'SF250000', 'SF500000', 'SF490000', 'SF380000', - 'SF280000', 'afii10098', 'SF260000', 'SF360000', - 'SF370000', 'SF420000', 'SF190000', 'afii10023', - 'afii10053', 'SF230000', 'afii10055', 'afii10056', - 'SF410000', 'SF450000', 'SF460000', 'SF400000', - 'SF540000', 'afii10050', 'SF440000', 'copyright', - 'afii10096', 'afii10065', 'afii10066', 'afii10088', - 'afii10069', 'afii10070', 'afii10086', 'afii10068', - 'afii10087', 'afii10074', 'afii10075', 'afii10076', - 'afii10077', 'afii10078', 'afii10079', 'afii10080', - 'afii10081', 'afii10097', 'afii10082', 'afii10083', - 'afii10084', 'afii10085', 'afii10072', 'afii10067', - 'afii10094', 'afii10093', 'afii10073', 'afii10090', - 'afii10095', 'afii10091', 'afii10089', 'afii10092', - 'afii10048', 'afii10017', 'afii10018', 'afii10040', - 'afii10021', 'afii10022', 'afii10038', 'afii10020', - 'afii10039', 'afii10026', 'afii10027', 'afii10028', - 'afii10029', 'afii10030', 'afii10031', 'afii10032', - 'afii10033', 'afii10049', 'afii10034', 'afii10035', - 'afii10036', 'afii10037', 'afii10024', 'afii10019', - 'afii10046', 'afii10045', 'afii10025', 'afii10042', - 'afii10047', 'afii10043', 'afii10041', 'afii10044' - ] -} - -def ReadAFM(file, map) - - # Read a font metric file - a = IO.readlines(file) - - raise "File no found: #{file}" if a.size == 0 - - widths = {} - fm = {} - fix = { 'Edot' => 'Edotaccent', 'edot' => 'edotaccent', - 'Idot' => 'Idotaccent', - 'Zdot' => 'Zdotaccent', 'zdot' => 'zdotaccent', - 'Odblacute' => 'Ohungarumlaut', 'odblacute' => 'ohungarumlaut', - 'Udblacute' => 'Uhungarumlaut', 'udblacute' => 'uhungarumlaut', - 'Gcedilla' => 'Gcommaaccent', 'gcedilla' => 'gcommaaccent', - 'Kcedilla' => 'Kcommaaccent', 'kcedilla' => 'kcommaaccent', - 'Lcedilla' => 'Lcommaaccent', 'lcedilla' => 'lcommaaccent', - 'Ncedilla' => 'Ncommaaccent', 'ncedilla' => 'ncommaaccent', - 'Rcedilla' => 'Rcommaaccent', 'rcedilla' => 'rcommaaccent', - 'Scedilla' => 'Scommaaccent',' scedilla' => 'scommaaccent', - 'Tcedilla' => 'Tcommaaccent',' tcedilla' => 'tcommaaccent', - 'Dslash' => 'Dcroat', 'dslash' => 'dcroat', - 'Dmacron' => 'Dcroat', 'dmacron' => 'dcroat', - 'combininggraveaccent' => 'gravecomb', - 'combininghookabove' => 'hookabovecomb', - 'combiningtildeaccent' => 'tildecomb', - 'combiningacuteaccent' => 'acutecomb', - 'combiningdotbelow' => 'dotbelowcomb', - 'dongsign' => 'dong' - } - - a.each do |line| - - e = line.rstrip.split(' ') - next if e.size < 2 - - code = e[0] - param = e[1] - - if code == 'C' then - - # Character metrics - cc = e[1].to_i - w = e[4] - gn = e[7] - - gn = 'Euro' if gn[-4, 4] == '20AC' - - if fix[gn] then - - # Fix incorrect glyph name - 0.upto(map.size - 1) do |i| - if map[i] == fix[gn] then - map[i] = gn - end - end - end - - if map.size == 0 then - # Symbolic font: use built-in encoding - widths[cc] = w - else - widths[gn] = w - fm['CapXHeight'] = e[13].to_i if gn == 'X' - end - - fm['MissingWidth'] = w if gn == '.notdef' - - elsif code == 'FontName' then - fm['FontName'] = param - elsif code == 'Weight' then - fm['Weight'] = param - elsif code == 'ItalicAngle' then - fm['ItalicAngle'] = param.to_f - elsif code == 'Ascender' then - fm['Ascender'] = param.to_i - elsif code == 'Descender' then - fm['Descender'] = param.to_i - elsif code == 'UnderlineThickness' then - fm['UnderlineThickness'] = param.to_i - elsif code == 'UnderlinePosition' then - fm['UnderlinePosition'] = param.to_i - elsif code == 'IsFixedPitch' then - fm['IsFixedPitch'] = (param == 'true') - elsif code == 'FontBBox' then - fm['FontBBox'] = "[#{e[1]},#{e[2]},#{e[3]},#{e[4]}]" - elsif code == 'CapHeight' then - fm['CapHeight'] = param.to_i - elsif code == 'StdVW' then - fm['StdVW'] = param.to_i - end - end - - raise 'FontName not found' unless fm['FontName'] - - if map.size > 0 then - widths['.notdef'] = 600 unless widths['.notdef'] - - if (widths['Delta'] == nil) && widths['increment'] then - widths['Delta'] = widths['increment'] - end - - # Order widths according to map - 0.upto(255) do |i| - if widths[map[i]] == nil - puts "Warning: character #{map[i]} is missing" - widths[i] = widths['.notdef'] - else - widths[i] = widths[map[i]] - end - end - end - - fm['Widths'] = widths - - return fm -end - -def MakeFontDescriptor(fm, symbolic) - - # Ascent - asc = fm['Ascender'] ? fm['Ascender'] : 1000 - fd = "{\n 'Ascent' => '#{asc}'" - - # Descent - desc = fm['Descender'] ? fm['Descender'] : -200 - fd += ", 'Descent' => '#{desc}'" - - # CapHeight - if fm['CapHeight'] then - ch = fm['CapHeight'] - elsif fm['CapXHeight'] - ch = fm['CapXHeight'] - else - ch = asc - end - fd += ", 'CapHeight' => '#{ch}'" - - # Flags - flags = 0 - - if fm['IsFixedPitch'] then - flags += 1 << 0 - end - - if symbolic then - flags += 1 << 2 - else - flags += 1 << 5 - end - - if fm['ItalicAngle'] && (fm['ItalicAngle'] != 0) then - flags += 1 << 6 - end - - fd += ",\n 'Flags' => '#{flags}'" - - # FontBBox - if fm['FontBBox'] then - fbb = fm['FontBBox'].gsub(/,/, ' ') - else - fbb = "[0 #{desc - 100} 1000 #{asc + 100}]" - end - - fd += ", 'FontBBox' => '#{fbb}'" - - # ItalicAngle - ia = fm['ItalicAngle'] ? fm['ItalicAngle'] : 0 - fd += ",\n 'ItalicAngle' => '#{ia}'" - - # StemV - if fm['StdVW'] then - stemv = fm['StdVW'] - elsif fm['Weight'] && (/bold|black/i =~ fm['Weight']) - stemv = 120 - else - stemv = 70 - end - - fd += ", 'StemV' => '#{stemv}'" - - # MissingWidth - if fm['MissingWidth'] then - fd += ", 'MissingWidth' => '#{fm['MissingWidth']}'" - end - - fd += "\n }" - return fd -end - -def MakeWidthArray(fm) - - # Make character width array - s = " [\n " - - cw = fm['Widths'] - - 0.upto(255) do |i| - s += "%5d" % cw[i] - s += "," if i != 255 - s += "\n " if (i % 8) == 7 - end - - s += ']' - - return s -end - -def MakeFontEncoding(map) - - # Build differences from reference encoding - ref = Charencodings['cp1252'] - s = '' - last = 0 - 32.upto(255) do |i| - if map[i] != ref[i] then - if i != last + 1 then - s += i.to_s + ' ' - end - last = i - s += '/' + map[i] + ' ' - end - end - return s.rstrip -end - -def ReadShort(f) - a = f.read(2).unpack('n') - return a[0] -end - -def ReadLong(f) - a = f.read(4).unpack('N') - return a[0] -end - -def CheckTTF(file) - - rl = false - pp = false - e = false - - # Check if font license allows embedding - File.open(file, 'rb') do |f| - - # Extract number of tables - f.seek(4, IO::SEEK_CUR) - nb = ReadShort(f) - f.seek(6, IO::SEEK_CUR) - - # Seek OS/2 table - found = false - 0.upto(nb - 1) do |i| - if f.read(4) == 'OS/2' then - found = true - break - end - - f.seek(12, IO::SEEK_CUR) - end - - if ! found then - return - end - - f.seek(4, IO::SEEK_CUR) - offset = ReadLong(f) - f.seek(offset, IO::SEEK_SET) - - # Extract fsType flags - f.seek(8, IO::SEEK_CUR) - fsType = ReadShort(f) - - rl = (fsType & 0x02) != 0 - pp = (fsType & 0x04) != 0 - e = (fsType & 0x08) != 0 - end - - if rl && ( ! pp) && ( ! e) then - puts 'Warning: font license does not allow embedding' - end -end - -# -# fontfile: path to TTF file (or empty string if not to be embedded) -# afmfile: path to AFM file -# enc: font encoding (or empty string for symbolic fonts) -# patch: optional patch for encoding -# type : font type if $fontfile is empty -# -def MakeFont(fontfile, afmfile, enc = 'cp1252', patch = {}, type = 'TrueType') - # Generate a font definition file - if (enc != nil) && (enc != '') then - map = Charencodings[enc] - patch.each { |cc, gn| map[cc] = gn } - else - map = [] - end - - raise "Error: AFM file not found: #{afmfile}" unless File.exists?(afmfile) - - fm = ReadAFM(afmfile, map) - - if (enc != nil) && (enc != '') then - diff = MakeFontEncoding(map) - else - diff = '' - end - - fd = MakeFontDescriptor(fm, (map.size == 0)) - - # Find font type - if fontfile then - ext = File.extname(fontfile).downcase.sub(/^\./, '') - - if ext == 'ttf' then - type = 'TrueType' - elsif ext == 'pfb' - type = 'Type1' - else - raise "Error: unrecognized font file extension: #{ext}" - end - else - raise "Error: incorrect font type: #{type}" if (type != 'TrueType') && (type != 'Type1') - end - printf "type = #{type}\n" - # Start generation - s = "# #{fm['FontName']} font definition\n\n" - s += "module FontDef\n" - s += " def FontDef.type\n '#{type}'\n end\n" - s += " def FontDef.name\n '#{fm['FontName']}'\n end\n" - s += " def FontDef.desc\n #{fd}\n end\n" - - if fm['UnderlinePosition'] == nil then - fm['UnderlinePosition'] = -100 - end - - if fm['UnderlineThickness'] == nil then - fm['UnderlineThickness'] = 50 - end - - s += " def FontDef.up\n #{fm['UnderlinePosition']}\n end\n" - s += " def FontDef.ut\n #{fm['UnderlineThickness']}\n end\n" - - w = MakeWidthArray(fm) - s += " def FontDef.cw\n#{w}\n end\n" - - s += " def FontDef.enc\n '#{enc}'\n end\n" - s += " def FontDef.diff\n #{(diff == nil) || (diff == '') ? 'nil' : '\'' + diff + '\''}\n end\n" - - basename = File.basename(afmfile, '.*') - - if fontfile then - # Embedded font - if ! File.exist?(fontfile) then - raise "Error: font file not found: #{fontfile}" - end - - if type == 'TrueType' then - CheckTTF(fontfile) - end - - file = '' - File.open(fontfile, 'rb') do |f| - file = f.read() - end - - if type == 'Type1' then - # Find first two sections and discard third one - header = file[0] == 128 - file = file[6, file.length - 6] if header - - pos = file.index('eexec') - raise 'Error: font file does not seem to be valid Type1' if pos == nil - - size1 = pos + 6 - - file = file[0, size1] + file[size1 + 6, file.length - (size1 + 6)] if header && file[size1] == 128 - - pos = file.index('00000000') - raise 'Error: font file does not seem to be valid Type1' if pos == nil - - size2 = pos - size1 - file = file[0, size1 + size2] - end - - if require 'zlib' then - File.open(basename + '.z', 'wb') { |f| f.write(Zlib::Deflate.deflate(file)) } - s += " def FontDef.file\n '#{basename}.z'\n end\n" - puts "Font file compressed ('#{basename}.z')" - else - s += " def FontDef.file\n '#{File.basename(fontfile)}'\n end\n" - puts 'Notice: font file could not be compressed (zlib not available)' - end - - if type == 'Type1' then - s += " def FontDef.size1\n '#{size1}'\n end\n" - s += " def FontDef.size2\n '#{size2}'\n end\n" - else - s += " def FontDef.originalsize\n '#{File.size(fontfile)}'\n end\n" - end - - else - # Not embedded font - s += " def FontDef.file\n ''\n end\n" - end - - s += "end\n" - File.open(basename + '.rb', 'w') { |file| file.write(s)} - puts "Font definition file generated (#{basename}.rb)" -end - - -if $0 == __FILE__ then - if ARGV.length >= 3 then - enc = ARGV[2] - else - enc = 'cp1252' - end - - if ARGV.length >= 4 then - patch = ARGV[3] - else - patch = {} - end - - if ARGV.length >= 5 then - type = ARGV[4] - else - type = 'TrueType' - end - - MakeFont(ARGV[0], ARGV[1], enc, patch, type) -end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/math.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/rfpdf/math.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,90 @@ +# Various mathematical calculations extracted from the PDF::Writer for Ruby gem. +# - http://rubyforge.org/projects/ruby-pdf +# - Copyright 2003 - 2005 Austin Ziegler. +# - Licensed under a MIT-style licence. +# + +module RFPDF::Math + PI2 = ::Math::PI * 2.0 + + # One degree of arc measured in terms of radians. + DR = PI2 / 360.0 + # One radian of arc, measured in terms of degrees. + RD = 360 / PI2 + # One degree of arc, measured in terms of gradians. + DG = 400 / 360.0 + # One gradian of arc, measured in terms of degrees. + GD = 360 / 400.0 + # One radian of arc, measured in terms of gradians. + RG = 400 / PI2 + # One gradian of arc, measured in terms of radians. + GR = PI2 / 400.0 + + # Truncate the remainder. + def remt(num, den) + num - den * (num / den.to_f).to_i + end + + # Wrap radian values within the range of radians (0..PI2). + def rad2rad(rad) + remt(rad, PI2) + end + + # Wrap degree values within the range of degrees (0..360). + def deg2deg(deg) + remt(deg, 360) + end + + # Wrap gradian values within the range of gradians (0..400). + def grad2grad(grad) + remt(grad, 400) + end + + # Convert degrees to radians. The value will be constrained to the + # range of radians (0..PI2) unless +wrap+ is false. + def deg2rad(deg, wrap = true) + rad = DR * deg + rad = rad2rad(rad) if wrap + rad + end + + # Convert degrees to gradians. The value will be constrained to the + # range of gradians (0..400) unless +wrap+ is false. + def deg2grad(deg, wrap = true) + grad = DG * deg + grad = grad2grad(grad) if wrap + grad + end + + # Convert radians to degrees. The value will be constrained to the + # range of degrees (0..360) unless +wrap+ is false. + def rad2deg(rad, wrap = true) + deg = RD * rad + deg = deg2deg(deg) if wrap + deg + end + + # Convert radians to gradians. The value will be constrained to the + # range of gradians (0..400) unless +wrap+ is false. + def rad2grad(rad, wrap = true) + grad = RG * rad + grad = grad2grad(grad) if wrap + grad + end + + # Convert gradians to degrees. The value will be constrained to the + # range of degrees (0..360) unless +wrap+ is false. + def grad2deg(grad, wrap = true) + deg = GD * grad + deg = deg2deg(deg) if wrap + deg + end + + # Convert gradians to radians. The value will be constrained to the + # range of radians (0..PI2) unless +wrap+ is false. + def grad2rad(grad, wrap = true) + rad = GR * grad + rad = rad2rad(rad) if wrap + rad + end +end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/rfpdf.rb --- a/vendor/plugins/rfpdf/lib/rfpdf/rfpdf.rb Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,346 +0,0 @@ -module RFPDF - COLOR_PALETTE = { - :black => [0x00, 0x00, 0x00], - :white => [0xff, 0xff, 0xff], - }.freeze - - # Draw a line from (x1, y1) to (x2, y2). - # - # Options are: - # * :line_color - Default value is COLOR_PALETTE[:black]. - # * :line_width - Default value is 0.5. - # - # Example: - # - # draw_line(x1, y1, x1, y1+h, :line_color => ReportHelper::COLOR_PALETTE[:dark_blue], :line_width => 1) - # - def draw_line(x1, y1, x2, y2, options = {}) - options[:line_color] ||= COLOR_PALETTE[:black] - options[:line_width] ||= 0.5 - set_draw_color(options[:line_color]) - SetLineWidth(options[:line_width]) - Line(x1, y1, x2, y2) - end - - # Draw a string of text at (x, y). - # - # Options are: - # * :font_color - Default value is COLOR_PALETTE[:black]. - # * :font_size - Default value is 10. - # * :font_style - Default value is nothing or ''. - # - # Example: - # - # draw_text(x, y, header_left, :font_size => 10) - # - def draw_text(x, y, text, options = {}) - options[:font_color] ||= COLOR_PALETTE[:black] - options[:font_size] ||= 10 - options[:font_style] ||= '' - set_text_color(options[:font_color]) - SetFont('Arial', options[:font_style], options[:font_size]) - SetXY(x, y) - Write(options[:font_size] + 4, text) - end - - # Draw a block of text at (x, y) bounded by left_margin and right_margin. Both - # margins are measured from their corresponding edge. - # - # Options are: - # * :font_color - Default value is COLOR_PALETTE[:black]. - # * :font_size - Default value is 10. - # * :font_style - Default value is nothing or ''. - # - # Example: - # - # draw_text_block(left_margin, 85, "question", left_margin, 280, - # :font_color => ReportHelper::COLOR_PALETTE[:dark_blue], - # :font_size => 12, - # :font_style => 'I') - # - def draw_text_block(x, y, text, left_margin, right_margin, options = {}) - options[:font_color] ||= COLOR_PALETTE[:black] - options[:font_size] ||= 10 - options[:font_style] ||= '' - set_text_color(options[:font_color]) - SetFont('Arial', options[:font_style], options[:font_size]) - SetXY(x, y) - SetLeftMargin(left_margin) - SetRightMargin(right_margin) - Write(options[:font_size] + 4, text) - SetMargins(0,0,0) - end - - # Draw a box at (x, y), w wide and h high. - # - # Options are: - # * :border - Draw a border, 0 = no, 1 = yes? Default value is 1. - # * :border_color - Default value is COLOR_PALETTE[:black]. - # * :border_width - Default value is 0.5. - # * :fill - Fill the box, 0 = no, 1 = yes? Default value is 1. - # * :fill_color - Default value is nothing or COLOR_PALETTE[:white]. - # - # Example: - # - # draw_box(x, y - 1, 38, 22) - # - def draw_box(x, y, w, h, options = {}) - options[:border] ||= 1 - options[:border_color] ||= COLOR_PALETTE[:black] - options[:border_width] ||= 0.5 - options[:fill] ||= 1 - options[:fill_color] ||= COLOR_PALETTE[:white] - SetLineWidth(options[:border_width]) - set_draw_color(options[:border_color]) - set_fill_color(options[:fill_color]) - fd = "" - fd = "D" if options[:border] == 1 - fd += "F" if options[:fill] == 1 - Rect(x, y, w, h, fd) - end - - # Draw a string of text at (x, y) in a box w wide and h high. - # - # Options are: - # * :align - Vertical alignment 'C' = center, 'L' = left, 'R' = right. Default value is 'C'. - # * :border - Draw a border, 0 = no, 1 = yes? Default value is 0. - # * :border_color - Default value is COLOR_PALETTE[:black]. - # * :border_width - Default value is 0.5. - # * :fill - Fill the box, 0 = no, 1 = yes? Default value is 1. - # * :fill_color - Default value is nothing or COLOR_PALETTE[:white]. - # * :font_color - Default value is COLOR_PALETTE[:black]. - # * :font_size - Default value is nothing or 8. - # * :font_style - 'B' = bold, 'I' = italic, 'U' = underline. Default value is nothing ''. - # * :padding - Default value is nothing or 2. - # * :valign - 'M' = middle, 'T' = top, 'B' = bottom. Default value is nothing or 'M'. - # - # Example: - # - # draw_text_box(x, y - 1, 38, 22, - # "your_score_title", - # :fill => 0, - # :font_color => ReportHelper::COLOR_PALETTE[:blue], - # :font_line_spacing => 0, - # :font_style => "B", - # :valign => "M") - # - def draw_text_box(x, y, w, h, text, options = {}) - options[:align] ||= 'C' - options[:border] ||= 0 - options[:border_color] ||= COLOR_PALETTE[:black] - options[:border_width] ||= 0.5 - options[:fill] ||= 1 - options[:fill_color] ||= COLOR_PALETTE[:white] - options[:font_color] ||= COLOR_PALETTE[:black] - options[:font_size] ||= 8 - options[:font_line_spacing] ||= options[:font_size] * 0.3 - options[:font_style] ||= '' - options[:padding] ||= 2 - options[:valign] ||= "M" - if options[:fill] == 1 or options[:border] == 1 - draw_box(x, y, w, h, options) - end - SetMargins(0,0,0) - set_text_color(options[:font_color]) - font_size = options[:font_size] - SetFont('Arial', options[:font_style], font_size) - font_size += options[:font_line_spacing] - case options[:valign] - when "B" - y -= options[:padding] - text = "\n" + text if text["\n"].nil? - when "T" - y += options[:padding] - end - SetXY(x, y) - if GetStringWidth(text) > w or not text["\n"].nil? or options[:valign] == "T" - font_size += options[:font_size] * 0.1 - #TODO 2006-07-21 Level=1 - this is assuming a 2 line text - SetXY(x, y + ((h - (font_size * 2)) / 2)) if options[:valign] == "M" - MultiCell(w, font_size, text, 0, options[:align]) - else - Cell(w, h, text, 0, 0, options[:align]) - end - end - - # Draw a string of text at (x, y) as a title. - # - # Options are: - # * :font_color - Default value is COLOR_PALETTE[:black]. - # * :font_size - Default value is 18. - # * :font_style - Default value is nothing or ''. - # - # Example: - # - # draw_title(left_margin, 60, - # "title:", - # :font_color => ReportHelper::COLOR_PALETTE[:dark_blue]) - # - def draw_title(x, y, title, options = {}) - options[:font_color] ||= COLOR_PALETTE[:black] - options[:font_size] ||= 18 - options[:font_style] ||= '' - set_text_color(options[:font_color]) - SetFont('Arial', options[:font_style], options[:font_size]) - SetXY(x, y) - Write(options[:font_size] + 2, title) - end - - # Set the draw color. Default value is COLOR_PALETTE[:black]. - # - # Example: - # - # set_draw_color(ReportHelper::COLOR_PALETTE[:dark_blue]) - # - def set_draw_color(color = COLOR_PALETTE[:black]) - SetDrawColor(color[0], color[1], color[2]) - end - - # Set the fill color. Default value is COLOR_PALETTE[:white]. - # - # Example: - # - # set_fill_color(ReportHelper::COLOR_PALETTE[:dark_blue]) - # - def set_fill_color(color = COLOR_PALETTE[:white]) - SetFillColor(color[0], color[1], color[2]) - end - - # Set the text color. Default value is COLOR_PALETTE[:white]. - # - # Example: - # - # set_text_color(ReportHelper::COLOR_PALETTE[:dark_blue]) - # - def set_text_color(color = COLOR_PALETTE[:black]) - SetTextColor(color[0], color[1], color[2]) - end - - # Write a string containing html characters. Default value is COLOR_PALETTE[:white]. - # - # Options are: - # * :height - Line height. Default value is 20. - # - # Example: - # - # write_html(html, :height => 12) - # - def write_html(html, options = {}) - options[:height] ||= 20 - #HTML parser - @href = nil - @style = {} - html.gsub!("\n",' ') - re = %r{ ( | - < (?: - [^<>"] + - | - " (?: \\. | [^\\"]+ ) * " - ) * - > - ) }xm - - html.split(re).each do |value| - if "<" == value[0,1] - #Tag - if (value[1, 1] == '/') - close_tag(value[2..-2], options) - else - tag = value[1..-2] - open_tag(tag, options) - end - else - #Text - if @href - put_link(@href,value) - else - Write(options[:height], value) - end - end - end - end - - def open_tag(tag, options = {}) #:nodoc: - #Opening tag - tag = tag.to_s.upcase - set_style(tag, true) if tag == 'B' or tag == 'I' or tag == 'U' - @href = options['HREF'] if tag == 'A' - Ln(options[:height]) if tag == 'BR' - end - - def close_tag(tag, options = {}) #:nodoc: - #Closing tag - tag = tag.to_s.upcase - set_style(tag, false) if tag == 'B' or tag == 'I' or tag == 'U' - @href = '' if $tag == 'A' - end - - def set_style(tag, enable = true) #:nodoc: - #Modify style and select corresponding font - style = "" - @style[tag] = enable - ['B','I','U'].each do |s| - style += s if not @style[s].nil? and @style[s] - end - SetFont('', style) - end - - def put_link(url, txt) #:nodoc: - #Put a hyperlink - SetTextColor(0,0,255) - set_style('U',true) - Write(5, txt, url) - set_style('U',false) - SetTextColor(0) - end -end - -# class FPDF -# alias_method :set_margins , :SetMargins -# alias_method :set_left_margin , :SetLeftMargin -# alias_method :set_top_margin , :SetTopMargin -# alias_method :set_right_margin , :SetRightMargin -# alias_method :set_auto_pagebreak , :SetAutoPageBreak -# alias_method :set_display_mode , :SetDisplayMode -# alias_method :set_compression , :SetCompression -# alias_method :set_title , :SetTitle -# alias_method :set_subject , :SetSubject -# alias_method :set_author , :SetAuthor -# alias_method :set_keywords , :SetKeywords -# alias_method :set_creator , :SetCreator -# alias_method :set_draw_color , :SetDrawColor -# alias_method :set_fill_color , :SetFillColor -# alias_method :set_text_color , :SetTextColor -# alias_method :set_line_width , :SetLineWidth -# alias_method :set_font , :SetFont -# alias_method :set_font_size , :SetFontSize -# alias_method :set_link , :SetLink -# alias_method :set_y , :SetY -# alias_method :set_xy , :SetXY -# alias_method :get_string_width , :GetStringWidth -# alias_method :get_x , :GetX -# alias_method :set_x , :SetX -# alias_method :get_y , :GetY -# alias_method :accept_pagev_break , :AcceptPageBreak -# alias_method :add_font , :AddFont -# alias_method :add_link , :AddLink -# alias_method :add_page , :AddPage -# alias_method :alias_nb_pages , :AliasNbPages -# alias_method :cell , :Cell -# alias_method :close , :Close -# alias_method :error , :Error -# alias_method :footer , :Footer -# alias_method :header , :Header -# alias_method :image , :Image -# alias_method :line , :Line -# alias_method :link , :Link -# alias_method :ln , :Ln -# alias_method :multi_cell , :MultiCell -# alias_method :open , :Open -# alias_method :Open , :open -# alias_method :output , :Output -# alias_method :page_no , :PageNo -# alias_method :rect , :Rect -# alias_method :text , :Text -# alias_method :write , :Write -# end diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/template_handler/compile_support.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/rfpdf/template_handler/compile_support.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,73 @@ +module RFPDF + module TemplateHandler + + class CompileSupport + # extend ActiveSupport::Memoizable + + attr_reader :options + + def initialize(controller) + @controller = controller + @options = pull_options + set_headers + end + + def pull_options + @controller.send :compute_rfpdf_options || {} + end + + def set_headers + set_pragma + set_cache_control + set_content_type + set_disposition + end + + # TODO: kept around from railspdf-- maybe not needed anymore? should check. + def ie_request? + @controller.request.env['HTTP_USER_AGENT'] =~ /msie/i + end + # memoize :ie_request? + + # added to make ie happy with ssl pdf's (per naisayer) + def ssl_request? + # @controller.request.env['SERVER_PROTOCOL'].downcase == "https" + @controller.request.ssl? + end + # memoize :ssl_request? + + # TODO: kept around from railspdf-- maybe not needed anymore? should check. + def set_pragma + if ssl_request? && ie_request? + @controller.headers['Pragma'] = 'public' # added to make ie ssl pdfs work (per naisayer) + else + @controller.headers['Pragma'] ||= ie_request? ? 'no-cache' : '' + end + end + + # TODO: kept around from railspdf-- maybe not needed anymore? should check. + def set_cache_control + if ssl_request? && ie_request? + @controller.headers['Cache-Control'] = 'maxage=1' # added to make ie ssl pdfs work (per naisayer) + else + @controller.headers['Cache-Control'] ||= ie_request? ? 'no-cache, must-revalidate' : '' + end + end + + def set_content_type + @controller.response.content_type ||= Mime::PDF + end + + def set_disposition + inline = options[:inline] ? 'inline' : 'attachment' + filename = options[:filename] ? "filename=#{options[:filename]}" : nil + @controller.headers["Content-Disposition"] = [inline,filename].compact.join(';') + end + + end + + end +end + + + diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/template_handlers/base.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/rfpdf/template_handlers/base.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,12 @@ +module RFPDF + module TemplateHandlers + class Base < ::ActionView::TemplateHandlers::ERB + + def compile(template) + src = "_rfpdf_compile_setup;" + super + end + end + end +end + + diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/rfpdf/view.rb --- a/vendor/plugins/rfpdf/lib/rfpdf/view.rb Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,85 +0,0 @@ -# Copyright (c) 2006 4ssoM LLC -# -# The MIT License -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# Thanks go out to Bruce Williams of codefluency who created RTex. This -# template handler is modification of his work. -# -# Example Registration -# -# ActionView::Base::register_template_handler 'rfpdf', RFpdfView - -module RFPDF - - class View - @@backward_compatibility_mode = false - cattr_accessor :backward_compatibility_mode - - def initialize(action_view) - @action_view = action_view - # Override with @options_for_rfpdf Hash in your controller - @options = { - # Run through latex first? (for table of contents, etc) - :pre_process => false, - # Debugging mode; raises exception - :debug => false, - # Filename of pdf to generate - :file_name => "#{@action_view.controller.action_name}.pdf", - # Temporary Directory - :temp_dir => "#{File.expand_path(RAILS_ROOT)}/tmp" - }.merge(@action_view.controller.instance_eval{ @options_for_rfpdf } || {}).with_indifferent_access - end - - def self.compilable? - false - end - - def compilable? - self.class.compilable? - end - - def render(template, local_assigns = {}) - @pdf_name = "Default.pdf" if @pdf_name.nil? - unless @action_view.controller.headers["Content-Type"] == 'application/pdf' - @generate = true - @action_view.controller.headers["Content-Type"] = 'application/pdf' - @action_view.controller.headers["Content-disposition:"] = "inline; filename=\"#{@options[:file_name]}\"" - end - assigns = @action_view.assigns.dup - - if content_for_layout = @action_view.instance_variable_get("@content_for_layout") - assigns['content_for_layout'] = content_for_layout - end - - result = @action_view.instance_eval do - assigns.each do |key,val| - instance_variable_set "@#{key}", val - end - local_assigns.each do |key,val| - class << self; self; end.send(:define_method,key){ val } - end - ERB.new(@@backward_compatibility_mode == true ? template : template.source).result(binding) - end - end - - end - -end \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/lib/tcpdf.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/lib/tcpdf.rb Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,3825 @@ +#============================================================+ +# File name : tcpdf.rb +# Begin : 2002-08-03 +# Last Update : 2007-03-20 +# Author : Nicola Asuni +# Version : 1.53.0.TC031 +# License : GNU LGPL (http://www.gnu.org/copyleft/lesser.html) +# +# Description : This is a Ruby class for generating PDF files +# on-the-fly without requiring external +# extensions. +# +# IMPORTANT: +# This class is an extension and improvement of the Public Domain +# FPDF class by Olivier Plathey (http://www.fpdf.org). +# +# Main changes by Nicola Asuni: +# Ruby porting; +# UTF-8 Unicode support; +# code refactoring; +# source code clean up; +# code style and formatting; +# source code documentation using phpDocumentor (www.phpdoc.org); +# All ISO page formats were included; +# image scale factor; +# includes methods to parse and printsome XHTML code, supporting the following elements: h1, h2, h3, h4, h5, h6, b, u, i, a, img, p, br, strong, em, font, blockquote, li, ul, ol, hr, td, th, tr, table, sup, sub, small; +# includes a method to print various barcode formats using an improved version of "Generic Barcode Render Class" by Karim Mribti (http://www.mribti.com/barcode/) (require GD library: http://www.boutell.com/gd/); +# defines standard Header() and Footer() methods. +# +# Ported to Ruby by Ed Moss 2007-08-06 +# +#============================================================+ + +# +# TCPDF Class. +# @package com.tecnick.tcpdf +# + +@@version = "1.53.0.TC031" +@@fpdf_charwidths = {} + +PDF_PRODUCER = 'TCPDF via RFPDF 1.53.0.TC031 (http://tcpdf.sourceforge.net)' + +module TCPDFFontDescriptor + @@descriptors = { 'freesans' => {} } + @@font_name = 'freesans' + + def self.font(font_name) + @@descriptors[font_name.gsub(".rb", "")] + end + + def self.define(font_name = 'freesans') + @@descriptors[font_name] ||= {} + yield @@descriptors[font_name] + end +end + +# This is a Ruby class for generating PDF files on-the-fly without requiring external extensions.
    +# This class is an extension and improvement of the FPDF class by Olivier Plathey (http://www.fpdf.org).
    +# This version contains some changes: [porting to Ruby, support for UTF-8 Unicode, code style and formatting, php documentation (www.phpdoc.org), ISO page formats, minor improvements, image scale factor]
    +# TCPDF project (http://tcpdf.sourceforge.net) is based on the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org).
    +# To add your own TTF fonts please read /fonts/README.TXT +# @name TCPDF +# @package com.tecnick.tcpdf +# @@version 1.53.0.TC031 +# @author Nicola Asuni +# @link http://tcpdf.sourceforge.net +# @license http://www.gnu.org/copyleft/lesser.html LGPL +# +class TCPDF + include RFPDF + include Core::RFPDF + include RFPDF::Math + + cattr_accessor :k_cell_height_ratio + @@k_cell_height_ratio = 1.25 + + cattr_accessor :k_blank_image + @@k_blank_image = "" + + cattr_accessor :k_small_ratio + @@k_small_ratio = 2/3.0 + + cattr_accessor :k_path_cache + @@k_path_cache = File.join(RAILS_ROOT, 'tmp') + + cattr_accessor :k_path_url_cache + @@k_path_url_cache = File.join(RAILS_ROOT, 'tmp') + + cattr_accessor :decoder + + attr_accessor :barcode + + attr_accessor :buffer + + attr_accessor :diffs + + attr_accessor :color_flag + + attr_accessor :default_table_columns + + attr_accessor :default_font + + attr_accessor :draw_color + + attr_accessor :encoding + + attr_accessor :fill_color + + attr_accessor :fonts + + attr_accessor :font_family + + attr_accessor :font_files + + cattr_accessor :font_path + + attr_accessor :font_style + + attr_accessor :font_size_pt + + attr_accessor :header_width + + attr_accessor :header_logo + + attr_accessor :header_logo_width + + attr_accessor :header_title + + attr_accessor :header_string + + attr_accessor :images + + attr_accessor :img_scale + + attr_accessor :in_footer + + attr_accessor :is_unicode + + attr_accessor :lasth + + attr_accessor :links + + attr_accessor :listordered + + attr_accessor :listcount + + attr_accessor :lispacer + + attr_accessor :n + + attr_accessor :offsets + + attr_accessor :orientation_changes + + attr_accessor :page + + attr_accessor :page_links + + attr_accessor :pages + + attr_accessor :pdf_version + + attr_accessor :prevfill_color + + attr_accessor :prevtext_color + + attr_accessor :print_header + + attr_accessor :print_footer + + attr_accessor :state + + attr_accessor :tableborder + + attr_accessor :tdbegin + + attr_accessor :tdwidth + + attr_accessor :tdheight + + attr_accessor :tdalign + + attr_accessor :tdfill + + attr_accessor :tempfontsize + + attr_accessor :text_color + + attr_accessor :underline + + attr_accessor :ws + + # + # This is the class constructor. + # It allows to set up the page format, the orientation and + # the measure unit used in all the methods (except for the font sizes). + # @since 1.0 + # @param string :orientation page orientation. Possible values are (case insensitive):
    • P or Portrait (default)
    • L or Landscape
    + # @param string :unit User measure unit. Possible values are:
    • pt: point
    • mm: millimeter (default)
    • cm: centimeter
    • in: inch

    A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This is a very common unit in typography; font sizes are expressed in that unit. + # @param mixed :format The format used for pages. It can be either one of the following values (case insensitive) or a custom format in the form of a two-element array containing the width and the height (expressed in the unit given by unit).
    • 4A0
    • 2A0
    • A0
    • A1
    • A2
    • A3
    • A4 (default)
    • A5
    • A6
    • A7
    • A8
    • A9
    • A10
    • B0
    • B1
    • B2
    • B3
    • B4
    • B5
    • B6
    • B7
    • B8
    • B9
    • B10
    • C0
    • C1
    • C2
    • C3
    • C4
    • C5
    • C6
    • C7
    • C8
    • C9
    • C10
    • RA0
    • RA1
    • RA2
    • RA3
    • RA4
    • SRA0
    • SRA1
    • SRA2
    • SRA3
    • SRA4
    • LETTER
    • LEGAL
    • EXECUTIVE
    • FOLIO
    + # @param boolean :unicode TRUE means that the input text is unicode (default = true) + # @param String :encoding charset encoding; default is UTF-8 + # + def initialize(orientation = 'P', unit = 'mm', format = 'A4', unicode = true, encoding = "UTF-8") + + # Set internal character encoding to ASCII# + #FIXME 2007-05-25 (EJM) Level=0 - + # if (respond_to?("mb_internal_encoding") and mb_internal_encoding()) + # @internal_encoding = mb_internal_encoding(); + # mb_internal_encoding("ASCII"); + # } + + #Some checks + dochecks(); + + begin + @@decoder = HTMLEntities.new + rescue + @@decoder = nil + end + + #Initialization of properties + @barcode ||= false + @buffer ||= '' + @diffs ||= [] + @color_flag ||= false + @default_table_columns ||= 4 + @default_font ||= "FreeSans" if unicode + @default_font ||= "Helvetica" + @draw_color ||= '0 G' + @encoding ||= "UTF-8" + @fill_color ||= '0 g' + @fonts ||= {} + @font_family ||= '' + @font_files ||= {} + @font_style ||= '' + @font_size ||= 12 + @font_size_pt ||= 12 + @header_width ||= 0 + @header_logo ||= "" + @header_logo_width ||= 30 + @header_title ||= "" + @header_string ||= "" + @images ||= {} + @img_scale ||= 1 + @in_footer ||= false + @is_unicode = unicode + @lasth ||= 0 + @links ||= [] + @listordered ||= false + @listcount ||= 0 + @lispacer ||= "" + @n ||= 2 + @offsets ||= [] + @orientation_changes ||= [] + @page ||= 0 + @page_links ||= {} + @pages ||= [] + @pdf_version ||= "1.3" + @prevfill_color ||= [255,255,255] + @prevtext_color ||= [0,0,0] + @print_header ||= false + @print_footer ||= false + @state ||= 0 + @tableborder ||= 0 + @tdbegin ||= false + @tdwidth ||= 0 + @tdheight ||= 0 + @tdalign ||= "L" + @tdfill ||= 0 + @tempfontsize ||= 10 + @text_color ||= '0 g' + @underline ||= false + @ws ||= 0 + + #Standard Unicode fonts + @core_fonts = { + 'courier'=>'Courier', + 'courierB'=>'Courier-Bold', + 'courierI'=>'Courier-Oblique', + 'courierBI'=>'Courier-BoldOblique', + 'helvetica'=>'Helvetica', + 'helveticaB'=>'Helvetica-Bold', + 'helveticaI'=>'Helvetica-Oblique', + 'helveticaBI'=>'Helvetica-BoldOblique', + 'times'=>'Times-Roman', + 'timesB'=>'Times-Bold', + 'timesI'=>'Times-Italic', + 'timesBI'=>'Times-BoldItalic', + 'symbol'=>'Symbol', + 'zapfdingbats'=>'ZapfDingbats'} + + #Scale factor + case unit.downcase + when 'pt' ; @k=1 + when 'mm' ; @k=72/25.4 + when 'cm' ; @k=72/2.54 + when 'in' ; @k=72 + else Error("Incorrect unit: #{unit}") + end + + #Page format + if format.is_a?(String) + # Page formats (45 standard ISO paper formats and 4 american common formats). + # Paper cordinates are calculated in this way: (inches# 72) where (1 inch = 2.54 cm) + case (format.upcase) + when '4A0' ; format = [4767.87,6740.79] + when '2A0' ; format = [3370.39,4767.87] + when 'A0' ; format = [2383.94,3370.39] + when 'A1' ; format = [1683.78,2383.94] + when 'A2' ; format = [1190.55,1683.78] + when 'A3' ; format = [841.89,1190.55] + when 'A4' ; format = [595.28,841.89] # ; default + when 'A5' ; format = [419.53,595.28] + when 'A6' ; format = [297.64,419.53] + when 'A7' ; format = [209.76,297.64] + when 'A8' ; format = [147.40,209.76] + when 'A9' ; format = [104.88,147.40] + when 'A10' ; format = [73.70,104.88] + when 'B0' ; format = [2834.65,4008.19] + when 'B1' ; format = [2004.09,2834.65] + when 'B2' ; format = [1417.32,2004.09] + when 'B3' ; format = [1000.63,1417.32] + when 'B4' ; format = [708.66,1000.63] + when 'B5' ; format = [498.90,708.66] + when 'B6' ; format = [354.33,498.90] + when 'B7' ; format = [249.45,354.33] + when 'B8' ; format = [175.75,249.45] + when 'B9' ; format = [124.72,175.75] + when 'B10' ; format = [87.87,124.72] + when 'C0' ; format = [2599.37,3676.54] + when 'C1' ; format = [1836.85,2599.37] + when 'C2' ; format = [1298.27,1836.85] + when 'C3' ; format = [918.43,1298.27] + when 'C4' ; format = [649.13,918.43] + when 'C5' ; format = [459.21,649.13] + when 'C6' ; format = [323.15,459.21] + when 'C7' ; format = [229.61,323.15] + when 'C8' ; format = [161.57,229.61] + when 'C9' ; format = [113.39,161.57] + when 'C10' ; format = [79.37,113.39] + when 'RA0' ; format = [2437.80,3458.27] + when 'RA1' ; format = [1729.13,2437.80] + when 'RA2' ; format = [1218.90,1729.13] + when 'RA3' ; format = [864.57,1218.90] + when 'RA4' ; format = [609.45,864.57] + when 'SRA0' ; format = [2551.18,3628.35] + when 'SRA1' ; format = [1814.17,2551.18] + when 'SRA2' ; format = [1275.59,1814.17] + when 'SRA3' ; format = [907.09,1275.59] + when 'SRA4' ; format = [637.80,907.09] + when 'LETTER' ; format = [612.00,792.00] + when 'LEGAL' ; format = [612.00,1008.00] + when 'EXECUTIVE' ; format = [521.86,756.00] + when 'FOLIO' ; format = [612.00,936.00] + #else then Error("Unknown page format: #{format}" + end + @fw_pt = format[0] + @fh_pt = format[1] + else + @fw_pt = format[0]*@k + @fh_pt = format[1]*@k + end + + @fw = @fw_pt/@k + @fh = @fh_pt/@k + + #Page orientation + orientation = orientation.downcase + if orientation == 'p' or orientation == 'portrait' + @def_orientation = 'P' + @w_pt = @fw_pt + @h_pt = @fh_pt + elsif orientation == 'l' or orientation == 'landscape' + @def_orientation = 'L' + @w_pt = @fh_pt + @h_pt = @fw_pt + else + Error("Incorrect orientation: #{orientation}") + end + + @cur_orientation = @def_orientation + @w = @w_pt/@k + @h = @h_pt/@k + #Page margins (1 cm) + margin = 28.35/@k + SetMargins(margin, margin) + #Interior cell margin (1 mm) + @c_margin = margin / 10 + #Line width (0.2 mm) + @line_width = 0.567 / @k + #Automatic page break + SetAutoPageBreak(true, 2 * margin) + #Full width display mode + SetDisplayMode('fullwidth') + #Compression + SetCompression(true) + #Set default PDF version number + @pdf_version = "1.3" + + @encoding = encoding + @b = 0 + @i = 0 + @u = 0 + @href = '' + @fontlist = ["arial", "times", "courier", "helvetica", "symbol"] + @issetfont = false + @issetcolor = false + + SetFillColor(200, 200, 200, true) + SetTextColor(0, 0, 0, true) + end + + # + # Set the image scale. + # @param float :scale image scale. + # @author Nicola Asuni + # @since 1.5.2 + # + def SetImageScale(scale) + @img_scale = scale; + end + alias_method :set_image_scale, :SetImageScale + + # + # Returns the image scale. + # @return float image scale. + # @author Nicola Asuni + # @since 1.5.2 + # + def GetImageScale() + return @img_scale; + end + alias_method :get_image_scale, :GetImageScale + + # + # Returns the page width in units. + # @return int page width. + # @author Nicola Asuni + # @since 1.5.2 + # + def GetPageWidth() + return @w; + end + alias_method :get_page_width, :GetPageWidth + + # + # Returns the page height in units. + # @return int page height. + # @author Nicola Asuni + # @since 1.5.2 + # + def GetPageHeight() + return @h; + end + alias_method :get_page_height, :GetPageHeight + + # + # Returns the page break margin. + # @return int page break margin. + # @author Nicola Asuni + # @since 1.5.2 + # + def GetBreakMargin() + return @b_margin; + end + alias_method :get_break_margin, :GetBreakMargin + + # + # Returns the scale factor (number of points in user unit). + # @return int scale factor. + # @author Nicola Asuni + # @since 1.5.2 + # + def GetScaleFactor() + return @k; + end + alias_method :get_scale_factor, :GetScaleFactor + + # + # Defines the left, top and right margins. By default, they equal 1 cm. Call this method to change them. + # @param float :left Left margin. + # @param float :top Top margin. + # @param float :right Right margin. Default value is the left one. + # @since 1.0 + # @see SetLeftMargin(), SetTopMargin(), SetRightMargin(), SetAutoPageBreak() + # + def SetMargins(left, top, right=-1) + #Set left, top and right margins + @l_margin = left + @t_margin = top + if (right == -1) + right = left + end + @r_margin = right + end + alias_method :set_margins, :SetMargins + + # + # Defines the left margin. The method can be called before creating the first page. If the current abscissa gets out of page, it is brought back to the margin. + # @param float :margin The margin. + # @since 1.4 + # @see SetTopMargin(), SetRightMargin(), SetAutoPageBreak(), SetMargins() + # + def SetLeftMargin(margin) + #Set left margin + @l_margin = margin + if ((@page>0) and (@x < margin)) + @x = margin + end + end + alias_method :set_left_margin, :SetLeftMargin + + # + # Defines the top margin. The method can be called before creating the first page. + # @param float :margin The margin. + # @since 1.5 + # @see SetLeftMargin(), SetRightMargin(), SetAutoPageBreak(), SetMargins() + # + def SetTopMargin(margin) + #Set top margin + @t_margin = margin + end + alias_method :set_top_margin, :SetTopMargin + + # + # Defines the right margin. The method can be called before creating the first page. + # @param float :margin The margin. + # @since 1.5 + # @see SetLeftMargin(), SetTopMargin(), SetAutoPageBreak(), SetMargins() + # + def SetRightMargin(margin) + #Set right margin + @r_margin = margin + end + alias_method :set_right_margin, :SetRightMargin + + # + # Enables or disables the automatic page breaking mode. When enabling, the second parameter is the distance from the bottom of the page that defines the triggering limit. By default, the mode is on and the margin is 2 cm. + # @param boolean :auto Boolean indicating if mode should be on or off. + # @param float :margin Distance from the bottom of the page. + # @since 1.0 + # @see Cell(), MultiCell(), AcceptPageBreak() + # + def SetAutoPageBreak(auto, margin=0) + #Set auto page break mode and triggering margin + @auto_page_break = auto + @b_margin = margin + @page_break_trigger = @h - margin + end + alias_method :set_auto_page_break, :SetAutoPageBreak + + # + # Defines the way the document is to be displayed by the viewer. The zoom level can be set: pages can be displayed entirely on screen, occupy the full width of the window, use real size, be scaled by a specific zooming factor or use viewer default (configured in the Preferences menu of Acrobat). The page layout can be specified too: single at once, continuous display, two columns or viewer default. By default, documents use the full width mode with continuous display. + # @param mixed :zoom The zoom to use. It can be one of the following string values or a number indicating the zooming factor to use.
    • fullpage: displays the entire page on screen
    • fullwidth: uses maximum width of window
    • real: uses real size (equivalent to 100% zoom)
    • default: uses viewer default mode
    + # @param string :layout The page layout. Possible values are:
    • single: displays one page at once
    • continuous: displays pages continuously (default)
    • two: displays two pages on two columns
    • default: uses viewer default mode
    + # @since 1.2 + # + def SetDisplayMode(zoom, layout = 'continuous') + #Set display mode in viewer + if (zoom == 'fullpage' or zoom == 'fullwidth' or zoom == 'real' or zoom == 'default' or !zoom.is_a?(String)) + @zoom_mode = zoom + else + Error("Incorrect zoom display mode: #{zoom}") + end + if (layout == 'single' or layout == 'continuous' or layout == 'two' or layout == 'default') + @layout_mode = layout + else + Error("Incorrect layout display mode: #{layout}") + end + end + alias_method :set_display_mode, :SetDisplayMode + + # + # Activates or deactivates page compression. When activated, the internal representation of each page is compressed, which leads to a compression ratio of about 2 for the resulting document. Compression is on by default. + # Note: the Zlib extension is required for this feature. If not present, compression will be turned off. + # @param boolean :compress Boolean indicating if compression must be enabled. + # @since 1.4 + # + def SetCompression(compress) + #Set page compression + if (respond_to?('gzcompress')) + @compress = compress + else + @compress = false + end + end + alias_method :set_compression, :SetCompression + + # + # Defines the title of the document. + # @param string :title The title. + # @since 1.2 + # @see SetAuthor(), SetCreator(), SetKeywords(), SetSubject() + # + def SetTitle(title) + #Title of document + @title = title + end + alias_method :set_title, :SetTitle + + # + # Defines the subject of the document. + # @param string :subject The subject. + # @since 1.2 + # @see SetAuthor(), SetCreator(), SetKeywords(), SetTitle() + # + def SetSubject(subject) + #Subject of document + @subject = subject + end + alias_method :set_subject, :SetSubject + + # + # Defines the author of the document. + # @param string :author The name of the author. + # @since 1.2 + # @see SetCreator(), SetKeywords(), SetSubject(), SetTitle() + # + def SetAuthor(author) + #Author of document + @author = author + end + alias_method :set_author, :SetAuthor + + # + # Associates keywords with the document, generally in the form 'keyword1 keyword2 ...'. + # @param string :keywords The list of keywords. + # @since 1.2 + # @see SetAuthor(), SetCreator(), SetSubject(), SetTitle() + # + def SetKeywords(keywords) + #Keywords of document + @keywords = keywords + end + alias_method :set_keywords, :SetKeywords + + # + # Defines the creator of the document. This is typically the name of the application that generates the PDF. + # @param string :creator The name of the creator. + # @since 1.2 + # @see SetAuthor(), SetKeywords(), SetSubject(), SetTitle() + # + def SetCreator(creator) + #Creator of document + @creator = creator + end + alias_method :set_creator, :SetCreator + + # + # Defines an alias for the total number of pages. It will be substituted as the document is closed.
    + # Example:
    + #
    +	# class PDF extends TCPDF {
    +	# 	def Footer()
    +	# 		#Go to 1.5 cm from bottom
    +	# 		SetY(-15);
    +	# 		#Select Arial italic 8
    +	# 		SetFont('Arial','I',8);
    +	# 		#Print current and total page numbers
    +	# 		Cell(0,10,'Page '.PageNo().'/{nb}',0,0,'C');
    +	# 	end
    +	# }
    +	# :pdf=new PDF();
    +	# :pdf->alias_nb_pages();
    +	# 
    + # @param string :alias The alias. Default valuenb}. + # @since 1.4 + # @see PageNo(), Footer() + # + def AliasNbPages(alias_nb ='{nb}') + #Define an alias for total number of pages + @alias_nb_pages = escapetext(alias_nb) + end + alias_method :alias_nb_pages, :AliasNbPages + + # + # This method is automatically called in case of fatal error; it simply outputs the message and halts the execution. An inherited class may override it to customize the error handling but should always halt the script, or the resulting document would probably be invalid. + # 2004-06-11 :: Nicola Asuni : changed bold tag with strong + # @param string :msg The error message + # @since 1.0 + # + def Error(msg) + #Fatal error + raise ("TCPDF error: #{msg}") + end + alias_method :error, :Error + + # + # This method begins the generation of the PDF document. It is not necessary to call it explicitly because AddPage() does it automatically. + # Note: no page is created by this method + # @since 1.0 + # @see AddPage(), Close() + # + def Open() + #Begin document + @state = 1 + end + # alias_method :open, :Open + + # + # Terminates the PDF document. It is not necessary to call this method explicitly because Output() does it automatically. If the document contains no page, AddPage() is called to prevent from getting an invalid document. + # @since 1.0 + # @see Open(), Output() + # + def Close() + #Terminate document + if (@state==3) + return; + end + if (@page==0) + AddPage(); + end + #Page footer + @in_footer=true; + Footer(); + @in_footer=false; + #Close page + endpage(); + #Close document + enddoc(); + end + # alias_method :close, :Close + + # + # Adds a new page to the document. If a page is already present, the Footer() method is called first to output the footer. Then the page is added, the current position set to the top-left corner according to the left and top margins, and Header() is called to display the header. + # The font which was set before calling is automatically restored. There is no need to call SetFont() again if you want to continue with the same font. The same is true for colors and line width. + # The origin of the coordinate system is at the top-left corner and increasing ordinates go downwards. + # @param string :orientation Page orientation. Possible values are (case insensitive):
    • P or Portrait
    • L or Landscape
    The default value is the one passed to the constructor. + # @since 1.0 + # @see TCPDF(), Header(), Footer(), SetMargins() + # + def AddPage(orientation='') + #Start a new page + if (@state==0) + Open(); + end + family=@font_family; + style=@font_style + (@underline ? 'U' : ''); + size=@font_size_pt; + lw=@line_width; + dc=@draw_color; + fc=@fill_color; + tc=@text_color; + cf=@color_flag; + if (@page>0) + #Page footer + @in_footer=true; + Footer(); + @in_footer=false; + #Close page + endpage(); + end + #Start new page + beginpage(orientation); + #Set line cap style to square + out('2 J'); + #Set line width + @line_width = lw; + out(sprintf('%.2f w', lw*@k)); + #Set font + if (family) + SetFont(family, style, size); + end + #Set colors + @draw_color = dc; + if (dc!='0 G') + out(dc); + end + @fill_color = fc; + if (fc!='0 g') + out(fc); + end + @text_color = tc; + @color_flag = cf; + #Page header + Header(); + #Restore line width + if (@line_width != lw) + @line_width = lw; + out(sprintf('%.2f w', lw*@k)); + end + #Restore font + if (family) + SetFont(family, style, size); + end + #Restore colors + if (@draw_color != dc) + @draw_color = dc; + out(dc); + end + if (@fill_color != fc) + @fill_color = fc; + out(fc); + end + @text_color = tc; + @color_flag = cf; + end + alias_method :add_page, :AddPage + + # + # Rotate object. + # @param float :angle angle in degrees for counter-clockwise rotation + # @param int :x abscissa of the rotation center. Default is current x position + # @param int :y ordinate of the rotation center. Default is current y position + # + def Rotate(angle, x="", y="") + + if (x == '') + x = @x; + end + + if (y == '') + y = @y; + end + + if (@rtl) + x = @w - x; + angle = -@angle; + end + + y = (@h - y) * @k; + x *= @k; + + # calculate elements of transformation matrix + tm = [] + tm[0] = ::Math::cos(deg2rad(angle)); + tm[1] = ::Math::sin(deg2rad(angle)); + tm[2] = -tm[1]; + tm[3] = tm[0]; + tm[4] = x + tm[1] * y - tm[0] * x; + tm[5] = y - tm[0] * y - tm[1] * x; + + # generate the transformation matrix + Transform(tm); + end + alias_method :rotate, :Rotate + + # + # Starts a 2D tranformation saving current graphic state. + # This function must be called before scaling, mirroring, translation, rotation and skewing. + # Use StartTransform() before, and StopTransform() after the transformations to restore the normal behavior. + # + def StartTransform + out('q'); + end + alias_method :start_transform, :StartTransform + + # + # Stops a 2D tranformation restoring previous graphic state. + # This function must be called after scaling, mirroring, translation, rotation and skewing. + # Use StartTransform() before, and StopTransform() after the transformations to restore the normal behavior. + # + def StopTransform + out('Q'); + end + alias_method :stop_transform, :StopTransform + + # + # Apply graphic transformations. + # @since 2.1.000 (2008-01-07) + # @see StartTransform(), StopTransform() + # + def Transform(tm) + x = out(sprintf('%.3f %.3f %.3f %.3f %.3f %.3f cm', tm[0], tm[1], tm[2], tm[3], tm[4], tm[5])); + end + alias_method :transform, :Transform + + # + # Set header data. + # @param string :ln header image logo + # @param string :lw header image logo width in mm + # @param string :ht string to print as title on document header + # @param string :hs string to print on document header + # + def SetHeaderData(ln="", lw=0, ht="", hs="") + @header_logo = ln || "" + @header_logo_width = lw || 0 + @header_title = ht || "" + @header_string = hs || "" + end + alias_method :set_header_data, :SetHeaderData + + # + # Set header margin. + # (minimum distance between header and top page margin) + # @param int :hm distance in millimeters + # + def SetHeaderMargin(hm=10) + @header_margin = hm; + end + alias_method :set_header_margin, :SetHeaderMargin + + # + # Set footer margin. + # (minimum distance between footer and bottom page margin) + # @param int :fm distance in millimeters + # + def SetFooterMargin(fm=10) + @footer_margin = fm; + end + alias_method :set_footer_margin, :SetFooterMargin + + # + # Set a flag to print page header. + # @param boolean :val set to true to print the page header (default), false otherwise. + # + def SetPrintHeader(val=true) + @print_header = val; + end + alias_method :set_print_header, :SetPrintHeader + + # + # Set a flag to print page footer. + # @param boolean :value set to true to print the page footer (default), false otherwise. + # + def SetPrintFooter(val=true) + @print_footer = val; + end + alias_method :set_print_footer, :SetPrintFooter + + # + # This method is used to render the page header. + # It is automatically called by AddPage() and could be overwritten in your own inherited class. + # + def Header() + if (@print_header) + if (@original_l_margin.nil?) + @original_l_margin = @l_margin; + end + if (@original_r_margin.nil?) + @original_r_margin = @r_margin; + end + + #set current position + SetXY(@original_l_margin, @header_margin); + + if ((@header_logo) and (@header_logo != @@k_blank_image)) + Image(@header_logo, @original_l_margin, @header_margin, @header_logo_width); + else + @img_rb_y = GetY(); + end + + cell_height = ((@@k_cell_height_ratio * @header_font[2]) / @k).round(2) + + header_x = @original_l_margin + (@header_logo_width * 1.05); #set left margin for text data cell + + # header title + SetFont(@header_font[0], 'B', @header_font[2] + 1); + SetX(header_x); + Cell(@header_width, cell_height, @header_title, 0, 1, 'L'); + + # header string + SetFont(@header_font[0], @header_font[1], @header_font[2]); + SetX(header_x); + MultiCell(@header_width, cell_height, @header_string, 0, 'L', 0); + + # print an ending header line + if (@header_width) + #set style for cell border + SetLineWidth(0.3); + SetDrawColor(0, 0, 0); + SetY(1 + (@img_rb_y > GetY() ? @img_rb_y : GetY())); + SetX(@original_l_margin); + Cell(0, 0, '', 'T', 0, 'C'); + end + + #restore position + SetXY(@original_l_margin, @t_margin); + end + end + alias_method :header, :Header + + # + # This method is used to render the page footer. + # It is automatically called by AddPage() and could be overwritten in your own inherited class. + # + def Footer() + if (@print_footer) + + if (@original_l_margin.nil?) + @original_l_margin = @l_margin; + end + if (@original_r_margin.nil?) + @original_r_margin = @r_margin; + end + + #set font + SetFont(@footer_font[0], @footer_font[1] , @footer_font[2]); + #set style for cell border + line_width = 0.3; + SetLineWidth(line_width); + SetDrawColor(0, 0, 0); + + footer_height = ((@@k_cell_height_ratio * @footer_font[2]) / @k).round; #footer height, was , 2) + #get footer y position + footer_y = @h - @footer_margin - footer_height; + #set current position + SetXY(@original_l_margin, footer_y); + + #print document barcode + if (@barcode) + Ln(); + barcode_width = ((@w - @original_l_margin - @original_r_margin)).round; #max width + writeBarcode(@original_l_margin, footer_y + line_width, barcode_width, footer_height - line_width, "C128B", false, false, 2, @barcode); + end + + SetXY(@original_l_margin, footer_y); + + #Print page number + Cell(0, footer_height, @l['w_page'] + " " + PageNo().to_s + ' / {nb}', 'T', 0, 'R'); + end + end + alias_method :footer, :Footer + + # + # Returns the current page number. + # @return int page number + # @since 1.0 + # @see alias_nb_pages() + # + def PageNo() + #Get current page number + return @page; + end + alias_method :page_no, :PageNo + + # + # Defines the color used for all drawing operations (lines, rectangles and cell borders). It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page. + # @param int :r If g et b are given, red component; if not, indicates the gray level. Value between 0 and 255 + # @param int :g Green component (between 0 and 255) + # @param int :b Blue component (between 0 and 255) + # @since 1.3 + # @see SetFillColor(), SetTextColor(), Line(), Rect(), Cell(), MultiCell() + # + def SetDrawColor(r, g=-1, b=-1) + #Set color for all stroking operations + if ((r==0 and g==0 and b==0) or g==-1) + @draw_color=sprintf('%.3f G', r/255.0); + else + @draw_color=sprintf('%.3f %.3f %.3f RG', r/255.0, g/255.0, b/255.0); + end + if (@page>0) + out(@draw_color); + end + end + alias_method :set_draw_color, :SetDrawColor + + # + # Defines the color used for all filling operations (filled rectangles and cell backgrounds). It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page. + # @param int :r If g et b are given, red component; if not, indicates the gray level. Value between 0 and 255 + # @param int :g Green component (between 0 and 255) + # @param int :b Blue component (between 0 and 255) + # @param boolean :storeprev if true stores the RGB array on :prevfill_color variable. + # @since 1.3 + # @see SetDrawColor(), SetTextColor(), Rect(), Cell(), MultiCell() + # + def SetFillColor(r, g=-1, b=-1, storeprev=false) + #Set color for all filling operations + if ((r==0 and g==0 and b==0) or g==-1) + @fill_color=sprintf('%.3f g', r/255.0); + else + @fill_color=sprintf('%.3f %.3f %.3f rg', r/255.0, g/255.0, b/255.0); + end + @color_flag=(@fill_color!=@text_color); + if (@page>0) + out(@fill_color); + end + if (storeprev) + # store color as previous value + @prevfill_color = [r, g, b] + end + end + alias_method :set_fill_color, :SetFillColor + + # This hasn't been ported from tcpdf, it's a variation on SetTextColor for setting cmyk colors + def SetCmykFillColor(c, m, y, k, storeprev=false) + #Set color for all filling operations + @fill_color=sprintf('%.3f %.3f %.3f %.3f k', c, m, y, k); + @color_flag=(@fill_color!=@text_color); + if (storeprev) + # store color as previous value + @prevtext_color = [c, m, y, k] + end + if (@page>0) + out(@fill_color); + end + end + alias_method :set_cmyk_fill_color, :SetCmykFillColor + + # + # Defines the color used for text. It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page. + # @param int :r If g et b are given, red component; if not, indicates the gray level. Value between 0 and 255 + # @param int :g Green component (between 0 and 255) + # @param int :b Blue component (between 0 and 255) + # @param boolean :storeprev if true stores the RGB array on :prevtext_color variable. + # @since 1.3 + # @see SetDrawColor(), SetFillColor(), Text(), Cell(), MultiCell() + # + def SetTextColor(r, g=-1, b=-1, storeprev=false) + #Set color for text + if ((r==0 and :g==0 and :b==0) or :g==-1) + @text_color=sprintf('%.3f g', r/255.0); + else + @text_color=sprintf('%.3f %.3f %.3f rg', r/255.0, g/255.0, b/255.0); + end + @color_flag=(@fill_color!=@text_color); + if (storeprev) + # store color as previous value + @prevtext_color = [r, g, b] + end + end + alias_method :set_text_color, :SetTextColor + + # This hasn't been ported from tcpdf, it's a variation on SetTextColor for setting cmyk colors + def SetCmykTextColor(c, m, y, k, storeprev=false) + #Set color for text + @text_color=sprintf('%.3f %.3f %.3f %.3f k', c, m, y, k); + @color_flag=(@fill_color!=@text_color); + if (storeprev) + # store color as previous value + @prevtext_color = [c, m, y, k] + end + end + alias_method :set_cmyk_text_color, :SetCmykTextColor + + # + # Returns the length of a string in user unit. A font must be selected.
    + # Support UTF-8 Unicode [Nicola Asuni, 2005-01-02] + # @param string :s The string whose length is to be computed + # @return int + # @since 1.2 + # + def GetStringWidth(s) + #Get width of a string in the current font + s = s.to_s; + cw = @current_font['cw'] + w = 0; + if (@is_unicode) + unicode = UTF8StringToArray(s); + unicode.each do |char| + if (!cw[char].nil?) + w += cw[char]; + # This should not happen. UTF8StringToArray should guarentee the array is ascii values. + # elsif (c!cw[char[0]].nil?) + # w += cw[char[0]]; + # elsif (!cw[char.chr].nil?) + # w += cw[char.chr]; + elsif (!@current_font['desc']['MissingWidth'].nil?) + w += @current_font['desc']['MissingWidth']; # set default size + else + w += 500; + end + end + else + s.each_byte do |c| + if cw[c.chr] + w += cw[c.chr]; + elsif cw[?c.chr] + w += cw[?c.chr] + end + end + end + return (w * @font_size / 1000.0); + end + alias_method :get_string_width, :GetStringWidth + + # + # Defines the line width. By default, the value equals 0.2 mm. The method can be called before the first page is created and the value is retained from page to page. + # @param float :width The width. + # @since 1.0 + # @see Line(), Rect(), Cell(), MultiCell() + # + def SetLineWidth(width) + #Set line width + @line_width = width; + if (@page>0) + out(sprintf('%.2f w', width*@k)); + end + end + alias_method :set_line_width, :SetLineWidth + + # + # Draws a line between two points. + # @param float :x1 Abscissa of first point + # @param float :y1 Ordinate of first point + # @param float :x2 Abscissa of second point + # @param float :y2 Ordinate of second point + # @since 1.0 + # @see SetLineWidth(), SetDrawColor() + # + def Line(x1, y1, x2, y2) + #Draw a line + out(sprintf('%.2f %.2f m %.2f %.2f l S', x1 * @k, (@h - y1) * @k, x2 * @k, (@h - y2) * @k)); + end + alias_method :line, :Line + + def Circle(mid_x, mid_y, radius, style='') + mid_y = (@h-mid_y)*@k + out(sprintf("q\n")) # postscript content in pdf + # init line type etc. with /GSD gs G g (grey) RG rg (RGB) w=line witdh etc. + out(sprintf("1 j\n")) # line join + # translate ("move") circle to mid_y, mid_y + out(sprintf("1 0 0 1 %f %f cm", mid_x, mid_y)) + kappa = 0.5522847498307933984022516322796 + # Quadrant 1 + x_s = 0.0 # 12 o'clock + y_s = 0.0 + radius + x_e = 0.0 + radius # 3 o'clock + y_e = 0.0 + out(sprintf("%f %f m\n", x_s, y_s)) # move to 12 o'clock + # cubic bezier control point 1, start height and kappa * radius to the right + bx_e1 = x_s + (radius * kappa) + by_e1 = y_s + # cubic bezier control point 2, end and kappa * radius above + bx_e2 = x_e + by_e2 = y_e + (radius * kappa) + # draw cubic bezier from current point to x_e/y_e with bx_e1/by_e1 and bx_e2/by_e2 as bezier control points + out(sprintf("%f %f %f %f %f %f c\n", bx_e1, by_e1, bx_e2, by_e2, x_e, y_e)) + # Quadrant 2 + x_s = x_e + y_s = y_e # 3 o'clock + x_e = 0.0 + y_e = 0.0 - radius # 6 o'clock + bx_e1 = x_s # cubic bezier point 1 + by_e1 = y_s - (radius * kappa) + bx_e2 = x_e + (radius * kappa) # cubic bezier point 2 + by_e2 = y_e + out(sprintf("%f %f %f %f %f %f c\n", bx_e1, by_e1, bx_e2, by_e2, x_e, y_e)) + # Quadrant 3 + x_s = x_e + y_s = y_e # 6 o'clock + x_e = 0.0 - radius + y_e = 0.0 # 9 o'clock + bx_e1 = x_s - (radius * kappa) # cubic bezier point 1 + by_e1 = y_s + bx_e2 = x_e # cubic bezier point 2 + by_e2 = y_e - (radius * kappa) + out(sprintf("%f %f %f %f %f %f c\n", bx_e1, by_e1, bx_e2, by_e2, x_e, y_e)) + # Quadrant 4 + x_s = x_e + y_s = y_e # 9 o'clock + x_e = 0.0 + y_e = 0.0 + radius # 12 o'clock + bx_e1 = x_s # cubic bezier point 1 + by_e1 = y_s + (radius * kappa) + bx_e2 = x_e - (radius * kappa) # cubic bezier point 2 + by_e2 = y_e + out(sprintf("%f %f %f %f %f %f c\n", bx_e1, by_e1, bx_e2, by_e2, x_e, y_e)) + if style=='F' + op='f' + elsif style=='FD' or style=='DF' + op='b' + else + op='s' + end + out(sprintf("#{op}\n")) # stroke circle, do not fill and close path + # for filling etc. b, b*, f, f* + out(sprintf("Q\n")) # finish postscript in PDF + end + alias_method :circle, :Circle + + # + # Outputs a rectangle. It can be drawn (border only), filled (with no border) or both. + # @param float :x Abscissa of upper-left corner + # @param float :y Ordinate of upper-left corner + # @param float :w Width + # @param float :h Height + # @param string :style Style of rendering. Possible values are:
    • D or empty string: draw (default)
    • F: fill
    • DF or FD: draw and fill
    + # @since 1.0 + # @see SetLineWidth(), SetDrawColor(), SetFillColor() + # + def Rect(x, y, w, h, style='') + #Draw a rectangle + if (style=='F') + op='f'; + elsif (style=='FD' or style=='DF') + op='B'; + else + op='S'; + end + out(sprintf('%.2f %.2f %.2f %.2f re %s', x * @k, (@h - y) * @k, w * @k, -h * @k, op)); + end + alias_method :rect, :Rect + + # + # Imports a TrueType or Type1 font and makes it available. It is necessary to generate a font definition file first with the makefont.rb utility. The definition file (and the font file itself when embedding) must be present either in the current directory or in the one indicated by FPDF_FONTPATH if the constant is defined. If it could not be found, the error "Could not include font definition file" is generated. + # Support UTF-8 Unicode [Nicola Asuni, 2005-01-02]. + # Example:
    + #
    +	# :pdf->AddFont('Comic','I');
    +	# # is equivalent to:
    +	# :pdf->AddFont('Comic','I','comici.rb');
    +	# 
    + # @param string :family Font family. The name can be chosen arbitrarily. If it is a standard family name, it will override the corresponding font. + # @param string :style Font style. Possible values are (case insensitive):
    • empty string: regular (default)
    • B: bold
    • I: italic
    • BI or IB: bold italic
    + # @param string :file The font definition file. By default, the name is built from the family and style, in lower case with no space. + # @since 1.5 + # @see SetFont() + # + def AddFont(family, style='', file='') + if (family.empty?) + return; + end + + #Add a TrueType or Type1 font + family = family.downcase + if ((!@is_unicode) and (family == 'arial')) + family = 'helvetica'; + end + + style=style.upcase + style=style.gsub('U',''); + if (style == 'IB') + style = 'BI'; + end + + fontkey = family + style; + # check if the font has been already added + if !@fonts[fontkey].nil? + return; + end + + if (file=='') + file = family.gsub(' ', '') + style.downcase + '.rb'; + end + font_file_name = getfontpath(file) + if (font_file_name.nil?) + # try to load the basic file without styles + file = family.gsub(' ', '') + '.rb'; + font_file_name = getfontpath(file) + end + if font_file_name.nil? + Error("Could not find font #{file}.") + end + require(getfontpath(file)) + font_desc = TCPDFFontDescriptor.font(file) + + if (font_desc[:name].nil? and @@fpdf_charwidths.nil?) + Error('Could not include font definition file'); + end + + i = @fonts.length+1; + if (@is_unicode) + @fonts[fontkey] = {'i' => i, 'type' => font_desc[:type], 'name' => font_desc[:name], 'desc' => font_desc[:desc], 'up' => font_desc[:up], 'ut' => font_desc[:ut], 'cw' => font_desc[:cw], 'enc' => font_desc[:enc], 'file' => font_desc[:file], 'ctg' => font_desc[:ctg], 'cMap' => font_desc[:cMap], 'registry' => font_desc[:registry]} + @@fpdf_charwidths[fontkey] = font_desc[:cw]; + else + @fonts[fontkey]={'i' => i, 'type'=>'core', 'name'=>@core_fonts[fontkey], 'up'=>-100, 'ut'=>50, 'cw' => font_desc[:cw]} + @@fpdf_charwidths[fontkey] = font_desc[:cw]; + end + + if (!font_desc[:diff].nil? and (!font_desc[:diff].empty?)) + #Search existing encodings + d=0; + nb=@diffs.length; + 1.upto(nb) do |i| + if (@diffs[i]== font_desc[:diff]) + d = i; + break; + end + end + if (d==0) + d = nb+1; + @diffs[d] = font_desc[:diff]; + end + @fonts[fontkey]['diff'] = d; + end + if (font_desc[:file] and font_desc[:file].length > 0) + if (font_desc[:type] == "TrueType") or (font_desc[:type] == "TrueTypeUnicode") + @font_files[font_desc[:file]] = {'length1' => font_desc[:originalsize]} + else + @font_files[font_desc[:file]] = {'length1' => font_desc[:size1], 'length2' => font_desc[:size2]} + end + end + end + alias_method :add_font, :AddFont + + # + # Sets the font used to print character strings. It is mandatory to call this method at least once before printing text or the resulting document would not be valid. + # The font can be either a standard one or a font added via the AddFont() method. Standard fonts use Windows encoding cp1252 (Western Europe). + # The method can be called before the first page is created and the font is retained from page to page. + # If you just wish to change the current font size, it is simpler to call SetFontSize(). + # Note: for the standard fonts, the font metric files must be accessible. There are three possibilities for this:
    • They are in the current directory (the one where the running script lies)
    • They are in one of the directories defined by the include_path parameter
    • They are in the directory defined by the FPDF_FONTPATH constant

    + # Example for the last case (note the trailing slash):
    + #
    +	# define('FPDF_FONTPATH','/home/www/font/');
    +	# require('tcpdf.rb');
    +	#
    +	# #Times regular 12
    +	# :pdf->SetFont('Times');
    +	# #Arial bold 14
    +	# :pdf->SetFont('Arial','B',14);
    +	# #Removes bold
    +	# :pdf->SetFont('');
    +	# #Times bold, italic and underlined 14
    +	# :pdf->SetFont('Times','BIU');
    +	# 

    + # If the file corresponding to the requested font is not found, the error "Could not include font metric file" is generated. + # @param string :family Family font. It can be either a name defined by AddFont() or one of the standard families (case insensitive):
    • Courier (fixed-width)
    • Helvetica or Arial (synonymous; sans serif)
    • Times (serif)
    • Symbol (symbolic)
    • ZapfDingbats (symbolic)
    It is also possible to pass an empty string. In that case, the current family is retained. + # @param string :style Font style. Possible values are (case insensitive):
    • empty string: regular
    • B: bold
    • I: italic
    • U: underline
    or any combination. The default value is regular. Bold and italic styles do not apply to Symbol and ZapfDingbats + # @param float :size Font size in points. The default value is the current size. If no size has been specified since the beginning of the document, the value taken is 12 + # @since 1.0 + # @see AddFont(), SetFontSize(), Cell(), MultiCell(), Write() + # + def SetFont(family, style='', size=0) + # save previous values + @prevfont_family = @font_family; + @prevfont_style = @font_style; + + family=family.downcase; + if (family=='') + family=@font_family; + end + if ((!@is_unicode) and (family == 'arial')) + family = 'helvetica'; + elsif ((family=="symbol") or (family=="zapfdingbats")) + style=''; + end + + style=style.upcase; + + if (style.include?('U')) + @underline=true; + style= style.gsub('U',''); + else + @underline=false; + end + if (style=='IB') + style='BI'; + end + if (size==0) + size=@font_size_pt; + end + + # try to add font (if not already added) + AddFont(family, style); + + #Test if font is already selected + if ((@font_family == family) and (@font_style == style) and (@font_size_pt == size)) + return; + end + + fontkey = family + style; + style = '' if (@fonts[fontkey].nil? and !@fonts[family].nil?) + + #Test if used for the first time + if (@fonts[fontkey].nil?) + #Check if one of the standard fonts + if (!@core_fonts[fontkey].nil?) + if @@fpdf_charwidths[fontkey].nil? + #Load metric file + file = family; + if ((family!='symbol') and (family!='zapfdingbats')) + file += style.downcase; + end + if (getfontpath(file + '.rb').nil?) + # try to load the basic file without styles + file = family; + fontkey = family; + end + require(getfontpath(file + '.rb')); + font_desc = TCPDFFontDescriptor.font(file) + if ((@is_unicode and ctg.nil?) or ((!@is_unicode) and (@@fpdf_charwidths[fontkey].nil?)) ) + Error("Could not include font metric file [" + fontkey + "]: " + getfontpath(file + ".rb")); + end + end + i = @fonts.length + 1; + + if (@is_unicode) + @fonts[fontkey] = {'i' => i, 'type' => font_desc[:type], 'name' => font_desc[:name], 'desc' => font_desc[:desc], 'up' => font_desc[:up], 'ut' => font_desc[:ut], 'cw' => font_desc[:cw], 'enc' => font_desc[:enc], 'file' => font_desc[:file], 'ctg' => font_desc[:ctg]} + @@fpdf_charwidths[fontkey] = font_desc[:cw]; + else + @fonts[fontkey] = {'i' => i, 'type'=>'core', 'name'=>@core_fonts[fontkey], 'up'=>-100, 'ut'=>50, 'cw' => font_desc[:cw]} + @@fpdf_charwidths[fontkey] = font_desc[:cw]; + end + else + Error('Undefined font: ' + family + ' ' + style); + end + end + #Select it + @font_family = family; + @font_style = style; + @font_size_pt = size; + @font_size = size / @k; + @current_font = @fonts[fontkey]; # was & may need deep copy? + if (@page>0) + out(sprintf('BT /F%d %.2f Tf ET', @current_font['i'], @font_size_pt)); + end + end + alias_method :set_font, :SetFont + + # + # Defines the size of the current font. + # @param float :size The size (in points) + # @since 1.0 + # @see SetFont() + # + def SetFontSize(size) + #Set font size in points + if (@font_size_pt== size) + return; + end + @font_size_pt = size; + @font_size = size.to_f / @k; + if (@page > 0) + out(sprintf('BT /F%d %.2f Tf ET', @current_font['i'], @font_size_pt)); + end + end + alias_method :set_font_size, :SetFontSize + + # + # Creates a new internal link and returns its identifier. An internal link is a clickable area which directs to another place within the document.
    + # The identifier can then be passed to Cell(), Write(), Image() or Link(). The destination is defined with SetLink(). + # @since 1.5 + # @see Cell(), Write(), Image(), Link(), SetLink() + # + def AddLink() + #Create a new internal link + n=@links.length+1; + @links[n]=[0,0]; + return n; + end + alias_method :add_link, :AddLink + + # + # Defines the page and position a link points to + # @param int :link The link identifier returned by AddLink() + # @param float :y Ordinate of target position; -1 indicates the current position. The default value is 0 (top of page) + # @param int :page Number of target page; -1 indicates the current page. This is the default value + # @since 1.5 + # @see AddLink() + # + def SetLink(link, y=0, page=-1) + #Set destination of internal link + if (y==-1) + y=@y; + end + if (page==-1) + page=@page; + end + @links[link] = [page, y] + end + alias_method :set_link, :SetLink + + # + # Puts a link on a rectangular area of the page. Text or image links are generally put via Cell(), Write() or Image(), but this method can be useful for instance to define a clickable area inside an image. + # @param float :x Abscissa of the upper-left corner of the rectangle + # @param float :y Ordinate of the upper-left corner of the rectangle + # @param float :w Width of the rectangle + # @param float :h Height of the rectangle + # @param mixed :link URL or identifier returned by AddLink() + # @since 1.5 + # @see AddLink(), Cell(), Write(), Image() + # + def Link(x, y, w, h, link) + #Put a link on the page + @page_links ||= Array.new + @page_links[@page] ||= Array.new + @page_links[@page].push([x * @k, @h_pt - y * @k, w * @k, h*@k, link]); + end + alias_method :link, :Link + + # + # Prints a character string. The origin is on the left of the first charcter, on the baseline. This method allows to place a string precisely on the page, but it is usually easier to use Cell(), MultiCell() or Write() which are the standard methods to print text. + # @param float :x Abscissa of the origin + # @param float :y Ordinate of the origin + # @param string :txt String to print + # @since 1.0 + # @see SetFont(), SetTextColor(), Cell(), MultiCell(), Write() + # + def Text(x, y, txt) + #Output a string + s=sprintf('BT %.2f %.2f Td (%s) Tj ET', x * @k, (@h-y) * @k, escapetext(txt)); + if (@underline and (txt!='')) + s += ' ' + dounderline(x, y, txt); + end + if (@color_flag) + s='q ' + @text_color + ' ' + s + ' Q'; + end + out(s); + end + alias_method :text, :Text + + # + # Whenever a page break condition is met, the method is called, and the break is issued or not depending on the returned value. The default implementation returns a value according to the mode selected by SetAutoPageBreak().
    + # This method is called automatically and should not be called directly by the application.
    + # Example:
    + # The method is overriden in an inherited class in order to obtain a 3 column layout:
    + #
    +	# class PDF extends TCPDF {
    +	# 	var :col=0;
    +	#
    +	# 	def SetCol(col)
    +	# 		#Move position to a column
    +	# 		@col = col;
    +	# 		:x=10+:col*65;
    +	# 		SetLeftMargin(x);
    +	# 		SetX(x);
    +	# 	end
    +	#
    +	# 	def AcceptPageBreak()
    +	# 		if (@col<2)
    +	# 			#Go to next column
    +	# 			SetCol(@col+1);
    +	# 			SetY(10);
    +	# 			return false;
    +	# 		end
    +	# 		else
    +	# 			#Go back to first column and issue page break
    +	# 			SetCol(0);
    +	# 			return true;
    +	# 		end
    +	# 	end
    +	# }
    +	#
    +	# :pdf=new PDF();
    +	# :pdf->Open();
    +	# :pdf->AddPage();
    +	# :pdf->SetFont('Arial','',12);
    +	# for(i=1;:i<=300;:i++)
    +	#     :pdf->Cell(0,5,"Line :i",0,1);
    +	# }
    +	# :pdf->Output();
    +	# 
    + # @return boolean + # @since 1.4 + # @see SetAutoPageBreak() + # + def AcceptPageBreak() + #Accept automatic page break or not + return @auto_page_break; + end + alias_method :accept_page_break, :AcceptPageBreak + + def BreakThePage?(h) + if ((@y + h) > @page_break_trigger and !@in_footer and AcceptPageBreak()) + true + else + false + end + end + alias_method :break_the_page?, :BreakThePage? + # + # Prints a cell (rectangular area) with optional borders, background color and character string. The upper-left corner of the cell corresponds to the current position. The text can be aligned or centered. After the call, the current position moves to the right or to the next line. It is possible to put a link on the text.
    + # If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting. + # @param float :w Cell width. If 0, the cell extends up to the right margin. + # @param float :h Cell height. Default value: 0. + # @param string :txt String to print. Default value: empty string. + # @param mixed :border Indicates if borders must be drawn around the cell. The value can be either a number:
    • 0: no border (default)
    • 1: frame
    or a string containing some or all of the following characters (in any order):
    • L: left
    • T: top
    • R: right
    • B: bottom
    + # @param int :ln Indicates where the current position should go after the call. Possible values are:
    • 0: to the right
    • 1: to the beginning of the next line
    • 2: below
    + # Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0. + # @param string :align Allows to center or align the text. Possible values are:
    • L or empty string: left align (default value)
    • C: center
    • R: right align
    + # @param int :fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0. + # @param mixed :link URL or identifier returned by AddLink(). + # @since 1.0 + # @see SetFont(), SetDrawColor(), SetFillColor(), SetTextColor(), SetLineWidth(), AddLink(), Ln(), MultiCell(), Write(), SetAutoPageBreak() + # + def Cell(w, h=0, txt='', border=0, ln=0, align='', fill=0, link=nil) + #Output a cell + k=@k; + if ((@y + h) > @page_break_trigger and !@in_footer and AcceptPageBreak()) + #Automatic page break + x = @x; + ws = @ws; + if (ws > 0) + @ws = 0; + out('0 Tw'); + end + AddPage(@cur_orientation); + @x = x; + if (ws > 0) + @ws = ws; + out(sprintf('%.3f Tw', ws * k)); + end + end + if (w == 0) + w = @w - @r_margin - @x; + end + s = ''; + if ((fill.to_i == 1) or (border.to_i == 1)) + if (fill.to_i == 1) + op = (border.to_i == 1) ? 'B' : 'f'; + else + op = 'S'; + end + s = sprintf('%.2f %.2f %.2f %.2f re %s ', @x * k, (@h - @y) * k, w * k, -h * k, op); + end + if (border.is_a?(String)) + x=@x; + y=@y; + if (border.include?('L')) + s<0) + # Go to next line + @y += h; + if (ln == 1) + @x = @l_margin; + end + else + @x += w; + end + end + alias_method :cell, :Cell + + # + # This method allows printing text with line breaks. They can be automatic (as soon as the text reaches the right border of the cell) or explicit (via the \n character). As many cells as necessary are output, one below the other.
    + # Text can be aligned, centered or justified. The cell block can be framed and the background painted. + # @param float :w Width of cells. If 0, they extend up to the right margin of the page. + # @param float :h Height of cells. + # @param string :txt String to print + # @param mixed :border Indicates if borders must be drawn around the cell block. The value can be either a number:
    • 0: no border (default)
    • 1: frame
    or a string containing some or all of the following characters (in any order):
    • L: left
    • T: top
    • R: right
    • B: bottom
    + # @param string :align Allows to center or align the text. Possible values are:
    • L or empty string: left align
    • C: center
    • R: right align
    • J: justification (default value)
    + # @param int :fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0. + # @param int :ln Indicates where the current position should go after the call. Possible values are:
    • 0: to the right
    • 1: to the beginning of the next line [DEFAULT]
    • 2: below
    + # @since 1.3 + # @see SetFont(), SetDrawColor(), SetFillColor(), SetTextColor(), SetLineWidth(), Cell(), Write(), SetAutoPageBreak() + # + def MultiCell(w, h, txt, border=0, align='J', fill=0, ln=1) + + # save current position + prevx = @x; + prevy = @y; + + #Output text with automatic or explicit line breaks + + if (w == 0) + w = @w - @r_margin - @x; + end + + wmax = (w - 2 * @c_margin); + + s = txt.gsub("\r", ''); # remove carriage returns + nb = s.length; + + b=0; + if (border) + if (border==1) + border='LTRB'; + b='LRT'; + b2='LR'; + elsif border.is_a?(String) + b2=''; + if (border.include?('L')) + b2<<'L'; + end + if (border.include?('R')) + b2<<'R'; + end + b=(border.include?('T')) ? b2 + 'T' : b2; + end + end + sep=-1; + to_index=0; + from_j=0; + l=0; + ns=0; + nl=1; + + while to_index < nb + #Get next character + c = s[to_index]; + if c == "\n"[0] + #Explicit line break + if @ws > 0 + @ws = 0 + out('0 Tw') + end + #Ed Moss - change begin + end_i = to_index == 0 ? 0 : to_index - 1 + # Changed from s[from_j..to_index] to fix bug reported by Hans Allis. + from_j = to_index == 0 ? 1 : from_j + Cell(w, h, s[from_j..end_i], b, 2, align, fill) + #change end + to_index += 1 + sep=-1 + from_j=to_index + l=0 + ns=0 + nl += 1 + b = b2 if border and nl==2 + next + end + if (c == " "[0]) + sep = to_index; + ls = l; + ns += 1; + end + + l = GetStringWidth(s[from_j, to_index - from_j + 1]); + + if (l > wmax) + #Automatic line break + if (sep == -1) + if (to_index == from_j) + to_index += 1; + end + if (@ws > 0) + @ws = 0; + out('0 Tw'); + end + Cell(w, h, s[from_j..to_index-1], b, 2, align, fill) # my FPDF version + else + if (align=='J' || align=='justify' || align=='justified') + @ws = (ns>1) ? (wmax-ls)/(ns-1) : 0; + out(sprintf('%.3f Tw', @ws * @k)); + end + Cell(w, h, s[from_j..sep], b, 2, align, fill); + to_index = sep + 1; + end + sep=-1; + from_j = to_index; + l=0; + ns=0; + nl += 1; + if (border and (nl==2)) + b = b2; + end + else + to_index += 1; + end + end + #Last chunk + if (@ws>0) + @ws=0; + out('0 Tw'); + end + if (border.is_a?(String) and border.include?('B')) + b<<'B'; + end + Cell(w, h, s[from_j, to_index-from_j], b, 2, align, fill); + + # move cursor to specified position + # since 2007-03-03 + if (ln == 1) + # go to the beginning of the next line + @x = @l_margin; + elsif (ln == 0) + # go to the top-right of the cell + @y = prevy; + @x = prevx + w; + elsif (ln == 2) + # go to the bottom-left of the cell + @x = prevx; + end + end + alias_method :multi_cell, :MultiCell + + # + # This method prints text from the current position. When the right margin is reached (or the \n character is met) a line break occurs and text continues from the left margin. Upon method exit, the current position is left just at the end of the text. It is possible to put a link on the text.
    + # Example:
    + #
    +	# #Begin with regular font
    +	# :pdf->SetFont('Arial','',14);
    +	# :pdf->Write(5,'Visit ');
    +	# #Then put a blue underlined link
    +	# :pdf->SetTextColor(0,0,255);
    +	# :pdf->SetFont('','U');
    +	# :pdf->Write(5,'www.tecnick.com','http://www.tecnick.com');
    +	# 
    + # @param float :h Line height + # @param string :txt String to print + # @param mixed :link URL or identifier returned by AddLink() + # @param int :fill Indicates if the background must be painted (1) or transparent (0). Default value: 0. + # @since 1.5 + # @see SetFont(), SetTextColor(), AddLink(), MultiCell(), SetAutoPageBreak() + # + def Write(h, txt, link=nil, fill=0) + + #Output text in flowing mode + w = @w - @r_margin - @x; + wmax = (w - 2 * @c_margin); + + s = txt.gsub("\r", ''); + nb = s.length; + + # handle single space character + if ((nb==1) and (s == " ")) + @x += GetStringWidth(s); + return; + end + + sep=-1; + i=0; + j=0; + l=0; + nl=1; + while(i wmax) + #Automatic line break (word wrapping) + if (sep == -1) + if (@x > @l_margin) + #Move to next line + @x = @l_margin; + @y += h; + w=@w - @r_margin - @x; + wmax=(w - 2 * @c_margin); + i += 1 + nl += 1 + next + end + if (i == j) + i += 1 + end + Cell(w, h, s[j, (i-1)], 0, 2, '', fill, link); + else + Cell(w, h, s[j, (sep-j)], 0, 2, '', fill, link); + i = sep+1; + end + sep = -1; + j = i; + l = 0; + if (nl==1) + @x = @l_margin; + w = @w - @r_margin - @x; + wmax = (w - 2 * @c_margin); + end + nl += 1; + else + i += 1; + end + end + #Last chunk + if (i != j) + Cell(GetStringWidth(s[j..i]), h, s[j..i], 0, 0, '', fill, link); + end + end + alias_method :write, :Write + + # + # Puts an image in the page. The upper-left corner must be given. The dimensions can be specified in different ways:
    • explicit width and height (expressed in user unit)
    • one explicit dimension, the other being calculated automatically in order to keep the original proportions
    • no explicit dimension, in which case the image is put at 72 dpi
    + # Supported formats are JPEG and PNG. + # For JPEG, all flavors are allowed:
    • gray scales
    • true colors (24 bits)
    • CMYK (32 bits)
    + # For PNG, are allowed:
    • gray scales on at most 8 bits (256 levels)
    • indexed colors
    • true colors (24 bits)
    + # but are not supported:
    • Interlacing
    • Alpha channel
    + # If a transparent color is defined, it will be taken into account (but will be only interpreted by Acrobat 4 and above).
    + # The format can be specified explicitly or inferred from the file extension.
    + # It is possible to put a link on the image.
    + # Remark: if an image is used several times, only one copy will be embedded in the file.
    + # @param string :file Name of the file containing the image. + # @param float :x Abscissa of the upper-left corner. + # @param float :y Ordinate of the upper-left corner. + # @param float :w Width of the image in the page. If not specified or equal to zero, it is automatically calculated. + # @param float :h Height of the image in the page. If not specified or equal to zero, it is automatically calculated. + # @param string :type Image format. Possible values are (case insensitive): JPG, JPEG, PNG. If not specified, the type is inferred from the file extension. + # @param mixed :link URL or identifier returned by AddLink(). + # @since 1.1 + # @see AddLink() + # + def Image(file, x, y, w=0, h=0, type='', link=nil) + #Put an image on the page + if (@images[file].nil?) + #First use of image, get info + if (type == '') + pos = file.rindex('.'); + if (pos == 0) + Error('Image file has no extension and no type was specified: ' + file); + end + type = file[pos+1..-1]; + end + type.downcase! + if (type == 'jpg' or type == 'jpeg') + info=parsejpg(file); + elsif (type == 'png') + info=parsepng(file); + else + #Allow for additional formats + mtd='parse' + type; + if (!self.respond_to?(mtd)) + Error('Unsupported image type: ' + type); + end + info=send(mtd, file); + end + info['i']=@images.length+1; + @images[file] = info; + else + info=@images[file]; + end + #Automatic width and height calculation if needed + if ((w == 0) and (h == 0)) + #Put image at 72 dpi + # 2004-06-14 :: Nicola Asuni, scale factor where added + w = info['w'] / (@img_scale * @k); + h = info['h'] / (@img_scale * @k); + end + if (w == 0) + w = h * info['w'] / info['h']; + end + if (h == 0) + h = w * info['h'] / info['w']; + end + out(sprintf('q %.2f 0 0 %.2f %.2f %.2f cm /I%d Do Q', w*@k, h*@k, x*@k, (@h-(y+h))*@k, info['i'])); + if (link) + Link(x, y, w, h, link); + end + + #2002-07-31 - Nicola Asuni + # set right-bottom corner coordinates + @img_rb_x = x + w; + @img_rb_y = y + h; + end + alias_method :image, :Image + + # + # Performs a line break. The current abscissa goes back to the left margin and the ordinate increases by the amount passed in parameter. + # @param float :h The height of the break. By default, the value equals the height of the last printed cell. + # @since 1.0 + # @see Cell() + # + def Ln(h='') + #Line feed; default value is last cell height + @x=@l_margin; + if (h.is_a?(String)) + @y += @lasth; + else + @y += h; + end + end + alias_method :ln, :Ln + + # + # Returns the abscissa of the current position. + # @return float + # @since 1.2 + # @see SetX(), GetY(), SetY() + # + def GetX() + #Get x position + return @x; + end + alias_method :get_x, :GetX + + # + # Defines the abscissa of the current position. If the passed value is negative, it is relative to the right of the page. + # @param float :x The value of the abscissa. + # @since 1.2 + # @see GetX(), GetY(), SetY(), SetXY() + # + def SetX(x) + #Set x position + if (x>=0) + @x = x; + else + @x=@w+x; + end + end + alias_method :set_x, :SetX + + # + # Returns the ordinate of the current position. + # @return float + # @since 1.0 + # @see SetY(), GetX(), SetX() + # + def GetY() + #Get y position + return @y; + end + alias_method :get_y, :GetY + + # + # Moves the current abscissa back to the left margin and sets the ordinate. If the passed value is negative, it is relative to the bottom of the page. + # @param float :y The value of the ordinate. + # @since 1.0 + # @see GetX(), GetY(), SetY(), SetXY() + # + def SetY(y) + #Set y position and reset x + @x=@l_margin; + if (y>=0) + @y = y; + else + @y=@h+y; + end + end + alias_method :set_y, :SetY + + # + # Defines the abscissa and ordinate of the current position. If the passed values are negative, they are relative respectively to the right and bottom of the page. + # @param float :x The value of the abscissa + # @param float :y The value of the ordinate + # @since 1.2 + # @see SetX(), SetY() + # + def SetXY(x, y) + #Set x and y positions + SetY(y); + SetX(x); + end + alias_method :set_xy, :SetXY + + # + # Send the document to a given destination: string, local file or browser. In the last case, the plug-in may be used (if present) or a download ("Save as" dialog box) may be forced.
    + # The method first calls Close() if necessary to terminate the document. + # @param string :name The name of the file. If not given, the document will be sent to the browser (destination I) with the name doc.pdf. + # @param string :dest Destination where to send the document. It can take one of the following values:
    • I: send the file inline to the browser. The plug-in is used if available. The name given by name is used when one selects the "Save as" option on the link generating the PDF.
    • D: send to the browser and force a file download with the name given by name.
    • F: save to a local file with the name given by name.
    • S: return the document as a string. name is ignored.
    If the parameter is not specified but a name is given, destination is F. If no parameter is specified at all, destination is I.
    + # @since 1.0 + # @see Close() + # + def Output(name='', dest='') + #Output PDF to some destination + #Finish document if necessary + if (@state < 3) + Close(); + end + #Normalize parameters + # Boolean no longer supported + # if (dest.is_a?(Boolean)) + # dest = dest ? 'D' : 'F'; + # end + dest = dest.upcase + if (dest=='') + if (name=='') + name='doc.pdf'; + dest='I'; + else + dest='F'; + end + end + case (dest) + when 'I' + # This is PHP specific code + ##Send to standard output + # if (ob_get_contents()) + # Error('Some data has already been output, can\'t send PDF file'); + # end + # if (php_sapi_name()!='cli') + # #We send to a browser + # header('Content-Type: application/pdf'); + # if (headers_sent()) + # Error('Some data has already been output to browser, can\'t send PDF file'); + # end + # header('Content-Length: ' + @buffer.length); + # header('Content-disposition: inline; filename="' + name + '"'); + # end + return @buffer; + + when 'D' + # PHP specific + #Download file + # if (ob_get_contents()) + # Error('Some data has already been output, can\'t send PDF file'); + # end + # if (!_SERVER['HTTP_USER_AGENT'].nil? && SERVER['HTTP_USER_AGENT'].include?('MSIE')) + # header('Content-Type: application/force-download'); + # else + # header('Content-Type: application/octet-stream'); + # end + # if (headers_sent()) + # Error('Some data has already been output to browser, can\'t send PDF file'); + # end + # header('Content-Length: '+ @buffer.length); + # header('Content-disposition: attachment; filename="' + name + '"'); + return @buffer; + + when 'F' + open(name,'wb') do |f| + f.write(@buffer) + end + # PHP code + # #Save to local file + # f=open(name,'wb'); + # if (!f) + # Error('Unable to create output file: ' + name); + # end + # fwrite(f,@buffer,@buffer.length); + # f.close + + when 'S' + #Return as a string + return @buffer; + else + Error('Incorrect output destination: ' + dest); + + end + return ''; + end + alias_method :output, :Output + + # Protected methods + + # + # Check for locale-related bug + # @access protected + # + def dochecks() + #Check for locale-related bug + if (1.1==1) + Error('Don\'t alter the locale before including class file'); + end + #Check for decimal separator + if (sprintf('%.1f',1.0)!='1.0') + setlocale(LC_NUMERIC,'C'); + end + end + + # + # Return fonts path + # @access protected + # + def getfontpath(file) + # Is it in the @@font_path? + if @@font_path + fpath = File.join @@font_path, file + if File.exists?(fpath) + return fpath + end + end + # Is it in this plugin's font folder? + fpath = File.join File.dirname(__FILE__), 'fonts', file + if File.exists?(fpath) + return fpath + end + # Could not find it. + nil + end + + # + # Start document + # @access protected + # + def begindoc() + #Start document + @state=1; + out('%PDF-1.3'); + end + + # + # putpages + # @access protected + # + def putpages() + nb = @page; + if (@alias_nb_pages) + nbstr = UTF8ToUTF16BE(nb.to_s, false); + #Replace number of pages + 1.upto(nb) do |n| + @pages[n].gsub!(@alias_nb_pages, nbstr) + end + end + if @def_orientation=='P' + w_pt=@fw_pt + h_pt=@fh_pt + else + w_pt=@fh_pt + h_pt=@fw_pt + end + filter=(@compress) ? '/Filter /FlateDecode ' : '' + 1.upto(nb) do |n| + #Page + newobj + out('<>>>'; + else + l=@links[pl[4]]; + h=!@orientation_changes[l[0]].nil? ? w_pt : h_pt; + annots<>',1+2*l[0], h-l[1]*@k); + end + end + out(annots + ']'); + end + out('/Contents ' + (@n+1).to_s + ' 0 R>>'); + out('endobj'); + #Page content + p=(@compress) ? gzcompress(@pages[n]) : @pages[n]; + newobj(); + out('<<' + filter + '/Length '+ p.length.to_s + '>>'); + putstream(p); + out('endobj'); + end + #Pages root + @offsets[1]=@buffer.length; + out('1 0 obj'); + out('<>'); + out('endobj'); + end + + # + # Adds fonts + # putfonts + # @access protected + # + def putfonts() + nf=@n; + @diffs.each do |diff| + #Encodings + newobj(); + out('<>'); + out('endobj'); + end + @font_files.each do |file, info| + #Font file embedding + newobj(); + @font_files[file]['n']=@n; + font=''; + open(getfontpath(file),'rb') do |f| + font = f.read(); + end + compressed=(file[-2,2]=='.z'); + if (!compressed && !info['length2'].nil?) + header=((font[0][0])==128); + if (header) + #Strip first binary header + font=font[6]; + end + if header && (font[info['length1']][0] == 128) + #Strip second binary header + font=font[0..info['length1']] + font[info['length1']+6]; + end + end + out('<>'); + open(getfontpath(file),'rb') do |f| + putstream(font) + end + out('endobj'); + end + @fonts.each do |k, font| + #Font objects + @fonts[k]['n']=@n+1; + type = font['type']; + name = font['name']; + if (type=='core') + #Standard font + newobj(); + out('<>'); + out('endobj'); + elsif type == 'Type0' + putType0(font) + elsif (type=='Type1' || type=='TrueType') + #Additional Type1 or TrueType font + newobj(); + out('<>'); + out('endobj'); + #Widths + newobj(); + cw=font['cw']; # & + s='['; + 32.upto(255) do |i| + s << cw[i.chr] + ' '; + end + out(s + ']'); + out('endobj'); + #Descriptor + newobj(); + s='<>'); + out('endobj'); + else + #Allow for additional types + mtd='put' + type.downcase; + if (!self.respond_to?(mtd)) + Error('Unsupported font type: ' + type) + else + self.send(mtd,font) + end + end + end + end + + def putType0(font) + #Type0 + out('<>') + out('endobj') + #CIDFont + newobj() + out('<>') + out('/FontDescriptor '+(@n+1).to_s+' 0 R') + w='/W [1 [' + font['cw'].keys.sort.each {|key| + w+=font['cw'][key].to_s + " " +# ActionController::Base::logger.debug key.to_s +# ActionController::Base::logger.debug font['cw'][key].to_s + } + out(w+'] 231 325 500 631 [500] 326 389 500]') + out('>>') + out('endobj') + #Font descriptor + newobj() + out('<>') + out('endobj') + end + + # + # putimages + # @access protected + # + def putimages() + filter=(@compress) ? '/Filter /FlateDecode ' : ''; + @images.each do |file, info| # was while(list(file, info)=each(@images)) + newobj(); + @images[file]['n']=@n; + out('<>'); + putstream(info['data']); + @images[file]['data']=nil + out('endobj'); + #Palette + if (info['cs']=='Indexed') + newobj(); + pal=(@compress) ? gzcompress(info['pal']) : :info['pal']; + out('<<' + filter + '/Length ' + pal.length.to_s + '>>'); + putstream(pal); + out('endobj'); + end + end + end + + # + # putxobjectdict + # @access protected + # + def putxobjectdict() + @images.each_value do |image| + out('/I' + image['i'].to_s + ' ' + image['n'].to_s + ' 0 R'); + end + end + + # + # putresourcedict + # @access protected + # + def putresourcedict() + out('/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]'); + out('/Font <<'); + @fonts.each_value do |font| + out('/F' + font['i'].to_s + ' ' + font['n'].to_s + ' 0 R'); + end + out('>>'); + out('/XObject <<'); + putxobjectdict(); + out('>>'); + end + + # + # putresources + # @access protected + # + def putresources() + putfonts(); + putimages(); + #Resource dictionary + @offsets[2]=@buffer.length; + out('2 0 obj'); + out('<<'); + putresourcedict(); + out('>>'); + out('endobj'); + end + + # + # putinfo + # @access protected + # + def putinfo() + out('/Producer ' + textstring(PDF_PRODUCER)); + if (!@title.nil?) + out('/Title ' + textstring(@title)); + end + if (!@subject.nil?) + out('/Subject ' + textstring(@subject)); + end + if (!@author.nil?) + out('/Author ' + textstring(@author)); + end + if (!@keywords.nil?) + out('/Keywords ' + textstring(@keywords)); + end + if (!@creator.nil?) + out('/Creator ' + textstring(@creator)); + end + out('/CreationDate ' + textstring('D:' + Time.now.strftime('%Y%m%d%H%M%S'))); + end + + # + # putcatalog + # @access protected + # + def putcatalog() + out('/Type /Catalog'); + out('/Pages 1 0 R'); + if (@zoom_mode=='fullpage') + out('/OpenAction [3 0 R /Fit]'); + elsif (@zoom_mode=='fullwidth') + out('/OpenAction [3 0 R /FitH null]'); + elsif (@zoom_mode=='real') + out('/OpenAction [3 0 R /XYZ null null 1]'); + elsif (!@zoom_mode.is_a?(String)) + out('/OpenAction [3 0 R /XYZ null null ' + (@zoom_mode/100) + ']'); + end + if (@layout_mode=='single') + out('/PageLayout /SinglePage'); + elsif (@layout_mode=='continuous') + out('/PageLayout /OneColumn'); + elsif (@layout_mode=='two') + out('/PageLayout /TwoColumnLeft'); + end + end + + # + # puttrailer + # @access protected + # + def puttrailer() + out('/Size ' + (@n+1).to_s); + out('/Root ' + @n.to_s + ' 0 R'); + out('/Info ' + (@n-1).to_s + ' 0 R'); + end + + # + # putheader + # @access protected + # + def putheader() + out('%PDF-' + @pdf_version); + end + + # + # enddoc + # @access protected + # + def enddoc() + putheader(); + putpages(); + putresources(); + #Info + newobj(); + out('<<'); + putinfo(); + out('>>'); + out('endobj'); + #Catalog + newobj(); + out('<<'); + putcatalog(); + out('>>'); + out('endobj'); + #Cross-ref + o=@buffer.length; + out('xref'); + out('0 ' + (@n+1).to_s); + out('0000000000 65535 f '); + 1.upto(@n) do |i| + out(sprintf('%010d 00000 n ',@offsets[i])); + end + #Trailer + out('trailer'); + out('<<'); + puttrailer(); + out('>>'); + out('startxref'); + out(o); + out('%%EOF'); + @state=3; + end + + # + # beginpage + # @access protected + # + def beginpage(orientation) + @page += 1; + @pages[@page]=''; + @state=2; + @x=@l_margin; + @y=@t_margin; + @font_family=''; + #Page orientation + if (orientation.empty?) + orientation=@def_orientation; + else + orientation.upcase! + if (orientation!=@def_orientation) + @orientation_changes[@page]=true; + end + end + if (orientation!=@cur_orientation) + #Change orientation + if (orientation=='P') + @w_pt=@fw_pt; + @h_pt=@fh_pt; + @w=@fw; + @h=@fh; + else + @w_pt=@fh_pt; + @h_pt=@fw_pt; + @w=@fh; + @h=@fw; + end + @page_break_trigger=@h-@b_margin; + @cur_orientation = orientation; + end + end + + # + # End of page contents + # @access protected + # + def endpage() + @state=1; + end + + # + # Begin a new object + # @access protected + # + def newobj() + @n += 1; + @offsets[@n]=@buffer.length; + out(@n.to_s + ' 0 obj'); + end + + # + # Underline text + # @access protected + # + def dounderline(x, y, txt) + up = @current_font['up']; + ut = @current_font['ut']; + w = GetStringWidth(txt) + @ws * txt.count(' '); + sprintf('%.2f %.2f %.2f %.2f re f', x * @k, (@h - (y - up / 1000.0 * @font_size)) * @k, w * @k, -ut / 1000.0 * @font_size_pt); + end + + # + # Extract info from a JPEG file + # @access protected + # + def parsejpg(file) + a=getimagesize(file); + if (a.empty?) + Error('Missing or incorrect image file: ' + file); + end + if (a[2]!='JPEG') + Error('Not a JPEG file: ' + file); + end + if (a['channels'].nil? or a['channels']==3) + colspace='DeviceRGB'; + elsif (a['channels']==4) + colspace='DeviceCMYK'; + else + colspace='DeviceGray'; + end + bpc=!a['bits'].nil? ? a['bits'] : 8; + #Read whole file + data=''; + open(file,'rb') do |f| + data< a[0],'h' => a[1],'cs' => colspace,'bpc' => bpc,'f'=>'DCTDecode','data' => data} + end + + # + # Extract info from a PNG file + # @access protected + # + def parsepng(file) + f=open(file,'rb'); + #Check signature + if (f.read(8)!=137.chr + 'PNG' + 13.chr + 10.chr + 26.chr + 10.chr) + Error('Not a PNG file: ' + file); + end + #Read header chunk + f.read(4); + if (f.read(4)!='IHDR') + Error('Incorrect PNG file: ' + file); + end + w=freadint(f); + h=freadint(f); + bpc=f.read(1)[0]; + if (bpc>8) + Error('16-bit depth not supported: ' + file); + end + ct=f.read(1)[0]; + if (ct==0) + colspace='DeviceGray'; + elsif (ct==2) + colspace='DeviceRGB'; + elsif (ct==3) + colspace='Indexed'; + else + Error('Alpha channel not supported: ' + file); + end + if (f.read(1)[0] != 0) + Error('Unknown compression method: ' + file); + end + if (f.read(1)[0]!=0) + Error('Unknown filter method: ' + file); + end + if (f.read(1)[0]!=0) + Error('Interlacing not supported: ' + file); + end + f.read(4); + parms='/DecodeParms <>'; + #Scan chunks looking for palette, transparency and image data + pal=''; + trns=''; + data=''; + begin + n=freadint(f); + type=f.read(4); + if (type=='PLTE') + #Read palette + pal=f.read( n); + f.read(4); + elsif (type=='tRNS') + #Read transparency info + t=f.read( n); + if (ct==0) + trns = t[1][0] + elsif (ct==2) + trns = t[[1][0], t[3][0], t[5][0]] + else + pos=t.include?(0.chr); + if (pos!=false) + trns = [pos] + end + end + f.read(4); + elsif (type=='IDAT') + #Read image data block + data< w, 'h' => h, 'cs' => colspace, 'bpc' => bpc, 'f'=>'FlateDecode', 'parms' => parms, 'pal' => pal, 'trns' => trns, 'data' => data} + end + + # + # Read a 4-byte integer from file + # @access protected + # + def freadint(f) + # Read a 4-byte integer from file + a = f.read(4).unpack('N') + return a[0] + end + + # + # Format a text string + # @access protected + # + def textstring(s) + if (@is_unicode) + #Convert string to UTF-16BE + s = UTF8ToUTF16BE(s, true); + end + return '(' + escape(s) + ')'; + end + + # + # Format a text string + # @access protected + # + def escapetext(s) + if (@is_unicode) + #Convert string to UTF-16BE + s = UTF8ToUTF16BE(s, false); + end + return escape(s); + end + + # + # Add \ before \, ( and ) + # @access protected + # + def escape(s) + # Add \ before \, ( and ) + s.gsub('\\','\\\\\\').gsub('(','\\(').gsub(')','\\)').gsub(13.chr, '\r') + end + + # + # + # @access protected + # + def putstream(s) + out('stream'); + out(s); + out('endstream'); + end + + # + # Add a line to the document + # @access protected + # + def out(s) + if (@state==2) + @pages[@page] << s.to_s + "\n"; + else + @buffer << s.to_s + "\n"; + end + end + + # + # Adds unicode fonts.
    + # Based on PDF Reference 1.3 (section 5) + # @access protected + # @author Nicola Asuni + # @since 1.52.0.TC005 (2005-01-05) + # + def puttruetypeunicode(font) + # Type0 Font + # A composite font composed of other fonts, organized hierarchically + newobj(); + out('<>'); + out('endobj'); + + # CIDFontType2 + # A CIDFont whose glyph descriptions are based on TrueType font technology + newobj(); + out('<>'); + out('endobj'); + + # ToUnicode + # is a stream object that contains the definition of the CMap + # (PDF Reference 1.3 chap. 5.9) + newobj(); + out('<>'); + out('stream'); + out('/CIDInit /ProcSet findresource begin'); + out('12 dict begin'); + out('begincmap'); + out('/CIDSystemInfo'); + out('<> def'); + out('/CMapName /Adobe-Identity-UCS def'); + out('/CMapType 2 def'); + out('1 begincodespacerange'); + out('<0000> '); + out('endcodespacerange'); + out('1 beginbfrange'); + out('<0000> <0000>'); + out('endbfrange'); + out('endcmap'); + out('CMapName currentdict /CMap defineresource pop'); + out('end'); + out('end'); + out('endstream'); + out('endobj'); + + # CIDSystemInfo dictionary + # A dictionary containing entries that define the character collection of the CIDFont. + newobj(); + out('<>'); + out('endobj'); + + # Font descriptor + # A font descriptor describing the CIDFont default metrics other than its glyph widths + newobj(); + out('<>'); + out('endobj'); + + # Embed CIDToGIDMap + # A specification of the mapping from CIDs to glyph indices + newobj(); + ctgfile = getfontpath(font['ctg']) + if (!ctgfile) + Error('Font file not found: ' + ctgfile); + end + size = File.size(ctgfile); + out('<>'); + open(ctgfile, "rb") do |f| + putstream(f.read()) + end + out('endobj'); + end + + # + # Converts UTF-8 strings to codepoints array.
    + # Invalid byte sequences will be replaced with 0xFFFD (replacement character)
    + # Based on: http://www.faqs.org/rfcs/rfc3629.html + #
    +	# 	  Char. number range  |        UTF-8 octet sequence
    +	#       (hexadecimal)    |              (binary)
    +	#    --------------------+-----------------------------------------------
    +	#    0000 0000-0000 007F | 0xxxxxxx
    +	#    0000 0080-0000 07FF | 110xxxxx 10xxxxxx
    +	#    0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
    +	#    0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    +	#    ---------------------------------------------------------------------
    +	#
    +	#   ABFN notation:
    +	#   ---------------------------------------------------------------------
    +	#   UTF8-octets =#( UTF8-char )
    +	#   UTF8-char   = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4
    +	#   UTF8-1      = %x00-7F
    +	#   UTF8-2      = %xC2-DF UTF8-tail
    +	#
    +	#   UTF8-3      = %xE0 %xA0-BF UTF8-tail / %xE1-EC 2( UTF8-tail ) /
    +	#                 %xED %x80-9F UTF8-tail / %xEE-EF 2( UTF8-tail )
    +	#   UTF8-4      = %xF0 %x90-BF 2( UTF8-tail ) / %xF1-F3 3( UTF8-tail ) /
    +	#                 %xF4 %x80-8F 2( UTF8-tail )
    +	#   UTF8-tail   = %x80-BF
    +	#   ---------------------------------------------------------------------
    +	# 
    + # @param string :str string to process. + # @return array containing codepoints (UTF-8 characters values) + # @access protected + # @author Nicola Asuni + # @since 1.53.0.TC005 (2005-01-05) + # + def UTF8StringToArray(str) + if (!@is_unicode) + return str; # string is not in unicode + end + + unicode = [] # array containing unicode values + bytes = [] # array containing single character byte sequences + numbytes = 1; # number of octetc needed to represent the UTF-8 character + + str = str.to_s; # force :str to be a string + + str.each_byte do |char| + if (bytes.length == 0) # get starting octect + if (char <= 0x7F) + unicode << char # use the character "as is" because is ASCII + numbytes = 1 + elsif ((char >> 0x05) == 0x06) # 2 bytes character (0x06 = 110 BIN) + bytes << ((char - 0xC0) << 0x06) + numbytes = 2 + elsif ((char >> 0x04) == 0x0E) # 3 bytes character (0x0E = 1110 BIN) + bytes << ((char - 0xE0) << 0x0C) + numbytes = 3 + elsif ((char >> 0x03) == 0x1E) # 4 bytes character (0x1E = 11110 BIN) + bytes << ((char - 0xF0) << 0x12) + numbytes = 4 + else + # use replacement character for other invalid sequences + unicode << 0xFFFD + bytes = [] + numbytes = 1 + end + elsif ((char >> 0x06) == 0x02) # bytes 2, 3 and 4 must start with 0x02 = 10 BIN + bytes << (char - 0x80) + if (bytes.length == numbytes) + # compose UTF-8 bytes to a single unicode value + char = bytes[0] + 1.upto(numbytes-1) do |j| + char += (bytes[j] << ((numbytes - j - 1) * 0x06)) + end + if (((char >= 0xD800) and (char <= 0xDFFF)) or (char >= 0x10FFFF)) + # The definition of UTF-8 prohibits encoding character numbers between + # U+D800 and U+DFFF, which are reserved for use with the UTF-16 + # encoding form (as surrogate pairs) and do not directly represent + # characters + unicode << 0xFFFD; # use replacement character + else + unicode << char; # add char to array + end + # reset data for next char + bytes = [] + numbytes = 1; + end + else + # use replacement character for other invalid sequences + unicode << 0xFFFD; + bytes = [] + numbytes = 1; + end + end + return unicode; + end + + # + # Converts UTF-8 strings to UTF16-BE.
    + # Based on: http://www.faqs.org/rfcs/rfc2781.html + #
    +	#   Encoding UTF-16:
    +	# 
    +		#   Encoding of a single character from an ISO 10646 character value to
    +	#    UTF-16 proceeds as follows. Let U be the character number, no greater
    +	#    than 0x10FFFF.
    +	# 
    +	#    1) If U < 0x10000, encode U as a 16-bit unsigned integer and
    +	#       terminate.
    +	# 
    +	#    2) Let U' = U - 0x10000. Because U is less than or equal to 0x10FFFF,
    +	#       U' must be less than or equal to 0xFFFFF. That is, U' can be
    +	#       represented in 20 bits.
    +	# 
    +	#    3) Initialize two 16-bit unsigned integers, W1 and W2, to 0xD800 and
    +	#       0xDC00, respectively. These integers each have 10 bits free to
    +	#       encode the character value, for a total of 20 bits.
    +	# 
    +	#    4) Assign the 10 high-order bits of the 20-bit U' to the 10 low-order
    +	#       bits of W1 and the 10 low-order bits of U' to the 10 low-order
    +	#       bits of W2. Terminate.
    +	# 
    +	#    Graphically, steps 2 through 4 look like:
    +	#    U' = yyyyyyyyyyxxxxxxxxxx
    +	#    W1 = 110110yyyyyyyyyy
    +	#    W2 = 110111xxxxxxxxxx
    +	# 
    + # @param string :str string to process. + # @param boolean :setbom if true set the Byte Order Mark (BOM = 0xFEFF) + # @return string + # @access protected + # @author Nicola Asuni + # @since 1.53.0.TC005 (2005-01-05) + # @uses UTF8StringToArray + # + def UTF8ToUTF16BE(str, setbom=true) + if (!@is_unicode) + return str; # string is not in unicode + end + outstr = ""; # string to be returned + unicode = UTF8StringToArray(str); # array containing UTF-8 unicode values + numitems = unicode.length; + + if (setbom) + outstr << "\xFE\xFF"; # Byte Order Mark (BOM) + end + unicode.each do |char| + if (char == 0xFFFD) + outstr << "\xFF\xFD"; # replacement character + elsif (char < 0x10000) + outstr << (char >> 0x08).chr; + outstr << (char & 0xFF).chr; + else + char -= 0x10000; + w1 = 0xD800 | (char >> 0x10); + w2 = 0xDC00 | (char & 0x3FF); + outstr << (w1 >> 0x08).chr; + outstr << (w1 & 0xFF).chr; + outstr << (w2 >> 0x08).chr; + outstr << (w2 & 0xFF).chr; + end + end + return outstr; + end + + # ==================================================== + + # + # Set header font. + # @param array :font font + # @since 1.1 + # + def SetHeaderFont(font) + @header_font = font; + end + alias_method :set_header_font, :SetHeaderFont + + # + # Set footer font. + # @param array :font font + # @since 1.1 + # + def SetFooterFont(font) + @footer_font = font; + end + alias_method :set_footer_font, :SetFooterFont + + # + # Set language array. + # @param array :language + # @since 1.1 + # + def SetLanguageArray(language) + @l = language; + end + alias_method :set_language_array, :SetLanguageArray + # + # Set document barcode. + # @param string :bc barcode + # + def SetBarcode(bc="") + @barcode = bc; + end + + # + # Print Barcode. + # @param int :x x position in user units + # @param int :y y position in user units + # @param int :w width in user units + # @param int :h height position in user units + # @param string :type type of barcode (I25, C128A, C128B, C128C, C39) + # @param string :style barcode style + # @param string :font font for text + # @param int :xres x resolution + # @param string :code code to print + # + def writeBarcode(x, y, w, h, type, style, font, xres, code) + require(File.dirname(__FILE__) + "/barcode/barcode.rb"); + require(File.dirname(__FILE__) + "/barcode/i25object.rb"); + require(File.dirname(__FILE__) + "/barcode/c39object.rb"); + require(File.dirname(__FILE__) + "/barcode/c128aobject.rb"); + require(File.dirname(__FILE__) + "/barcode/c128bobject.rb"); + require(File.dirname(__FILE__) + "/barcode/c128cobject.rb"); + + if (code.empty?) + return; + end + + if (style.empty?) + style = BCS_ALIGN_LEFT; + style |= BCS_IMAGE_PNG; + style |= BCS_TRANSPARENT; + #:style |= BCS_BORDER; + #:style |= BCS_DRAW_TEXT; + #:style |= BCS_STRETCH_TEXT; + #:style |= BCS_REVERSE_COLOR; + end + if (font.empty?) then font = BCD_DEFAULT_FONT; end + if (xres.empty?) then xres = BCD_DEFAULT_XRES; end + + scale_factor = 1.5 * xres * @k; + bc_w = (w * scale_factor).round #width in points + bc_h = (h * scale_factor).round #height in points + + case (type.upcase) + when "I25" + obj = I25Object.new(bc_w, bc_h, style, code); + when "C128A" + obj = C128AObject.new(bc_w, bc_h, style, code); + when "C128B" + obj = C128BObject.new(bc_w, bc_h, style, code); + when "C128C" + obj = C128CObject.new(bc_w, bc_h, style, code); + when "C39" + obj = C39Object.new(bc_w, bc_h, style, code); + end + + obj.SetFont(font); + obj.DrawObject(xres); + + #use a temporary file.... + tmpName = tempnam(@@k_path_cache,'img'); + imagepng(obj.getImage(), tmpName); + Image(tmpName, x, y, w, h, 'png'); + obj.DestroyObject(); + obj = nil + unlink(tmpName); + end + + # + # Returns the PDF data. + # + def GetPDFData() + if (@state < 3) + Close(); + end + return @buffer; + end + + # --- HTML PARSER FUNCTIONS --- + + # + # Allows to preserve some HTML formatting.
    + # Supports: h1, h2, h3, h4, h5, h6, b, u, i, a, img, p, br, strong, em, font, blockquote, li, ul, ol, hr, td, th, tr, table, sup, sub, small + # @param string :html text to display + # @param boolean :ln if true add a new line after text (default = true) + # @param int :fill Indicates if the background must be painted (1) or transparent (0). Default value: 0. + # + def writeHTML(html, ln=true, fill=0, h=0) + + @lasth = h if h > 0 + if (@lasth == 0) + #set row height + @lasth = @font_size * @@k_cell_height_ratio; + end + + @href = nil + @style = {} + html.gsub!(/[\t\r\n\f]/, "")#\0\x0B + html.split(/(<[^>]+>)/).each do |element| + if "<" == element[0,1] + #Tag + if (element[1, 1] == '/') + closedHTMLTagHandler(element[2..-2].downcase); + else + #Extract attributes + # get tag name + tag = element.scan(/([a-zA-Z0-9]*)/).flatten.delete_if {|x| x.length == 0} + tag = tag[0].downcase; + + # get attributes + attr_array = element.scan(/([^=\s]*)=["\']?([^"\']*)["\']?/) + attrs = {} + attr_array.each do |name, value| + attrs[name.downcase] = value; + end + openHTMLTagHandler(tag, attrs, fill); + end + + else + #Text + if (@href) + addHtmlLink(@href, element, fill); + elsif (@tdbegin) + if ((element.strip.length > 0) and (element != " ")) + Cell(@tdwidth, @tdheight, unhtmlentities(element.strip), @tableborder, 0, @tdalign, @tdfill); + elsif (element == " ") + Cell(@tdwidth, @tdheight, '', @tableborder, 0, @tdalign, @tdfill); + end + elsif ((element.strip.length > 0) and (element != " ")) + Write(@lasth, unhtmlentities(element), '', fill); + end + end + end + + if (ln) + Ln(@lasth); + end + end + alias_method :write_html, :writeHTML + + # + # Prints a cell (rectangular area) with optional borders, background color and html text string. The upper-left corner of the cell corresponds to the current position. After the call, the current position moves to the right or to the next line.
    + # If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting. + # @param float :w Cell width. If 0, the cell extends up to the right margin. + # @param float :h Cell minimum height. The cell extends automatically if needed. + # @param float :x upper-left corner X coordinate + # @param float :y upper-left corner Y coordinate + # @param string :html html text to print. Default value: empty string. + # @param mixed :border Indicates if borders must be drawn around the cell. The value can be either a number:
    • 0: no border (default)
    • 1: frame
    or a string containing some or all of the following characters (in any order):
    • L: left
    • T: top
    • R: right
    • B: bottom
    + # @param int :ln Indicates where the current position should go after the call. Possible values are:
    • 0: to the right
    • 1: to the beginning of the next line
    • 2: below
    +# Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0. + # @param int :fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0. + # @see Cell() + # + def writeHTMLCell(w, h, x, y, html='', border=0, ln=0, fill=0) + + if (@lasth == 0) + #set row height + @lasth = @font_size * @@k_cell_height_ratio; + end + + if (x == 0) + x = GetX(); + end + if (y == 0) + y = GetY(); + end + + # get current page number + pagenum = @page; + + SetX(x); + SetY(y); + + if (w == 0) + w = @fw - x - @r_margin; + end + + # store original margin values + l_margin = @l_margin; + r_margin = @r_margin; + + # set new margin values + SetLeftMargin(x); + SetRightMargin(@fw - x - w); + + # calculate remaining vertical space on page + restspace = GetPageHeight() - GetY() - GetBreakMargin(); + + writeHTML(html, true, fill); # write html text + + currentY = GetY(); + + # check if a new page has been created + if (@page > pagenum) + # design a cell around the text on first page + currentpage = @page; + @page = pagenum; + SetY(GetPageHeight() - restspace - GetBreakMargin()); + h = restspace - 1; + Cell(w, h, "", border, ln, 'L', 0); + # design a cell around the text on last page + @page = currentpage; + h = currentY - @t_margin; + SetY(@t_margin); # put cursor at the beginning of text + Cell(w, h, "", border, ln, 'L', 0); + else + h = [h, (currentY - y)].max; + SetY(y); # put cursor at the beginning of text + # design a cell around the text + Cell(w, h, "", border, ln, 'L', 0); + end + + # restore original margin values + SetLeftMargin(l_margin); + SetRightMargin(r_margin); + + if (ln) + Ln(0); + end + end + alias_method :write_html_cell, :writeHTMLCell + + # + # Process opening tags. + # @param string :tag tag name (in upcase) + # @param string :attr tag attribute (in upcase) + # @param int :fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0. + # @access private + # + def openHTMLTagHandler(tag, attrs, fill=0) + #Opening tag + case (tag) + when 'table' + if attrs['border'].nil? or attrs['border'] == '' + @tableborder = 0; + else + @tableborder = attrs['border']; + end + when 'tr', 'td', 'th' + # SetStyle('b', true) if tag == 'th' + + if ((!attrs['width'].nil?) and (attrs['width'] != '')) + @tdwidth = (attrs['width'].to_i/4); + else + @tdwidth = ((@w - @l_margin - @r_margin) / @default_table_columns); + end + if ((!attrs['height'].nil?) and (attrs['height'] != '')) + @tdheight=(attrs['height'].to_i / @k); + else + @tdheight = @lasth; + end + if ((!attrs['align'].nil?) and (attrs['align'] != '')) + case (attrs['align']) + when 'center' + @tdalign = "C"; + when 'right' + @tdalign = "R"; + when 'left' + @tdalign = "L"; + end + end + if ((!attrs['bgcolor'].nil?) and (attrs['bgcolor'] != '')) + coul = convertColorHexToDec(attrs['bgcolor']); + SetFillColor(coul['R'], coul['G'], coul['B']); + @tdfill=1; + end + @tdbegin=true; + + when 'hr' + Ln(); + if ((!attrs['width'].nil?) and (attrs['width'] != '')) + hrWidth = attrs['width']; + else + hrWidth = @w - @l_margin - @r_margin; + end + x = GetX(); + y = GetY(); + SetLineWidth(0.2); + Line(x, y, x + hrWidth, y); + SetLineWidth(0.2); + Ln(); + + when 'strong' + SetStyle('b', true); + + when 'em' + SetStyle('i', true); + + when 'b', 'i', 'u' + SetStyle(tag, true); + + when 'a' + @href = attrs['href']; + + when 'img' + if (!attrs['src'].nil?) + # replace relative path with real server path + attrs['src'] = attrs['src'].gsub(@@k_path_url_cache, @@k_path_cache); + if (attrs['width'].nil?) + attrs['width'] = 0; + end + if (attrs['height'].nil?) + attrs['height'] = 0; + end + + Image(attrs['src'], GetX(),GetY(), pixelsToMillimeters(attrs['width']), pixelsToMillimeters(attrs['height'])); + #SetX(@img_rb_x); + SetY(@img_rb_y); + + end + + when 'ul' + @listordered = false; + @listcount = 0; + + when 'ol' + @listordered = true; + @listcount = 0; + + when 'li' + Ln(); + if (@listordered) + @listcount += 1 + @lispacer = " " + (@listcount).to_s + ". "; + else + #unordered list simbol + @lispacer = " - "; + end + Write(@lasth, @lispacer, '', fill); + + when 'blockquote', 'br' + Ln(); + if (@lispacer.length > 0) + @x += GetStringWidth(@lispacer); + end + + when 'p' + Ln(); + Ln(); + + when 'sup' + currentfont_size = @font_size; + @tempfontsize = @font_size_pt; + SetFontSize(@font_size_pt * @@k_small_ratio); + SetXY(GetX(), GetY() - ((currentfont_size - @font_size)*(@@k_small_ratio))); + + when 'sub' + currentfont_size = @font_size; + @tempfontsize = @font_size_pt; + SetFontSize(@font_size_pt * @@k_small_ratio); + SetXY(GetX(), GetY() + ((currentfont_size - @font_size)*(@@k_small_ratio))); + + when 'small' + currentfont_size = @font_size; + @tempfontsize = @font_size_pt; + SetFontSize(@font_size_pt * @@k_small_ratio); + SetXY(GetX(), GetY() + ((currentfont_size - @font_size)/3)); + + when 'font' + if (!attrs['color'].nil? and attrs['color']!='') + coul = convertColorHexToDec(attrs['color']); + SetTextColor(coul['R'], coul['G'], coul['B']); + @issetcolor=true; + end + if (!attrs['face'].nil? and @fontlist.include?(attrs['face'].downcase)) + SetFont(attrs['face'].downcase); + @issetfont=true; + end + if (!attrs['size'].nil?) + headsize = attrs['size'].to_i; + else + headsize = 0; + end + currentfont_size = @font_size; + @tempfontsize = @font_size_pt; + SetFontSize(@font_size_pt + headsize); + @lasth = @font_size * @@k_cell_height_ratio; + + when 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' + headsize = (4 - tag[1,1].to_f) * 2 + @tempfontsize = @font_size_pt; + SetFontSize(@font_size_pt + headsize); + SetStyle('b', true); + @lasth = @font_size * @@k_cell_height_ratio; + + end + end + + # + # Process closing tags. + # @param string :tag tag name (in upcase) + # @access private + # + def closedHTMLTagHandler(tag) + #Closing tag + case (tag) + when 'td','th' + @tdbegin = false; + @tdwidth = 0; + @tdheight = 0; + @tdalign = "L"; + @tdfill = 0; + SetFillColor(@prevfill_color[0], @prevfill_color[1], @prevfill_color[2]); + + when 'tr' + Ln(); + + when 'table' + @tableborder=0; + + when 'strong' + SetStyle('b', false); + + when 'em' + SetStyle('i', false); + + when 'b', 'i', 'u' + SetStyle(tag, false); + + when 'a' + @href = nil; + + when 'sup' + currentfont_size = @font_size; + SetFontSize(@tempfontsize); + @tempfontsize = @font_size_pt; + SetXY(GetX(), GetY() - ((currentfont_size - @font_size)*(@@k_small_ratio))); + + when 'sub' + currentfont_size = @font_size; + SetFontSize(@tempfontsize); + @tempfontsize = @font_size_pt; + SetXY(GetX(), GetY() + ((currentfont_size - @font_size)*(@@k_small_ratio))); + + when 'small' + currentfont_size = @font_size; + SetFontSize(@tempfontsize); + @tempfontsize = @font_size_pt; + SetXY(GetX(), GetY() - ((@font_size - currentfont_size)/3)); + + when 'font' + if (@issetcolor == true) + SetTextColor(@prevtext_color[0], @prevtext_color[1], @prevtext_color[2]); + end + if (@issetfont) + @font_family = @prevfont_family; + @font_style = @prevfont_style; + SetFont(@font_family); + @issetfont = false; + end + currentfont_size = @font_size; + SetFontSize(@tempfontsize); + @tempfontsize = @font_size_pt; + #@text_color = @prevtext_color; + @lasth = @font_size * @@k_cell_height_ratio; + + when 'ul' + Ln(); + + when 'ol' + Ln(); + + when 'li' + @lispacer = ""; + + when 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' + SetFontSize(@tempfontsize); + @tempfontsize = @font_size_pt; + SetStyle('b', false); + Ln(); + @lasth = @font_size * @@k_cell_height_ratio; + + end + end + + # + # Sets font style. + # @param string :tag tag name (in lowercase) + # @param boolean :enable + # @access private + # + def SetStyle(tag, enable) + #Modify style and select corresponding font + style=''; + ['b', 'i', 'u'].each do |s| + style << s if tag.downcase == s and enable + end + SetFont('', style); + end + + # + # Output anchor link. + # @param string :url link URL + # @param string :name link name + # @param int :fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0. + # @access public + # + def addHtmlLink(url, name, fill=0) + #Put a hyperlink + SetTextColor(0, 0, 255); + SetStyle('u', true); + Write(@lasth, name, url, fill); + SetStyle('u', false); + SetTextColor(0); + end + + # + # Returns an associative array (keys: R,G,B) from + # a hex html code (e.g. #3FE5AA). + # @param string :color hexadecimal html color [#rrggbb] + # @return array + # @access private + # + def convertColorHexToDec(color = "#000000") + tbl_color = {} + tbl_color['R'] = color[1,2].hex.to_i; + tbl_color['G'] = color[3,2].hex.to_i; + tbl_color['B'] = color[5,2].hex.to_i; + return tbl_color; + end + + # + # Converts pixels to millimeters in 72 dpi. + # @param int :px pixels + # @return float millimeters + # @access private + # + def pixelsToMillimeters(px) + return px.to_f * 25.4 / 72; + end + + # + # Reverse function for htmlentities. + # Convert entities in UTF-8. + # + # @param :text_to_convert Text to convert. + # @return string converted + # + def unhtmlentities(string) + if @@decoder.nil? + CGI.unescapeHTML(string) + else + @@decoder.decode(string) + end + end + +end # END OF CLASS + +#TODO 2007-05-25 (EJM) Level=0 - +#Handle special IE contype request +# if (!_SERVER['HTTP_USER_AGENT'].nil? and (_SERVER['HTTP_USER_AGENT']=='contype')) +# header('Content-Type: application/pdf'); +# exit; +# } diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/logo_example.png Binary file vendor/plugins/rfpdf/logo_example.png has changed diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/test/.svn/all-wcprops --- a/vendor/plugins/rfpdf/test/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 48 -/svn/!svn/ver/67/trunk/vendor/plugins/rfpdf/test -END -test_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/67/trunk/vendor/plugins/rfpdf/test/test_helper.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/test/.svn/entries --- a/vendor/plugins/rfpdf/test/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/rfpdf/test/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/rfpdf/test +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/rfpdf/test http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.855835Z +2011-07-14T09:28:10.000000Z 65b672e3025a6dc9ed22dc2cb1356061 2006-11-21T18:34:04.275680Z 49 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/test_unicode.rfpdf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/test_unicode.rfpdf Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,115 @@ +<% + doc_title = "test title"; + doc_subject = "test description"; + doc_keywords = "test keywords"; + htmlcontent = "< € € € & è è © >

    heading 1

    heading 2

    heading 3

    heading 4

    heading 5
    heading 6
    ordered list:
    1. bold text
    2. italic text
    3. underlined text
    4. link to http://www.tecnick.com
    5. test break
      second line
      third line
    6. font + 3
    7. small text
    8. normal subscript superscript

    9. table:
      #AB
      1A1B1
      2A2 € € € & è è B2
      3A3B3

      image:
      \"test"; + + + # ENGLISH + + @l = {} + + # PAGE META DESCRIPTORS -------------------------------------- + + @l['a_meta_charset'] = "UTF-8"; + @l['a_meta_dir'] = "ltr"; + @l['a_meta_language'] = "en"; + + # TRANSLATIONS -------------------------------------- + @l['w_page'] = "page"; + + + # create new PDF document (document units are set by default to millimeters) + pdf = TCPDF.new + + # set document information + pdf.SetCreator("TCPDF"); + pdf.SetAuthor("TCPDF"); + pdf.SetTitle(doc_title); + pdf.SetSubject(doc_subject); + pdf.SetKeywords(doc_keywords); + + pdf.SetHeaderData("#{File.join(RAILS_ROOT, 'public')}/logo_example.png", 20, "header title", "first row\nsecond row\nthird row"); + + #set margins + pdf.SetMargins(15, 27, 15); + #set auto page breaks + pdf.SetAutoPageBreak(true, 25); + pdf.SetPrintHeader + pdf.SetPrintFooter + pdf.SetHeaderMargin(5); + pdf.SetFooterMargin(10); + pdf.SetImageScale(4); #set image scale factor + + pdf.SetHeaderFont(["FreeSans", '', 10]); + pdf.SetFooterFont(["FreeSans", '', 8]); + + pdf.SetLanguageArray(@l); #set language items + + + #initialize document + pdf.alias_nb_pages(); + + pdf.AddPage(); + + # set barcode + # pdf.SetBarcode(Time.now.strftime("Y-m-d H:i:s")); + + # output some HTML code + pdf.SetFont("vera", "", 10); + + pdf.writeHTML(htmlcontent, true, 0); + + # output two html columns + first_column_width = 80; + current_y_position = pdf.GetY(); + pdf.writeHTMLCell(first_column_width, 0, 0, current_y_position, "hello", 0, 0, 0); + pdf.writeHTMLCell(0, 0, first_column_width, current_y_position, "world", 0, 1, 0); + + # output some content + pdf.SetFont("vera", "BI", 20); + pdf.Cell(0,10,"TEST Bold-Italic Cell",1,1,'C'); + + # output some UTF-8 test content + pdf.AddPage(); + pdf.SetFont("FreeSans", "", 12); + utf8text = open(File.join(RAILS_ROOT, 'vendor/plugins/rfpdf',"utf8test.txt"), "rb").read; # get utf-8 text form file + pdf.SetFillColor(230, 240, 255, true); + pdf.Write(5, utf8text, '', 1); + + # remove page header/footer + pdf.SetPrintHeader(false); + pdf.SetPrintFooter(false); + + # Two HTML columns test + pdf.AddPage(); + right_column = "right column right column right column right column right column + right column right column right column right column right column right column + right column right column right column right column right column right column"; + left_column = "left column left column left column left column left column left + column left column left column left column left column left column left column + left column left column left column left column left column left column left + column"; + first_column_width = 80; + second_column_width = 80; + column_space = 20; + current_y_position = pdf.GetY(); + pdf.writeHTMLCell(first_column_width, 0, 0, 0, left_column, 1, 0, 0); + pdf.Cell(0); + pdf.writeHTMLCell(second_column_width, 0, first_column_width+column_space, current_y_position, right_column, 0, 0, 0); + + # add page header/footer + pdf.SetPrintHeader(true); + pdf.SetPrintFooter(true); + + pdf.AddPage(); + + # Multicell test + pdf.MultiCell(40, 5, "A test multicell line 1\ntest multicell line 2\ntest multicell line 3", 1, 'J', 0, 0); + pdf.MultiCell(40, 5, "B test multicell line 1\ntest multicell line 2\ntest multicell line 3", 1, 'J', 0); + pdf.MultiCell(40, 5, "C test multicell line 1\ntest multicell line 2\ntest multicell line 3", 1, 'J', 0, 0); + pdf.MultiCell(40, 5, "D test multicell line 1\ntest multicell line 2\ntest multicell line 3", 1, 'J', 0, 2); + pdf.MultiCell(40, 5, "F test multicell line 1\ntest multicell line 2\ntest multicell line 3", 1, 'J', 0); + + #Close and output PDF document +%><%=pdf.Output()%> \ No newline at end of file diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/rfpdf/utf8test.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/plugins/rfpdf/utf8test.txt Mon Jul 25 14:23:37 2011 +0100 @@ -0,0 +1,135 @@ +Sentences that contain all letters commonly used in a language +-------------------------------------------------------------- + +Markus Kuhn -- 2001-09-02 + +This file is UTF-8 encoded. + + +Danish (da) +--------- + + Quizdeltagerne spiste jordbær med fløde, mens cirkusklovnen + Wolther spillede på xylofon. + (= Quiz contestants were eating strawbery with cream while Wolther + the circus clown played on xylophone.) + +German (de) +----------- + + Falsches Üben von Xylophonmusik quält jeden größeren Zwerg + (= Wrongful practicing of xylophone music tortures every larger dwarf) + + Zwölf Boxkämpfer jagten Eva quer über den Sylter Deich + (= Twelve boxing fighters hunted Eva across the dike of Sylt) + + Heizölrückstoßabdämpfung + (= fuel oil recoil absorber) + (jqvwxy missing, but all non-ASCII letters in one word) + +English (en) +------------ + + The quick brown fox jumps over the lazy dog + +Spanish (es) +------------ + + El pingüino Wenceslao hizo kilómetros bajo exhaustiva lluvia y + frío, añoraba a su querido cachorro. + (Contains every letter and every accent, but not every combination + of vowel + acute.) + +French (fr) +----------- + + Portez ce vieux whisky au juge blond qui fume sur son île intérieure, à + côté de l'alcôve ovoïde, où les bûches se consument dans l'âtre, ce + qui lui permet de penser à la cænogenèse de l'être dont il est question + dans la cause ambiguë entendue à Moÿ, dans un capharnaüm qui, + pense-t-il, diminue çà et là la qualité de son œuvre. + + l'île exiguë + Où l'obèse jury mûr + Fête l'haï volapük, + Âne ex aéquo au whist, + Ôtez ce vœu déçu. + + Le cœur déçu mais l'âme plutôt naïve, Louÿs rêva de crapaüter en + canoë au delà des îles, près du mälström où brûlent les novæ. + +Irish Gaelic (ga) +----------------- + + D'fhuascail Íosa, Úrmhac na hÓighe Beannaithe, pór Éava agus Ádhaimh + +Hungarian (hu) +-------------- + + Árvíztűrő tükörfúrógép + (= flood-proof mirror-drilling machine, only all non-ASCII letters) + +Icelandic (is) +-------------- + + Kæmi ný öxi hér ykist þjófum nú bæði víl og ádrepa + + Sævör grét áðan því úlpan var ónýt + (some ASCII letters missing) + +Greek (el) +------------- + + Γαζέες καὶ μυρτιὲς δὲν θὰ βρῶ πιὰ στὸ χρυσαφὶ ξέφωτο + (= No more shall I see acacias or myrtles in the golden clearing) + + Ξεσκεπάζω τὴν ψυχοφθόρα βδελυγμία + (= I uncover the soul-destroying abhorrence) + +Japanese (jp) +------------- + + Hiragana: (Iroha) + + いろはにほへとちりぬるを + わかよたれそつねならむ + うゐのおくやまけふこえて + あさきゆめみしゑひもせす + + Katakana: + + イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム + ウヰノオクヤマ ケフコエテ アサキユメミシ ヱヒモセスン + +Hebrew (iw) +----------- + + ? דג סקרן שט בים מאוכזב ולפתע מצא לו חברה איך הקליטה + +Polish (pl) +----------- + + Pchnąć w tę łódź jeża lub ośm skrzyń fig + (= To push a hedgehog or eight bins of figs in this boat) + +Russian (ru) +------------ + + В чащах юга жил бы цитрус? Да, но фальшивый экземпляр! + (= Would a citrus live in the bushes of south? Yes, but only a fake one!) + +Thai (th) +--------- + + [--------------------------|------------------------] + ๏ เป็นมนุษย์สุดประเสริฐเลิศคุณค่า กว่าบรรดาฝูงสัตว์เดรัจฉาน + จงฝ่าฟันพัฒนาวิชาการ อย่าล้างผลาญฤๅเข่นฆ่าบีฑาใคร + ไม่ถือโทษโกรธแช่งซัดฮึดฮัดด่า หัดอภัยเหมือนกีฬาอัชฌาสัย + ปฏิบัติประพฤติกฎกำหนดใจ พูดจาให้จ๊ะๆ จ๋าๆ น่าฟังเอย ฯ + + [The copyright for the Thai example is owned by The Computer + Association of Thailand under the Royal Patronage of His Majesty the + King.] + +Please let me know if you find others! Special thanks to the people +from all over the world who contributed these sentences. diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/ruby-net-ldap-0.0.4/.svn/all-wcprops --- a/vendor/plugins/ruby-net-ldap-0.0.4/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/1148/trunk/vendor/plugins/ruby-net-ldap-0.0.4 -END -LICENCE -K 25 -svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/134/trunk/vendor/plugins/ruby-net-ldap-0.0.4/LICENCE -END -ChangeLog -K 25 -svn:wc:ra_dav:version-url -V 68 -/svn/!svn/ver/134/trunk/vendor/plugins/ruby-net-ldap-0.0.4/ChangeLog -END -COPYING -K 25 -svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/134/trunk/vendor/plugins/ruby-net-ldap-0.0.4/COPYING -END -README -K 25 -svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/134/trunk/vendor/plugins/ruby-net-ldap-0.0.4/README -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/ruby-net-ldap-0.0.4/.svn/entries --- a/vendor/plugins/ruby-net-ldap-0.0.4/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/ruby-net-ldap-0.0.4/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/ruby-net-ldap-0.0.4 +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/ruby-net-ldap-0.0.4 http://redmine.rubyforge.org/svn @@ -35,7 +35,7 @@ -2010-09-23T14:37:45.859799Z +2011-07-14T09:24:11.000000Z 100efd8d000514effa3709713ab85acb 2007-01-02T08:48:40.736310Z 134 @@ -72,7 +72,7 @@ -2010-09-23T14:37:45.859799Z +2011-07-14T09:24:11.000000Z e951c712b462c2e6e01f12474d4a23c2 2007-01-02T08:48:40.736310Z 134 @@ -106,7 +106,7 @@ -2010-09-23T14:37:45.859799Z +2011-07-14T09:24:11.000000Z ff6d66271209d878dbe3742d8061151e 2007-01-02T08:48:40.736310Z 134 @@ -140,7 +140,7 @@ -2010-09-23T14:37:45.859799Z +2011-07-14T09:24:11.000000Z 365281a5053e3232092adff0636600b3 2007-01-02T08:48:40.736310Z 134 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/ruby-net-ldap-0.0.4/lib/.svn/all-wcprops --- a/vendor/plugins/ruby-net-ldap-0.0.4/lib/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/1148/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/ruby-net-ldap-0.0.4/lib/.svn/entries --- a/vendor/plugins/ruby-net-ldap-0.0.4/lib/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/ruby-net-ldap-0.0.4/lib/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/ruby-net-ldap-0.0.4/lib http://redmine.rubyforge.org/svn diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/ruby-net-ldap-0.0.4/lib/net/.svn/all-wcprops --- a/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 67 -/svn/!svn/ver/1148/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib/net -END -ldif.rb -K 25 -svn:wc:ra_dav:version-url -V 74 -/svn/!svn/ver/134/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldif.rb -END -ldap.rb -K 25 -svn:wc:ra_dav:version-url -V 74 -/svn/!svn/ver/134/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap.rb -END -ber.rb -K 25 -svn:wc:ra_dav:version-url -V 74 -/svn/!svn/ver/1148/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ber.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/ruby-net-ldap-0.0.4/lib/net/.svn/entries --- a/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib/net +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/ruby-net-ldap-0.0.4/lib/net http://redmine.rubyforge.org/svn @@ -35,7 +35,7 @@ -2010-09-23T14:37:45.867778Z +2011-07-14T09:24:11.000000Z bcd7fbc67923f3cc1491ca301a5c39cb 2007-01-02T08:48:40.736310Z 134 @@ -69,7 +69,7 @@ -2010-09-23T14:37:45.863819Z +2011-07-14T09:24:11.000000Z 47d5a9c76d96071a1de184dd49c09194 2007-01-02T08:48:40.736310Z 134 @@ -103,7 +103,7 @@ -2010-09-23T14:37:45.863819Z +2011-07-14T09:24:11.000000Z 40f7f978006674f2b916ce341e5ad684 2008-02-15T17:22:21.293943Z 1148 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap/.svn/all-wcprops --- a/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 71 -/svn/!svn/ver/252/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap -END -entry.rb -K 25 -svn:wc:ra_dav:version-url -V 80 -/svn/!svn/ver/134/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap/entry.rb -END -dataset.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/134/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap/dataset.rb -END -filter.rb -K 25 -svn:wc:ra_dav:version-url -V 81 -/svn/!svn/ver/252/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap/filter.rb -END -pdu.rb -K 25 -svn:wc:ra_dav:version-url -V 78 -/svn/!svn/ver/134/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap/pdu.rb -END -psw.rb -K 25 -svn:wc:ra_dav:version-url -V 78 -/svn/!svn/ver/134/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap/psw.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap/.svn/entries --- a/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.867778Z +2011-07-14T09:24:11.000000Z be6b5dd522a4532ceeda4ab5bddcb53e 2007-01-02T08:48:40.736310Z 134 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.867778Z +2011-07-14T09:24:11.000000Z dce002e156bf793b6219b50e5d4ede3a 2007-01-02T08:48:40.736310Z 134 @@ -100,7 +100,7 @@ -2010-09-23T14:37:45.867778Z +2011-07-14T09:24:11.000000Z 39c1aa4a3ff36f2769b6855a4b56faa7 2007-02-18T11:45:55.832750Z 252 @@ -134,7 +134,7 @@ -2010-09-23T14:37:45.867778Z +2011-07-14T09:24:11.000000Z 7acdae44250f47d4b177c0367865d5f7 2007-01-02T08:48:40.736310Z 134 @@ -168,7 +168,7 @@ -2010-09-23T14:37:45.867778Z +2011-07-14T09:24:11.000000Z 7af528c0721148b904f82e64e523ee74 2007-01-02T08:48:40.736310Z 134 diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/ruby-net-ldap-0.0.4/tests/.svn/all-wcprops --- a/vendor/plugins/ruby-net-ldap-0.0.4/tests/.svn/all-wcprops Mon Mar 28 18:17:06 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/134/trunk/vendor/plugins/ruby-net-ldap-0.0.4/tests -END -testldif.rb -K 25 -svn:wc:ra_dav:version-url -V 76 -/svn/!svn/ver/134/trunk/vendor/plugins/ruby-net-ldap-0.0.4/tests/testldif.rb -END -testldap.rb -K 25 -svn:wc:ra_dav:version-url -V 76 -/svn/!svn/ver/134/trunk/vendor/plugins/ruby-net-ldap-0.0.4/tests/testldap.rb -END -testem.rb -K 25 -svn:wc:ra_dav:version-url -V 74 -/svn/!svn/ver/134/trunk/vendor/plugins/ruby-net-ldap-0.0.4/tests/testem.rb -END -testdata.ldif -K 25 -svn:wc:ra_dav:version-url -V 78 -/svn/!svn/ver/134/trunk/vendor/plugins/ruby-net-ldap-0.0.4/tests/testdata.ldif -END -testfilter.rb -K 25 -svn:wc:ra_dav:version-url -V 78 -/svn/!svn/ver/134/trunk/vendor/plugins/ruby-net-ldap-0.0.4/tests/testfilter.rb -END -testber.rb -K 25 -svn:wc:ra_dav:version-url -V 75 -/svn/!svn/ver/134/trunk/vendor/plugins/ruby-net-ldap-0.0.4/tests/testber.rb -END -testpsw.rb -K 25 -svn:wc:ra_dav:version-url -V 75 -/svn/!svn/ver/134/trunk/vendor/plugins/ruby-net-ldap-0.0.4/tests/testpsw.rb -END diff -r f7c525dc7585 -r 0b6c82dead28 vendor/plugins/ruby-net-ldap-0.0.4/tests/.svn/entries --- a/vendor/plugins/ruby-net-ldap-0.0.4/tests/.svn/entries Mon Mar 28 18:17:06 2011 +0100 +++ b/vendor/plugins/ruby-net-ldap-0.0.4/tests/.svn/entries Mon Jul 25 14:23:37 2011 +0100 @@ -1,8 +1,8 @@ 10 dir -4411 -http://redmine.rubyforge.org/svn/trunk/vendor/plugins/ruby-net-ldap-0.0.4/tests +6270 +http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/ruby-net-ldap-0.0.4/tests http://redmine.rubyforge.org/svn @@ -32,7 +32,7 @@ -2010-09-23T14:37:45.871778Z +2011-07-14T09:24:11.000000Z d32a0d5d48658b30de358974dc588b6a 2007-01-02T08:48:40.736310Z 134 @@ -66,7 +66,7 @@ -2010-09-23T14:37:45.871778Z +2011-07-14T09:24:11.000000Z 9a4a1de4982131870bcc016b3062b563 2007-01-02T08:48:40.736310Z 134 @@ -100,7 +100,7 @@ -2010-09-23T14:37:45.871778Z +2011-07-14T09:24:11.000000Z 07fadb83b55212328945590db904016b 2007-01-02T08:48:40.736310Z 134 @@ -134,7 +134,7 @@ -2010-09-23T14:37:45.871778Z +2011-07-14T09:24:11.000000Z f60b9471933a7a534097d3fd1fe38a18 2007-01-02T08:48:40.736310Z 134 @@ -168,7 +168,7 @@ -2010-09-23T14:37:45.871778Z +2011-07-14T09:24:11.000000Z 98e4a39b73665ed7c274457213d8e3d5 2007-01-02T08:48:40.736310Z 134 @@ -202,7 +202,7 @@ -2010-09-23T14:37:45.871778Z +2011-07-14T09:24:11.000000Z a6eed10e89ba06f4ffa2da720bb1752f 2007-01-02T08:48:40.736310Z 134 @@ -236,7 +236,7 @@ -2010-09-23T14:37:45.871778Z +2011-07-14T09:24:11.000000Z 3dcbc8b4c3717fa97211a1d75a7fab4f 2007-01-02T08:48:40.736310Z 134